As a web application, Magento 2’s web request processing flow is similar to all other web framework flows, but offers more extension points to third-party developers. In this session, we will walk through a web request path in the Magento 2 application, from index.php to browser JS application, and will look at extension points available on that path.
TYPO3 Flow 2.0 (T3CON13 San Francisco)Robert Lemke
Just one year after its 1.0 release, TYPO3 Flow (formerly known as FLOW3) raises the version number to introduce a couple of new major features. Flow, probably being the most advanced PHP application framework on the market, brings back the joy of development and is especially well suited for enterprise applications. In this session you’ll get a compact introduction into the feature set of Flow 2.0 and what's coming up in the next version.
Leverage patterns of large-scale JS – such as modules, publish-subscribe and delegation – to achieve extreme performance without sacrificing maintainability.
Ever wondered how to get rid of that spaghetti, single-filed JavaScript code? Wouldn't it be nice if you could write maintainable modules, easily test them, port them to different projects, handle its library dependencies, and have them decoupled from other modules?
In this talk, we'll see how using the AMD API and an event-driven design will help taming an application's JavaScript code and scaling it to the future and beyond.
Para desenvolver um site institucional simples ou um hotsite pequeno, não é preciso muito mais que um pouco de HTML, um ou dois arquivos de CSS, alguns arquivos de JavaScript, e um sistema de CMS. No entanto, à medida que a complexidade de um site aumenta, o código passa a se tornar cada vez mais extenso, complexo, difícil de ser organizado, e projeto acaba virando um grande "code spaghetti".
Para garantir que isso não aconteça, é necessário implementar uma estrutura sólida para o HTML, CSS e JavaScript, de modo que os componentes da aplicação funcionem independentemente e sejam facilmente mantidos e modificados. Nesta palestra, mostrei como elaborar uma arquitetura de front-end que sustente uma aplicação de larga escala.
TYPO3 Flow 2.0 (T3CON13 San Francisco)Robert Lemke
Just one year after its 1.0 release, TYPO3 Flow (formerly known as FLOW3) raises the version number to introduce a couple of new major features. Flow, probably being the most advanced PHP application framework on the market, brings back the joy of development and is especially well suited for enterprise applications. In this session you’ll get a compact introduction into the feature set of Flow 2.0 and what's coming up in the next version.
Leverage patterns of large-scale JS – such as modules, publish-subscribe and delegation – to achieve extreme performance without sacrificing maintainability.
Ever wondered how to get rid of that spaghetti, single-filed JavaScript code? Wouldn't it be nice if you could write maintainable modules, easily test them, port them to different projects, handle its library dependencies, and have them decoupled from other modules?
In this talk, we'll see how using the AMD API and an event-driven design will help taming an application's JavaScript code and scaling it to the future and beyond.
Para desenvolver um site institucional simples ou um hotsite pequeno, não é preciso muito mais que um pouco de HTML, um ou dois arquivos de CSS, alguns arquivos de JavaScript, e um sistema de CMS. No entanto, à medida que a complexidade de um site aumenta, o código passa a se tornar cada vez mais extenso, complexo, difícil de ser organizado, e projeto acaba virando um grande "code spaghetti".
Para garantir que isso não aconteça, é necessário implementar uma estrutura sólida para o HTML, CSS e JavaScript, de modo que os componentes da aplicação funcionem independentemente e sejam facilmente mantidos e modificados. Nesta palestra, mostrei como elaborar uma arquitetura de front-end que sustente uma aplicação de larga escala.
This course will give you the knowledge you need to properly and effectively start integrating jQuery, the popular JavaScript library, into your web development projects. Over the course of two days, you'll learn the fundamental concepts of JavaScript and jQuery and tackle real-world exercises to solidify your understanding of the language and the library. This class is aimed at beginning jQuery users, although intermediate users may also benefit from the more formalized introduction to the library this class will offer.
If you have used Facebook's React library, then you are familiar with the concept of application state. React components are, at their core (and as noted in the official documentation), simple state machines. This declarative approach to building a UI may take some adjusting to, but it ultimately simplifies kludgy imperative code into smaller, much more manageable pieces.
This pattern of manipulating state and responding to those changes can be implemented to great effect using the Symfony Event Dispatcher. This talk will step through this state-based approach to building an easily maintained and testable PHP application, tease out a few gotchas, and share real-world applications.
Come to this talk prepared to learn about the Doctrine PHP open source project. The Doctrine project has been around for over a decade and has evolved from database abstraction software that dates back to the PEAR days. The packages provided by the Doctrine project have been downloaded almost 500 million times from packagist. In this talk we will take you through how to get started with Doctrine and how to take advantage of some of the more advanced features.
In Ember.js, routes and templates dictate the architecture of your app. This presentation will talk about why this is, and what tools Ember provides to manage architectural complexity.
You’ve seen Kris’ open source libraries, but how does he tackle coding out an application? Walk through green fields with a Symfony expert as he takes his latest “next big thing” idea from the first line of code to a functional prototype. Learn design patterns and principles to guide your way in organizing your own code and take home some practical examples to kickstart your next project.
You've seen Kris' open source libraries, but how does he tackle coding out an application? Walk through green fields with a Symfony expert as he takes his latest “next big thing” idea from the first line of code to a functional prototype. Learn design patterns and principles to guide your way in organizing your own code and take home some practical examples to kickstart your next project.
This course will give you the knowledge you need to properly and effectively start integrating jQuery, the popular JavaScript library, into your web development projects. Over the course of two days, you'll learn the fundamental concepts of JavaScript and jQuery and tackle real-world exercises to solidify your understanding of the language and the library. This class is aimed at beginning jQuery users, although intermediate users may also benefit from the more formalized introduction to the library this class will offer.
If you have used Facebook's React library, then you are familiar with the concept of application state. React components are, at their core (and as noted in the official documentation), simple state machines. This declarative approach to building a UI may take some adjusting to, but it ultimately simplifies kludgy imperative code into smaller, much more manageable pieces.
This pattern of manipulating state and responding to those changes can be implemented to great effect using the Symfony Event Dispatcher. This talk will step through this state-based approach to building an easily maintained and testable PHP application, tease out a few gotchas, and share real-world applications.
Come to this talk prepared to learn about the Doctrine PHP open source project. The Doctrine project has been around for over a decade and has evolved from database abstraction software that dates back to the PEAR days. The packages provided by the Doctrine project have been downloaded almost 500 million times from packagist. In this talk we will take you through how to get started with Doctrine and how to take advantage of some of the more advanced features.
In Ember.js, routes and templates dictate the architecture of your app. This presentation will talk about why this is, and what tools Ember provides to manage architectural complexity.
You’ve seen Kris’ open source libraries, but how does he tackle coding out an application? Walk through green fields with a Symfony expert as he takes his latest “next big thing” idea from the first line of code to a functional prototype. Learn design patterns and principles to guide your way in organizing your own code and take home some practical examples to kickstart your next project.
You've seen Kris' open source libraries, but how does he tackle coding out an application? Walk through green fields with a Symfony expert as he takes his latest “next big thing” idea from the first line of code to a functional prototype. Learn design patterns and principles to guide your way in organizing your own code and take home some practical examples to kickstart your next project.
This talk represents the combined experience from several web development teams who have been using Symfony2 since months already to create high profile production applications. The aim is to give the audience real world advice on how to best leverage Symfony2, the current rough spots and how to work around them. Aside from covering how to implement functionality in Symfony2, this talk will also cover topics such as how to best integrate 3rd party bundles and where to find them as well as how to deploy the code and integrate into the entire server setup.
Building Lithium Apps (Like a Boss) was a workshop presented on the structure and philosophy of the Lithium framework and its applications, and how best to take advantage of them.
Refactoring, Agile Entwicklung, Continuous Integration – all diese für nachhaltigen Erfolg wichtigen Vorgehensweisen setzen Erfahrung mit Unit Testing voraus. Abseits von den üblichen "Bowling"-Beispielen möchten wir gerne einen Crashkurs inkl. Best Practices für das erfolgreiche Unit Testing durchführen. Anhand eines Beispielprojekts auf Basis des Zend Frameworks werden wir nach der Installation von PHPUnit auf allen Notebooks gemeinsam eine kleine Applikation aufbauen, die durchgehend Test-driven entwickelt wird.
Presentation for azPHP on setting up a new project using Zend_Tool. Also goes over creating basic modules, controllers, actions, models and layouts.
All code in the presentation has not necessarily been tested. Will update presentation when done.
Key Insights into Development Design Patterns for Magento 2 - Magento Live UKMax Pronko
I have had a chance to speak at Magento Live UK 2016 with topic "Key Insights into Development Design Patterns for Magento 2". Feel free to share, comment, provide feedback.
In the deck i highlight Development Design Patterns used in Magento 2. I also speak about Aspect Oriented Programming and how it affected Magento 2 implementation.
More about Magento 2 read at my blog: https://www.maxpronko.com/
First Steps in Drupal Code Driven DevelopmentNuvole
"First Steps in Code Driven Development" covers basic techniques and good practices. Presented during the "Developer Session" at Krimson office, Antwerp (BE), the 27th of May 2010.
Similar to Magento Live Australia 2016: Request Flow (20)
Career of the Software Engineer in Modern Open-Source e-Commerce CompanyVrann Tulika
Eugene will talk about the key components of the successful career in software engineering. This will cover various subjects: the landscape of modern IT business: fields, specializations of software; IT departments and roles in big companies; Passing the interview and being a successful employee; Specifics of e-commerce open-source software; Importance of the soft skills for career growth.
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/
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
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
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.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
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.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
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.
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
5. Entry Point
• Index.php or pub/index.php – web application
• Static.php – retrieve dynamically generated static files
• Get.php – retrieve media from database
• Cron.php – run commands by Cron
• bin/magento – command line tool
8. Bootstrap::initObjectManager
• We hate init* methods. M1 was full of them
• Loads initial configuration (config.php, env.php, di.xml)
• Loads etc/di.xml files from all modules (global configuration)
• Last point where we have valid init* methods
12. Application Areas
• Configuration scopes
• etc/<areaCode>/* in module folder
• Loaded on top of global configuration
• Admin, Frontend, Webapi_Rest, Webapi_Soap, Cron
19. Front Controller
public function dispatch(RequestInterface $request){
// …
foreach ($this->routerList as $router) {
$actionInstance = $router->match($request);
if ($actionInstance) {
$result = $actionInstance->execute();
break;
}
}
// …
return $result;
}
/lib/internal/Magento/Framework/App/FrontController.php
20. Routing
• Every area has own set of routers
• Important routers: standard for frontend & admin for admin
• Both configured in /etc/<areaCode>/routes.xml
• Cover 95% of cases (?)
23. Front Controller
public function dispatch(RequestInterface $request){
// …
foreach ($this->routerList as $router) {
$actionInstance = $router->match($request);
if ($actionInstance) {
$result = $actionInstance->execute();
break;
}
}
// …
return $result;
}
/lib/internal/Magento/Framework/App/FrontController.php
24. Action Controllers
• Path handlers
• Single method execute
• By convention located in Controller folder of a module
• Different rules for GET and POST
• Request object should not be passed further. Extract arguments and
pass them separately.
25. Action Controllers
class View extends MagentoFrameworkAppActionAction
{
// constructor and properties
public function execute()
{
// do something
$result = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$result->setPath('*/*/*');
// or
$result = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
return $result;
}
}
My/Module/Controller/Blog/Post/View.php
27. POST Action Controllers
• Do not render pages. Layout is forbidden
• Only place for application workflow management (redirect,
messages, session)
• All business logic should be delegated to Service Contracts
• Request object should not be passed further. Extract arguments and
pass them separately.
28. POST Action Controller
class Save extends MagentoFrameworkAppActionAction
{
public function execute()
{
$post = $this->postFactory->create();
$post->setTitle($this->request->getParam('title'));
$post->setText($this->request->getParam('text'));
$post = $this->postRepository->save($post);
$result = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$result->setPath(’blogs/post/view’, [’post_id' => $post->getId()]);
}
}
My/Module/Controller/Blog/Post/Save.php
29. Service Contracts
• Represent public API of a module
• Covered by Backwards Compatibility Policy
• Located Api folder of a module and marked with @api
• Expose procedural API (Service Interfaces) that communicate with
Data Transfer Objects (Data Interfaces)
31. Persistence
• Use Resource Models to Load/Save/Delete data
• Use Collections to load lists of data
• load, save, and delete on model are deprecated
32. POST Action Controller
class Save extends MagentoFrameworkAppActionAction
{
public function execute()
{
$post = $this->postFactory->create();
$post->setTitle($this->request->getParam('title'));
$post->setText($this->request->getParam('text'));
$post = $this->postRepository->save($post);
$result = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
$result->setPath(’blogs/post/view’, [’post_id' => $post->getId()]);
return $result;
}
}
My/Module/Controller/Blog/Post/Save.php
34. GET Action Controller
class View extends MagentoFrameworkAppActionAction
{
// constructor and properties
public function execute()
{
$result = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
return $result;
}
}
/app/code/My/Module/Controller/Blog/Post/View.php
35. GET Action Controllers
• Do not reference blocks directly. They may not exist on the page
• Do not pre-load models and put them to registry. Load what you
need from blocks.
• DO NOTHING in Action Controllers that respond to GET requests
and render pages (only return PageResult)
40. Blocks
• Do not reference other sibling and parent blocks
• Do not perform state-modifications
• Retrieve data from public services
• Do not pass Request object further, extract arguments, and pass
them
43. GET Action Controller
class View extends MagentoFrameworkAppActionAction
{
// constructor and properties
public function execute()
{
$result = $this->resultFactory->create(ResultFactory::TYPE_PAGE);
return $result;
}
}
/app/code/My/Module/Controller/Blog/Post/View.php
Changed to bin/mageno
Magento has multiple entrypoints
Depends on the client
Creates the instance of application
What is type check?
Initializes Object Manager
Init is not a good pattern, it encourages temporal coupling
What does it mean “Last point where we have valid init* methods?”
Creates application object using object manager
DI is already initialized; all the plugins and preferences will be picked up
Runs application
Load areas
Area defines scopes of configuration
Allows to configure frontend and backend differently
Area distinguishes different parts of application
Anything special about this screenshot?
- In order to separate the concerns, all custom logic applicable to all controllers should be added as plugins to the front controller
- This follows AOP approach
- Some logic might be applicable to POST only, like CSRF
Front controller invokes routing logic
Custom routes can be created
Most likely standard ones will only be needed
Admin routes takes into account “admin” part of the url
Configuration of the route which tells that blog part of url will invoke action controllers in My_Blog module
Request routing searches for action controller based on the request url
Once request is routed it means that action controller is found
Front controller invokes action controller
What is “Path handlers”?
Action Controller creates Response based on Request
We will talk more on types of responses later
This is ideal GET action controller
Layout defines which blocks are on the page requested by GET
Block are referenced by Layout object based on this declaration
Template is the place where most of the request processing logic happens on GET
Block should have just methods needed by the template to render
Block should not have generic methods to render itself. It should be injected with the helper classes instead
We are moving to direction where block is a generic class and all the functions are injected as dependencies
Block should not implement this logic by itself, it should delegate calls to more appropriate classes
Template renders information which block provides
Result is representation of HTTP response
Different Results can be created by Action controller
Action controller returns result
Application get result from the middleware and renders it