No matter what level of development we are at in our careers we all face a daily battle to write good code for ourselves and others, deliver finished applications fast to satisfy business, and ensure everything is tested to prevent end-user fails.
In this session we will discuss what clean application development is, and how it can help us win those battles. It will provide practical and usable examples and tools to take with you, integrate into your workflow, and continue to grow into good habits.
(Topics: Version control, refactoring, coding standards, frameworks, architecture, automation, time management, and more.)
No matter what level of development we are at in our careers we all face a daily battle to write good code for ourselves and others, deliver finished applications fast to satisfy business, and ensure everything is tested to prevent end-user fails. In this talk we will discuss what “clean application development” is, and how it can help us win those battles. The talk will provide practical and usable examples to take with you, integrate into your workflow, and continue to grow into good habits.
STX Next - Scrum Development Process OverviewSTX Next
An overview of Software Development Process at STX Next presenting basic SCRUM ceremonies and workflows. To learn more about STX Next visit https://stxnext.com
Automated testing overview discusses the importance of software testing and automated testing. It defines software testing as verifying that software meets requirements and works as expected. The document covers different types of testing and why automated testing is needed to reduce costs, protect reputation, and address difficulties in testing. It provides examples of unit testing simple objects, objects with dependencies, and user interfaces to illustrate how to implement automated tests.
The benefit of sneezing code into an editor vs clean codeDave Hulbert
Balancing technical debt and getting things done is one of the hardest problems we have. When should we write beautiful, elegant, clean code and when should we just hammer away blindly at the keyboard until it's done? This talk goes in to why this balance is so difficult and covers everything from estimations to refactoring and testing, with a focus on real world PHP apps.
Introduction to the fundamentals of eXtreme programming (XP). XP is a software development approach which stresses on improving software quality and respond according to changing business requirements.
The document provides an overview of agile software development methods. It discusses the history and principles of agile development, including the Agile Manifesto. Specific agile methods like Scrum, XP, RAD, TDD, Crystal and Kanban are covered. For Scrum, it describes the roles of Product Owner, Scrum Master and Development Team. It also explains Scrum events like Sprint Planning, Daily Scrums, Sprint Review and Retrospective. The document aims to give the reader a brief introduction to common agile concepts and practices.
Agile, eXtreme Programming (XP), and software prototyping are approaches to software development. Agile focuses on individuals, interactions, working software, and responding to change over processes, tools, documentation, and plans. XP uses pair programming, continuous integration, refactoring, and frequent releases. It also emphasizes shared understanding. Software prototyping identifies requirements early, gets users involved, and enhances or discards prototypes to reduce time and costs and ensure user satisfaction. Different methodologies work best depending on project size and needs.
The document discusses the need for more emphasis on training software developers as individual "craftsmen" through the use of closed-loop personal quality systems and metrics for continuous self-improvement. It argues that while many methodologies focus on the team and organizational level, making each developer a "craftsman" through education and process would improve foundational software development skills. The ideal solution proposed is a formal process like Watts Humphrey's Personal Software Process that guides developers from apprentice to journeyman and craftsman levels of expertise.
No matter what level of development we are at in our careers we all face a daily battle to write good code for ourselves and others, deliver finished applications fast to satisfy business, and ensure everything is tested to prevent end-user fails. In this talk we will discuss what “clean application development” is, and how it can help us win those battles. The talk will provide practical and usable examples to take with you, integrate into your workflow, and continue to grow into good habits.
STX Next - Scrum Development Process OverviewSTX Next
An overview of Software Development Process at STX Next presenting basic SCRUM ceremonies and workflows. To learn more about STX Next visit https://stxnext.com
Automated testing overview discusses the importance of software testing and automated testing. It defines software testing as verifying that software meets requirements and works as expected. The document covers different types of testing and why automated testing is needed to reduce costs, protect reputation, and address difficulties in testing. It provides examples of unit testing simple objects, objects with dependencies, and user interfaces to illustrate how to implement automated tests.
The benefit of sneezing code into an editor vs clean codeDave Hulbert
Balancing technical debt and getting things done is one of the hardest problems we have. When should we write beautiful, elegant, clean code and when should we just hammer away blindly at the keyboard until it's done? This talk goes in to why this balance is so difficult and covers everything from estimations to refactoring and testing, with a focus on real world PHP apps.
Introduction to the fundamentals of eXtreme programming (XP). XP is a software development approach which stresses on improving software quality and respond according to changing business requirements.
The document provides an overview of agile software development methods. It discusses the history and principles of agile development, including the Agile Manifesto. Specific agile methods like Scrum, XP, RAD, TDD, Crystal and Kanban are covered. For Scrum, it describes the roles of Product Owner, Scrum Master and Development Team. It also explains Scrum events like Sprint Planning, Daily Scrums, Sprint Review and Retrospective. The document aims to give the reader a brief introduction to common agile concepts and practices.
Agile, eXtreme Programming (XP), and software prototyping are approaches to software development. Agile focuses on individuals, interactions, working software, and responding to change over processes, tools, documentation, and plans. XP uses pair programming, continuous integration, refactoring, and frequent releases. It also emphasizes shared understanding. Software prototyping identifies requirements early, gets users involved, and enhances or discards prototypes to reduce time and costs and ensure user satisfaction. Different methodologies work best depending on project size and needs.
The document discusses the need for more emphasis on training software developers as individual "craftsmen" through the use of closed-loop personal quality systems and metrics for continuous self-improvement. It argues that while many methodologies focus on the team and organizational level, making each developer a "craftsman" through education and process would improve foundational software development skills. The ideal solution proposed is a formal process like Watts Humphrey's Personal Software Process that guides developers from apprentice to journeyman and craftsman levels of expertise.
Foreo Drives Millions of Dollars of Revenue During the Holiday Seasons with T...Tag1 Consulting, Inc.
Like most e-commerce retailers, FOREO - a Swedish multi-national beauty brand with oral and skin care products such as the popular and iconic LUNA facial cleanser - needs to massively scale applications and infrastructure to handle mission-critical events. Black Friday, Cyber Monday, and Singles Day in China drive record sales and revenue for the company, and FOREO's systems must be ready to support the enormous spikes in traffic seen during these events.
Millions of dollars are at stake when e-commerce systems go down, or even slow down, during major sales events, and failure can have a material impact on a company's bottom line. Tag1 Consulting, world leading experts in performance and scalability, will cover the tools, techniques, and processes used to ready applications and infrastructures for massive traffic spikes and surges in payment transactions.
Viewers of this presentation will gain actionable insight on how to load test and performance tune systems through real world examples. We will also cover best practices to ensure your success during high-traffic events including advanced monitoring and risk mitigation strategies. And to help ensure your applications remain performant as they evolve, we will discuss code reviews and performance testing as part of continuous integration systems, as well as other approaches.
This talk is geared towards technical leaders charged with managing enterprise applications, but business stakeholders are encouraged to attend and will gain valuable insights. Performance tuning engineers will be on hand to answer in-depth technical questions after the talk.
A video recording of the talk based on this presentation is available: https://events.drupal.org/seattle2019/sessions/foreo-scaling-applications-mission-critical-sales
Presentation (animated) on Agilve vs Iterative vs Waterfall models in SDLC.
Detailed comparison across Process, Planning, Execution and Completion.
#Cricket Analogy#
Waterfall (Test Match) vs Iterative (ODI) Format vs Agile (T20)
#Waterfall: Test Match Format - Strategic-Phase by Phase like Innings by Innings.
Game for Specialists, Slow and Steady.
#One Day (ODI) Format : Strategic approach – First10/Middle/Slog overs.
Mix of Specialists and
All-Rounders, Result oriented.
#T20 Format: Lively,Dynamic, Full of Action. Game for All-Rounders. Changes with every over.
Highly Result oriented
Scrum is an agile framework for managing product development that focuses on quality, collaboration, and adaptability over rigid adherence to processes or plans. It emphasizes frequent inspection and adaptation, self-organizing cross-functional teams, and transparency. Key aspects include prioritizing a backlog of features based on business value, conducting short development iterations called sprints, and daily stand-up meetings for teams to share progress and issues. The goal is to deliver high quality, valuable software more quickly through an adaptive process of continuous improvement.
Zentao is a professional project management tool which covers the core process of the entire lifecycle of project management.
It’s an all-in-one tool to manage products, projects, tasks, bugs, tests, documents, resources and todos.
It can help enterprises reduce manual work by automatic reporting, balance and optimize resource allocation by easier
task delegation, have fact-based decision making by providing real-time visibility into project status, and have a reliable and
uniform platform for efficient team communication and collaboration.
Agile and Scrum Overview for PMs, Designers and Developers Aaron Roy
This is an overview of the flavor of agile/scrum I had my team use at Bond in Q2 2017. We heavily emphasized the importance of having a shared language between cross-functional teams and this deck was meant as a primer that could be shared between product managers, designers, and developers.
Last 2019: Designing a DevOps Dependency Diagram to Decide Development DirectionMark Grebler
Presented at LAST 2019:
So you walk into a new company, get the lay of the land and then realise, crap! Their development processes are like they were design by a bunch of first-year uni students doing a group project.
There is no DevOps to speak of. There are snowflake servers everywhere. Their git branching strategy is unmanageable. They run tests only every 3 or 4 releases. Their deployment is manual and different for each release. The have no real alerting.
Ok. Take a deep breath! Calm down.
So much to do, but where to start? The business has produced a list of improvement actions, but those actions are focussed around fixing the symptoms of the problems, not solving the root cause. The business does not understand that the path to DevOps improvement is complex and each task has many inter-relations and dependencies.
This is the problem that I faced about a year ago. To overcome this, we went through a process of defining all of the DevOps tasks we could think of and mapped them into a dependency diagram. This diagram was useful to communicate both internal and external to the team.
In this case study, I’ll go through the process to design the dependency diagram, but also our progress through the diagram one year later.
This document provides an overview of agile software development methodologies, focusing on Scrum. It describes the traditional waterfall methodology and its limitations. Agile methodologies like Scrum promote iterative development through collaboration between cross-functional teams. Scrum uses sprints, daily stand-ups, sprint reviews and retrospectives. Key roles include the product owner, Scrum master, and self-organizing development team. The product backlog and sprint backlog are key artifacts that help manage work in progress.
Introduction to software development methodologies- Agile vs WaterfallPrateek Shrivastava
This document discusses different software development methodologies, including Waterfall, Agile, Scrum, and Kanban. It defines a project and software development methodology. Waterfall follows sequential phases of requirements, design, development, testing, and delivery, while Agile focuses on iterative delivery, customer collaboration, and response to change. The document examines differences between Waterfall and Agile approaches to scope, schedule, team roles, testing practices, and other factors. It provides guidance on choosing a methodology based on requirements stability, team experience, project scale, and other criteria.
The document discusses Scrum tools and meetings used in agile project management. It describes the product backlog as containing prioritized user stories, the sprint backlog as user stories selected for a sprint, and the increment as the portion of the product completed each sprint. It outlines the planning meeting to set the sprint backlog, daily stand-ups to track progress, the review meeting to demo the increment, and the retrospective to improve processes. Key aspects of each meeting and tool are defined in the document.
The document discusses agile development methods like Scrum and Extreme Programming (XP). It covers topics like iterative planning, continuous integration, pair programming, and refactoring code. The goal of agile methods is to provide visibility, adaptability, and business value through a flexible iterative process compared to traditional waterfall development.
A software testing practice that follow the principle of agile software development is called Agile Testing.
Agile is an iterative development methodology where requirement evolve through collaboration between the customer and self-organizing teams and agile aligns development with customer need.
Website: https://www.1solutions.biz/
Machine learning models are difficult to operationalize at scale due to infrastructure challenges like supporting different frameworks and languages, managing models through versioning and reproducibility, and deploying models at large scale. Most organizations struggle with successfully moving projects from proof-of-concept to production as lack of process, incentives, skills, champions, and appropriate technology impede operationalization. Adopting practices like integrating engineering and data science teams, defining clear production criteria, and choosing infrastructure-agnostic platforms can help organizations realize value from machine learning by addressing these barriers to operationalization.
The document provides an overview of the Rational Unified Process (RUP) and Extreme Programming (XP). RUP is a configurable software development process that uses iterative development, UML modeling, and documentation of artifacts. It consists of four main phases - inception, elaboration, construction, and transition. XP is an agile methodology based on values of communication, simplicity, feedback, and courage, and practices like planning games, test-driven development, pair programming, and frequent integration.
This document discusses legacy and long-running projects. It defines a legacy system as an old technology that continues to be used because it still meets user needs, even though newer technologies are available. It notes that long-running projects of over 2 years duration can be considered legacy. The document provides advice on when and how to rewrite legacy systems, including ensuring the new technology is mature and the team is ready. It also discusses challenges of maintaining motivation for teams on legacy projects and paying off the accumulated technical debt over time.
like Google, Improve your Test perception & practices and learn how Test might be a key lever to improve your business.
- Understand the different types of Test
- Best & Worst practices of Test
The document discusses the changing role of testers in an agile environment. It outlines how testers must adopt new skills and practices like automation, behavior-driven development, and testing throughout the development process rather than just at the end. Testers are now expected to write test cases in a "business readable" format called Gherkin scripts, focus on different levels and types of testing, and work more closely with developers as part of agile teams.
Software Development Methodologies By E2LogyE2LOGY
Software development methodology in software field is a framework which is used to structure,plan and control the process of development. Some of the common development methodologies are Waterfall, iterative Waterfall, SCRUM (Agile), Kanban (Agile). This presentation deals with all these methodology in detail.
This document provides an overview of the Software Development Life Cycle (SDLC) and different SDLC models, including Waterfall, Incremental, Agile, and Spiral models. It describes the key phases and characteristics of each model, and discusses their advantages and disadvantages. The Waterfall model is a simple linear sequential approach, while Incremental is divided into modules with each release adding functionality. Agile uses rapid iterative cycles for continuous delivery, and Spiral emphasizes risk analysis with repeated planning, risk analysis, engineering and evaluation phases. Understanding SDLC helps improve quality, productivity and reduces risks of going over budget or delivering late.
The document provides an overview of Scrum, an agile framework for managing product development. It defines Scrum as focusing on delivering value through working software in short cycles. Key Scrum elements include self-organizing cross-functional teams, prioritized backlogs, sprints of fixed duration for delivering features, daily stand-ups, sprint reviews and retrospectives.
There are several types of prototypes that can be used in systems analysis and design including patched-up prototypes, nonoperational prototypes, first-of-a-series prototypes, and selected features prototypes. Prototypes allow users to interact with and provide feedback on early versions of a system to help identify requirements, innovations, and needed revisions before significant resources are spent on development. Prototyping is best for systems that are uncertain or unstable, while established systems with certain requirements are less suitable for prototyping.
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
Foreo Drives Millions of Dollars of Revenue During the Holiday Seasons with T...Tag1 Consulting, Inc.
Like most e-commerce retailers, FOREO - a Swedish multi-national beauty brand with oral and skin care products such as the popular and iconic LUNA facial cleanser - needs to massively scale applications and infrastructure to handle mission-critical events. Black Friday, Cyber Monday, and Singles Day in China drive record sales and revenue for the company, and FOREO's systems must be ready to support the enormous spikes in traffic seen during these events.
Millions of dollars are at stake when e-commerce systems go down, or even slow down, during major sales events, and failure can have a material impact on a company's bottom line. Tag1 Consulting, world leading experts in performance and scalability, will cover the tools, techniques, and processes used to ready applications and infrastructures for massive traffic spikes and surges in payment transactions.
Viewers of this presentation will gain actionable insight on how to load test and performance tune systems through real world examples. We will also cover best practices to ensure your success during high-traffic events including advanced monitoring and risk mitigation strategies. And to help ensure your applications remain performant as they evolve, we will discuss code reviews and performance testing as part of continuous integration systems, as well as other approaches.
This talk is geared towards technical leaders charged with managing enterprise applications, but business stakeholders are encouraged to attend and will gain valuable insights. Performance tuning engineers will be on hand to answer in-depth technical questions after the talk.
A video recording of the talk based on this presentation is available: https://events.drupal.org/seattle2019/sessions/foreo-scaling-applications-mission-critical-sales
Presentation (animated) on Agilve vs Iterative vs Waterfall models in SDLC.
Detailed comparison across Process, Planning, Execution and Completion.
#Cricket Analogy#
Waterfall (Test Match) vs Iterative (ODI) Format vs Agile (T20)
#Waterfall: Test Match Format - Strategic-Phase by Phase like Innings by Innings.
Game for Specialists, Slow and Steady.
#One Day (ODI) Format : Strategic approach – First10/Middle/Slog overs.
Mix of Specialists and
All-Rounders, Result oriented.
#T20 Format: Lively,Dynamic, Full of Action. Game for All-Rounders. Changes with every over.
Highly Result oriented
Scrum is an agile framework for managing product development that focuses on quality, collaboration, and adaptability over rigid adherence to processes or plans. It emphasizes frequent inspection and adaptation, self-organizing cross-functional teams, and transparency. Key aspects include prioritizing a backlog of features based on business value, conducting short development iterations called sprints, and daily stand-up meetings for teams to share progress and issues. The goal is to deliver high quality, valuable software more quickly through an adaptive process of continuous improvement.
Zentao is a professional project management tool which covers the core process of the entire lifecycle of project management.
It’s an all-in-one tool to manage products, projects, tasks, bugs, tests, documents, resources and todos.
It can help enterprises reduce manual work by automatic reporting, balance and optimize resource allocation by easier
task delegation, have fact-based decision making by providing real-time visibility into project status, and have a reliable and
uniform platform for efficient team communication and collaboration.
Agile and Scrum Overview for PMs, Designers and Developers Aaron Roy
This is an overview of the flavor of agile/scrum I had my team use at Bond in Q2 2017. We heavily emphasized the importance of having a shared language between cross-functional teams and this deck was meant as a primer that could be shared between product managers, designers, and developers.
Last 2019: Designing a DevOps Dependency Diagram to Decide Development DirectionMark Grebler
Presented at LAST 2019:
So you walk into a new company, get the lay of the land and then realise, crap! Their development processes are like they were design by a bunch of first-year uni students doing a group project.
There is no DevOps to speak of. There are snowflake servers everywhere. Their git branching strategy is unmanageable. They run tests only every 3 or 4 releases. Their deployment is manual and different for each release. The have no real alerting.
Ok. Take a deep breath! Calm down.
So much to do, but where to start? The business has produced a list of improvement actions, but those actions are focussed around fixing the symptoms of the problems, not solving the root cause. The business does not understand that the path to DevOps improvement is complex and each task has many inter-relations and dependencies.
This is the problem that I faced about a year ago. To overcome this, we went through a process of defining all of the DevOps tasks we could think of and mapped them into a dependency diagram. This diagram was useful to communicate both internal and external to the team.
In this case study, I’ll go through the process to design the dependency diagram, but also our progress through the diagram one year later.
This document provides an overview of agile software development methodologies, focusing on Scrum. It describes the traditional waterfall methodology and its limitations. Agile methodologies like Scrum promote iterative development through collaboration between cross-functional teams. Scrum uses sprints, daily stand-ups, sprint reviews and retrospectives. Key roles include the product owner, Scrum master, and self-organizing development team. The product backlog and sprint backlog are key artifacts that help manage work in progress.
Introduction to software development methodologies- Agile vs WaterfallPrateek Shrivastava
This document discusses different software development methodologies, including Waterfall, Agile, Scrum, and Kanban. It defines a project and software development methodology. Waterfall follows sequential phases of requirements, design, development, testing, and delivery, while Agile focuses on iterative delivery, customer collaboration, and response to change. The document examines differences between Waterfall and Agile approaches to scope, schedule, team roles, testing practices, and other factors. It provides guidance on choosing a methodology based on requirements stability, team experience, project scale, and other criteria.
The document discusses Scrum tools and meetings used in agile project management. It describes the product backlog as containing prioritized user stories, the sprint backlog as user stories selected for a sprint, and the increment as the portion of the product completed each sprint. It outlines the planning meeting to set the sprint backlog, daily stand-ups to track progress, the review meeting to demo the increment, and the retrospective to improve processes. Key aspects of each meeting and tool are defined in the document.
The document discusses agile development methods like Scrum and Extreme Programming (XP). It covers topics like iterative planning, continuous integration, pair programming, and refactoring code. The goal of agile methods is to provide visibility, adaptability, and business value through a flexible iterative process compared to traditional waterfall development.
A software testing practice that follow the principle of agile software development is called Agile Testing.
Agile is an iterative development methodology where requirement evolve through collaboration between the customer and self-organizing teams and agile aligns development with customer need.
Website: https://www.1solutions.biz/
Machine learning models are difficult to operationalize at scale due to infrastructure challenges like supporting different frameworks and languages, managing models through versioning and reproducibility, and deploying models at large scale. Most organizations struggle with successfully moving projects from proof-of-concept to production as lack of process, incentives, skills, champions, and appropriate technology impede operationalization. Adopting practices like integrating engineering and data science teams, defining clear production criteria, and choosing infrastructure-agnostic platforms can help organizations realize value from machine learning by addressing these barriers to operationalization.
The document provides an overview of the Rational Unified Process (RUP) and Extreme Programming (XP). RUP is a configurable software development process that uses iterative development, UML modeling, and documentation of artifacts. It consists of four main phases - inception, elaboration, construction, and transition. XP is an agile methodology based on values of communication, simplicity, feedback, and courage, and practices like planning games, test-driven development, pair programming, and frequent integration.
This document discusses legacy and long-running projects. It defines a legacy system as an old technology that continues to be used because it still meets user needs, even though newer technologies are available. It notes that long-running projects of over 2 years duration can be considered legacy. The document provides advice on when and how to rewrite legacy systems, including ensuring the new technology is mature and the team is ready. It also discusses challenges of maintaining motivation for teams on legacy projects and paying off the accumulated technical debt over time.
like Google, Improve your Test perception & practices and learn how Test might be a key lever to improve your business.
- Understand the different types of Test
- Best & Worst practices of Test
The document discusses the changing role of testers in an agile environment. It outlines how testers must adopt new skills and practices like automation, behavior-driven development, and testing throughout the development process rather than just at the end. Testers are now expected to write test cases in a "business readable" format called Gherkin scripts, focus on different levels and types of testing, and work more closely with developers as part of agile teams.
Software Development Methodologies By E2LogyE2LOGY
Software development methodology in software field is a framework which is used to structure,plan and control the process of development. Some of the common development methodologies are Waterfall, iterative Waterfall, SCRUM (Agile), Kanban (Agile). This presentation deals with all these methodology in detail.
This document provides an overview of the Software Development Life Cycle (SDLC) and different SDLC models, including Waterfall, Incremental, Agile, and Spiral models. It describes the key phases and characteristics of each model, and discusses their advantages and disadvantages. The Waterfall model is a simple linear sequential approach, while Incremental is divided into modules with each release adding functionality. Agile uses rapid iterative cycles for continuous delivery, and Spiral emphasizes risk analysis with repeated planning, risk analysis, engineering and evaluation phases. Understanding SDLC helps improve quality, productivity and reduces risks of going over budget or delivering late.
The document provides an overview of Scrum, an agile framework for managing product development. It defines Scrum as focusing on delivering value through working software in short cycles. Key Scrum elements include self-organizing cross-functional teams, prioritized backlogs, sprints of fixed duration for delivering features, daily stand-ups, sprint reviews and retrospectives.
There are several types of prototypes that can be used in systems analysis and design including patched-up prototypes, nonoperational prototypes, first-of-a-series prototypes, and selected features prototypes. Prototypes allow users to interact with and provide feedback on early versions of a system to help identify requirements, innovations, and needed revisions before significant resources are spent on development. Prototyping is best for systems that are uncertain or unstable, while established systems with certain requirements are less suitable for prototyping.
Nothing is as frustrated as deploying a new release of your web application to find out functionality you had doesn't work anymore. Of course you have all your unit tests in place and you run them through your CI environment, but nothing prepared you to a failing javascript error or a link that doesn't work anymore. Welcome to User Acceptance testing or UAT. Before you start putting real people in front of your application, create macros and export them as PHPUnit test classes. Then run them in an automated way just like your unit tests and hook them into your CI. In this talk I will show you how easy it is to create Selenium macros that can be converted into PHPUnit scripts and run automatically on different virtual machines (VM's) so you can test all different browsers on a diversity of operating systems.
Understand the important aspects of digital design and digital manufacturing, what technologies are available, and how to embed rapid prototyping technologies to fast track your development program.
The why and how of moving to PHP 5.4/5.5Wim Godden
With PHP 5.5 out and many production environments still running 5.2 (or older), it's time to paint a clear picture on why everyone should move to 5.4 and 5.5 and how to get code ready for the latest version of PHP. In this talk, we'll migrate an old piece of code using some standard and some very non-standard tools and techniques.
1. The document discusses internationalization and Unicode support in PHP, covering topics like encodings, locales, formatting numbers and dates for different languages, and database and browser considerations.
2. It provides an overview of PHP extensions and functions for internationalization, including Intl, mbstring, and Iconv, and discusses their strengths and limitations.
3. Examples of internationalization practices in popular PHP frameworks and applications are examined, highlighting both best practices and common pitfalls.
Caching and tuning fun for high scalabilityWim Godden
Caching has been a 'hot' topic for a few years. But caching takes more than merely taking data and putting it in a cache : the right caching techniques can improve performance and reduce load significantly. But we'll also look at some major pitfalls, showing that caching the wrong way can bring down your site. If you're looking for a clear explanation about various caching techniques and tools like Memcached, Nginx and Varnish, as well as ways to deploy them in an efficient way, this talk is for you.
You have been wanting to use the "new shiny", but there are too many "Git how-tos" out there and you don't kow where to start. This is not another one of those. Instead Adam Culp will give a practical walk through the development cycle and how to use Git as the source control. From initialization of a repository, to forking, cloning, and checkout, we will walk through a sample project and how most developers actually use Git to manage the workflow. Adam will also touch on how to use Git repository hosting providers, and how to use them with PAAS (Platform as a service) providers.
This document provides an overview and introduction to the Solr search platform. It describes how Solr can be used to index and search content, integrate with other systems, and handle common search issues. The presentation also discusses Lucene, the search library that powers Solr, and how content from various sources like databases, files, and rich documents can be indexed.
Cynthia Wu: Satisfaction Not GuaranteedAnna Royzman
Cynthia Wu gave a presentation on software testing frameworks. She discussed what frameworks are, the benefits of using pre-fabricated frameworks, and how to set expectations for testing automation. Wu outlined guidelines for evaluating frameworks using three criteria: technical, management, and informative. She provided examples of how two popular frameworks, Cucumber and Protractor, measure up based on these criteria. Wu emphasized that no framework is perfect and organizations may need to create customized solutions. Her overall message was that testing automation requires ongoing learning and organizations should not expect immediate results or be afraid of failures along the way.
ASPgems company description.
We make your project real, thanks to our team of highly specialized developers of agile solutions. Passion for software development and a deep understanding of the Internet and the digital world are the building blocks of our value proposition. We commit to your project success.
presentation about internship project detailsrajwork2
The document summarizes Ayush Arun's 4-week internship at Code Clause, an international software company. During the internship, Ayush worked on three frontend development projects - designing a coding course layout page, personal portfolio websites, and a temperature converter application. He gained skills in HTML, CSS, JavaScript, software engineering practices, and project management. Ayush believes the internship experience improved his technical abilities and prepared him for future career opportunities in leading international teams and taking on greater responsibilities.
Software Defect Prevention via Continuous InspectionJosh Gough
Research and guidance for educing software development risk and cost while improving speed, quality and maintainability by applying review at all levels.
The prototyping model involves building quick prototypes to help define requirements through an iterative process of evaluation and refinement with customers. It works well when requirements are unclear, but has problems if quality and maintainability are not prioritized. The RAD model is a variant of the linear sequential model that emphasizes extremely short development cycles through component reuse and automated tools. It is well-suited to modular projects with well-understood requirements and committed teams, but faces challenges with large or technically risky projects.
Extreme Programming (XP) is an agile software development methodology that uses short development cycles, frequent code integration, testing, and customer feedback. The key principles of XP include satisfying customer needs through frequent code/test cycles, close communication between developers and customers, simplicity through small releases, and flexibility to changing requirements. The main activities in XP are coding, testing, listening to customers, and designing simple solutions that can be expanded later based on feedback.
The document discusses estimation strategies for software development projects. It begins by outlining the risks clients face when relying on estimates, such as wanting to control costs and meet deadlines. Low estimates can lead to low quality work. The document recommends using agile methods like sprints and continuous delivery to manage risks. It provides best practices for estimation, such as splitting tasks, tracking time spent, and involving the whole team. Deadlines are often missed because of inaccurate estimates and other unpredictable factors. Adopting agile methods like Scrum and Kanban can help set realistic expectations and deliver value incrementally.
The document discusses the six steps of programming: 1) program specification, 2) program design, 3) program coding, 4) program testing, 5) program documentation, and 6) program maintenance. It describes each step in detail, including techniques like top-down design, pseudocode, flowcharts, and testing methods. The document also covers topics like object-oriented programming, generations of programming languages, and common IT careers like computer programmers.
Scrum Refresher you can run for your organisation or Scrum team. Scrum values, Scrum framework, Scrum roles.
Copy what you need to your own presentation.
This is a talk I gave to potential applicants about our pilot of AutoFeedback for term 2 of a first-year Java programming module. AutoFeedback is an automated code feedback platform that tries to lower the barriers to entry as much as possible for submitting code from an IDE, and receiving feedback about it.
ShopekLobek is a website and mobile application to:
Quickly share needs and abilities in a
tweet-like fashion.
Get recommended abilities from your friends
and people nearby, which are most relevant to
your need.
Get similar needs from other users to know
how did they satisfy it.
Get needs of friends and people nearby which
you can satisfy, so that you can offer help
This document provides an overview of software engineering and outlines several key chapters that will be covered. It discusses software engineering as a systematic approach to software development that includes requirements analysis, modeling, design, quality assurance, implementation, testing, and maintenance. Several software process models are also summarized, including the linear sequential model, prototyping model, and RAD (rapid application development) model. The challenges of software development and goals of taking an engineering approach are also mentioned.
Building Sustainable Software: An Introduction to Software EngineeringMuhammad Shehata
Introduction to software engineering and project management methodologies like Waterfall and Agile. In addition to discussing some practices and tools like Version Control Systems, CI/CD, Code reviews and testing strategies.
This document provides an overview of common agile practices like Scrum and Kanban. It first discusses the traditional waterfall method and its limitations. Then it introduces agile principles like short iterations, adaptive planning, early customer feedback, and flexibility. Specific agile frameworks like Scrum are explained, including events like sprints, stand-ups, and retrospectives. Kanban concepts such as limiting work-in-progress and visualizing flow are also covered. Finally, the document discusses how tools like Trello and Jira can support tracking agile work.
The document provides an overview of agile and test-driven development. It begins by comparing waterfall and agile approaches, noting that agile uses short iterative cycles. It then defines agile as iterative and incremental, with continual revisiting of requirements and design. Common agile methodologies like Scrum and extreme programming are discussed. Test-driven development is introduced as writing tests before code to ensure requirements are met and prevent bugs. The benefits of agile and TDD for developers are more code proven to meet requirements and less time spent debugging.
DrupalGov 2017: Testing any day: guide to end to end test driven Drupal projectsVladimir Roudakov
Do you get notified if some crucial functionality on your website was changed or broken?
Is automated testing part of your daily routine or deployment process?
If not, then you are risking of losing parts of your website or even entire project.
Testing is no longer developers realm and everybody should get involved and get the benefits of test driven development.
In this session we will cover:
- basics of end-to-end testing
- test reports and who should receive them
- Automated testing best practices
- How clients can benefit from automated testing
This session is aimed for
- everyone who is interested in getting daily reports on how healthy their project is
- Teams who would like to improve communication internally and externally by means of test reports
- Project managers and developers interested in collecting data about their project over time
http://drupalgov.org/events/drupalgov-canberra-2017/testing-any-day-guide-end-end-test-driven-drupal-projects
Similar to Clean application development tutorial (20)
The document discusses hypermedia and HATEOAS (Hypermedia as the Engine of Application State) as it relates to REST APIs. It defines hypermedia as a nonlinear medium including graphics, audio, video, text and hyperlinks. HATEOAS means that the client interacts with hypermedia controls exclusively, without relying on out-of-band information. The document outlines the typical REST flow and how it can be improved by following HATEOAS principles and including hypermedia links in responses to guide the client. It also discusses standards like HAL (Hypertext Application Language) and efforts in the PHP community to automate and standardize the use of HATEOAS and HAL.
We fear modernizing legacy applications, or going API first. But it's not as futile as you might think. With modern PHP microframeworks geared toward middleware it can be a breeze.
Now the truth: It is a terribly difficult task full of pitfalls. But I will share how to do it in a step-by-step method that makes it much more approachable, and enable you to be a super hero.
Regardless of claims by trendy developer websites, Enterprise PHP really is a thing: the final frontier. A reality for companies doing business at scale who turn to their developers for selecting frameworks, libraries, and tools that work at the scale they operate. These are the undocumented, and unspoken criteria driving what they trust.
Join us in this talk as Adam Culp walks through lessons learned over a five-year mission, consulting with companies who operate enterprise scale PHP applications. See what was boldly learned about squeezing more power out of PHP's engines.
Legacy applications are full of supervillains scheming to halt modernizing efforts. But deprecated versions of PHP, frameworks, libraries, and more drive a never-ending battle to keep applications up to date, supported, and secure. This can leave any would be superhero seeking how, what, when, and why.
Join me as we consider real-life case studies of modernizations from various large legacy applications, and will share common evil-doers, ways to foil their plans, and how to eliminate vulnerabilities in the first place. See how to make refactoring your super power!
Every change to a codebase increases technical debt leaving it less stable, bug-prone, and closer to technical bankruptcy requiring a rewrite. Let's explore how to measure technical debt to gain a score and highlight the current condition of a PHP application. We will then introduce simple steps for improving code quality, deliver new features faster, and lower project stress.
Enterprise PHP development teams, no matter the maturity level, focus on one thing, releasing stable apps that perform. They also want to avoid reinventing the wheel. Therefore, make the investment to listen to the top lessons we've learned from across industries to deliver PHP code faster without sacrificing quality, user experience, or existing workflows.
You will learn:
How to dig deep into application behavior and performance at runtime
How to maximize existing continuous delivery principles and tools
When to take advantage of existing frameworks and extensions and when to do it yourself
How to avoid reinventing the wheel each time you deploy, upgrade, or rollback
Static analysis, unit testing, compatibility, and coding standards are all important metrics to monitor and perform regularly. However, the time to set up the various tools takes time and patience to set up and run...until now.
We'll see how using pre-configured Docker images make easy to have PHP code quality tools at our fingertips, ready to run or automate on a moments notice. Then will share tips to run the various tools, and/or create automation around running them regularly.
Everybody knows how to install a PHP debugger. But many PHP developers haven't embraced step debugging, and instead do things in a manual way. For many, this is because they simply don't know how to step-debug effectively.
Let's explore how to debug common issues for problem resolution, and spend less time troubleshooting and more time coding. Attendees will see fundamentals to get up and running quickly once a debugger is installed.
Large and heavy PHP frameworks are a thing of the past. Modern PHP developers now have a wealth of libraries and packages available to perform specific tasks, and microservices are fast becoming a preferred way to architect applications. But many don't know how to start, and get thrown in the deep end to flounder. This hands-on workshop will introduce what microservices are, and how to leverage middleware to create them. We will use the Zend Expressive microframework to leverage components of Zend Framework, and other libraries, to quickly create awesome things without requiring an entire framework. Resources for reference and continued learning will also be shared.
With PHP frameworks being more decoupled than ever, and with the help of a package and dependency manager, large and heavy PHP frameworks are becoming a thing of the past. Modern PHP developers now have a wealth of libraries available that specialize at specific tasks, and microservices are fast becoming a preferred way to architect applications. But many don't know how to start.
This talk will briefly introduce what microservices are, and how to use them. Then show how to build a foundation using the Zend Expressive microframework leveraging components of Zend Framework, and other libraries, to quickly create awesome things without requiring an entire framework. Resources for reference and continued learning will also be shared.
Adam Culp will give a basic intro to Zend Framework (ZF2 and ZF3) and how to use the foundational pieces. We will get a Zend Framework application up and running quickly using the Zend Framework Skeleton Application, and Zend Skeleton Module to add modules. Adam will also introduce some useful resources to help attendees continue learning on their own. The talk will give attendees enough information to get a jump start into using the framework.
Adam Culp shares advice on living an intentional life through memories rather than possessions. He emphasizes contributing value to others, starting small, avoiding overcommitting, planning properly, and learning from mistakes. Culp's overall message is to focus on accomplishments through openness and sharing rather than being remembered for something trivial like potato salad.
Your a visionary with a great software idea that is sure to take off, but how do you build it the right way? Adam Culp will highlight common mistakes made by startups from a technology standpoint while building software. He will discuss how to build the right team, best practices to ensure everything is solid and well built, and management methods to carry the project forward. We will also hear how to implement these things in a manner that saves the company time and money during the crucial startup phase. Attendees will gain knowledge that generally takes years, and a stack of disposed money, for companies to discover.
After days, weeks, or months of coding many developers don't know how to gauge the quality of their code. Adam Culp will introduce tools to grade, benchmark, and analyze code in an automated fashion allowing developers to write better quality software. He will explain key metrics to help understand what may need to be refactored, and use code smells to point out bugs before end-users discover them. Attendees will see how to use these tools, know where to find them, and be able to implement them in their own workflows.
This document discusses practical PHP deployment with Jenkins. It begins with an introduction of the author and overview of continuous integration and deployment. The main topics covered are using Jenkins for continuous integration and deployment of PHP applications, with a demonstration of deploying a 500K line Pimcore CMS project using Jenkins jobs for source control, testing, packaging, and deployment. Best practices and architectures involving Git, Jenkins and Zend Server are also discussed.
Modern developers use virtualized "single use" development environments to reduce time tweaking servers, allowing more time developing. Teams share configurations to eliminate endless "works for me" debug loops, while rebuilding and/or setup is a simple command taking minutes, not hours or days. This intro talk will create a base for attendees to build from and investigate the various technologies like Vagrant, VirtualBox, Puppet, Containers, and Virtual PHP. If your development environment is not virtualized, catch up, it's what all the "cool kids" are doing.
We've all been faced with legacy code and often decided to rewrite, feeling it will be easier. There are many reasons this can be wrong. Adam Culp will talks about the entire journey of refactoring a legacy code base. He will begin with assessment and why, move on to planning how and when, cover execution and testing, give step-by-step examples, and even show how to manage the process effectively. Attendees will gain insight and tips on how to handle their own pile of code and refactor happy.
Deprecated: Foundations of Zend Framework 2Adam Culp
DEPRECATED-Please see http://www.slideshare.net/adamculp/foundations-of-zendframework for updated version.
For this talk Adam Culp will cover a basic intro to Zend Framework 2 (ZF2) and how to use the foundational pieces. We will discover how to get a Zend Framework 2 application up and running quickly using GitHub, Composer, and the Zend Framework 2 Skeleton Application. Then we will leverage the Zend Skeleton Module to introduce adding modules to a Zend Framework 2 application.
We will also cover basic usage of the ZF2 module manager, event manager, service manager, and database components. Adam will also introduce some useful resources to help attendees continue learning on their own. The goal of the talk is to give attendees enough information to be able to get a jump start into using ZF2.
This document discusses refactoring code to improve its design without changing its external behavior. It defines refactoring as changing code structure without modifying functionality. The author is an experienced PHP developer who gives tips on when and how to refactor code, including drivers like preventing decay, reducing duplication, and improving maintainability. Examples are provided of code smells that indicate refactoring may be helpful, like duplicate code, long methods, and large classes. The document concludes by emphasizing the importance of testing before and after refactoring.
Adam Culp will talk about using Vagrant to create and manage virtualized development environments, making it easier to mirror production servers. Then will cover using Puppet for more advanced provisioning, making the addition of multiple development environments and servers easier and faster.
If you’re developing and are not sure what these technologies are, this talk is for you. As a developer it’s increasingly important to ensure our development, testing, staging, and production environments are as closely matched to each other as possible, alleviating the “can’t reproduce it on my machine” excuses. Whether you use 2, 3, or 4 of these environments is of less importance if they are all built on the same “stack” of applications.
Unlocking Productivity: Leveraging the Potential of Copilot in Microsoft 365, a presentation by Christoforos Vlachos, Senior Solutions Manager – Modern Workplace, Uni Systems
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
Essentials of Automations: The Art of Triggers and Actions in FMESafe Software
In this second installment of our Essentials of Automations webinar series, we’ll explore the landscape of triggers and actions, guiding you through the nuances of authoring and adapting workspaces for seamless automations. Gain an understanding of the full spectrum of triggers and actions available in FME, empowering you to enhance your workspaces for efficient automation.
We’ll kick things off by showcasing the most commonly used event-based triggers, introducing you to various automation workflows like manual triggers, schedules, directory watchers, and more. Plus, see how these elements play out in real scenarios.
Whether you’re tweaking your current setup or building from the ground up, this session will arm you with the tools and insights needed to transform your FME usage into a powerhouse of productivity. Join us to discover effective strategies that simplify complex processes, enhancing your productivity and transforming your data management practices with FME. Let’s turn complexity into clarity and make your workspaces work wonders!
Things to Consider When Choosing a Website Developer for your Website | FODUUFODUU
Choosing the right website developer is crucial for your business. This article covers essential factors to consider, including experience, portfolio, technical skills, communication, pricing, reputation & reviews, cost and budget considerations and post-launch support. Make an informed decision to ensure your website meets your business goals.
Programming Foundation Models with DSPy - Meetup SlidesZilliz
Prompting language models is hard, while programming language models is easy. In this talk, I will discuss the state-of-the-art framework DSPy for programming foundation models with its powerful optimizers and runtime constraint system.
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceIndexBug
Imagine a world where machines not only perform tasks but also learn, adapt, and make decisions. This is the promise of Artificial Intelligence (AI), a technology that's not just enhancing our lives but revolutionizing entire industries.
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc
How does your privacy program stack up against your peers? What challenges are privacy teams tackling and prioritizing in 2024?
In the fifth annual Global Privacy Benchmarks Survey, we asked over 1,800 global privacy professionals and business executives to share their perspectives on the current state of privacy inside and outside of their organizations. This year’s report focused on emerging areas of importance for privacy and compliance professionals, including considerations and implications of Artificial Intelligence (AI) technologies, building brand trust, and different approaches for achieving higher privacy competence scores.
See how organizational priorities and strategic approaches to data security and privacy are evolving around the globe.
This webinar will review:
- The top 10 privacy insights from the fifth annual Global Privacy Benchmarks Survey
- The top challenges for privacy leaders, practitioners, and organizations in 2024
- Key themes to consider in developing and maintaining your privacy program
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
In the rapidly evolving landscape of technologies, XML continues to play a vital role in structuring, storing, and transporting data across diverse systems. The recent advancements in artificial intelligence (AI) present new methodologies for enhancing XML development workflows, introducing efficiency, automation, and intelligent capabilities. This presentation will outline the scope and perspective of utilizing AI in XML development. The potential benefits and the possible pitfalls will be highlighted, providing a balanced view of the subject.
We will explore the capabilities of AI in understanding XML markup languages and autonomously creating structured XML content. Additionally, we will examine the capacity of AI to enrich plain text with appropriate XML markup. Practical examples and methodological guidelines will be provided to elucidate how AI can be effectively prompted to interpret and generate accurate XML markup.
Further emphasis will be placed on the role of AI in developing XSLT, or schemas such as XSD and Schematron. We will address the techniques and strategies adopted to create prompts for generating code, explaining code, or refactoring the code, and the results achieved.
The discussion will extend to how AI can be used to transform XML content. In particular, the focus will be on the use of AI XPath extension functions in XSLT, Schematron, Schematron Quick Fixes, or for XML content refactoring.
The presentation aims to deliver a comprehensive overview of AI usage in XML development, providing attendees with the necessary knowledge to make informed decisions. Whether you’re at the early stages of adopting AI or considering integrating it in advanced XML development, this presentation will cover all levels of expertise.
By highlighting the potential advantages and challenges of integrating AI with XML development tools and languages, the presentation seeks to inspire thoughtful conversation around the future of XML development. We’ll not only delve into the technical aspects of AI-powered XML development but also discuss practical implications and possible future directions.
Full-RAG: A modern architecture for hyper-personalizationZilliz
Mike Del Balso, CEO & Co-Founder at Tecton, presents "Full RAG," a novel approach to AI recommendation systems, aiming to push beyond the limitations of traditional models through a deep integration of contextual insights and real-time data, leveraging the Retrieval-Augmented Generation architecture. This talk will outline Full RAG's potential to significantly enhance personalization, address engineering challenges such as data management and model training, and introduce data enrichment with reranking as a key solution. Attendees will gain crucial insights into the importance of hyperpersonalization in AI, the capabilities of Full RAG for advanced personalization, and strategies for managing complex data integrations for deploying cutting-edge AI solutions.
Infrastructure Challenges in Scaling RAG with Custom AI modelsZilliz
Building Retrieval-Augmented Generation (RAG) systems with open-source and custom AI models is a complex task. This talk explores the challenges in productionizing RAG systems, including retrieval performance, response synthesis, and evaluation. We’ll discuss how to leverage open-source models like text embeddings, language models, and custom fine-tuned models to enhance RAG performance. Additionally, we’ll cover how BentoML can help orchestrate and scale these AI components efficiently, ensuring seamless deployment and management of RAG systems in the cloud.
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
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.
Building Production Ready Search Pipelines with Spark and MilvusZilliz
Spark is the widely used ETL tool for processing, indexing and ingesting data to serving stack for search. Milvus is the production-ready open-source vector database. In this talk we will show how to use Spark to process unstructured data to extract vector representations, and push the vectors to Milvus vector database for search serving.
CAKE: Sharing Slices of Confidential Data on BlockchainClaudio Di Ciccio
Presented at the CAiSE 2024 Forum, Intelligent Information Systems, June 6th, Limassol, Cyprus.
Synopsis: Cooperative information systems typically involve various entities in a collaborative process within a distributed environment. Blockchain technology offers a mechanism for automating such processes, even when only partial trust exists among participants. The data stored on the blockchain is replicated across all nodes in the network, ensuring accessibility to all participants. While this aspect facilitates traceability, integrity, and persistence, it poses challenges for adopting public blockchains in enterprise settings due to confidentiality issues. In this paper, we present a software tool named Control Access via Key Encryption (CAKE), designed to ensure data confidentiality in scenarios involving public blockchains. After outlining its core components and functionalities, we showcase the application of CAKE in the context of a real-world cyber-security project within the logistics domain.
Paper: https://doi.org/10.1007/978-3-031-61000-4_16
2. 2
Clean Application Development – About me
● About me
●
PHP 5.3 Certified
●
Consultant at Zend Technologies
●
Organizer of SoFloPHP (South Florida)
●
Organizer of SunshinePHP (Miami)
●
Long distance (ultramarathon) runner
●
Judo black belt instructor
3. 3
● HUGE fan of iteration
●
Skills require iteration to do well:
●
Learning to walk.
●
Training to run.
●
Evading project managers.
●
Writing clean code.
●
Refactoring.
●
Testing.
Clean Application Development – Iteration
4. 4
● Clean application development cannot be taught quickly.
●
Practice, Practice, Practice.
●
Leave the code better than you found it.
●
Always watch for new techniques.
●
Want to do better.
●
No “silver bullet“.
●
Oh, and practice.
Clean Application Development – Learning
5. 5
● Parts of clean application development.
●
Communication
●
Documentation
●
Source Control
●
Workflow
●
Time Estimation
●
Requirements Gathering
●
Issue Tracking
●
Time Management
●
Dev Tools
●
Databases
●
Code
●
Refactoring
●
Testing
●
Continuous Integration
Clean Application Development – Parts
7. 7
● Team Commication Policy:
●
Should be agreed upon by team.
●
Should be clear.
●
Should be expected.
●
Should be enforced.
Clean Application Development – Comm. Policy
8. 8
● Communication Levels
●
Instant (5 minutes to 1 hour)
●
Instant Messages (Skype, AOL)
●
Chat (IRC)
●
Intermediate (2 to 4 hours)
●
Phone Call, text message
●
Voicemail
●
Slow (6 to 8 hours)
●
Email
●
Issue Tracking
●
Casual (days)
●
Forum
●
Meeting
Clean Application Development – Comm. Levels
9. 9
● Desired behaviour
●
Openly discuss problems.
●
Alert early.
●
Share information.
●
Be on time for meetings.
●
Attention!
●
Bad behaviour
●
Hiding.
●
Hoarding info.
●
Bringing attitude to meetings.
●
Interrupting others.
Clean Application Development – Behavior
14. 14
● What are requirements:
●
End-user dreams.
●
Business owners vision.
●
Expected behaviour of application.
●
Application reaction to business logic.
●
Specific needs.
Clean Application Development – What are they
15. 15
● User story format works well.
●
Create roles of potential users.
●
Create persona of target user.
●
Create goals of what is desired.
●
Create benefit that goals help obtain.
●
Now create a story to make it real.
●
Insist on specificity!
Clean Application Development – How to create
16. 16
● Key things about requirements:
●
Do not start coding without them.
●
Hold their hand to get them started.
●
Even if the project is your own.
●
Use a tool to organize them.
●
Reqharbor.com
●
Get sign-off from stakeholder.
●
No sign-off = scope creep later
Clean Application Development – Req. = Important
18. 18
● Guessing, then multiplying by 2 or 3 is WRONG!
●
Sometimes accurate, but still a guess.
●
What if guess is wrong?
Clean Application Development – Wrong way!
19. 19
● Guessing is wrong because:
●
Still a guess.
●
Lacks requirements.
●
If requirements are completed, why guess?
●
Welcomes scope creep.
●
Application lacks design.
●
Causes bad practices:
●
Shortcut tests.
●
Increases code smells.
●
Prevents honest answers later.
●
How's it going????
Clean Application Development – Why is it wrong?
20. 20
● A better way:
●
Gather requirements.
●
Plan application.
●
How many controllers * average hours per.
●
How many actions in each * average hours per.
●
How many models/entities * average hours per.
●
Include meetings.
●
15 minutes per day (daily scrum)
●
2 hours per sprint for planning.
●
1 hour per sprint for show.
●
Plan resources/developers and QA/QC testers, and tests for each action.
●
Include time for DBA, graphic designer.
●
Include time for estimating each sprint.
Clean Application Development – Now thats better!
21. 21
● Freelancers, ensure you get paid for the estimate!
●
It's hard work to plan an application.
●
It takes time: (time == money)
●
Interview > 5 hours.
●
Gathering requirements > 40 hours.
●
Wireframes, images > 40 hours.
●
Creating an accurate estimate.
●
Documenting technologies.
●
Etc.
Clean Application Development – Get paid!
23. 23
● Why track issues/requests:
●
Helps create documentation later.
●
Ensures ideas are not lost.
●
User perception highlighted.
●
Bugs not forgotten.
●
Ownership for users.
●
Auditable.
●
Scheduling.
●
Track effort.
Clean Application Development – Why track?
24. 24
● Use tools.
●
Many software packages available.
●
Agreed upon by team.
●
Should be simple.
●
Should compliment workflow.
●
Connected with source control.
●
Must enhance communication.
●
Customizable. (not just appearance)
Clean Application Development – Tracking Tools
25. 25
● Useful report examples.
●
Average time spent per ticket.
●
By category.
●
By severity.
●
By developer.
●
% Deadlines met on time. (SLA)
●
Total.
●
By Developer.
●
Avg. # failed fixes by QA.
●
By developer.
●
Count per category assigned.
●
By Developer.
Clean Application Development – Tracking Reports
29. 29
● Definition and acceptance.
●
Determine acceptable response levels.
●
Get agreement from stakeholders.
●
Make them public.
●
Based on ticket severity.
●
Must manage user perception.
Clean Application Development – Agreement
30. 30
● Response Times.
●
Blocker = business stopped – 1 hour response
●
Urgent = someone can't work – 3 to 4 hour response
●
High = customer inconvenienced – 8 hour or 1 day response
●
Medium = employee annoyance – 2 days to 1 week response
●
Low = nice to have – 1 to 2 week response
●
Wish = no response, but perhaps a friendly thank you email
Clean Application Development – Responsiveness
31. 31
● Response Contents.
●
Thank user.
●
Acknowledge understanding. (re-state problem)
●
Provide “real“ time estimate of work.
●
Define when work will start. (for higher priority items)
●
Give idea of when work will start for low priority items.
Clean Application Development – Response
33. 33
● Modern IDE
●
Pick one, learn it WELL!
●
Features:
●
Syntax highlighting.
●
Code completion.
●
Source control integration.
●
Issue tracking integration.
●
DB management.
●
Deployment.
●
Testing.
●
Console.
●
Debugging.
Clean Application Development – Using an IDE
34. 34
● Basic Editor
●
Pick one, learn it WELL!
●
Features:
●
Syntax highlighting.
●
Able to handle large files.
●
Opens fast.
●
Saves quickly.
●
Closes error free.
Clean Application Development – Basic Editor
35. 35
● Vim Editor
●
Must know at least basic usage.
●
Exists on most Linux and Unix servers.
●
Don't fear it.
Clean Application Development – Vi / Vim
36. 36
● Vagrant for virtualized development
●
Vagrantup.com
●
Vagrantbox.es
●
Command line tool.
●
Uses:
●
VirtualBox
●
VMWare
●
AWS
●
Others...
●
Can use Puppet or Chef.
●
Free and open source.
Clean Application Development – Vagrant
38. 38
● Frameworks help keep things in line
●
Using a framework helps keep your code light, simpler.
●
Heavy lifting and complexity within core.
●
Most modern frameworks are MVC
●
Model – Business logic, Data
●
View – GUI, Presentation
●
Controller – Directs, Commands
●
Generally have a naming convention
and coding standard.
Clean Application Development – Using frameworks
39. 39
● Dos
●
Pick one, and learn it best.
●
Dabble with others secondary.
●
Get certified.
●
Create your own.
●
Don'ts
●
Roll your own for large projects.
●
Edit framework core.
●
Rebuild functionality.
●
Fall behind. (learn more)
Clean Application Development – Frameworks
40. 40
● Debugging Proxy
●
Must know at least basic usage.
●
Exists on most Linux and Unix servers.
●
Don't fear them.
Clean Application Development – Debugging Proxy
41. 41
● Zend Server
●
Deployment and rollback.
●
Debugging and profiling.
●
Code tracing.
●
Monitoring.
●
Bytecode caching.
●
Session clustering.
●
Page caching.
●
On many cloud providers.
●
Available at ServerGrove!
●
IDE Integration.
Clean Application Development – Zend Server
44. 44
● XDebug
●
An extension for PHP.
●
Can be installed via Pecl, or using phpize or manual compiling.
●
Allows debugging of PHP code.
●
IDE integration.
Clean Application Development – XDebug
45. 45
● getcomposer.org
●
Dependency manager for PHP.
●
Not a package manager.
●
It is a PHP application in composer.phar.
●
Configured by using composer.json file.
Clean Application Development – Composer
46. 46
● Using Composer
●
Used via command line.
●
Issue commands to the composer.phar.
●
Packages get downloaded, WITH dependencies.
Clean Application Development – Composer Usage
47. 47
● Packagist.org
●
Composer package repository.
●
Archivist of PHP libraries.
●
14,505 packages listed!
●
47,316 versions.
●
52,034,902 packages installed since 2012-04-13.
●
How to use:
●
Search for desired package.
●
Copy/paste the required line to composer.json.
●
Run 'composer install' (or update).
Clean Application Development – Packagist
50. 50
● Database should be clean as well
●
Stick to conventions. (defined by project)
●
Table names
●
ID field
●
Foreign field names {table}_id
●
Timestamps for created/modified
Clean Application Development – Data Conventions
51. 51
● Choose the right database for the job
●
Many to choose from:
●
MySQL
●
MongoDB
●
MSSQL
●
DB2
●
Postgres
●
Oracle
●
SQLite
●
Text file
Clean Application Development – Right Database
53. 53
● Learning to code, like walking, takes time
●
We fall down...alot!
●
Learning new methods.
●
Scope changes.
●
Bugs.
●
Refactoring.
Clean Application Development – Baby steps
54. 54
● Source Control
●
Helps us get back up!
●
Diff.
●
Blame.
●
Rollback.
●
Audit trail.
●
Link back to tickets.
Clean Application Development – Pick-up
55. 55
● Key characteristics of source control
●
Track changes.
●
Keep history.
●
Be available.
●
Easy to use.
●
Secure.
●
Allow multi-user.
●
Able to merge changes.
Clean Application Development – Characteristics
60. 60
● Project Iteration
●
Average sprint is 2 weeks.
●
At the end of the sprint EVERYTHING is “done“.
●
Tests.
●
Development.
●
Documentation.
●
Velocity charts are very important, put them up!
●
Burn down chart must go on the wall to let everyone know just how “screwed“
they really are.
●
Agile = hope killer. *joking*
●
Allows business to recover.
●
Lack of charts prevent graceful recovery.
Clean Application Development – Agile
61. 61
● Team development workflow
●
Developer is assigned task.
●
Checks out code to private development branch.
●
Developer adds functionality.
Clean Application Development – Team Workflow
Checkout dev.
to private
{user}-development
Coding
Project
assigned
62. 62
● Team development workflow
●
After coding is completed developer tests code.
Clean Application Development – Team Workflow
Checkout dev.
to private
{user}-development
TestingCoding
Project
assigned
63. 63
● Team development workflow
●
When all tests pass, developer pushes code to public development branch.
Clean Application Development – Team Workflow
Checkout dev.
to private
{user}-development
Merge changes
to development
TestingCoding
Tests
pass
Project
assigned
64. 64
● Team QA workflow
●
QA testing in development branch.
●
If bugs, return to developer.
●
If pass, merge with staging branch.
Clean Application Development – Team Workflow
Testing from
development
Merge to
staging
Test
passed
Testing
assigned
yes
no
Return to
developer flow
65. 65
● Team deployment manager workflow
●
Regression test in staging branch.
●
If failed, create temp branch for bug fix.
Clean Application Development – Team Workflow
Regression testing
In staging
Test
passed
Deploy
assigned
no
Temp branch
created
Bug
fixed
66. 66
● Team deployment manager workflow
●
If pass, merge to master branch.
●
Create tag for new version.
Clean Application Development – Team Workflow
Regression testing
In staging
Merge to
master
Test
passed
Deploy
assigned
yes
no
Temp branch
created
Bug
fixed
Tag
created
67. 67
● Single developer workflow
●
Pretty similar, but no staging.
●
Still use a private development branch.
Clean Application Development – Team Workflow
{user}-development
Merge to
development
Test
passed
Project
assigned
Tag
created
Regression
test
Merge to
master
69. 69
● Resource on clean coding practices.
Clean Application Development – Resources
Clean Code
By Robert C. Martin
70. 70
● Disasters happen, resulting in bad code...
●
Writing dirty code is easy.
●
Short deadlines.
●
Laziness.
●
Lack of “how-to“.
●
Coupled application.
●
Impatient boss.
●
Bored of same ol' app.
●
Come back and clean later.
●
We are the cause!
●
Why did we write it!?!
Clean Application Development – Drivers
71. 71
● It is our responsibility to say “NO“ and provide good code
●
Managers job = defend schedule and features.
●
Our job = defend the code.
●
Managers cave to realistic reasons and explanations.
Clean Application Development – Defend the code
72. 72
● We have all seen bad code
●
Time waster.
●
Causes bugs.
●
Excessive debugging
●
Causes procrastination.
●
Missed deadlines.
●
Technical debt.
●
Financial losses.
●
Company killer.
●
I didn't write it!!!
Clean Application Development – Result of bad
code
85. 85
● Bad code starts innocently
● Hire a new professional/developer
●
Clean slate, no expectations.
● Start a new project
●
Initial code output is quick, setting
expectation.
●
Slows down over time.
●
Bug introduction increases.
●
Over-coupled system.
●
Complexity increases.
●
Completion time...unknown.
●
Domino effect.
Clean Application Development – How we cause it?
86. 86
● How do we handle this?
●
Severely padded estimates.
●
Hide.
●
Become defensive.
●
Blame others/requirements.
●
Add more developers to increase productivity.
●
New developers break the system, because they don't “know“ it.
●
Change jobs.
●
Rewrite!
Clean Application Development – The aftermath
87. 87
● Others judge us on our code
●
We are @authors.
●
Others read our code regularly.
●
And they talk about it!
●
How developers talk about us = “CRED“.
Clean Application Development – You are judged
And they talk about it!
88. 88
● Coding Standards save time
●
Choosing a standard gives direction on best practices.
●
PHP Framework Interoperability Group (https://www.php-fig.org).
●
PSR-0 Autoloader.
●
PSR-1 Basic Coding Standard.
●
PSR-2 Coding Style Guide.
●
PSR-3 Logging
●
PEAR (helped with PSR).
●
Zend Framework (helped with PSR).
●
Symfony2 (helped with PSR).
●
CakePHP (helped with PSR.
●
Lithium (helped with PSR).
●
Many more (helped with PSR).
Clean Application Development – Coding standards
89. 89
● Names should be clear
●
Functions and variables should tell a story.
Clean Application Development – Clear names
$elapsedTimeInDays;
$daysSinceCreation;
$daysSinceModified;
$fileAgeInDays;
$elapsed;
$createdDays;
$modifiedDays;
$age;
GoodBad
90. 90
● Shy away from variations of the same name
●
To ensure names are different enough to portray difference.
Clean Application Development – No confusion
$product
$productInfo
$productData
$productDescription
What is the difference between these?
91. 91
● Certain characters are hard to understand
Clean Application Development – Bad characters
Lower case L
Uppercase O (oh)
Uppercase I (eye)
Bad
92. 92
● Use technical names to help developers, since developers will be
reading the code. Leave non-technical terms for client
documentation.
● Class names should be nouns
●
They describe.
●
Ex. - Customer, Account, Product, Company.
● Method names should be verbs
●
Take action.
●
Ex. - getCustomer, closeAccount, updateProduct, addCompany.
●
Pick a set of keywords and stick with them.
●
Ex. - fetch, get, add, update, remove, delete
Clean Application Development – Name grammar
93. 93
● With all of these problems, clean code makes sense
●
Shortens development time.
●
On-boarding of developers easier.
●
Less bugs.
●
Happier end-users.
●
Predictable schedules.
●
It's the professional thing to do.
Clean Application Development – Common sense
94. 94
● The problem with a rewrite
●
Reasons NOT to rewrite:
●
Budget.
●
Time.
●
Retain business logic.
●
Rewrite is the lazy way out. (perceived)
●
Refactoring = best teacher.
●
Circle of HELL!
Clean Application Development – Rewrite problems
95. 95
● More on Clean Code
●
Functions are pretty much what we expected. No surprises.
●
Small and well named.
●
Code makes language look simple.
●
Recognizing bad code doesn't mean we know how to write clean code.
●
We know if a song is good/bad, but we are not song writers.
●
Knowing code is bad doesn't mean we know how to clean it up.
●
Clean code is written by someone who cares, and it can't really be changed
much.
●
Does not require many, if any, comments.
Clean Application Development – Clean code
96. 96
● Comments can also be a bad “smell“
●
Comments are often used to cover up bad code.
●
Code should be self-documenting
Clean Application Development – Code comments
97. 97
● Standard and quick solutions to common coding problems
●
Provide standard ways of dealing with common code problems.
●
“Guide to PHP Design Patterns“ by Jason Sweat.
●
“Design Patterns, Elements of Reusable Object-Oriented Software“ by Gang of
four
Clean Application Development – Design Patterns
98. 98
● Peer code review great learning tool
●
Peers help train each other on strong points.
●
Fresh set of eyes.
●
Builds better teams.
Clean Application Development – Peer code reviews
100. 100
● Great refactoring resource.
Clean Application Development – Resources
Refactoring
By Martin Fowler
Companion PHP code at: https://github.com/adamculp/refactoring101
101. 101
● What is refactoring?
●
...process of changing a computer program's source code without modifying its
external functional behavior... en.wikipedia.org/wiki/Refactoring
●
Should not add functionality.
●
Improve code readability.
●
Simplify code.
●
Not optimizing.
Clean Application Development – Definition
102. 102
● Two hats
●
Adding functionality hat
●
Refactoring hat
●
We add functionality, then refactor, then add more functionality ...
Clean Application Development – Two Hats
104. 104
● Code smells
●
What are smells?
●
Indications of spoiled code nearby.
●
Not conclusive.
●
Smell is not bad code, but hints of potential problems.
Clean Application Development – Code Smells
105. 105
● Smells list
●
Duplicate code.
●
Large class.
●
Long methods (functions).
●
Long parameter (argument) list.
●
Divergent change – cascade change to accommodate one.
●
Shotgun surgery – change ripples as bugs throughout.
●
Feature envy – method uses many parts from other class.
●
Data clumps – data items accompany one another.
●
Primitive Obsession – using primitive objects to represent various concepts in
places they don't actually fit. (string vs integer, integer vs float, string vs date)
●
Switch statements – often not alone, and sacrifice polymorphism.
Clean Application Development – Smells of bad
code
106. 106
● Smells list (cont'd.)
●
Parellel inheritance hierarchies – forced to subclass due to another subclass.
●
Lazy class – class not doing much, just to be a class.
●
Speculative generality – something built for possible future.
●
Temporary field/variable.
●
Message chains – object asking object asking object, etc.
●
Middle man – directors in place but serve no real purpose.
●
Inappropriate intimacy – classes should not share private parts.
●
Data class – getters and/or setters, but nothing else.
●
Comments – where comments explain bad code.
Clean Application Development – Smells of bad
code
107. 107
● Let PHP CodeSniffer detect bad smells
●
Set rules to detect if coding standard is not followed.
●
Run during commits in version control.
●
IDE integration.
Clean Application Development – Code sniffer
108. 108
● When to refactor?
●
No special time, do in short bursts.
●
Don't decide to refactor, do it to gain something.
●
Prior to adding functionality.
●
Highlights code to modify.
●
Fix code preventing addition.
●
When fixing a bug.
●
Makes code understandable.
●
Highlights the bug.
●
During code review.
●
Fresh eyes see things differently.
●
More concrete results.
Clean Application Development – When to refactor
109. 109
● First steps
●
Use source control (Git, SVN, etc.)
●
Record each step, and provides rollback points.
●
Prove we did/didn't break it.
●
We MUST FIRST GET IT WORKING!
●
Do NOT refactor a broken application.
●
Pre-load database or create fixtures for consistent results.
●
Create tests on working application.
Clean Application Development – How to start
110. 110
● Tests and refactoring
●
Cannot properly refactor without tests.
●
To gauge success/failure.
●
Basic refactor steps:
●
Ensure tests pass.
●
Plan refactor.
●
Implement.
●
Ensure tests still pass.
●
Updating tests if needed.
●
Only needed if structure changed.
●
Add more tests to cover newly discovered items.
●
Repeat!
Clean Application Development – Tests
124. 124
● We can tell pretty simply this “looks“ like a library. (bookshelves,
computers, book categories)
Clean Application Development – Clear architecture
125. 125
● With cars driving through and shelves on the sides we can guess
this is a drive through.
Clean Application Development – Simple overview
126. 126
● These are pretty obvious without any explanation.
Clean Application Development – Obvious purpose
127. 127
● This would take a bit more digging to figure out.
Clean Application Development – MVC
architecture?
130. 130
● Selenium IDE
●
Integrated into browsers.
●
Automates human steps.
●
Customizable.
Clean Application Development – Selenium IDE
131. 131
● Behat
●
Open source.
●
For PHP 5.3 and 5.4.
●
Human-readable sentences describing feature.
Clean Application Development – Behavior Driven
132. 132
● Unit testing (our parachute) ensures we write clean code
●
A unit test should only test one thing, a function may need multiple tests.
●
Function should only do one thing, making them short.
●
Testing ensures system is functioning as expected.
●
Helps make refactoring and cleaning easier.
Clean Application Development – Unit Testing
133. 133
● Unit testing is important, so should be done first
●
Write failing tests first, then write the code required to make it pass.
Clean Application Development – TDD
134. 134
● If tests are trusted, they become QA process
●
If tests are good, QA finds no issues.
●
If QA finds an issue, write a test for it.
●
Tests cover requirements.
●
Tests = requirements.
●
QA to write automated tests that fail.
●
Developers execute tests during
development till they pass.
Clean Application Development – Tests = QA
135. 135
● Put QA at the begining of the process, instead of the end
●
QA has a terrible job, waiting for code to test.
●
If they write unit tests they jump to the front.
●
Developers write code to pass tests.
●
The end is not so bad now.
Clean Application Development – QA and unit tests
142. 142
● Our clients hired a professional, they should get one
●
Professionals are trusted to do a good job, give good estimate, and provide
quality.
●
Professionals are fairly easily replaced, depending on availability.
●
Replaceable = Promotable
(and you can take vacation easily)
●
Shouldn't need to start from scratch.
Clean Application Development – Human resources
143. 143
● Clean application development is:
●
Learning, repetition, practice.
●
Clear architecture.
●
Coding standards and styles.
●
Framework and best practices.
●
Testing.
●
Agile.
●
Learning to say “NO“, and defend the code.
●
Living up to the title “Professional“.
Clean Application Development – Close
144. ● Resources
●
Adam Culp @adamculp and http://geekyboy.com
●
http://RunGeekRadio.com
●
Book: “Clean Code“ by Robert C. Martin
●
Book: “Refactoring“ by Martin Fowler
●
Book: “Guide to PHP Design Patterns“ by Jason Sweat
●
Book: “Design Patterns“ by Gang of four
●
http://www.php-fig.org
●
http://www.phpunit.de
●
http://www.soflophp.org Thank You!
https://joind.in/14892