The document summarizes the Flex component lifecycle, which consists of three main phases: birth, life, and death. During the birth phase, components undergo construction, configuration, attachment, and initialization. The life phase involves invalidation, validation, and interaction. Invalidation occurs when properties change, while validation commits the changes during commitProperties(), measure(), and updateDisplayList(). The death phase handles detachment and garbage collection of components.
An updated version of our Adobe Flex 3 Component Lifecycle talk. I gave this presentation at CFUnited Express in Denver on 4/6/2009.
Brad Umbaugh and I gave the original in Nov. 2008 at 360 Flex San Jose. Brad Umbaugh wrote half of these slides.
The talk is introduction to OSGi specification and its implementations. It summarizes corner stones of OSGi (bundles, services, components) and describes a technical background of OSGi implementations on a simple example.
Talk given at JavaOne 2009 discussing how to build web applications using OSGi. The source for the demo found at http://github.com/mrdon/jforum-plugins/tree/master
Session Abstract: Enterprise Web applications tend to grow like weeds in monolithic complexity. OSGi, although more often associated with Java™ technology-based clients and application servers, can bring a new level of modularity, uptime, and stability that is needed with today's always-on hosted Web applications. OSGi gets really interesting when the pretty architecture diagrams meet the real world, because it consists of various deployment platforms, development environments, and application architectures. This presentation, for Java 2 Platform, Enterprise Edition (J2EE™ platform)-savvy architects and senior developers, provides a practical guide to the Web on OSGi, from integration approach to bundle development, to real-world code you can use today.
The session discusses
• What benefits OSGi brings to the J2EE platform
• Three integration strategies
• How to use Spring DM and Maven to ease development
• Lessons learned from Atlassian's recent OSGi deployment
• A production-ready example to use immediately
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
My talk about the life of JavaScript, from birth to today.
I went trough the demos and code examples very quickly, rather as a teaser to show how modern JavaScript development might look.
If you are interested in a deep dive into the topic of modern JavaScript development, HTML5, ES6, AngularJS, React, Gulp, Grunt etc, please consider my courses: http://www.ivorycode.com/#schulung
An updated version of our Adobe Flex 3 Component Lifecycle talk. I gave this presentation at CFUnited Express in Denver on 4/6/2009.
Brad Umbaugh and I gave the original in Nov. 2008 at 360 Flex San Jose. Brad Umbaugh wrote half of these slides.
The talk is introduction to OSGi specification and its implementations. It summarizes corner stones of OSGi (bundles, services, components) and describes a technical background of OSGi implementations on a simple example.
Talk given at JavaOne 2009 discussing how to build web applications using OSGi. The source for the demo found at http://github.com/mrdon/jforum-plugins/tree/master
Session Abstract: Enterprise Web applications tend to grow like weeds in monolithic complexity. OSGi, although more often associated with Java™ technology-based clients and application servers, can bring a new level of modularity, uptime, and stability that is needed with today's always-on hosted Web applications. OSGi gets really interesting when the pretty architecture diagrams meet the real world, because it consists of various deployment platforms, development environments, and application architectures. This presentation, for Java 2 Platform, Enterprise Edition (J2EE™ platform)-savvy architects and senior developers, provides a practical guide to the Web on OSGi, from integration approach to bundle development, to real-world code you can use today.
The session discusses
• What benefits OSGi brings to the J2EE platform
• Three integration strategies
• How to use Spring DM and Maven to ease development
• Lessons learned from Atlassian's recent OSGi deployment
• A production-ready example to use immediately
The curious Life of JavaScript - Talk at SI-SE 2015jbandi
My talk about the life of JavaScript, from birth to today.
I went trough the demos and code examples very quickly, rather as a teaser to show how modern JavaScript development might look.
If you are interested in a deep dive into the topic of modern JavaScript development, HTML5, ES6, AngularJS, React, Gulp, Grunt etc, please consider my courses: http://www.ivorycode.com/#schulung
Een case study van KNMP waarbij met Plone 4 en XDV de huisstijl is geïmplementeerd. Daarmee is KNMP een van de eerste organisaties in Nederland die met Plone 4 werkt.
Flex Building User Interface ComponentsAhmad Hamid
design user interface components in flex is just like any other language. This presentation provides some guidelines as to how such components should be design and implemented with performance in mind.
Salesforce lwc development workshops session #6Rahul Gawale
This is a series of sessions intended for developers who want to build components using the Lightning Web Component framework.
This session talks about:
Lifecycle Flow of LWC.
Lifecycle Hooks of LWC.
Invalidation Routines Pounded Into Your Craniumsakrirosenstrom
Slides from the FlexCamp Belgium event hosted on December 11 2008 in Antwerp. This presentation goes through the basics of the Flex Framework invalidation mechanism, a necessary tool for proper custom component development. Download the Source code from http://www.sakri.net/presentations/FlexCamp08_Belgium/InvalidationExamples.zip
Een case study van KNMP waarbij met Plone 4 en XDV de huisstijl is geïmplementeerd. Daarmee is KNMP een van de eerste organisaties in Nederland die met Plone 4 werkt.
Flex Building User Interface ComponentsAhmad Hamid
design user interface components in flex is just like any other language. This presentation provides some guidelines as to how such components should be design and implemented with performance in mind.
Salesforce lwc development workshops session #6Rahul Gawale
This is a series of sessions intended for developers who want to build components using the Lightning Web Component framework.
This session talks about:
Lifecycle Flow of LWC.
Lifecycle Hooks of LWC.
Invalidation Routines Pounded Into Your Craniumsakrirosenstrom
Slides from the FlexCamp Belgium event hosted on December 11 2008 in Antwerp. This presentation goes through the basics of the Flex Framework invalidation mechanism, a necessary tool for proper custom component development. Download the Source code from http://www.sakri.net/presentations/FlexCamp08_Belgium/InvalidationExamples.zip
Virtual events in C#: something went wrongPVS-Studio
Not so long ago I was working on a new C# diagnostic - V3119 - for the PVS-Studio static code analyzer. The function of this diagnostic is to detect potentially unsafe constructions in the source code of C#, related to the usage of virtual and overridden events. Let's try to sort out, what's wrong with virtual events in C# - the principle of this diagnostic, and why Microsoft doesn't recommend using virtual and overridden events.
Similar to Diving Deep with the Flex Component Life Cycle (20)
EffectiveUI's Ari Weissman (Lead Experience Architect) and Lys Maitland (Senior Experience Planner) spoke at Denver Startup Week 2016. Discussion description:
Test early, test often.
It’s a mantra that’s been proven successful time and again when it comes to innovation and design. So why aren’t you doing it? In the start-up world, when everything is moving so quickly, it can be easy to overlook or postpone collecting feedback from real people because of cost, time, or lack of preparation. Don’t let those things stop you. Valid data can be captured cheaply, quickly, and with half-finished products and strategies.
This talk will cover:
What is user testing and why is it important
How to plan for user testing
What are ways to make testing cheaper
What are ways to make testing quicker
How to test with different fidelities of concept and design
How to collect data more frequently
Opportunities for getting the whole team engaged
What to do with the insights/outcomes of research
EffectiveUI's Raschel Iarocci, Lead Experience Architect, spoke at Denver Startup Week 2016. Discussion description:
When a design tests poorly with usability participants it can feel pretty defeating — especially when it has tested well in the past. After this happens, your UX team may go through a thought process similar to grieving, first denying that feedback is valid, then perhaps experiencing anger, then progressing through bargaining and depression, to finally acceptance.
During her talk, Raschel shared contemporary strategies for dealing with each of these five stages, enabling the group to move past initial reactions and get down to the work of addressing the design challenges.
UX Design Process 101: Where to start with UXEffective
EffectiveUI's Ari Weissman, Lead Experience Architect, spoke at Denver Startup Week 2016. Discussion description:
You’ve probably heard about user experience, design thinking, and a host of other terminology for following a human-centered approach to product design, but where do you start? If you’re thinking about working with a UX agency for the first time or tackling design on your own, this session is for you. EffectiveUI lead experience architect Ari Weissman will cover the key things you need to know:
What UX is (and what it’s not)
The UX design process
Measuring and validating experience
Points of frequent failure and how to avoid them
Give Them What They Want: Discovering Customer Need with Wearable TechnologyEffective
Presented at Design Thinking for Banking and Financial Services 2015
Dennis Ganesh, mobile platform lead architect, TIAA-CREF
Dan Saltzman, VP of design and user experience, EffectiveUI
As financial services companies race to disrupt the marketplace in any way possible, wearables are an attractive investment opportunity (and for good reason). Wearables can create quite the quandary, though: rapid innovation is key in getting a digital product to market when it still has the ability to disrupt, but there’s tremendous risk in being first to market, only to deliver a product that fails to improve customer experience. So how do you innovate quickly enough to beat your competitors to market and deliver a delightful experience to your customers?
In this session, EffectiveUI and TIAA-CREF explain the model they used together for rapid innovation and prototyping to deliver based on customer needs. We cover these topics:
• Why did we do it?
• How did we do it?
• What did we create?
• What were the critical elements for collaboration?
• How can you generate a market-viable product idea and prototype it in one day?
Common Innovation Myths (World Usability Day)Effective
From Green Screens to Lone Genius: Common Innovation Myths. Presented by EffectiveUI’s Steve Fors and Art Chinda at BNY Mellon’s World Usability Day celebration on November 12, 2015. Dispelling innovation myths, what innovation really is, the process of innovation and how to avoid innovation pitfalls.
Introduction to UX provides an overview of user experience design including what it encompasses and how the process works, the goal and principles of UX design, how to measure and improve UX, and the role of a UX agency. Presented by Ari Weissman, lead experience architect at EffectiveUI.
2016 SXSW Measures for Justice Panel Picker PresentationEffective
UNMASKING THE CRIMINAL JUSTICE SYSTEM:
(2016 SXSW Panel Picker Submission)
The two women behind Measures for Justice and EffectiveUI discuss developing the first platform of its kind to simplify the complexities of criminal justice performance data, creating transparency and driving action.
EffectiveUI and Water For People teamed up again for a dramatic new take on the non-profit's reporting tool. To promote Water For People's mission of providing sustainable water to "Everyone Forever" the tool relies on data-driven design concepts and progressive visualization.
Getting into the Game: How EA Put User Research into PracticeEffective
Presented at Total Customer Experience, February 2015, by:
• Jordan Girman, group user experience director, EA
• Shane Johnston, lead experience planner, EffectiveUI
Personas and journey maps are becoming more commonplace these days, as companies realize the value of understanding their customers beyond their age, gender and income. Getting a clear picture of customers’ needs, goals, motivations and attitudes plays a critical role in designing products and solutions that resonate with your audience.
But what happens after the project is complete and the personas are delivered? In many cases, they may live in posters on the wall, or in a PowerPoint presentation in a file. How do companies make sure that their investment in this important research actually serves its purpose?
EA conducted a large ethnographic research project with user experience agency EffectiveUI, where 25 NHL and UFC gamers were observed playing their respective games and interviewed on expectations, perceptions and motivations. The result was a set of comprehensive persona profiles that clearly define EAs audiences for these specific games.
Through the lens of EA’s experience, this session will cover how to embark on a persona project within a large corporate culture, as well as how to keep personas alive beyond the deliverable and make them prevalent within the organization.
Scottrade and Understanding the Customer Journey: When Segmentation Isn’t EnoughEffective
Presented at Engagement & Experience Expo 2014 by:
• Gina Bhawalkar, assistant vice president of user experience and accessibility at Scottrade
• Lys Maitland, senior user experience designer at EffectiveUI
By nature, Scottrade, Inc., a leading investing services firm clearly focused on numbers, had ample data and information on its clients from a UX and marketing research standpoint. As the company worked to enhance its strategic vision for client experience and add new services and solutions, company leaders knew they needed to not only bring all of their customer research together, but also fill in some gaps to gain a deeper understanding and get a full picture of its audience – both current clients and potential clients they are looking to attract. Working in close collaboration with user experience agency EffectiveUI, Scottrade embarked on a comprehensive ethnographic study, interviewing 36 people in their own environments to uncover what trading and investing meant to their lives overall, how Scottrade fits into this, the tools they use, where they need guidance or help and how they feel along the way.
Scottrade came away with a better understanding of its clients and what they needed beyond what the company’s segmentation models provided. Scottrade is now actively working to turn what they learned into action and tailoring its tools around its audiences. This session will provide the following tips to customer experience professionals who also want to really know their customers:
• How to start the process of embarking on a large research project, including how to make sure stakeholders are on board
• How to combine ethnographic research with quantitative research for the best understanding
• How to bring participant stories from the research to life for team members who were not involved in the interviews
• How to effectively socialize personas and journey maps throughout an organization
• Using personas and journey maps to drive actual business decisions and initiatives
• Taking the next step in monitoring and addressing the customer pain points uncovered in the journey mapping process
A Blended Space for Heritage StorytellingEffective
Presented at the British 2014 HCI conference by Brian O’Keefe, lead experience architect
This presentation explores the role of Blending Theory as a framework to aid in design decisions while deploying mobile experiences for heritage storytelling. Blending Theory provides a structured way of thinking about how digital and physical spaces can be brought together to create new experiences in blended spaces. In this presentation, we describe the development of an app that aims to enhance the visitor experience to a heritage destination in New York State. We show how the blended spaces framework was used to guide the development of the app and provide evaluation data that highlights the effective UX that resulted. Heritage stories and augmented digital characters are used to guide a visitor from one point of interest to another, providing an engaging user experience.
Using Behavioral Modeling to Engage Customers Throughout the Decision-Making ...Effective
Presented at Integrated Marketing Week 2014
Richard Warnaka, manager of UX, Cabela's
Shane Johnston, lead experience planner, EffectiveUI
As retailers look to understand their customers, they often turn to tools like market segmentation and personas to better understand the different types of user groups within their target market. But this approach often overlooks the different stages a consumer goes through in making purchasing decisions.
Behavioral Modeling seeks to construct a universal representation of behavior: information is collected on the context, social structure, previous experience and emotion of a behavior.
This session explores why this approach was invaluable for Cabela’s, where – working together with EffectiveUI – the company uncovered the different stages its customers went through as they shopped. By understanding these various phases of decision-making, the company identified some new opportunities to provide meaningful engagement during the process to help guide customers’ decisions.
During the session, we will cover:
• How to conduct effective behavioral research
• Turning behavioral models into actionable design
• Key lessons learned throughout the process
Liferay and Water For People: From Data to InformationEffective
Presented by Steve Clement, senior Java developer, at Liferay Symposium 2013.
Water For People, an international nonprofit organization dedicated to supporting improved access to water and sanitation systems and services in developing countries, was looking for a way to track and hone the progress it is making toward solving the water and sanitation crisis via its programs.
EffectiveUI was enlisted to create this new platform – called Re-Imagine Reporting – and selected Liferay as the backbone. This session, led by Steve Clement, Sr. Java Developer at EffectiveUI, will demonstrate how his team innovated on Liferay to build a new and transparent way for Water For People to manage data, improve outcomes, and prove its efficacy to stakeholders. Topics will include data import via Documents and Media all the way through to the final visualization using AJAX IPC calls and structured content, focusing on how they leveraged Liferay to roll up the data from the lowest geographical level up to a global view.
Michael Salamon, User Experience Practice Lead for EffectiveUI, on the fundamentals of creating engaging user experiences, as presented at E2 Boston (June 2013).
UX is a combination of science and art, but it doesn't need to be as complicated as it seems. If you follow these rules, you can immediately improve the experience your users have with your product.
Watch the presentation on our YouTube channel:
http://www.slideshare.net/effectiveui/making-mobile-meaningful-ny-2013
Presented by Anthony Franco, president and founder
The art of creating mobile experiences that gain adoption and integrate with your digital ecosystem.
• How to develop a mobile strategy that integrates business, user and technology needs
• What mobile insights Forrester Research and EffectiveUI uncovered in their upcoming Technology Adoption Profile
• How to leverage your existing technology platforms for mobile development, while addressing security issues and other constraints
• What questions to ask and answer to arrive at the right mobile feature set for your users
• What other companies have done wrong, and right, to encourage mobile adoption
Experience Driven Development - Future Insights Live 2013Effective
"Experience-Driven Development & Contract First Development" presented by EffectiveUI's Ryan McGinty and SuAnne Hall at Future Insights Live 2013.
Experience-Driven Development is a user-centered, top-down development methodology that puts the needs of the user first, even above system needs. When developing solutions from scratch and using this approach, the layers of the stack are designed from the user interface backward to the persistence layer. However, in the real-world, you often aren't starting from scratch and have to develop against pre-existing solutions and take a Contract-First approach.
This session provides tools and tips for both approaches, specifically how to meet the needs of the user as well as prevent your project and budget from turning into a raging inferno.
You'll learn:
- How Contract-First Development can reconcile discrepancies between the user's needs and system capabilities.
- How to decompose a wireframe into software contracts.
- How to be part of the experience design solution rather than saying, "No, we can't get there from here".
- How to use modern Javascript Frameworks, like Backbone, to build amazing experiences while adhering to software contracts.
EffectiveUI’s team on the ground provides a daily recap of SXSW Interactive 2013 in Austin, March 7-11, 2013. Sunday featured a special event at SXSW, GoodxGlobal, dedicated to the local and global power of social good, technology and entrepreneurship. Here's EffectiveUI's recap of one of the GoodxGlobal panels, "Tech Powering Effectiveness," with Rebecca Flavin (EffectiveUI), Ned Breslin (Water For People), and Eric Stowe (Splash).
The Human Interface: Making UX An Integral Part of Your Technology Buying Dec...Effective
Presented by Anthony Franco, president and co-founder at Forrester's Application Development & Delivery Forum 2012
IT and marketing departments often collide when it comes building solutions, but in the end it’s the technology evaluation that can have the greatest impact on user experience. Through real-world examples and best practices, Anthony Franco, president, EffectiveUI, shares the tools and know-how needed to evaluate technology using UX-focused criteria.
This session will answer the following questions:
• What are the UX factors I need to consider when evaluating technology solutions?
• How can I best communicate tech requirements for UX and functionality of a solution to my marketing counterparts?
• How can a focus on UX up front save time and budget down the road?
How to Get CNIC Information System with Paksim Ga.pptxdanishmna97
Pakdata Cf is a groundbreaking system designed to streamline and facilitate access to CNIC information. This innovative platform leverages advanced technology to provide users with efficient and secure access to their CNIC details.
Dr. Sean Tan, Head of Data Science, Changi Airport Group
Discover how Changi Airport Group (CAG) leverages graph technologies and generative AI to revolutionize their search capabilities. This session delves into the unique search needs of CAG’s diverse passengers and customers, showcasing how graph data structures enhance the accuracy and relevance of AI-generated search results, mitigating the risk of “hallucinations” and improving the overall customer journey.
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofsAlex Pruden
This paper presents Reef, a system for generating publicly verifiable succinct non-interactive zero-knowledge proofs that a committed document matches or does not match a regular expression. We describe applications such as proving the strength of passwords, the provenance of email despite redactions, the validity of oblivious DNS queries, and the existence of mutations in DNA. Reef supports the Perl Compatible Regular Expression syntax, including wildcards, alternation, ranges, capture groups, Kleene star, negations, and lookarounds. Reef introduces a new type of automata, Skipping Alternating Finite Automata (SAFA), that skips irrelevant parts of a document when producing proofs without undermining soundness, and instantiates SAFA with a lookup argument. Our experimental evaluation confirms that Reef can generate proofs for documents with 32M characters; the proofs are small and cheap to verify (under a second).
Paper: https://eprint.iacr.org/2023/1886
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/
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!SOFTTECHHUB
As the digital landscape continually evolves, operating systems play a critical role in shaping user experiences and productivity. The launch of Nitrux Linux 3.5.0 marks a significant milestone, offering a robust alternative to traditional systems such as Windows 11. This article delves into the essence of Nitrux Linux 3.5.0, exploring its unique features, advantages, and how it stands as a compelling choice for both casual users and tech enthusiasts.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
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.
Pushing the limits of ePRTC: 100ns holdover for 100 daysAdtran
At WSTS 2024, Alon Stern explored the topic of parametric holdover and explained how recent research findings can be implemented in real-world PNT networks to achieve 100 nanoseconds of accuracy for up to 100 days.
UiPath Test Automation using UiPath Test Suite series, part 6DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 6. In this session, we will cover Test Automation with generative AI and Open AI.
UiPath Test Automation with generative AI and Open AI webinar offers an in-depth exploration of leveraging cutting-edge technologies for test automation within the UiPath platform. Attendees will delve into the integration of generative AI, a test automation solution, with Open AI advanced natural language processing capabilities.
Throughout the session, participants will discover how this synergy empowers testers to automate repetitive tasks, enhance testing accuracy, and expedite the software testing life cycle. Topics covered include the seamless integration process, practical use cases, and the benefits of harnessing AI-driven automation for UiPath testing initiatives. By attending this webinar, testers, and automation professionals can gain valuable insights into harnessing the power of AI to optimize their test automation workflows within the UiPath ecosystem, ultimately driving efficiency and quality in software development processes.
What will you get from this session?
1. Insights into integrating generative AI.
2. Understanding how this integration enhances test automation within the UiPath platform
3. Practical demonstrations
4. Exploration of real-world use cases illustrating the benefits of AI-driven test automation for UiPath
Topics covered:
What is generative AI
Test Automation with generative AI and Open AI.
UiPath integration with generative AI
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Climate Impact of Software Testing at Nordic Testing DaysKari Kakkonen
My slides at Nordic Testing Days 6.6.2024
Climate impact / sustainability of software testing discussed on the talk. ICT and testing must carry their part of global responsibility to help with the climat warming. We can minimize the carbon footprint but we can also have a carbon handprint, a positive impact on the climate. Quality characteristics can be added with sustainability, and then measured continuously. Test environments can be used less, and in smaller scale and on demand. Test techniques can be used in optimizing or minimizing number of tests. Test automation can be used to speed up testing.
GridMate - End to end testing is a critical piece to ensure quality and avoid...ThomasParaiso2
End to end testing is a critical piece to ensure quality and avoid regressions. In this session, we share our journey building an E2E testing pipeline for GridMate components (LWC and Aura) using Cypress, JSForce, FakerJS…
Maruthi Prithivirajan, Head of ASEAN & IN Solution Architecture, Neo4j
Get an inside look at the latest Neo4j innovations that enable relationship-driven intelligence at scale. Learn more about the newest cloud integrations and product enhancements that make Neo4j an essential choice for developers building apps with interconnected data and generative AI.
Large Language Model (LLM) and it’s Geospatial Applications
Diving Deep with the Flex Component Life Cycle
1. Diving Deep with the Flex
Component Lifecycle
Joshua Jamison
EffectiveUI
www.effectiveui.com
January 30, 2009
2. Who am I?
‣ Joshua Jamison
• Software Architect @ EffectiveUI
3. Who are you (hopefully)?
‣ Beginner to intermediate level developers
‣ Anyone who doesn’t currently understand
the lifecycle
‣ Anyone who wants a good review of the
basics
5. Flex Component Lifecycle
‣ What is it?
• The way the framework interacts with
every Flex component
• A set of methods the framework calls to
instantiate, control, and destroy
components
• Methods that make the most of the
elastic racetrack
6. Elastic Racetrack: introduction
image courtesy of Ted Patrick
‣ Flex component lifecycle is built on this
frame model
‣ More on this later
7. A frame in AS3
image courtesy of Sean Christmann
8. Phases of the Lifecycle
‣ 3 Main Phases:
‣ BIRTH:
• construction, con guration,
attachment, initialization
‣ LIFE:
• invalidation, validation, interaction
‣ DEATH:
• detachment, garbage collection
10. Construction
Birth
construction
con guration
attachment
initialization
Life
Death
11. What is a constructor?
‣ A function called to instantiate (create in
memory) a new instance of a class
Birth
construction
con guration
attachment
initialization
Life
Death
12. How is a constructor invoked?
Actionscript:
var theLabel : Label = new Label();
MXML:
<mx:Label id="theLabel"/>
Birth
construction
con guration
attachment
initialization
Life
Death
13. What does a constructor have access to?
‣ Properties on the class
‣ Methods on the class
‣ Children have not yet been created!
Birth
construction
con guration
attachment
initialization
Life
Death
14. What does an ActionScript3
constructor look like?
public function ComponentName()
{
super();
//blah blah blah
}
‣ No required arguments (if it will be used in
MXML); zero, or all optional
‣ Only one per class (no overloading!)
‣ No return type
Birth ‣ Must be public
construction
con guration ‣ Calls super() to invoke superclass constructor; if
attachment
initialization
you don’t, the compiler will!
Life
Death
15. What does an MXML constructor
look like?
‣ No need to de ne one. In fact, if you try
to put one in an <mx:Script> block, you’ll
get an error.
‣ Why? Remember: MXML = Actionscript. A
constructor is created by the compiler in
the Actionscript generated from the
MXML.
Birth
‣ Specify “-keep” in the Flex Builder
construction
con guration
compiler arguments and look at the
attachment generated code to verify this.
initialization
Life
Death
16. What should a constructor do?
‣ Not much.
Since the component’s
children have not yet been created, there’s
not much that can be done.
‣ There are speci c methods (such as
createChildren) that should be used for
most of the things you’d be tempted to
put in a constructor.
Birth
‣ A good place to add event listeners to the
construction
con guration
object.
attachment
initialization
Life
Death
17. Don’t create or attach children in
the constructor
‣ It’s best to delay the cost of createChildren
calls for added children until it’s necessary
Birth
construction
con guration
attachment
initialization
Life
Death
18. Con guration
Birth
construction
con guration
attachment
initialization
Life
Death
19. Con guration
‣ The process of assigning values to
properties on objects
‣ In MXML, properties are assigned in this
phase, before components are attached or
initialized
<local:SampleChild property1="value!"/>
Birth
construction
con guration
attachment
initialization
Life
Death
20. Hooray: Sample code!
<mx:Application ...>
...
<local:SampleChild property1="value!"/>
</mx:Application>
Output:
SampleChild constructor
Birth SampleChild.property1 setter
construction Adding child SampleChild4
con guration
attachment
initialization
Life
Death
21. Con guration and Containers
‣ Containers must not expect their children
have to be instantiated when properties
are set.
<mx:Application ...>
<local:SampleContainer property1="value!">
<local:SampleChild property1="value!"/>
</local:SampleContainer>
</mx:Application>
SampleContainer constructor
Birth
construction SampleContainer.property1 setter
con guration SampleChild constructor
attachment SampleChild.property1 setter
initialization
Life
Death
22. Con guration Optimization
‣ To avoid performance bottlenecks, make
your setters fast and defer any real work
until validation
‣ We’ll talk more about deferment in the
validation / invalidation section
Birth
construction
con guration
attachment
initialization
Life
Death
23. Attachment
Birth
construction
con guration
attachment
initialization
Life
Death
24. What is attachment?
‣ Adding a component to the display list
(addChild, addChildAt, MXML declaration)
‣ The component lifecycle is stalled after
con guration until attachment occurs.
Birth
construction
con guration
attachment
initialization
Life
Death
25. Consider this component:
public class A extends UIComponent
{
public function A() {
(It traces all of its methods.)
trace( "CONSTRUCTOR" );
super();
}
override protected function createChildren() : void {
trace( "CREATECHILDREN" );
super.createChildren();
}
override protected function measure() : void {
trace( "MEASURE" );
super.measure();
}
override protected function updateDisplayList(width:Number, height:Number) : void {
trace( "UPDATEDISPLAYLIST" );
super.updateDisplayList(width,height);
}
override protected function commitProperties():void {
trace( "COMMITPROPERTIES" );
super.commitProperties();
}
26. And this application:
<mx:Application ...>
<mx:Script>
<![CDATA[
override protected function createChildren() : void {
super.createChildren();
var a : A = new A();
}
]]>
</mx:Script>
</mx:Application>
Output: CONSTRUCTOR
‣ Without attachment, the rest of the lifecycle
doesn’t happen.
27. But what about this application?
<mx:Application ...>
<mx:Script>
<![CDATA[
override protected function createChildren() : void {
super.createChildren();
var a : A = new A();
this.addChild( a );
}
]]>
</mx:Script>
</mx:Application> Output: CONSTRUCTOR
CREATECHILDREN
COMMITPROPERTIES
MEASURE
UPDATEDISPLAYLIST
‣ Moral of the story: don’t add components to the
stage until you need them.
28. Initialization
Birth
construction
con guration
attachment
initialization
Life
Death
29. Initialization
‣ 2 phases, 3 events:
1. ‘preInitialize’ dispatched
Create 2. createChildren(); called
3. ‘initialize’ dispatched
Validate 4. rst validation pass occurs
5. ‘creationComplete’ dispatched
Birth
construction
con guration
attachment
initialization
Life
Death
30. createChildren()
‣ MXML uses the createChildren() method to add
children to containers
‣ Override this method to add children using AS
• Follow MXML’s creation strategy: create,
con gure, attach
override protected function createChildren():void
{
...
create textField = new UITextField();
textField.enabled = enabled;
con gure textField.ignorePadding = true;
textField.addEventListener("textFieldStyleChange",
textField_textFieldStyleChangeHandler);
...
...
attach }
addChild(DisplayObject(textField));
31. rst validation pass
‣ Invalidation is not part of initialization -
only Validation
‣ Validation consists of 3 methods:
• commitProperties()
• measure()
• updateDisplayList()
‣ more on these later
Birth
construction
con guration
attachment
initialization
Life
Death
34. Invalidation / Validation cycle
‣ Flex imposes deferred validation on the
Flash API
• goal: defer screen updates until all
properties have been set
‣ 3 main method pairs to be aware of:
• invalidateProperties() ->
commitProperties()
• invalidateSize() -> measure()
• invalidateDisplayList() ->
updateDisplayList()
36. Deferment
‣ Deferment is the central concept to
understand in the component Life-cycle
‣ Use private variables and boolean ags to
defer setting any render-related
properties until the proper validation
method
37. Text-book example
Bad:
public function set text(value:String):void
{
myLabel.text = value;
// Possible Error! during first config phase,
// myLabel might not exist!
}
Good:
private var _text:String = "";
public function set text(value:String):void override protected function
{ commitProperties():void{
textSet = true; {
_text = value; if(textChanged){
textChanged = true; myLabel.text = _text;
textChanged = false;
invalidateProperties(); }
invalidateSize(); super.commitProperties();
invalidateDisplayList(); }
}
38. The Elastic Racetrack revisited
image courtesy of Sean Christmann
Invalidation occurs here
39. Invalidation methods
‣ invalidateProperties()
• Any property changes
‣ invalidateSize()
• Changes to width or height
‣ invalidateDisplayList()
• Changes to child component size or
position
Birth
Life
invalidation
validation
interaction
Death
40. Invalidation example 1
<mx:Application>
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
[Bindable]
public var arr : ArrayCollection = new ArrayCollection();
public function onClick() : void {
var c : int = 0;
while( c++ < 20 ) {
arr.addItem( c );
}
}
]]>
</mx:Script>
<mx:VBox>
<mx:Button label="Click me!" click="onClick()"/>
<test:BadList id="theList" dataProvider="{arr}"/>
</mx:VBox>
</mx:Application>
41. Invalidation example 2
public class BadList extends VBox
{
private var _dataProvider : ArrayCollection;
public function set dataProvider( arr : ArrayCollection ) : void {
this._dataProvider = arr;
arr.addEventListener( CollectionEvent.COLLECTION_CHANGE,
dataProviderChangeHandler );
}
private function dataProviderChangeHandler( e : Event ) : void {
this.removeAllChildren();
for each( var n : Number in this._dataProvider ) {
var l : Label = new Label();
l.text = n.toString();
this.addChild( l );
}
}
public function BadList() {}
}
Result: dataProviderChangeHandler called 20 times
42. Invalidation example 3
public class GoodList extends VBox
{
private var _dataProvider : ArrayCollection;
private var _dataProviderChanged : Boolean = false;
public function set dataProvider( arr : ArrayCollection ) : void {
this._dataProvider = arr;
arr.addEventListener( CollectionEvent.COLLECTION_CHANGE,
dataProviderChangeHandler );
this._dataProviderChanged = true;
this.invalidateProperties();
}
override protected function commitProperties():void {
super.commitProperties();
if( this._dataProviderChanged ) {
this.removeAllChildren();
for each( var n : Number in this._dataProvider ) {
var l : Label = new Label();
l.text = n.toString(); Result: commitProperties
this.addChild( l );
called only twice (once
}
this._dataProviderChanged = false; during initialization)
}
}
private function dataProviderChangeHandler( e : Event ) : void {
this._dataProviderChanged = true;
this.invalidateProperties();
}
public function GoodList() {}
}
45. Validation
‣ Apply the changes deferred during
invalidation
‣ Update all visual aspects of the
application in preparation for the render
phase
‣ 3 methods:
• commitProperties()
• measure()
Birth
Life • updateDisplayList()
invalidation
validation
interaction
Death
46. commitProperties()
‣ Ely says: “Calculate and commit the effects
of changes to properties and underlying
data.”
‣ Invoked rst - immediately before
measurement and layout
Birth
Life
invalidation
validation
interaction
Death
47. commitProperties() cont.
‣ ALL changes based on property and data
events go here
‣ Even creating and destroying children, so
long as they’re based on changes to
properties or underlying data
‣ Example: any list based component with
empty renderers on the screen
Birth
Life
invalidation
validation
interaction
Death
48. measure()
‣ Component calculates its preferred
(“default”) and minimum proportions
based on content, layout rules,
constraints.
‣ Measure is called bottom up - lowest
children rst
‣ Caused by “invalidateSize()”
‣ NEVER called for explicitly sized
Birth
Life components
invalidation
validation
interaction
Death
49. overriding measure()
‣ Used for dynamic layout containers (VBox,
etc.)
‣ Use getExplicitOrMeasuredWidth() (or
height) to get child proportions
‣ ALWAYS called during initialization
‣ Call super.measure() rst!
‣ Set measuredHeight, measuredWidth for
Birth the default values; measuredMinHeight
Life
invalidation
and measuredMinWidth for the minimum.
validation
interaction
Death
50. measure() cont.
‣ Not reliable - Framework optimizes away
any calls to measure it deems
“unecessary”
Birth
Life
invalidation
validation
interaction
Death
51. updateDisplayList()
‣ All drawing and layout code goes here,
making this the core method for all
container objects
‣ Caused by invalidateDisplayList();
‣ Concerned with repositioning and
resizing children
‣ updateDisplayList() is called top-down
Birth
Life
invalidation
validation
interaction
Death
52. Overriding updateDisplayList()
‣ Usually call super.updateDisplayList() rst
• super() is optional - don’t call it if you’re
overriding everything it does
‣ Size and lay out children using move(x,y)
and setActualSize(w,h) if possible
• I never have good luck with
setActualSize()
Birth
Life
invalidation
validation
interaction
Death
53. Elastic Racetrack cont.
‣ User Actions
• Dispatch invalidation events
• Interact with any non-validation events
from this frame (mouse movements,
timers, etc.)
54. Elastic Racetrack Cont.
‣ Invalidate Action
• Process all validation calls
‣ Render Action
• Do the heavy lifting - actually draw on
the screen
57. How do objects know when
something happens?
‣ Events: objects passed around when
anything interesting goes on (clicks,
moves, changes, timers...)
‣ If something happens to a component, it
“ res” or “dispatches” the event
‣ If another component wants to know
when something happens, it “listens” for
events
Birth
Life ‣ Event-based architecture is loosely-
invalidation
validation coupled
interaction
Death
58. Bene ts of Loosely-Coupled
Architectures
‣ Everything becomes more reusable
‣ Components don’t have to know anything
about the components in which they’re
used
Birth
Life
invalidation
validation
interaction
Death
59. Who can dispatch events?
‣ Subclasses of EventDispatcher
• EventDispatcher inherits directly from
Object
‣ Simply call dispatchEvent(event) to re off
an event when something happens
Birth
Life
invalidation
validation
interaction
Death
60. How to tell events apart?
‣ Event class
• Different classes allow for customized
payloads
‣ “type” eld: a constant
Birth
Life
invalidation
validation
interaction
Death
61. Common Events
‣ Event.CHANGE
‣ MouseEvent.CLICK
‣ FlexEvent.CREATION_COMPLETE
‣ Event.RESIZE
‣ MouseEvent.ROLL_OUT
Birth
Life
invalidation
validation
interaction
Death
62. Handling Events
‣ <mx:Button id=”theButton”
click=”callThisFunction(event)”/>
‣ theButton.addEventListener( MouseEvent
.CLICK, callThisFunction )
Birth
Life
invalidation
validation
interaction
Death
63. Event Propagation
‣ Three phases: Capturing, Targeting, Bubbling
Application Application
Capturing Bubbling
Phase Phase
Target
Targeting
Birth Phase
Life
invalidation
validation
interaction
Death
65. Event Propagation
----------------------------------------------------------
TARGET: button
CURRENT TARGET: eventTest
PHASE: CAPTURE
----------------------------------------------------------
TARGET: button
CURRENT TARGET: outer
PHASE: CAPTURE
----------------------------------------------------------
TARGET: button
CURRENT TARGET: inner
PHASE: CAPTURE
----------------------------------------------------------
TARGET: button
CURRENT TARGET: button
PHASE: TARGET
----------------------------------------------------------
TARGET: button
CURRENT TARGET: inner
PHASE: BUBBLE
----------------------------------------------------------
TARGET: button
CURRENT TARGET: outer
PHASE: BUBBLE
----------------------------------------------------------
Birth TARGET: button
CURRENT TARGET: eventTest
Life
PHASE: BUBBLE
invalidation
validation
interaction
Death
66. Stopping events from propagating
‣ stopPropagation() : Prevents processing
of any event listeners in nodes
subsequent to the current node in the
event ow
‣ stopImmediatePropagation() : Prevents
processing of any event listeners in the
current node and any subsequent nodes
in the event ow
Birth
Life
invalidation
validation
interaction
Death
67. target vs. currentTarget
‣ target: the object that dispatched the
event (doesn’t change)
‣ currentTarget: the object who is currently
being checked for speci c event listeners
(changes)
Birth
Life
invalidation
validation
interaction
Death
68. Dispatching events from custom
components
‣ MXML:
<mx:Metadata>
[Event(name="atePizza", type="flash.events.JoshEvent")]
</mx:Metadata>
‣ Actionscript:
[Event(name="atePizza", type="flash.events.JoshEvent")]
public class MyComponent extends UIComponent
{
...
}
Birth
Life
invalidation
validation
interaction
Death
71. Detachment
‣ “Detachment” refers to the process of
removing a child from the display list
‣ These children can be re-parented
(brought back to life) or abandoned to die
‣ Abandoned components don’t get
validation calls and aren’t drawn
‣ If an abandoned component has no more
Birth
active references, it *should* be garbage-
Life
Death
collected
detachment
garbage
collection
72. Detachment cont.
‣ Re-parenting isn’t cheap, but it’s cheaper
than re-creating the same component
twice
‣ Children do not need to be removed from
their parent before being re-parented, but
always should be
‣ Consider hiding rather than removing
• set visible and includeInLayout to false
Birth
Life
Death
detachment
garbage
collection
74. Garbage Collection
‣ The process by which memory is returned
to the system
‣ Only objects with no remaining references
to them will be gc’d
• Set references to detached children to
“null” to mark them for GC
‣ Talk to Grant Skinner about forcing GC
Birth • http://gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html
Life
Death
detachment
garbage
collection
75. Conclusion
‣ Defer, Defer, DEFER!
‣ Use validation methods correctly
‣ Remember the elastic racetrack
76. References
‣ Ely Green eld: “Building a Flex Component”
• http://www.on ex.org/ACDS/
BuildingAFlexComponent.pdf
‣ Cha c Kazoun, Joey Lott: “Programming Flex 2” by
O’Reilly
• http://oreilly.com/catalog/9780596526894/
‣ Colin Moock: “Essential Actionscript 3.0” by O’Reilly
• http://oreilly.com/catalog/9780596526948/
index.html