Aspect-oriented programming (AOP) is a programming paradigm that aims to increase modularity by allowing separation of cross-cutting concerns. It does this through aspects, which can encapsulate code that implements a cross-cutting concern and be attached to other code to augment its behavior. There are two main AOP styles - interception, which modifies code execution at runtime through decorators, and IL weaving, which modifies the code during compilation. Both allow aspects to be cleanly separated from core concerns and attached to any code construct.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
Build software like a bag of marbles, not a castle of LEGO®Hannes Lowette
If you have ever played with LEGO®, you will know that adding, removing or changing features of a completed castle isn’t as easy as it seems. You will have to deconstruct large parts to get to where you want to be, to build it all up again afterwards. Unfortunately, our software is often built the same way. Wouldn’t it be better if our software behaved like a bag of marbles? So you can just add, remove or replace them at will?
Most of us have taken different approaches to building software: a big monolith, a collection of services, a bus architecture, etc. But whatever your large scale architecture is, at the granular level (a single service or host), you will probably still end up with tightly couple code. Adding functionality means making changes to every layer, service or component involved. It gets even harder if you want to enable or disable features for certain deployments: you’ll need to wrap code in feature flags, write custom DB migration scripts, etc. There has to be a better way!
So what if you think of functionality as loose feature assemblies? We can construct our code in such a way that adding a feature is as simple as adding the assembly to your deployment, and removing it is done by just deleting the file. We would open the door for so many scenarios!
In this talk, I will explain how to tackle the following parts of your application to achieve this goal: WebAPI, Entity Framework, Onion Architecture, IoC and database migrations. And most of all, when you would want to do this. Because… ‘it depends’.
La vita nella corsia di sorpasso; A tutta velocità, XPages!Ulrich Krause
Using XPages out of the box lets you build good looking and well performing applications. However, as XPage applications become bigger and more complex, performance can become an issue and, if it comes to scalability and speed optimization, there are a couple of things to take into consideration. Learn how to use partial refresh and partial execution mode and how to monitor its execution using a JSF LifeCycle monitor to avoid multiple re-calculation of controls. We will show tools that can allow you to profile your code, readily available from OpenNTF, along with a demonstration of how to use them to improve the speed of your code. Still writing SSJS and encounter a significant slow down when using Script Libraries? See, how you can improve the speed of your application using JAVA instead of JS, JSON and even @formulas.
Relatore per la sessione:
Ulrich Krause
Key considerations for multithreaded architectures in LabVIEWPiotr Demski
This presentation was given at LabVIEW Developer Days 2018 in Katowice. There are two key points discussed: first is using QHM architecture to improve user interface responsiveness. Second is using multiple threads (/loops/processes/actors/...) for doing "N same things" in parallel - the example case here is test stand with four test slots that make the same tests.
The slides themselves (without the presenter discussing them :) might not give the full picture of those topics, but they might give you just enough to think about some aspects of multithreaded LabVIEW architectures.
Behaviour testing for single-page applications and API’sAndrew Kirkpatrick
Talk given at ExploreTech Toronto in August 2017 by Andrew Kirkpatrick on behaviour testing for single-page applications and API’s using Gherkin, Behat and containerization
Next Level Unit Testing - Javacro 2019 - Dominik PoljakDominik Poljak
Writing JUnit tests in many cases can be challenging, especially when we are faced with strict deadlines. Even though there is a consensus in IT community that writing tests is necessary, there are usually few common reasons that prevent developers from writing them. First, you will learn how to increase readability of your tests by introducing consistent structure. Second, you will learn how to easiliy handle complexity of testing legacy code and reach any code coverage percentage. Third, you will learn more advanced approach that will enable you to create readable reports that even domain experts can easily understand.
Content
• Junit tests with BDD structure
• Mocking with Mockito and Powermock
• Generating Documentation from JUnit tests
Belfast, Ireland Selenium Meetup. An expansion of my lightning talk at the 2015 Selenium Conference. The pros and cons of cloud services and creating your own mobile grid.
Helpful Automation Techniques - Selenium Camp 2014Justin Ison
Utilize REST to shorten test time and reduce flakiness.
Proxy your way to shorter test runs without full integration tests.
Framework you’re using has a bug? Use the Selenium API as a work around!
AATs can be expensive and not valuable if not done right, and doing them right is not easy. They provide enormous benefit though, and are critical as software takes over the world and manual regression testing becomes infeasible. This goes through key benefits.
La vita nella corsia di sorpasso; A tutta velocità, XPages!Ulrich Krause
Using XPages out of the box lets you build good looking and well performing applications. However, as XPage applications become bigger and more complex, performance can become an issue and, if it comes to scalability and speed optimization, there are a couple of things to take into consideration. Learn how to use partial refresh and partial execution mode and how to monitor its execution using a JSF LifeCycle monitor to avoid multiple re-calculation of controls. We will show tools that can allow you to profile your code, readily available from OpenNTF, along with a demonstration of how to use them to improve the speed of your code. Still writing SSJS and encounter a significant slow down when using Script Libraries? See, how you can improve the speed of your application using JAVA instead of JS, JSON and even @formulas.
Relatore per la sessione:
Ulrich Krause
Key considerations for multithreaded architectures in LabVIEWPiotr Demski
This presentation was given at LabVIEW Developer Days 2018 in Katowice. There are two key points discussed: first is using QHM architecture to improve user interface responsiveness. Second is using multiple threads (/loops/processes/actors/...) for doing "N same things" in parallel - the example case here is test stand with four test slots that make the same tests.
The slides themselves (without the presenter discussing them :) might not give the full picture of those topics, but they might give you just enough to think about some aspects of multithreaded LabVIEW architectures.
Behaviour testing for single-page applications and API’sAndrew Kirkpatrick
Talk given at ExploreTech Toronto in August 2017 by Andrew Kirkpatrick on behaviour testing for single-page applications and API’s using Gherkin, Behat and containerization
Next Level Unit Testing - Javacro 2019 - Dominik PoljakDominik Poljak
Writing JUnit tests in many cases can be challenging, especially when we are faced with strict deadlines. Even though there is a consensus in IT community that writing tests is necessary, there are usually few common reasons that prevent developers from writing them. First, you will learn how to increase readability of your tests by introducing consistent structure. Second, you will learn how to easiliy handle complexity of testing legacy code and reach any code coverage percentage. Third, you will learn more advanced approach that will enable you to create readable reports that even domain experts can easily understand.
Content
• Junit tests with BDD structure
• Mocking with Mockito and Powermock
• Generating Documentation from JUnit tests
Belfast, Ireland Selenium Meetup. An expansion of my lightning talk at the 2015 Selenium Conference. The pros and cons of cloud services and creating your own mobile grid.
Helpful Automation Techniques - Selenium Camp 2014Justin Ison
Utilize REST to shorten test time and reduce flakiness.
Proxy your way to shorter test runs without full integration tests.
Framework you’re using has a bug? Use the Selenium API as a work around!
AATs can be expensive and not valuable if not done right, and doing them right is not easy. They provide enormous benefit though, and are critical as software takes over the world and manual regression testing becomes infeasible. This goes through key benefits.
10 clues showing that you are doing OSGi in the wrong manner - Jerome Molieremfrancis
This presentation aims to show common pitfalls in OSGi architecture and development and how to avoid them. It involves concrete use cases and their solutions. Antipatterns, bad designs , bad tooling will be presented during this session... This session is user oriented and aimed to give concrete feedbacks and good practices...
Introduction to Aspect Oriented Programming (DDD South West 4.0)Yan Cui
Introduction to AOP talk at DDD SouthWest 4.0, including examples of AOP using dynamic proxies, functional programming, dynamic language and PostSharp.
The only constant in software development is CHANGE. Every piece of software that has been developed and shipped to a customer will be changed numerous times during it's life cycle. Depending on how well the code is designed, it is more or less easy to implement changes. MVC, which is an acronym for Model - View - Controller is no new concept. In fact this design paradigm was created by Xerox in the 80's, and it is becoming THE recommended model for designing frameworks - especially on the web. The session will give an overview of design pattern in general and MVC in particular. We will show, how to use the MVC design paradigm in an XPages application and demonstrate, how easy it is to implement changes. Need to read/write your data from/to an XML file instead of using a Notes View. MVC makes software maintenance easy as 1-2-3
My 6th. revision of my Stackato presentation given at the German Perl Workshop 2013 in Berlin, Germany,
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
Presentation of ActiveStates micro-cloud solution Stackato at Open Source Days 2012.
Stackato is a cloud solution from renowned ActiveState. It is based on the Open Source CloudFoundry and offers a serious cloud solution for Perl programmers, but also supports Python, Ruby, Node.js, PHP, Clojure and Java.
Stackato is very strong in the private PaaS area, but do also support as public PaaS and deployment onto Amazon's EC2.
The presentation will cover basic use of Stackato and the reason for using a PaaS, public as private. Stackato can also be used as a micro-cloud for developers supporting vSphere, VMware Fusion, Parallels and VirtualBox.
Stackato is currently in public beta, but it is already quite impressive in both features and tools. Stackato is not Open Source, but CloudFoundry is and Stackato offers a magnificent platform for deployment of Open Source projects, sites and services.
ActiveState has committed to keeping the micro-cloud solution free so it offers an exciting capability and extension to the developers toolbox and toolchain.
More information available at: https://logiclab.jira.com/wiki/display/OPEN/Stackato
Android development changed significantly in 2017 (Kotlin, Architecture Components and much more). Some of the most tricky and debatable questions now are: how to start a scalable project from scratch? How to decide which technology/library to use?
The HERE WeGo App team has worked for years to define a sophisticated release and development process, with a high level of automation that allowed to quickly followup on user issues and actively develop features. But legacy code and a large framework made it difficult to move even faster.
Lessons learned? We will discuss how to start over with all the learnings on a greenfield project.
Technologies that will be covered: Kotlin, Jenkins, JobDsl, Architecture Components, GraphQL, gRPC and more.
Java for in software industry. Our trainers are more experienced Java professionals and have worked with MNC companies. They will train each and every student of Besant Technologies to the next level. With our best training one can easily understand Java and will be placed. Our trainers will be training based on the present popular technologies in Java and they can be in touch all time for any suggestions and advice. We feel responsibility until you will be placed and can show you the best opportunities. Besant Technologies want its students to settle in their career as soon as possible.
URL:
https://goo.gl/3Rs1DH
https://goo.gl/1mF1hp
https://goo.gl/Eg3bn2
Survive the Chaos - S4H151 - SAP TechED Barcelona 2017 - LectureRainer Winkler
Software can easily become complex and difficult to handle - join this session to learn techniques on how to manage and prevent this. You will see how test seams for ABAP simplify unit tests, even in legacy ABAP code with many dependencies. We will demonstrate an OpenSource tool to automatically generate dependency graphs and use it in projects, and the main technique for working with legacy code - writing a characterization test and using it as safety net while making changes.
This presentation was given at the SAP TechED Barcelona 2017
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Slack (or Teams) Automation for Bonterra Impact Management (fka Social Soluti...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on the notifications, alerts, and approval requests using Slack for Bonterra Impact Management. The solutions covered in this webinar can also be deployed for Microsoft Teams.
Interested in deploying notification automations for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
2. Programming paradigm
which aims to increase modularity
by allowing the separation of
cross-cutting concerns
en.wikipedia.org/wiki/aspect-oriented-programming
3. Programming Paradigm
It is *NOT*
- a programming language
- solution to all your problems
- a first class citizen in Java
or .NET
- a replacement for OOP
It is
- a programming pattern
- a tool in your toolbox
- an easily added language
feature
- complimentary to OOP
4. Modularity
Aspects can…
• Exist in isolated and encapsulated constructs
• Be attached to almost any standard code construct
• Be transported between projects
5. Cross-Cutting Concerns
…aspects of a program that affect other concerns.
These concerns often cannot be cleanly decomposed
from the rest of the system in both the design and
implementation,
and can result in either scattering (code duplication),
tangling (significant dependencies between systems),
or both.
http://en.wikipedia.org/wiki/Cross-cutting_concern
6. …more simply
Any code functionality that repeats itself in a regular
pattern across many unrelated tiers/layers within a
codebase.
7.
8. Cross-Cutting Concerns
View
ViewModel
Model
Services
Domain Model
Repositories
Logging
Security
Auditing
Validation
INotifyPropertyChanged
Undo/Redo
Thread Management
Unit of Work Management
Circuit Breaker
9. AOP Styles
1. Interception
Interjecting the execution of cross-cutting concerns at
run time.
Non-invasive approach to modifying the code execution
path.
2. IL Weaving
Interjecting the planned execution of cross-cutting
concerns during the compilation process.
Invasive approach to modifying the code execution
path.
10. Interception
• Existing in IoC container implementations
• Follows a very strict decorator pattern
• Likely implemented using weak typing
• Run-time operation
• Can be applied en-masse
• Easy to implement if you’re already using IoC
11. Decorator Pattern
//new functionality before
//the code that already exists
//new functionality after
//exception handling
14. IL Weaving
• Post compilation process
• Alters the assembly/executable at an IL level
• Scary to people
• Can be attached to almost every code construct
• Very rare that it required changes to existing code
• Run and compile time operations
• Can be much easier to add to legacy code
15. The Process
Write Code
Compile
Application exe/dll
AOP post
compiler/weaver
Throw
compile-time
error
Deploy exe/dll
17. Run Time vs Compile Time
Run Time
• All aspect code executes in application context
Compile Time
• Code can be designated to run during post-compilation
• Compilation can fail for correct syntaxes but incorrect
business logic
19. The Traditional Arguments Against AOP
• It is “magic”
• We won’t be able to debug properly
• How do we know where aspects will be executed?
• It’s another thing we have to learn
• Changing the aspect will break the entire application
20. “Its magic!” & “We can’t debug it!”
• Both interception and IL weaving provide full line-by-line
debugging
• Attachment of aspects is explicit as you want it to be
21. “But which aspect(s) will run?”
• This is a tooling/discoverability problem, not a problem with
AOP itself
• PostSharp has very good VS integration showing what aspects
are attached to a piece of code
• Interceptor discoverability is a bigger problem
22. “Its another thing we have to learn”
Is it worse if we train them and
they leave or if we don’t train
them and they stay?
23. “Changing the aspect can break the
entire application!”
• You can probably do that in an number of different ways with
any codebase that doesn’t use AOP
• This is a problem caused by tight coupling and poor separation
of concerns
24. Your Project is Already Established…
You use IoC
• For logging, caching and possibly transaction management use
interception
• If the cross cutting concerns are more complex (Undo/Redo,
thread management) use IL Weaving
You don’t use IoC
• The only real option is to use IL Weaving
25. You’re Starting a New Project…
You have AOP buy-in from senior developers
• Start with IL Weaving, but start with simple, pre-built aspects
• Write custom aspects as experience and need grows
AOP is still unknown to the senior people on the team
• Start with IL Weaving, but start in a very isolated manner
• Use this as a proof of concept until you have senior level buy-in