SlideShare a Scribd company logo
Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module->mind
Intro
is a web framework
Common Framework subsystems
Security
- Auth
- ACL
- ?
Database
- PDO
- ORM
- Migrations
- ?
Routing
AJAX/J
Web servises/resources
View
Ready… Steady… Migrate!
Migrate yourself!
Migrate yourself!: Porting a module guide
STEP #1
Rename my_module.info -> me_module.info.yml
AND…
Migrate yourself!: Porting a module guide
That’s all!
Congrats, you’re ported a module
lets make an adoptations now)))
Migrate yourself!: src / Mind
- OOP
- PSR-4
- Annotations
- Dependency Injection
- Service Containers
- Plugins
- Entities
/ CoreConcepts.php
Migrate yourself!: src / Mind / Annotations.php
@see core/lib/Drupal/Core/Annotation/Mail.php
/ CoreConcepts / DependencyInjection.php
DI is implementation of
the IoC design pattern
NO!
YES
/ CoreConcepts / DependencyInjection.php
/ CoreConcepts / ServiceContainers.php
@are Auto-instantiate service-oriented
actionable classes with all
registered dependencies
/ CoreConcepts / Plugins.php
“Plugin - A discreet class that executes an
operation within the context of a given
scope, as a means to extend Drupal’s
functionality”
/ CoreConcepts / Plugins.php
- Block
- FieldWidget
- FieldType
- Filter
- ImageEffect
- Tips
- Display
- ActionPlugin
- EntityTypePlugin
…...
USED IN:
ctools
- panels
- hybridauth
- feeds
- addressfield
fluxservice:
- own plugin system,
cfr
- own plugin system,
D8 D7
/ CoreConcepts / Plugins.php
- Lazy loaded
- Unified code (using interfaces)
- extensible
- reusable across a projects
- each plugin type should have own
plugin manager, wasted?
PROFIT
NOTICE
/ CoreConcepts / Plugins.php
Plugin Manager
Discovery
Factory
Mapper
STANDS ON
/ CoreConcepts / Plugins.php
AnnotatedClassDiscovery
HookDiscovery
YamlDiscovery
StaticDiscovery
DISCOVERY
/ CoreConcepts / Plugins.php
DEMO
/ CoreConcepts / Entity.php
ONLY DEMO :)
2X
Cache API
Drupal 7 caching style?
Forget it!
New Cache API
Drupal 8 Cache API
New Cache API
Request cache_default bin:
$cache = Drupal::cache();
Request a particular bin(cache_custom):
$custom_cache = Drupal::cache('custom');
Retrieve a cached data:
$data = Drupal::cache()->get('my_value');
Save data to the cache:
$data = Drupal::cache()->set('my_value', ['some_data']);
New Cache API
Cache tags
New Cache API
Invalidate a cache items with a particular tag(s):
DrupalCoreCacheCache::invalidateTags(array('node:5', 'my_tag'));
Retrieve an existent entity’s cache tags:
● DrupalCoreEntityEntityInterface::getCacheTags()
● DrupalCoreEntityEntityTypeInterface::getListCacheTags()
Cache tags allow us to invalidate caches more smartly.
New Cache API
Cache contexts
New Cache API
Cache contexts are analogous to HTTP's Vary header.
It helps Drupal to decide whether the cached response can be
used rather than requesting a fresh one.
Contexts examples:
theme (vary by negotiated theme)
user.roles (vary by the combination of roles)
languages (vary by all language types: interface, content …)
Routing
Drupal 8 Routing System
Routing
*.routing.yml
example.content:
path: '/example'
defaults:
_controller: 'DrupalexampleControllerExampleController::content'
_title: 'Hello World'
requirements:
_permission: 'access content'
_method: 'GET'
Routing
src/Controller/ExampleController.php:
class ExampleController extends ControllerBase {
/**
* {@inheritdoc}
*/
public function content() {
return ['#type' => 'markup', '#markup' => t('Hello World!')];
}
}
Routing
Arguments inside routes:
*.routing.yml
example.content:
path: '/example/{my_arg}'
defaults:
_controller: 'DrupalexampleControllerExampleController::content'
_title: 'Hello World'
requirements:
_permission: 'access content'
Routing
src/Controller/ExampleController.php:
class ExampleController extends ControllerBase {
/**
* {@inheritdoc}
*/
public function content($my_arg) {
return ['#type' => 'markup', '#markup' => $my_arg];
}
}
Form API
Form API
Form API
New Form(s) implementation
workflow
Form API
DrupalCoreFormFormInterface
- everything what you usually need!
- getFormId() - specify Form ID
- buildForm() - build form array
- validateForm() - form validation handler
- submitForm() - form submit handler
Form API
New HTML 5 elements:
● '#type' => 'tel'
● '#type' => 'email'
● '#type' => 'number'
● '#type' => 'date'
● '#type' => 'url'
● '#type' => 'search'
● '#type' => 'range'
● etc.
Form API
Not enought? - Create your own!
Form API
Integrate the form in a request:
mymodule.test_form:
path: 'mymodule/test_form'
defaults:
_form: 'DrupalmymoduleFormsExampleForm'
_title: 'Test form'
requirements:
_permission: 'access content'
Form API
Retrieving the form outside of routes:
$form = Drupal::formBuilder()
->getForm('DrupalexampleFormExampleForm');
Form API
Forms altering...doesn’t really changed
Form API
Rendering forms programmatically:
// Retrieve a form array.
$form = Drupal::formBuilder()
->getForm('DrupalexampleFormExampleForm');
// Render it.
$rendered_form = Drupal::service('renderer')
->render($form);
Libraries
Libraries
Libraries
*.libraries.yml:
my_library:
version: 1.x
css:
theme:
css/styles.css: {}
js:
js/script.js: {}
dependencies:
- core/drupal
Libraries
Attaching libraries:
function mymodule_element_info_alter(array &$types) {
$types['table']['#attached']['library'][] = 'mymodule/my_library';
}
Note: Can be attached to any render-able array.
Libraries
Twig attach libraries:
{{ attach_library('mymodule/my_library') }}
<div>Some markup {{ message }}</div>
Libraries
Disable aggregation:
my_library:
version: 1.x
css:
theme:
css/style.css: {preprocess: false}
js:
js/script.js: {preprocess: false}
Libraries
CDN/externally hosted libraries:
angular.angularjs:
remote: https://github.com/angular/angular.js
version: 1.4.4
js:
https://ajax.googleapis.com/ajax/libs/angularjs/1.4.4/angular.min.js: {
type: external, minified: true }
Libraries
Inline JavaScript is highly discouraged!
Migrate yourself!: src / Module / Multilingual / ConfigVariables.php
Migrate yourself!: src / Module / Multilingual / ConfigVariables.php
STEP #1 add variables with text, string type to the
root of config_object var inside a
my_module.schema.yml
WARNING: works only with first level depth text-based elements
in the config_object
Migrate yourself!: src / Module / Multilingual / ConfigVariables.php
STEP #2 add default local task, my_module.links.task.yml
Migrate yourself!: src / Module / Multilingual / ConfigVariables.php
STEP #3 make config_object translateable
my_module.config_translation.yml
Migrate yourself!: src / Module / ViewsIntegration / CustomTable.php
@see core/modules/tracker/tracker.views.inc
Dev Tools
Don’t forget about a new Dev tools:
● Drupal console
● Kint
● REPL
● Webprofiler
Conclusion
is awesome!
Any questions?
Thanks!

More Related Content

What's hot (20)

PPTX
Becoming A Drupal Master Builder
Philip Norton
 
PDF
ACL in CodeIgniter
mirahman
 
PPTX
Zend framework
Prem Shankar
 
PDF
Getting to The Loop - London Wordpress Meetup July 28th
Chris Adams
 
PDF
Ajax Tags Advanced
AkramWaseem
 
ODP
Zend Framework 1.9 Setup & Using Zend_Tool
Gordon Forsythe
 
PDF
Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
Caldera Labs
 
PDF
Introducing Assetic: Asset Management for PHP 5.3
Kris Wallsmith
 
PDF
Config management
Alexei Goja
 
ZIP
Drupal Development
Jeff Eaton
 
PDF
Staying Sane with Drupal NEPHP
Oscar Merida
 
PDF
Assetic (Symfony Live Paris)
Kris Wallsmith
 
PDF
Acquia Drupal Certification
Philip Norton
 
PDF
Single Page Web Apps As WordPress Admin Interfaces Using AngularJS & The Word...
Caldera Labs
 
PDF
Introduction to AngularJS For WordPress Developers
Caldera Labs
 
PPT
Zend Framework 1.8 Features Webinar
Ralph Schindler
 
PDF
Caldera Learn - LoopConf WP API + Angular FTW Workshop
CalderaLearn
 
PPT
Zend - Installation And Sample Project Creation
Compare Infobase Limited
 
PPTX
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
arcware
 
PDF
JavaScript for Flex Devs
Aaronius
 
Becoming A Drupal Master Builder
Philip Norton
 
ACL in CodeIgniter
mirahman
 
Zend framework
Prem Shankar
 
Getting to The Loop - London Wordpress Meetup July 28th
Chris Adams
 
Ajax Tags Advanced
AkramWaseem
 
Zend Framework 1.9 Setup & Using Zend_Tool
Gordon Forsythe
 
Connecting Content Silos: One CMS, Many Sites With The WordPress REST API
Caldera Labs
 
Introducing Assetic: Asset Management for PHP 5.3
Kris Wallsmith
 
Config management
Alexei Goja
 
Drupal Development
Jeff Eaton
 
Staying Sane with Drupal NEPHP
Oscar Merida
 
Assetic (Symfony Live Paris)
Kris Wallsmith
 
Acquia Drupal Certification
Philip Norton
 
Single Page Web Apps As WordPress Admin Interfaces Using AngularJS & The Word...
Caldera Labs
 
Introduction to AngularJS For WordPress Developers
Caldera Labs
 
Zend Framework 1.8 Features Webinar
Ralph Schindler
 
Caldera Learn - LoopConf WP API + Angular FTW Workshop
CalderaLearn
 
Zend - Installation And Sample Project Creation
Compare Infobase Limited
 
10 Things Every Plugin Developer Should Know (WordCamp Atlanta 2013)
arcware
 
JavaScript for Flex Devs
Aaronius
 

Viewers also liked (20)

PDF
Юрій Герасімов — Editorial experience in Drupal8
LEDC 2016
 
PDF
Юрій Герасимов — Delayed operations with queues
LEDC 2016
 
PPTX
Características que definen a una persona creativa
Paola Cruz
 
PPTX
Anatomia aparato respiratorio
M5784M5954J59
 
PDF
Education for Better FINAL - digital3
Anita Hutner
 
ODP
Slideshare assignment career exploration
Montex Baron
 
PPTX
Mooc
irvin matsane
 
DOCX
Renovation
Herman Robinson
 
PDF
Huesos de las manos y de los pies
M5784M5954J59
 
PPTX
Episode 2 meet the characters Film Writing 101
Kriztine Viray
 
DOCX
Working capital managemen
Arshad Islam
 
PPTX
Gestión de proyectos ambientales de ecopetrol.pptm
Vane Correa
 
PPTX
Генадій Колтун — Перехід від фрілансера в стадію компанії
LEDC 2016
 
PPTX
Сергій Бондаренко — Тестування Drupal сайтiв з допогою TqExtension
LEDC 2016
 
PPTX
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
LEDC 2016
 
PDF
Vinculacion con la Sociedad uniandes 2012
vasquez1962
 
PDF
Андрій Юн — Drupal contributor HOWTO
LEDC 2016
 
PPTX
Вадим Абрамчук — Big Drupal: Issues We Met
LEDC 2016
 
PPTX
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
LEDC 2016
 
PDF
Vinculacion con lasociedad uniandes 2012
vasquez1962
 
Юрій Герасімов — Editorial experience in Drupal8
LEDC 2016
 
Юрій Герасимов — Delayed operations with queues
LEDC 2016
 
Características que definen a una persona creativa
Paola Cruz
 
Anatomia aparato respiratorio
M5784M5954J59
 
Education for Better FINAL - digital3
Anita Hutner
 
Slideshare assignment career exploration
Montex Baron
 
Renovation
Herman Robinson
 
Huesos de las manos y de los pies
M5784M5954J59
 
Episode 2 meet the characters Film Writing 101
Kriztine Viray
 
Working capital managemen
Arshad Islam
 
Gestión de proyectos ambientales de ecopetrol.pptm
Vane Correa
 
Генадій Колтун — Перехід від фрілансера в стадію компанії
LEDC 2016
 
Сергій Бондаренко — Тестування Drupal сайтiв з допогою TqExtension
LEDC 2016
 
Олена Ольховик — Від frontend розробки до Drupal-темізації. Основи і специфіка
LEDC 2016
 
Vinculacion con la Sociedad uniandes 2012
vasquez1962
 
Андрій Юн — Drupal contributor HOWTO
LEDC 2016
 
Вадим Абрамчук — Big Drupal: Issues We Met
LEDC 2016
 
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
LEDC 2016
 
Vinculacion con lasociedad uniandes 2012
vasquez1962
 
Ad

Similar to Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module->mind (20)

PDF
Drupal 8 - Core and API Changes
Shabir Ahmad
 
PDF
Drupal8 for Symfony Developers (PHP Day Verona 2017)
Antonio Peric-Mazar
 
PDF
Drupal 8 Deep Dive: Plugin System
Acquia
 
PPTX
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
PDF
Drupal 8: A story of growing up and getting off the island
Angela Byron
 
PDF
DrupalJam 2018 - Maintaining a Drupal Module: Keep It Small and Simple
Alexander Varwijk
 
PPTX
Drupal 8 Hooks
Sathya Sheela Sankaralingam
 
PDF
Drupal8 for Symfony developers - Dutch PHP
Antonio Peric-Mazar
 
PPTX
Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi
 
PPTX
Top 8 Improvements in Drupal 8
Angela Byron
 
PDF
Master the New Core of Drupal 8 Now: with Symfony and Silex
Ryan Weaver
 
PDF
Drupal Flyover, CMS Expo
Emma Jane Hogbin Westby
 
PDF
Drupal8 simplepage v2
Samuel Solís Fuentes
 
ODP
что нового в мире Services
DrupalCamp Kyiv Рысь
 
PDF
Learn Drupal 8 Render Pipeline
Zyxware Technologies
 
PDF
Drupal South 2015: Introduction to Web Services. Services in Drupal 8.
TechnocratAu
 
PPTX
Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core
Acquia
 
PDF
Dependency injection in Drupal 8
Alexei Gorobets
 
PDF
Plain english guide to drupal 8 criticals
Angela Byron
 
PDF
Services Drupalcamp Stockholm 2009
hugowetterberg
 
Drupal 8 - Core and API Changes
Shabir Ahmad
 
Drupal8 for Symfony Developers (PHP Day Verona 2017)
Antonio Peric-Mazar
 
Drupal 8 Deep Dive: Plugin System
Acquia
 
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
Drupal 8: A story of growing up and getting off the island
Angela Byron
 
DrupalJam 2018 - Maintaining a Drupal Module: Keep It Small and Simple
Alexander Varwijk
 
Drupal8 for Symfony developers - Dutch PHP
Antonio Peric-Mazar
 
Ran Mizrahi - Symfony2 meets Drupal8
Ran Mizrahi
 
Top 8 Improvements in Drupal 8
Angela Byron
 
Master the New Core of Drupal 8 Now: with Symfony and Silex
Ryan Weaver
 
Drupal Flyover, CMS Expo
Emma Jane Hogbin Westby
 
Drupal8 simplepage v2
Samuel Solís Fuentes
 
что нового в мире Services
DrupalCamp Kyiv Рысь
 
Learn Drupal 8 Render Pipeline
Zyxware Technologies
 
Drupal South 2015: Introduction to Web Services. Services in Drupal 8.
TechnocratAu
 
Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core
Acquia
 
Dependency injection in Drupal 8
Alexei Gorobets
 
Plain english guide to drupal 8 criticals
Angela Byron
 
Services Drupalcamp Stockholm 2009
hugowetterberg
 
Ad

More from LEDC 2016 (20)

PPTX
A. Postnikov & P. Mahrinsky — Drupal Community — це ми
LEDC 2016
 
PDF
Слава Мережко — Практикум: "Як ростити розробників"
LEDC 2016
 
PDF
Генадій Колтун — Комунізм наступає: що будемо робити, коли машини навчаться п...
LEDC 2016
 
PDF
Олексій Калініченко — Configuration Management in Drupal8
LEDC 2016
 
PPTX
Олександр Лінивий — Multisite platform with continuous delivery process for m...
LEDC 2016
 
PPTX
Андрій Юн — Воркшоп "Docker use cases for developers"
LEDC 2016
 
PDF
Андрій Поданенко — Воркшоп "Розвертання CIBox"
LEDC 2016
 
PPTX
Тарас Кирилюк — Docker basics. How-to for Drupal developers
LEDC 2016
 
PDF
Тарас Круц — Open Social: brand new Drupal 8 distro for building social netwo...
LEDC 2016
 
PDF
Ігор Карпиленко — PHPStorm for drupal developer
LEDC 2016
 
PDF
Олександр Щедров — Build your application in seconds and optimize workflow as...
LEDC 2016
 
PPTX
Анатолій Поляков — Subdomains everywhere
LEDC 2016
 
PPTX
Артем Доценко — Deploy Plus. Better UI and more control for deploy module
LEDC 2016
 
PPTX
Віталій Бобров — Web components, Polymer and Drupal
LEDC 2016
 
PPTX
Олександр Щедров та Альбіна Тюпа — Magic button. Can production releases be s...
LEDC 2016
 
PPTX
Юлія Снітко — Як подружити дизайнерів і Drupal розробників. Досвід ефективної...
LEDC 2016
 
PPTX
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
LEDC 2016
 
PDF
Тарас Круц - Tips On Getting Everything You Can Out of Drupal Form API
LEDC 2016
 
PPTX
Тарас Цюпер - Методы кеширования и оптимизация Drupal 7 проектов
LEDC 2016
 
PPTX
Анатолий Поляков - Drupal.ajax framework from a to z
LEDC 2016
 
A. Postnikov & P. Mahrinsky — Drupal Community — це ми
LEDC 2016
 
Слава Мережко — Практикум: "Як ростити розробників"
LEDC 2016
 
Генадій Колтун — Комунізм наступає: що будемо робити, коли машини навчаться п...
LEDC 2016
 
Олексій Калініченко — Configuration Management in Drupal8
LEDC 2016
 
Олександр Лінивий — Multisite platform with continuous delivery process for m...
LEDC 2016
 
Андрій Юн — Воркшоп "Docker use cases for developers"
LEDC 2016
 
Андрій Поданенко — Воркшоп "Розвертання CIBox"
LEDC 2016
 
Тарас Кирилюк — Docker basics. How-to for Drupal developers
LEDC 2016
 
Тарас Круц — Open Social: brand new Drupal 8 distro for building social netwo...
LEDC 2016
 
Ігор Карпиленко — PHPStorm for drupal developer
LEDC 2016
 
Олександр Щедров — Build your application in seconds and optimize workflow as...
LEDC 2016
 
Анатолій Поляков — Subdomains everywhere
LEDC 2016
 
Артем Доценко — Deploy Plus. Better UI and more control for deploy module
LEDC 2016
 
Віталій Бобров — Web components, Polymer and Drupal
LEDC 2016
 
Олександр Щедров та Альбіна Тюпа — Magic button. Can production releases be s...
LEDC 2016
 
Юлія Снітко — Як подружити дизайнерів і Drupal розробників. Досвід ефективної...
LEDC 2016
 
Костянтин Чаус — Monitoring of huge Drupal site. Tools and tips
LEDC 2016
 
Тарас Круц - Tips On Getting Everything You Can Out of Drupal Form API
LEDC 2016
 
Тарас Цюпер - Методы кеширования и оптимизация Drupal 7 проектов
LEDC 2016
 
Анатолий Поляков - Drupal.ajax framework from a to z
LEDC 2016
 

Recently uploaded (20)

PPTX
一比一原版(SUNY-Albany毕业证)纽约州立大学奥尔巴尼分校毕业证如何办理
Taqyea
 
PDF
𝐁𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓
hokimamad0
 
PPTX
Orchestrating things in Angular application
Peter Abraham
 
PPTX
Presentation3gsgsgsgsdfgadgsfgfgsfgagsfgsfgzfdgsdgs.pptx
SUB03
 
PPT
Computer Securityyyyyyyy - Chapter 2.ppt
SolomonSB
 
PPT
Computer Securityyyyyyyy - Chapter 1.ppt
SolomonSB
 
PDF
Build Fast, Scale Faster: Milvus vs. Zilliz Cloud for Production-Ready AI
Zilliz
 
PPTX
L1A Season 1 Guide made by A hegy Eng Grammar fixed
toszolder91
 
PDF
Apple_Environmental_Progress_Report_2025.pdf
yiukwong
 
PPTX
ONLINE BIRTH CERTIFICATE APPLICATION SYSYTEM PPT.pptx
ShyamasreeDutta
 
PPTX
法国巴黎第二大学本科毕业证{Paris 2学费发票Paris 2成绩单}办理方法
Taqyea
 
PPTX
Lec15_Mutability Immutability-converted.pptx
khanjahanzaib1
 
PPT
Agilent Optoelectronic Solutions for Mobile Application
andreashenniger2
 
DOCX
Custom vs. Off-the-Shelf Banking Software
KristenCarter35
 
PDF
Azure_DevOps introduction for CI/CD and Agile
henrymails
 
PPTX
PM200.pptxghjgfhjghjghjghjghjghjghjghjghjghj
breadpaan921
 
PPTX
原版西班牙莱昂大学毕业证(León毕业证书)如何办理
Taqyea
 
PPT
introduction to networking with basics coverage
RamananMuthukrishnan
 
PPTX
西班牙武康大学毕业证书{UCAMOfferUCAM成绩单水印}原版制作
Taqyea
 
PPTX
sajflsajfljsdfljslfjslfsdfas;fdsfksadfjlsdflkjslgfs;lfjlsajfl;sajfasfd.pptx
theknightme
 
一比一原版(SUNY-Albany毕业证)纽约州立大学奥尔巴尼分校毕业证如何办理
Taqyea
 
𝐁𝐔𝐊𝐓𝐈 𝐊𝐄𝐌𝐄𝐍𝐀𝐍𝐆𝐀𝐍 𝐊𝐈𝐏𝐄𝐑𝟒𝐃 𝐇𝐀𝐑𝐈 𝐈𝐍𝐈 𝟐𝟎𝟐𝟓
hokimamad0
 
Orchestrating things in Angular application
Peter Abraham
 
Presentation3gsgsgsgsdfgadgsfgfgsfgagsfgsfgzfdgsdgs.pptx
SUB03
 
Computer Securityyyyyyyy - Chapter 2.ppt
SolomonSB
 
Computer Securityyyyyyyy - Chapter 1.ppt
SolomonSB
 
Build Fast, Scale Faster: Milvus vs. Zilliz Cloud for Production-Ready AI
Zilliz
 
L1A Season 1 Guide made by A hegy Eng Grammar fixed
toszolder91
 
Apple_Environmental_Progress_Report_2025.pdf
yiukwong
 
ONLINE BIRTH CERTIFICATE APPLICATION SYSYTEM PPT.pptx
ShyamasreeDutta
 
法国巴黎第二大学本科毕业证{Paris 2学费发票Paris 2成绩单}办理方法
Taqyea
 
Lec15_Mutability Immutability-converted.pptx
khanjahanzaib1
 
Agilent Optoelectronic Solutions for Mobile Application
andreashenniger2
 
Custom vs. Off-the-Shelf Banking Software
KristenCarter35
 
Azure_DevOps introduction for CI/CD and Agile
henrymails
 
PM200.pptxghjgfhjghjghjghjghjghjghjghjghjghj
breadpaan921
 
原版西班牙莱昂大学毕业证(León毕业证书)如何办理
Taqyea
 
introduction to networking with basics coverage
RamananMuthukrishnan
 
西班牙武康大学毕业证书{UCAMOfferUCAM成绩单水印}原版制作
Taqyea
 
sajflsajfljsdfljslfjslfsdfas;fdsfksadfjlsdflkjslgfs;lfjlsajfl;sajfasfd.pptx
theknightme
 

Валентин Мацвейко та Владислав Мойсеєнко — D8: Migrate Yourself: code->module->mind