SlideShare une entreprise Scribd logo
1  sur  60
Télécharger pour lire hors ligne
Composer is the new
Drush
Perttu Ehn // Exove Ltd // 2106-12-20
Scope
Drush Recap
Composer
Workflow with the
Composer
Recipes
Semantic versioning
More recipes
Drupal Console
Perttu Ehn

https://www.drupal.org/u/rpsu

@ropsue
Competence manager @ Exove Ltd www.exove.com
10 years of Drupal, three (small) contrib modules
Motto:

Q: Can this be done?

A: Yes. Most certainly. It’s just a matter of the size of your budget.
blah blah blah.. about me
Drush recap
drush.org
Drush recap
“Drush is a command line shell and Unix scripting interface for Drupal.“

- www.drush.org
Build codebase based on the recipe (.make-file)

$	drush	make	my-makefile.make
Download and enable modules, themes
Set variables, reset passwords, rebuild or revert features…
Write your own custom commands to do practically anything with Drupal
Drush is not a dependency manager, but a fixed recipe for the codebase
Composer
getcomposer.org
"Composer is a tool for dependency management in
PHP"
Dependency manager, per project, within a project
Node: npm
Ruby: bundler
Composer
Composer does everything with the codebase Drush
does, but better
Composer Does not touch Drupal
.. however, Drupal console does
Composer
Workflow with the Composer
Set up a project repository (localdev…!)
You add project requirements

$	composer	require	drupal/drupal
Composer will solve requirement's dependencies
Commit composer.json and composer.lock -files to Git
Don’t commit code hosted elsewhere - Drupal core,
modules, libraries
Workflow with the Composer
Use Composer template for Drupal, it comes with
steroids!

$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	—no-interaction	--prefer-dist
Workflow
Image: http://www.e-steroid.com/steroid-articles/negative-effects-of-steroids.html
Use Composer template for Drupal

$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist	
Composer may be installed globally or per project1)
Composer == composer.phar -file,“Php ARchive”

Workflow
1) https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx
Use Composer template for Drupal 

$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist
create-project creates a new project from an existing
project (think git	clone)
Workflow
Use Composer template for Drupal 

$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist
Use Composer template for Drupal as the base
8.x	project version (relates to the Drupal core version)
-dev	use dev -version, ie. a git commit (latest one in this
case)
Workflow
Use Composer template for Drupal 

$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist	
coolio	is the directory where the project will be
created
also where composer.json and composer.lock files
will be created
Workflow
$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist	
--stability	dev	Minimum stability of package
--no-interaction Do not ask any interactive question
Workflow
$	composer	create-project	drupal-composer/
drupal-project:8.x-dev	coolio	--stability	
dev	--no-interaction --prefer-dist	
--prefer-dist Prefer distributions over source,
ie. use vendor zip/gzip/tar/whatever if found. Faster.
Workflow
$	composer	create-project	drupal-composer/drupal-project:
8.x-dev	coolio-d8	--stability	dev	--no-interaction --
prefer-dist

…

…	(wait)	…

…	(still	working	on	it)	…

…

Create	a	sites/default/settings.php	file	with	chmod	0666

Create	a	sites/default/services.yml	file	with	chmod	0666

Create	a	sites/default/files	directory	with	chmod	0777	
$	cd	coolio-d8
Ladies and gentleman, start your engines!
coolio-d8	$	ls	-A

		.gitignore

		.travis.yml	

		LICENSE

		README.md

		composer.json			#	declare	requirements

		composer.lock			#	calculated	requirement

																		#	tree	with	versions

		phpunit.xml.dist

		drush/										#	drush	per	project	(!)	

		scripts/

		vendor/									#	PHP	libraries

		web/												#	Drupal	root	folder

			
Codebase (D8)
coolio-d8	$	ls	-A	web

		.csslintrc

		.editorconfig

		.eslintignore

		.eslintrc

		.htaccess

		.gitattributes

		autoload.php

		index.php

		robots.txt

		update.php

		web.config

		core/

		modules/

		profiles/

		sites/

		themes/

$	composer	create-project	drupal-composer/drupal-project:
7.x-dev	coolio-d7	--stability	dev	--no-interaction —
prefer-dist

…

…	(wait)	…

…	(still	working	on	it)	…

…

Writing	lock	file

Generating	autoload	files

>	rm	README.md	LICENSE	.travis.yml	phpunit.xml.dist	
$	cd	coolio-d7
Ladies and gentleman, start your engines!
coolio-d7	$	ls	-A1

		.gitignore

		composer.json	#	declare	requirements

		composer.lock	#	calculated	requirement

																#	tree	with	versions

		vendor/							#	PHP	libraries

		web/										#	Drupal	root	folder

			
Codebase (D7)
coolio-d7	$	ls	-A1	web

		.editorconfig

		.gitignore

		.htaccess

		CHANGELOG.txt

		COPYRIGHT.txt

		INSTALL.mysql.txt

		INSTALL.pgsql.txt

		INSTALL.sqlite.txt

		INSTALL.txt

		LICENSE.txt

		MAINTAINERS.txt

		README.txt

		UPGRADE.txt

		authorize.php

		cron.php

		includes

		index.php

		install.php

		misc

		modules

		profiles

		robots.txt

		scripts

		sites

		themes

		update.php

		web.config

		xmlrpc.php
Web root is in 

coolio/web
All libraries are protected from direct access

coolio/vendor/*
vendor code rarely needs to be accessible directly from the
world
index.php	
core/update.php (well...)
Folder structure
Recipes
;	Drush	INI	
core	=	8.x

api	=	2	
projects[drupal][version]	=	"8.2.3"	
projects[]	=	"ctools"	
projects[commerce][version]	=	"2.0-beta3"

projects[commerce][subdir]	=	"commerce"	
defaults[projects][subdir]	=	"contrib"	
Recipes

Get some modules (.make)
List the modules you have with Drupal:

$	drush	pml		
Remove module code manually
#	YAML	format		
core:	8.x

api:	'2'	
projects:

		drupal:

			version:	8.2.3	
		ctools:

				version:	''
#projects:	
		commerce:

				subdir:	commerce

				version:	2.0-beta3	
defaults:

		projects:

				subdir:	'contrib'
Recipes

Get some modules (.make.yml)
List the modules you have with Drupal:

$	drush	pml		
Remove module code manually
$	composer	require	drupal/core:8.2.2	
Changes core version 8.2.3 -> 8.2.2 (with template project)
$	composer	require	drupal/ctools

$	composer	require	drupal/commerce:2.0-beta3	
List the modules you have with Drupal:

$	composer	show	drupal/*	
Remove a module - affects composer.json and the codebase, too

$	composer	remove	drupal/ctools	
Add Drush and Registry Rebuild module (Drupal 7 only)

$	composer	add	drush/drush:7.*	drupal/registry_rebuild
Recipes

Get some modules (composer)
zsh requires quoted parameter when it contains an asterisk: $ composer	show	"drupal/*"
You request a (Drupal) package

$	composer	require	drupal/ctools	
Composer finds it (https://packages.drupal.org/8)
Composer updates composer.json -file
Composer downloads the package
Composer checks if this new package has other requirements
(composer.json file)
Composer searches for the requirement… => this is a dependency tree!
Composer dependency resolving 1/2
zsh requires quoted parameter when it contains an asterisk: $ composer	show	"drupal/*"
All good! 

&& 

Write composer.lock file
OR
Exception!!! Exception!!! 

&& 

Revert the changes in composer.json file
Composer dependency resolving 2/2
zsh requires quoted parameter when it contains an asterisk: $ composer	show	"drupal/*"
1. Clone project repository.
2. Run composer	install	
Composer reads composer.lock -file
Composer retrieves all the required dependencies
Composer generates autoloader
3. That’s it! 

(+ some vagrant	up and Drupal site installs)
zsh requires quoted parameter when it contains an asterisk: $ composer	show	"drupal/*"
Fellow developer’s local
Run composer	update to get the latest available
(version constraints!)	
Update code
Write updates to composer.lock -file
Change version (ie change version constraints)

$	composer	require	drupal/commerce:2.*
zsh requires quoted parameter when it contains an asterisk: $ composer	show	"drupal/*"
How to do code updates?
Semantic versioning
Three digits; 1.2.3
1st changes might be backwards incompatible (major)
API removals, API changes
2nd changes with API additions, new features (minor)
3rd changes with bug fixes (patch)
Semantic versioning
Range
Comparison operators, specified range of allowed versions

>=1.0

>=1.0	<2.0

>=1.0	<1.1	||	>=1.2

1.0	-	2.0
Wildcard
* is a wildcard: 1.0.* is the 

equivalent of >=1.0	<1.1
https://getcomposer.org/doc/articles/versions.md
Constraints
Tilde
~ specifies a minimum version, but allows the last digit
specified to go up: ~1.2 is the equivalent of >=	1.2	<	
2.*
Caret
^ sticks closer to semantic versioning; sub-major version
updates should not break anything: ^1.2.3 is equivalent
to >=1.2.3	<2.0.0
https://getcomposer.org/doc/articles/versions.md
Constraints
Specify allowed versions, not a specific version
composer.lock -file will contain the specific version which composer	
install will use
drupal/core:8.2.2	=> drupal/core:~8.2 or drupal/
core:^8.2
drupal/commerce:2.0-beta3 => drupal/commerce:~2	
drupal/ctools:~3	
Git HEAD (not recommended): 

drupal/console:dev-1.x

drupal/console:dev-master	-	for	GitHub
https://getcomposer.org/doc/articles/versions.md
Constraints
More recipes
Problem: 

Feature or fix you must have may be in Git, but not in the latest
release
Solution:

Use a specified Git commit
More recipes
Use a specified Git commit
;	Optionally	provide	git	branch	so	Drush	

;	can	write	that	to	.info	file

projects[ctools][download][branch]	=	"8.x-3.x"

;	Git	commit	hash

projects[ctools][download][revision]	=	1fe3649
More recipes
Use a specified Git commit
projects:

		ctools:

				download:	

						#	Optionally	provide	git	branch	so

						#	Drush	can	write	that	to	.info	file

						branch:	8.x-3.x

						#	Git	commit	hash

						revision:	1fe3649
More recipes
Use a specified Git commit
$	composer	require	drupal/ctools:dev-3.x#1fe3649
More recipes
Use a specified Git commit
READ: never use HEAD (“latest whatever code”)
More recipes
Problem:

-> Found and fixed a bug in a contrib module, and now you need to
use your fixes (a patch file) from drupal.org? No prob.

-> Perhaps you were lazy and never uploaded the patch? No prob
either.
Solution: Drush and Composer can apply remote and local patches
Patching modules
projects[field_group][version]	=	"1.0-rc4"

;	Explain	briefly	why	this	patch	is	needed.

projects[field_group][patch][2761159]	=	https://
www.drupal.org/files/issues/field_group-
empty_group_nonnumeric_index-2761159-2-D8.patch

;	Local	patch	(path	relative	to	.make-file)

projects[field_group][patch][other_fix]	=	patches/
field_group-fix_it.patch	
Apply the patch either by re-running

$	drush	make	my_project.make
…or manually

$	patch	-p0	<	path/to/important.patch
Patching modules
projects:

		field_group:

				version:	'1.0-rc4'	

				patch:

						#	Explain	briefly	why	this	patch	is	needed.

					2761159:	'https://www.drupal.org/files/issues/
field_group-empty_group_nonnumeric_index-2761159-2-
D8.patch'

						#	Local	patch	(path	relative	to	.make.yml-
file)

						other_fix:	‘patches/field_group-fix_it.patch'	
Apply the patch the same way with old style .make file
Patching modules
Install module field_group

$	composer	require	drupal/field_group:1.0-rc4
Edit composer.json and edit (or add) "extra":

"extra":	{

		"patches":	{

				"drupal/field_group":	{

						"A	patch	with	URL”:	“https://www.drupal.org/files/issues/
field_group-empty_group_nonnumeric_index-2761159-2-D8.patch",	

						“Local	patch	(path	relative	to	composer.json)”:	"patches/
field_group-fix_it.patch"

				}

		}

}	
Apply the patches and update composer.lock -file

$	composer	install	#	applies	the	patch

$	composer	update	--lock		#	writes	patch	info	to	.lock	file
Patching modules
There is a module for that… but it requires an external library!
As an example:
Chosen -module is a wrapper for chosen-library
Chosen library must be downloaded separately
Other libraries
Image: https://opensource.com/life/16/1/indiahacks-2016
projects[chosen]	=	“2.0-beta4"	
libraries[chosen][directory_name]	=	"chosen"

libraries[chosen][type]	=	"library"

libraries[chosen][download][type]	=	"get"

libraries[chosen][download][url]	=	"https://github.com/
harvesthq/chosen/releases/download/1.4.2/chosen_v1.4.2.zip"	
Apply the patch either by re-running

drush	make	my_project.make
…or downloading the library manually
Other libraries
Image: https://opensource.com/life/16/1/indiahacks-2016
libraries:

		chosen:

				directory_name:	chosen

				type:	library

				download:

						type:	get

						url:	'https://github.com/harvesthq/chosen/
releases/download/1.4.2/chosen_v1.4.2.zip'	
Apply the patch the same way with old style .make file
Other libraries
Image: https://opensource.com/life/16/1/indiahacks-2016
Manually add new item to your repository -section in composer.json:

"repositories":	[{

		"type":	“package",

		"package":	{

				"name":	"customlibs/chosen",

				"version":	"master",

				"dist":	{

						"type":	"zip",

						"url":	"https://github.com/harvesthq/chosen/releases/download/1.4.2/
chosen_v1.4.2.zip",

						"reference":	“1.4.2"

				},

				"autoload":	{

						"classmap":	["."]

				}

		}],	
Request the library

$	composer	require	customlibs/chosen:1.4.2	
Then update your packages as per what you've just done: 

$	composer	update	
NOTE: Chosen modules declares this dependency in Drupal 8 version via composer.json
Other libraries
Image: https://opensource.com/life/16/1/indiahacks-2016
Drupal Console
Briefly about Drupal Console
Composer manages (Drupal) codebase
Drupal Console does tricks with Drupal itself (Drupal 8)
Help your self by aliasing drupal if it is not in your $PATH
#localdev VM bash alias is

alias	drupal="/vagrant/drupal_root/vendor/
drupal/console/bin/drupal"
Site installation
Install Drupal site (default -folder)

$	drupal	site:install	minimal	--langcode="en"

--db-type="mysql"	--db-host="127.0.0.01"

--db-port="3306"	--db-name="local_1"	

--db-user="root"	--db-pass="root"

--site-name="Drupal	8"

--site-mail="admin@example.org"

--account-mail="admin@example.org"

--account-name="admin"

--account-pass="admin"

--no-interaction	--learning	-vvv
Site installation
Install Drupal site (default -folder)

$	drupal	site:install	minimal	--no-
interaction	
Command aliases ❤ 

$	drupal	si
Multisite installation
1. Create multisite folder and directory aliasing file sites/
sites.php

$	drupal	multisite:new	example.com	

--site-uri=“local-2.example.com”

> creates sites/example.com -folder

> creates site-alias local-2.example.com => sites/
example.com
2. Install the site

$	drupal	si	minimal	--uri="local-2.example.com"

--no-interaction
Multisite tools
Check multisite structure

$	drupal	multisite:debug
Clone (!) existing default site to a multisite folder

$	drupal	multisite:new	--copy-install

--site-uri="local2.example.com"	example.com
Module commands
Install a module

$	drupal	module:install	|	mou
Uninstall a module

$	drupal	module:uninstall	|	mou
Generate module

$	drupal	generate:module	|	gm	
Rebuild D8 cache

$	drupal	cache:rebuild	|	cr
Some random commands
Go nuts!

$	drupal	[-l=local-1.example.com]	list

$	drupal	[--uri=local-1.example.com]	list	
Get help!

$	drupal	help	[topic]		
Documentation https://drupalconsole.com/docs , also in
Vietnamese and Hindi among some other languages
NOTE: Drupal Console v1.0.0-rc12 (not yet released) is needed
for properly working (automated) multisite installation process
Questions?
Questions?
Drush Recap
Composer
Workflow with the
Composer
Recipes
Semantic versioning
More recipes
Drupal Console
Take also look at these
Composer template for Drupal projects

https://github.com/drupal-composer/drupal-project
Improving your Drupal 8 development workflow

by Jesus Manuel Olivas 

http://weknowinc.com/talks/2016/drupalgov-workflow
Drupal Console Docs

https://drupalconsole.com/docs

Contenu connexe

Tendances

Introduction to WP-CLI: Manage WordPress from the command line
Introduction to WP-CLI: Manage WordPress from the command lineIntroduction to WP-CLI: Manage WordPress from the command line
Introduction to WP-CLI: Manage WordPress from the command lineBehzod Saidov
 
Write book in markdown
Write book in markdownWrite book in markdown
Write book in markdownLarry Cai
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90minsLarry Cai
 
Composer tools and frameworks for drupal.ppt
Composer tools and frameworks for drupal.pptComposer tools and frameworks for drupal.ppt
Composer tools and frameworks for drupal.pptPromet Source
 
B-Translator as a Software Engineering Project
B-Translator as a Software Engineering ProjectB-Translator as a Software Engineering Project
B-Translator as a Software Engineering ProjectDashamir Hoxha
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersChang W. Doh
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with ComposerAdam Englander
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is DockerNick Belhomme
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package developmentTihomir Opačić
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupaldrubb
 
Containerize spring boot application with docker
Containerize spring boot application with dockerContainerize spring boot application with docker
Containerize spring boot application with dockerSunil kumar Mohanty
 
CMake Talk 2008
CMake Talk 2008CMake Talk 2008
CMake Talk 2008cynapses
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014biicode
 

Tendances (20)

Introduction to WP-CLI: Manage WordPress from the command line
Introduction to WP-CLI: Manage WordPress from the command lineIntroduction to WP-CLI: Manage WordPress from the command line
Introduction to WP-CLI: Manage WordPress from the command line
 
Installing AtoM with Ansible
Installing AtoM with AnsibleInstalling AtoM with Ansible
Installing AtoM with Ansible
 
Write book in markdown
Write book in markdownWrite book in markdown
Write book in markdown
 
Learn flask in 90mins
Learn flask in 90minsLearn flask in 90mins
Learn flask in 90mins
 
Composer
ComposerComposer
Composer
 
Composer tools and frameworks for drupal.ppt
Composer tools and frameworks for drupal.pptComposer tools and frameworks for drupal.ppt
Composer tools and frameworks for drupal.ppt
 
B-Translator as a Software Engineering Project
B-Translator as a Software Engineering ProjectB-Translator as a Software Engineering Project
B-Translator as a Software Engineering Project
 
Ansible project-deploy
Ansible project-deployAnsible project-deploy
Ansible project-deploy
 
Ninja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for BeginnersNinja Build: Simple Guide for Beginners
Ninja Build: Simple Guide for Beginners
 
Makefiles Bioinfo
Makefiles BioinfoMakefiles Bioinfo
Makefiles Bioinfo
 
PHP Dependency Management with Composer
PHP Dependency Management with ComposerPHP Dependency Management with Composer
PHP Dependency Management with Composer
 
Vagrant move over, here is Docker
Vagrant move over, here is DockerVagrant move over, here is Docker
Vagrant move over, here is Docker
 
Laravel 4 package development
Laravel 4 package developmentLaravel 4 package development
Laravel 4 package development
 
Composer & Drupal
Composer & DrupalComposer & Drupal
Composer & Drupal
 
C++ for the Web
C++ for the WebC++ for the Web
C++ for the Web
 
Containerize spring boot application with docker
Containerize spring boot application with dockerContainerize spring boot application with docker
Containerize spring boot application with docker
 
CMake Talk 2008
CMake Talk 2008CMake Talk 2008
CMake Talk 2008
 
Maven 3.0 at Øredev
Maven 3.0 at ØredevMaven 3.0 at Øredev
Maven 3.0 at Øredev
 
Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014Dependencies Managers in C/C++. Using stdcpp 2014
Dependencies Managers in C/C++. Using stdcpp 2014
 
Introduction to Makefile
Introduction to MakefileIntroduction to Makefile
Introduction to Makefile
 

Similaire à Composer is the new Drush - Drupal Developer Training (internal)

Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make filesropsu
 
Introduction to Composer for Drupal
Introduction to Composer for DrupalIntroduction to Composer for Drupal
Introduction to Composer for DrupalLuc Bézier
 
Managing your Drupal project with Composer
Managing your Drupal project with ComposerManaging your Drupal project with Composer
Managing your Drupal project with ComposerMatt Glaman
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushPantheon
 
Exploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaExploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaSalvador Molina (Slv_)
 
Composer Tools & Frameworks for Drupal
Composer Tools & Frameworks for DrupalComposer Tools & Frameworks for Drupal
Composer Tools & Frameworks for DrupalPantheon
 
Using Composer with Drupal and Drush
Using Composer with Drupal and DrushUsing Composer with Drupal and Drush
Using Composer with Drupal and DrushPantheon
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for DrupalPromet Source
 
Docker for developers on mac and windows
Docker for developers on mac and windowsDocker for developers on mac and windows
Docker for developers on mac and windowsDocker, Inc.
 
Drupal 8 improvements for developer productivity php symfony and more
Drupal 8 improvements for developer productivity  php symfony and moreDrupal 8 improvements for developer productivity  php symfony and more
Drupal 8 improvements for developer productivity php symfony and moreAcquia
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-TranslatorDashamir Hoxha
 
Drupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflowDrupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflowvaluebound
 
テストプラン
テストプランテストプラン
テストプランstucon
 
Be a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeBe a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeDocker, Inc.
 
Be a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeBe a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeNicola Paolucci
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composernuppla
 
Composer the Right Way - MM16NL
Composer the Right Way - MM16NLComposer the Right Way - MM16NL
Composer the Right Way - MM16NLRafael Dohms
 
12 Composer #burningkeyboards
12 Composer #burningkeyboards12 Composer #burningkeyboards
12 Composer #burningkeyboardsDenis Ristic
 

Similaire à Composer is the new Drush - Drupal Developer Training (internal) (20)

Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
Introduction to Composer for Drupal
Introduction to Composer for DrupalIntroduction to Composer for Drupal
Introduction to Composer for Drupal
 
Managing your Drupal project with Composer
Managing your Drupal project with ComposerManaging your Drupal project with Composer
Managing your Drupal project with Composer
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
 
Exploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molinaExploring composer in drupal 8 with drupal project - salva molina
Exploring composer in drupal 8 with drupal project - salva molina
 
Composer Tools & Frameworks for Drupal
Composer Tools & Frameworks for DrupalComposer Tools & Frameworks for Drupal
Composer Tools & Frameworks for Drupal
 
Composer
ComposerComposer
Composer
 
Using Composer with Drupal and Drush
Using Composer with Drupal and DrushUsing Composer with Drupal and Drush
Using Composer with Drupal and Drush
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for Drupal
 
Docker for developers on mac and windows
Docker for developers on mac and windowsDocker for developers on mac and windows
Docker for developers on mac and windows
 
Composer Helpdesk
Composer HelpdeskComposer Helpdesk
Composer Helpdesk
 
Drupal 8 improvements for developer productivity php symfony and more
Drupal 8 improvements for developer productivity  php symfony and moreDrupal 8 improvements for developer productivity  php symfony and more
Drupal 8 improvements for developer productivity php symfony and more
 
Development Setup of B-Translator
Development Setup of B-TranslatorDevelopment Setup of B-Translator
Development Setup of B-Translator
 
Drupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflowDrupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflow
 
テストプラン
テストプランテストプラン
テストプラン
 
Be a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeBe a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the Trade
 
Be a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeBe a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the trade
 
Efficient development workflows with composer
Efficient development workflows with composerEfficient development workflows with composer
Efficient development workflows with composer
 
Composer the Right Way - MM16NL
Composer the Right Way - MM16NLComposer the Right Way - MM16NL
Composer the Right Way - MM16NL
 
12 Composer #burningkeyboards
12 Composer #burningkeyboards12 Composer #burningkeyboards
12 Composer #burningkeyboards
 

Plus de Exove

Data security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsData security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsExove
 
Provisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveProvisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveExove
 
Advanced custom fields in Wordpress
Advanced custom fields in WordpressAdvanced custom fields in Wordpress
Advanced custom fields in WordpressExove
 
Introduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveIntroduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveExove
 
Jenkins and visual regression – Exove
Jenkins and visual regression – ExoveJenkins and visual regression – Exove
Jenkins and visual regression – ExoveExove
 
Server-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveServer-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveExove
 
WebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveWebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveExove
 
Diversity in recruitment
Diversity in recruitmentDiversity in recruitment
Diversity in recruitmentExove
 
Saavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaSaavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaExove
 
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaSaavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaExove
 
Mitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänMitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänExove
 
Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Exove
 
GDPR for developers
GDPR for developersGDPR for developers
GDPR for developersExove
 
Managing Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalManaging Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalExove
 
Life with digital services after GDPR
Life with digital services after GDPRLife with digital services after GDPR
Life with digital services after GDPRExove
 
GDPR - no beginning no end
GDPR - no beginning no endGDPR - no beginning no end
GDPR - no beginning no endExove
 
Developing truly personalised experiences
Developing truly personalised experiencesDeveloping truly personalised experiences
Developing truly personalised experiencesExove
 
Customer Experience and Personalisation
Customer Experience and PersonalisationCustomer Experience and Personalisation
Customer Experience and PersonalisationExove
 
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Exove
 
Dataohjattu asiakaskokemus
Dataohjattu asiakaskokemusDataohjattu asiakaskokemus
Dataohjattu asiakaskokemusExove
 

Plus de Exove (20)

Data security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problemsData security in the age of GDPR – most common data security problems
Data security in the age of GDPR – most common data security problems
 
Provisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – ExoveProvisioning infrastructure to AWS using Terraform – Exove
Provisioning infrastructure to AWS using Terraform – Exove
 
Advanced custom fields in Wordpress
Advanced custom fields in WordpressAdvanced custom fields in Wordpress
Advanced custom fields in Wordpress
 
Introduction to Robot Framework – Exove
Introduction to Robot Framework – ExoveIntroduction to Robot Framework – Exove
Introduction to Robot Framework – Exove
 
Jenkins and visual regression – Exove
Jenkins and visual regression – ExoveJenkins and visual regression – Exove
Jenkins and visual regression – Exove
 
Server-side React with Headless CMS – Exove
Server-side React with Headless CMS – ExoveServer-side React with Headless CMS – Exove
Server-side React with Headless CMS – Exove
 
WebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – ExoveWebSockets in Bravo Dashboard – Exove
WebSockets in Bravo Dashboard – Exove
 
Diversity in recruitment
Diversity in recruitmentDiversity in recruitment
Diversity in recruitment
 
Saavutettavuus liiketoimintana
Saavutettavuus liiketoimintanaSaavutettavuus liiketoimintana
Saavutettavuus liiketoimintana
 
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistustaSaavutettavuus osana Eläkeliiton verkkosivu-uudistusta
Saavutettavuus osana Eläkeliiton verkkosivu-uudistusta
 
Mitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisälläänMitä saavutettavuusdirektiivi pitää sisällään
Mitä saavutettavuusdirektiivi pitää sisällään
 
Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8Creating Landing Pages for Drupal 8
Creating Landing Pages for Drupal 8
 
GDPR for developers
GDPR for developersGDPR for developers
GDPR for developers
 
Managing Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with DrupalManaging Complexity and Privacy Debt with Drupal
Managing Complexity and Privacy Debt with Drupal
 
Life with digital services after GDPR
Life with digital services after GDPRLife with digital services after GDPR
Life with digital services after GDPR
 
GDPR - no beginning no end
GDPR - no beginning no endGDPR - no beginning no end
GDPR - no beginning no end
 
Developing truly personalised experiences
Developing truly personalised experiencesDeveloping truly personalised experiences
Developing truly personalised experiences
 
Customer Experience and Personalisation
Customer Experience and PersonalisationCustomer Experience and Personalisation
Customer Experience and Personalisation
 
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...Adventures In Programmatic Branding – How To Design With Algorithms And How T...
Adventures In Programmatic Branding – How To Design With Algorithms And How T...
 
Dataohjattu asiakaskokemus
Dataohjattu asiakaskokemusDataohjattu asiakaskokemus
Dataohjattu asiakaskokemus
 

Dernier

Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...sonatiwari757
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLimonikaupta
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxellan12
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Callshivangimorya083
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girladitipandeya
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Sheetaleventcompany
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Servicegwenoracqe6
 
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...SofiyaSharma5
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...APNIC
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Delhi Call girls
 
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.soniya singh
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirtrahman018755
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...Diya Sharma
 
horny (9316020077 ) Goa Call Girls Service by VIP Call Girls in Goa
horny (9316020077 ) Goa  Call Girls Service by VIP Call Girls in Goahorny (9316020077 ) Goa  Call Girls Service by VIP Call Girls in Goa
horny (9316020077 ) Goa Call Girls Service by VIP Call Girls in Goasexy call girls service in goa
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024APNIC
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024APNIC
 

Dernier (20)

Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
Call Girls in Mayur Vihar ✔️ 9711199171 ✔️ Delhi ✔️ Enjoy Call Girls With Our...
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Defence Colony Delhi 💯Call Us 🔝8264348440🔝
 
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptxAWS Community DAY Albertini-Ellan Cloud Security (1).pptx
AWS Community DAY Albertini-Ellan Cloud Security (1).pptx
 
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip CallDelhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
Delhi Call Girls Rohini 9711199171 ☎✔👌✔ Whatsapp Hard And Sexy Vip Call
 
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call GirlVIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
VIP 7001035870 Find & Meet Hyderabad Call Girls LB Nagar high-profile Call Girl
 
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
Call Girls In Model Towh Delhi 💯Call Us 🔝8264348440🔝
 
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
Call Girls Service Chandigarh Lucky ❤️ 7710465962 Independent Call Girls In C...
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
 
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
Low Rate Young Call Girls in Sector 63 Mamura Noida ✔️☆9289244007✔️☆ Female E...
 
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
'Future Evolution of the Internet' delivered by Geoff Huston at Everything Op...
 
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No AdvanceRohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
Rohini Sector 6 Call Girls Delhi 9999965857 @Sabina Saikh No Advance
 
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
Best VIP Call Girls Noida Sector 75 Call Me: 8448380779
 
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
Call Now ☎ 8264348440 !! Call Girls in Shahpur Jat Escort Service Delhi N.C.R.
 
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya ShirtChallengers I Told Ya Shirt
Challengers I Told Ya ShirtChallengers I Told Ya Shirt
 
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
₹5.5k {Cash Payment}New Friends Colony Call Girls In [Delhi NIHARIKA] 🔝|97111...
 
horny (9316020077 ) Goa Call Girls Service by VIP Call Girls in Goa
horny (9316020077 ) Goa  Call Girls Service by VIP Call Girls in Goahorny (9316020077 ) Goa  Call Girls Service by VIP Call Girls in Goa
horny (9316020077 ) Goa Call Girls Service by VIP Call Girls in Goa
 
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
DDoS In Oceania and the Pacific, presented by Dave Phelan at NZNOG 2024
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024On Starlink, presented by Geoff Huston at NZNOG 2024
On Starlink, presented by Geoff Huston at NZNOG 2024
 

Composer is the new Drush - Drupal Developer Training (internal)