In this Java Spring Training session, you will learn Spring AOP – Aspect Oriented Programming Topics covered in this session are:
For more information, visit this link:
• Auto-wiring
• Annotations based configuration
• Java based configuration
https://www.mindsmapped.com/courses/software-development/spring-fundamentals-learn-spring-framework-and-spring-boot/
In this Java Spring Training session, you will learn Spring AOP – Aspect Oriented Programming Topics covered in this session are:
For more information, visit this link:
• Auto-wiring
• Annotations based configuration
• Java based configuration
https://www.mindsmapped.com/courses/software-development/spring-fundamentals-learn-spring-framework-and-spring-boot/
In this core java training session, you will learn Java IO – Files, Streams and
Object Serialization. Topics covered in this session are:
• Java IO
• Files
• Streams
• Byte-based
• Character-based
• Object Serialization
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
9 crucial Java Design Principles you cannot missMark Papis
Encapsulation, Polymorphism, Agreggation / Composition, Overloading, Inheritance vs Composition, DRY, Dependency Injection, Delagation, Law of demeter, Principle of leas knowledge,
The objective of this tutorial is to demonstrate the implementation of Mule caching strategy with REDIS cache using Spring Data Redis module. Mule caching strategy is associated with Mule Cache scope and it is used to define the actions a cache scope takes when a message enters its subflow. In this tutorial, we will be using a simple use case to show the steps require to cache the query results of an Oracle database table into Redis cache using Spring Data Redis module.
The objective of this tutorial is to demonstrate the workaround needed to invoke an Oracle Stored Procedure
from Mule ESB flow by passing Java arrays as parameters.
The use case for this tutorial is a simple one such as inserting student records from a CSV file into an Oracle
database table through a stored procedure where one of the parameters is an array holding the student’s marks.
In this core java training session, you will learn Java IO – Files, Streams and
Object Serialization. Topics covered in this session are:
• Java IO
• Files
• Streams
• Byte-based
• Character-based
• Object Serialization
For more information about this course visit on this link: https://www.mindsmapped.com/courses/software-development/learn-java-fundamentals-hands-on-training-on-core-java-concepts/
9 crucial Java Design Principles you cannot missMark Papis
Encapsulation, Polymorphism, Agreggation / Composition, Overloading, Inheritance vs Composition, DRY, Dependency Injection, Delagation, Law of demeter, Principle of leas knowledge,
The objective of this tutorial is to demonstrate the implementation of Mule caching strategy with REDIS cache using Spring Data Redis module. Mule caching strategy is associated with Mule Cache scope and it is used to define the actions a cache scope takes when a message enters its subflow. In this tutorial, we will be using a simple use case to show the steps require to cache the query results of an Oracle database table into Redis cache using Spring Data Redis module.
The objective of this tutorial is to demonstrate the workaround needed to invoke an Oracle Stored Procedure
from Mule ESB flow by passing Java arrays as parameters.
The use case for this tutorial is a simple one such as inserting student records from a CSV file into an Oracle
database table through a stored procedure where one of the parameters is an array holding the student’s marks.
Specializată în furnizarea şi promovarea educaţiei permanente a adulţilor, Lifelong Learning Solutions s.r.l. vă oferă servicii profesionale de consultanţă şi training în domeniul organizaţional şi în cel al dezvoltării potenţialului uman.
Drupal features support to export/import Drupal components like Views, menus, menu items, content types, CCK fields, image cache presets, Drupal variables, permission, user roles etc.
Pinterest Marketing Tidbits Tribute by Jedi Bentillo-
showcases Hubspot's marketing pointers on how to drive website traffic to your website using Pinterest
This presentation overviews the 8 areas in technology where Librarians need to attain core tech skills. At the end is a link to the blog where you can find online tutorials and videos for each core skill set.
Quite significant changes were introduced in the theme system between Drupal 8 and 7. This guide contains information that applies to Drupal 8 theming.
Va asteptam alaturi de noi pentru a beneficia de un program intensiv de studiu si practica fundamentat pe legislatia muncii, rezultatele obtinute prin aplicarea actelor normative aflate in vigoare si standardele ocupationale in domeniu.
Toti cei interesati de o cariera in Resurse Umane sau de rafinarea cunostintelor dobandite in acest domeniu sunt bineveniti.
Durata cursului: Cursul se desfasoara in 2 weekend-uri succesive, iar ziua destinata evaluarii pentru obtinerea Certificatului de absolvire autorizat de A.N.C. se stabileste in functie de disponibilitatea participantilor, a trainerului si a membrilor comisiei de evaluare.
These slides were created for the purpose of conducting a training session at iksula services private limited.
For Examples related to slides: Check https://github.com/kunal-kursija/worldwar
A description of the most important features in the upcoming major PHP version: PHP 7.
Includes some code samples and references to the corresponding RFCs of each of the features.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
GraphRAG is All You need? LLM & Knowledge GraphGuy Korland
Guy Korland, CEO and Co-founder of FalkorDB, will review two articles on the integration of language models with knowledge graphs.
1. Unifying Large Language Models and Knowledge Graphs: A Roadmap.
https://arxiv.org/abs/2306.08302
2. Microsoft Research's GraphRAG paper and a review paper on various uses of knowledge graphs:
https://www.microsoft.com/en-us/research/blog/graphrag-unlocking-llm-discovery-on-narrative-private-data/
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
PHP Frameworks: I want to break free (IPC Berlin 2024)Ralf Eggert
In this presentation, we examine the challenges and limitations of relying too heavily on PHP frameworks in web development. We discuss the history of PHP and its frameworks to understand how this dependence has evolved. The focus will be on providing concrete tips and strategies to reduce reliance on these frameworks, based on real-world examples and practical considerations. The goal is to equip developers with the skills and knowledge to create more flexible and future-proof web applications. We'll explore the importance of maintaining autonomy in a rapidly changing tech landscape and how to make informed decisions in PHP development.
This talk is aimed at encouraging a more independent approach to using PHP frameworks, moving towards a more flexible and future-proof approach to PHP development.
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Connector Corner: Automate dynamic content and events by pushing a buttonDianaGray10
Here is something new! In our next Connector Corner webinar, we will demonstrate how you can use a single workflow to:
Create a campaign using Mailchimp with merge tags/fields
Send an interactive Slack channel message (using buttons)
Have the message received by managers and peers along with a test email for review
But there’s more:
In a second workflow supporting the same use case, you’ll see:
Your campaign sent to target colleagues for approval
If the “Approve” button is clicked, a Jira/Zendesk ticket is created for the marketing design team
But—if the “Reject” button is pushed, colleagues will be alerted via Slack message
Join us to learn more about this new, human-in-the-loop capability, brought to you by Integration Service connectors.
And...
Speakers:
Akshay Agnihotri, Product Manager
Charlie Greenberg, Host
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
"Impact of front-end architecture on development cost", Viktor TurskyiFwdays
I have heard many times that architecture is not important for the front-end. Also, many times I have seen how developers implement features on the front-end just following the standard rules for a framework and think that this is enough to successfully launch the project, and then the project fails. How to prevent this and what approach to choose? I have launched dozens of complex projects and during the talk we will analyze which approaches have worked for me and which have not.
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
3. The HttpFoundation Component defines an object-oriented layer for the HTTP
specification.
The deepest level is the HttpFoundation component. HttpFoundation provides the
main objects needed to deal with HTTP. It is an object-oriented abstraction of some
native PHP functions and variables:
The Request class abstracts the main PHP global variables like $_GET, $_POST,$_COOKIE,
$_FILES, and $_SERVER;
The Response class abstracts some PHP functions like header(), setcookie(), and echo;
The Session class and SessionStorageInterface interface abstract session management session_*()
functions.
It provides an abstraction for requests, responses, uploaded files, cookies, sessions, ...
The HttpKernel Component provides a structured process for converting a Request
into a Response by making use of the event dispatcher
Request example
use SymfonyComponentHttpFoundationRequest;
use SymfonyComponentHttpFoundationResponse;
$request = Request::createFromGlobals();
echo $request->getPathInfo();
4. Response example
$response = new Response('Not Found', 404, array('Content-Type' => 'text/plain'));
$response->send();
The HttpKernel Component provides a structured process for converting a Request
into a Response by making use of the event dispatcher
•On top of HttpFoundation is the HttpKernel component. HttpKernel handles the
dynamic part of HTTP
•It is a thin wrapper on top of the Request and Response classes to standardize the
way requests are handled
•The HttpKernel class is the central class of Symfony and is responsible for handling
client requests. Its main goal is to "convert" a Request object to a Response object.
•HttpKernel notifies events to convert a Request object to a Response one.
5.
6. The EventDispatcher component provides tools that allow your application
components to communicate with each other by dispatching events and
listening to them
Consider the real-world example where you want to provide a plugin
system for your project. A plugin should be able to add methods, or do
something before or after a method is executed, without interfering with
other plugins. This is not an easy problem to solve with single inheritance,
and multiple inheritance (were it possible with PHP) has its own drawbacks.
Example
Once a Response object has been created, it may be useful to allow other
elements in the system to modify it (e.g. add some cache headers) before it's
actually used.
kernel throws an event - kernel.response. Here's how it works:
•A listener (PHP object) tells a central dispatcher object that it wants to listen to
the kernel.response event;
•At some point, the Symfony kernel tells the dispatcher object to dispatch the
kernel.response event, passing with it an Event object that has access to the
7. Concrete implementation
kernel.request
Dispatched as soon as the request arrives. If any listener return a Response
object, all other listeners won’t be called.
kernel.controller
Once the controller is resolved, this event is dispatched and allows changing
it.
kernel.view
Dispatched only if the controller does not return a Response. Its goal is to
build a Response object from the return value of the Controller - for example,
a string -.
kernel.response
Allows to modify or replace the Response object after its creation – for
example, adding the Google Analytics tracker code to every page -.
kernel.terminate
Dispatched once the Response has been sent. Can be used to run expensive
post-response jobs, such as sending mails or processing data.
kernel.exception
Last chance to convert an Exception into a Response object.
8. The ClassLoader Component loads your project classes automatically if they
follow some standard PHP conventions.
This gives you a way to upload all your PHP classes so that the files where
the classes are defined are only loaded on demand when needed.
ClassLoader can load any class as long as you follow the naming
conventions
This loads project classes right when they are needed, if they are named and
set up in directories that follow PHP’s PSR-4 interoperability principles.
This will help module developers out in a major way; there will be less
worrying about module_load_include and similar dancing around to
include dependencies, and more calling up classes at runtime to get things
done.
9. PSR-4 Standard
Example vegetable.module directory structure:
modules/vegetable/
css/
js/
src/
Controller/
VegetableController.php → class DrupalvegetableController
Form/
VegetableForm.php → class DrupalvegetableForm
Entity/
Tomato.php → class DrupalvegetableEntityTomato
Cucumber.php → class DrupalvegetableEntityCucumber
VegetableManager.php → class DrupalvegetableVegetableManager
templates/
tests/
src/
Entity/
TomatoTest.php → class DrupalTestsvegetableEntityTomatoTest
CucumberTest.php → class
DrupalTestsvegetableEntityCucumberTest
VegetableManagerTest.php → class
DrupalTestsvegetableVegetableManagerTest
fixtures/
weather-data.json
vegetable.info.yml
vegetable.routing.yml
vegetable.module
10. Explanation:
Each module has a namespace that corresponds to its module name.
Here: Drupalvegetable
The module's namespace is mapped to the ./src/ folder in the module directory.
Here: Drupalvegetable → modules/vegetable/src/
Anything after the module namespace directly maps to the directory and file structure in the
./src/ folder.
Here: DrupalvegetableEntityTomato → modules/vegetable/src/Entity/Tomato.php
The identical logic applies to PHPUnit tests contained in ./tests/src/.Base namespace Base directory Contains
Drupal core DrupalComponent
core/lib/Drupal/Co
mponent/
Components that are
reusable outside of
Drupal.
DrupalCore
core/lib/Drupal/Cor
e/
Components that are
specific to Drupal.
DrupalTests
core/tests/Drupal/T
ests/
PHPUnit tests of core
components.
Modules
Drupal$modulenam
e
modules/$modulena
me/src/
Main integration files.
Drupal$modulenam
eTests
modules/$modulena
me/src/Tests/
Simpletest tests of the
module.
DrupalTests$modu
lename
modules/$modulena
me/tests/src/
PHPUnit tests of the
module.
11. It parses YAML strings and converts them to PHP arrays and vice versa
YAML is a human readable data serialization format. YAML can be used in
place of XML or JSON. It provides a much more human readable format whilst
still being powerful and performant.
This format has been especially designed to hold configuration related
information, while being as expressive as XML files and as readable as INI files.
It allows our modules to initially define their default configuration settings and
later allows the site builder to override the same as-and-when instructed to
Configuration management means moving between development, staging, and
production environments incredibly easy. This gives developers the freedom to
work away from production and yet within a similar environment
12. Allows us to load all routes, and dumps a URL matcher or generator specific to
these routes. This also means that it maps an HTTP request to a set of
configuration variables. As far as Drupal 8 and above versions are concerned,
we define our module’s routes in a YAML configuration file, each of them set to
trigger a specific action that has been defined in our module’s classes.
14. Drupal 8 introduces the concept of services to decouple reusable functionality
and makes these services pluggable and replaceable by registering them with a
service container
Services are used to perform operations like accessing the database or sending
an e-mail.
Rather than use PHP's native MySQL functions, we use the core-provided
service via the service container to perform this operation so that our code can
simply access the database without having to worry about whether the database
is MySQL or SQLlite or if the mechanism for sending e-mail is SMTP
language_manager:
class: DrupalCoreLanguageLanguageManager
arguments: ['@language.default']
...
path.alias_manager:
class: DrupalCorePathAliasManager
arguments: ['@path.crud', '@path.alias_whitelist', '@language_manager']
A service container (or dependency injection container) is a PHP object that
A service container (or dependency
injection container) is a PHP object that
manages the instantiation of services.
15. <?php
// Returns a DrupalCoreDatabaseConnection object.
$connection = Drupal::database();
$result = $connection->select('node', 'n')
->fields('n', array('nid'))
->execute();
?>
Comparing Drupal 7 global functions to Drupal 8 services
Let's take a look at the code required to invoke a module's hook as an example of the
differences between Drupal 7 and 8. In Drupal 7, you would use
module_invoke_all('help') to invoke all hook_help() implementations. Because we're
calling the module_invoke_all() function directly in our code, there is no easy way for
someone to modify the way Drupal invokes modules without making changes to the core
function.
In Drupal 8, the module_* functions are replaced by the ModuleHandler service. So in
Drupal 8 you would use Drupal::moduleHandler()->invokeAll('help'). In this example,
Drupal::moduleHandler() locates the registered implementation of the module handler
service in via the service container and then calls the invokeAll() method on that service.
Advantages
1) it allows a Drupal distribution or hosting provider or another module to override the
way invoking modules works by changing the class registered for the module
handler service with another
2) The dependencies of code are also better documented
3) the services can be unit tested
16. • In Drupal 8 Twig replaces PHPTemplate as the default templating engine
• One of the results of this change is that all of the theme_* functions and
PHPTemplate based *.tpl.php files have been replaced in by *.html.twig
template files.
• Unlike PHPTemplate which was developed in-house by Drupal developers,
Twig comes from the wider PHP world.
Why Twig in Drupal 8?
1) Multiple Data Printing Ways –
In older Drupal 7, there were two ways to print the variable. User could either
use the print keyword to print some variable and render keyword to display other objects.
It was difficult for user to decide what whether to print the variable via print or render.
Solution: In TWIG, this problem has been resolved and user just needs to use a
pair of curly brackets before and after the variable like {{ variable }} and TWIG takes care
of whether to print it or render it.
Ex : Drupal 8 will access all variables consistently, for example {{ node.nid }}
and {{ node_url }}
2) Mixed Data Types
In Drupal 7, data types in the templates could be arrays, strings or objects and
user had no clue about the type of the variable being used.
Solution: In TWIG, “dot” operator can be used to dig into the variable and the
correct data type inside the variable can be accessed using the dot operator.
17. Why Twig in Drupal 8?
3) Multiple Ways to Override the Markup
Currently in Drupal 7, there are two ways to override the markup that comes
with Drupal 7. Either copy the template in file system and change the markup or use the
PHP Theme functions in order to override the markup.
Solution: In TWIG, all of the PHP theme functions will be replaced by TWIG
templates therefore there will be no need to us verbose and complex PHP theme
functions.
4) No Reusability
In Drupal 7, there are multiple theme functions and templates performing
nearly the same function due to lack of any design pattern and standard rules.
Solution: TWIG introduces patterns and standard set of rules which govern
front end developers to use the already available theme and function rather than
developing everything from the scratch.
5) Security
Drupal is not secure, using node object, a user can access any variably by
digging deep into several levels of a variable which can be an object or data structure. This
access to complex algorithms makes Drupal 7 vulnerable.
Solution: TWIG hides this complex and internal information from the user. In
Drupal 8, users will just have to give something like a print command and TWIG will take
care of all the internals issues. User will have no direct access to executable PHP template
18. Why Twig in Drupal 8?
6) Language and Syntax Independence
The theme engine used by Drupal 7 is Drupal Specific. All the terms and
languages are not used outside Drupal. This makes it difficult for new developers to find
their feet in Drupal community.
Solution: Twig is syntactically more similar to existing web languages on web
such as HTML. A new user will find it easier to get use to the Drupal 8 development
syntax.
19. Example
<?php print $title_attributes; ?> has been replaced by {{
title_attributes }}
<?php print $node_url; ?> has been replaced by {{ node_url }}
<?php print render($title_suffix); ?> has been replaced by {{
20. • Turns objects into a specific format(eg. XML, YAML, JSON, etc.), and
vice-versa. This will be used for all sorts of things, from configuration
to preparing nodes & entities for delivery by a REST endpoint.
21. Serilization sample code
$serializer = Drupal::service('serializer'):
$output = $serializer->serialize($entity, $format);
Deserilization sample code
$client = Drupal::service('http_client');
$result = $client->get('http://example.com/entity/node/1', ['Accept'
=> 'application/json']);
$output = $result->getBody();
$serializer = Drupal::service('serializer'):
$entity = $serializer->deserialize($output, 'DrupalnodeEntityNode',
$format);
The component is used to make drupal 8 available for REST API.
This allows you to use all the Drupal 8 features to edit your content but
present the content not only on a Drupal frontend but also on mobile
apps or anything else that can work with JSON data.
22. With the Validator component Drupal will validate values in a general
sense. For example, form submissions or validating entities within
Drupal. The Validator uses Doctrine Annotations for its function.
Enables specifying validation rules for classes using XML, YAML, PHP
or annotations, which can then be checked against instances of these
classes.
In Drupal 8 Entity validation is moved to a separate Entity validation
API and decoupled from form validation. Decoupling entity validation
from forms allows validation entities to be independent from form
submissions, such as when changed via the RESTful web service. This
new validation API has been implemented based on the Symfony
validator.
1) Entities can be validated seperately
2) Validation can be put directly as property of field contraint
3) Using the API
23. Provides a standard set of tools to load translation files, generate translated
strings as output, and use the generated outcome.
1) Improve the developer experience of field languages considerably
2) Introduce language support for data that is not (yet) fields: title, status,
author, etc.
3) Add language assignment to entities that don't currently support that:
taxonomy, files, etc.
4) Introduce new content translation module based on field translation with
the above improvements
5) Remove existing content translation module and provide a migration path
for all existing data
6) Provide better summaries and overviews of translation status on core
administration pages
25. Assetic is a PHP library for asset management
An Asset Management framework. Assets in Drupal consist of CSS files,
JavaScript files, images, other media files, metadata, etc.
This will effectively take on the duty of compressing CSS and JavaScript,
managing image styles, and dealing with other media types in a consistent
fashion.
Assetic in Drupal
• Drupal assets
• Asset bags. Have a lot of assets to declare? Drop them into a bag. Bags are a
way to pass around assets through the Drupal system
• Dependancies work much better than weights. If a js file depends on jQuery
it will not be loaded before jQuery.
• drupal_add_css(), and drupal_add_js() - gone. Better mechanisms for
declaring, organizing, and aggregating assets.
26. A tool specifically designed and developed to manage dependency in PHP
allowing us to declare the dependent libraries our project needs and install
them for us
Handles situations very efficiently wherein your project is dependent upon
a number of libraries.
Tackles situations where there is a nested dependency concept amongst the
libraries. For instance; your project is dependent upon a library (say, lib1)
and in tern lib1 is dependent upon some other library (say, lib2).
It is Composer’s responsibility to choose which version of the package or
library needs to be installed unless explicitly told which versions to target..
Composer.json looks like
"require": {
"php": ">=5.3.3",
"symfony/symfony": "2.3.*",
"doctrine/doctrine-bundle": "1.2.*",
> php composer.phar require "doctrine/doctrine-bundle": "1.2.*“
> php composer.phar update
27. A bundle of tools for use with database records
Drupal 8 uses a part of it called Annotations that exposes additional metadata
to Drupal
Annotations
This provides extra metadata to Drupal, telling it what various components
are used for. This is a pretty tricky piece of functionality but it’s going to
come in handy later, especially when developers need to define custom
entity types.
Refactored solution
• Does not need to extend a base class or to implement an interface.
• Generates Physical Data Model from classes themselves.
• No need for Schema API anymore in the long run.
• Uses annotations the correct way.
• Have a meta-data caching system included.
28.
29.
30. This library makes it easy to consume and produce RDF, which allows
Drupal 8 sites to produce metadata in the markup, preparing them to be first
class citizens of the semantic web.
With the help of EasyRDF, Drupal 8 adds capability to produce metadata in
the markup in an easy and convenient way.
RDF (Resource description framework) Example
31. Guzzle
This is a PHP HTTP client, enabling Drupal 8 to make web requests using
REST based web service calls
This makes Drupal 8 web portals more efficient in terms of handling
different sorts of web services
PHPUnit
• Industry standard unit testing
• Drupal uses it to make sure core works the right way all the time
• helps module devs build their modules the right way
• PHPUnit ensures that any code written in Drupal 8 and in any custom
module incorporated in it matches industry standards
PSR3-Logging
• A common logging system that is shared by an entire PHP application
• Drupal 7 and older versions use watchdog() for this purpose
• Switching Drupal logging from watchdog() to a PSR-3 logging framework
has made Drupal 8 more robust and scalable in terms of common logging
32. /core - All files provided by core, that doesn't have an explicit reason to be in
the / directory. More details futher down.
/libraries - 3rd party libraries, eg. a wysiwyg editor. Not included by core, but
common enough to warrant inclusion here.
/modules - The directory into which all custom and contrib modules go.
Splitting this up into the sub-directories contrib and custom can make it
easier to keep track of the modules. enough to warrant mention here.
/profile - contributed and custom profiles.
/themes - contributed and custom (sub)themes
sites/[domain OR default]/{modules,themes} - Site specific modules and
themes can be moved into these directories to avoid them showing up on every
site.
sites/[domain OR default]/files - Site specific files tend to go here. This could
be files uploaded by users, such as images, but also includes the configuration,
active as well as staged config. The configuration is read and written by
Drupal, and should have the minimal amount of privileges required for the
webserver, and the only the webserver, to read and modify them.
33. /core/assets - Various external libraries used by Core. jQuery, etc.
/core/misc - Frontend libraries that Drupal Core depends on. (drupal.js, etc)
/core/includes - Functionality that is to low level to be modular. Such as the
module system itself.
/core/lib - Drupal Core classes.
/core/modules - Drupal Core modules.
/core/profiles - Drupal Core profiles. Empty at the time of writing.
/core/scripts - Various CLI scripts, mostly used by developers.
/core/tests - Drupal Core tests.
/core/themes - Drupal Core themes.
/core/vendor - Backend libraries that Drupal Core depends on. (Symfony,
Twig, etc)
34. • Caching is easy: it's merely storing the result of an expensive computation,
to save time the next time you need it.
• Cache invalidation is hard: if you fail to invalidate all the things that should
be invalidated, you end up with incorrect results
• If you invalidate too many things, your cache hit ratio is going to suffer, and
you'd be inefficiently using your caches. Invalidating only the affected things
is very hard.
Example
Problem
• That has served us well, but how are you — for example — after modifying
Node 42 going to clear all cache entries containing Node 42? In the Drupal 7
API, you can't. (Because any module might generate something that
depends on the data in Node 42, and the Cache API can't know what that
cache ID would be.)
Solution
To solve that problem, Drupal 8 introduced cache tags. Then any cache entry
tagged with node:42 would be invalidated whenever Node 42 was modified.
With cache tags, it is easier to identify multiple cache entries and invalidate
them later on.