The strategy pattern defines a family of algorithms, encapsulates each one, and makes them interchangeable. It allows an algorithm's behavior to vary independently from clients that use it. The strategy pattern can help manage complex conditional logic by replacing conditionals with object composition. Walkthrough examples demonstrate extracting an algorithm into strategy objects from a class to vary behaviors independently through composition rather than inheritance.
Formalizing (Web) Standards: An Application of Test and ProofAchim D. Brucker
Most popular technologies are based on informal or semiformal standards that lack a rigid formal semantics. Typical examples include web technologies such as the DOM or HTML, which are defined by the Web Hypertext Application Technology Working Group (WHATWG) and the World Wide Web Consortium (W3C). While there might be API specifications and test cases meant to assert the compliance of a certain implementation, the actual standard is rarely accompanied by a formal model that would lend itself for, e.g., verifying the security or safety properties of real systems.
Even when such a formalization of a standard exists, two important questions arise: first, to what extend does the formal model comply to the standard and, second, to what extend does the implementation comply to the formal model and the assumptions made during the verification? In this paper, we present an approach that brings all three involved artifacts - the (semi-)formal standard, the formalization of the standard, and the implementations - closer together by combining verification, symbolic execution, and specification based testing.
My perspective on MVP and architecture discussionsPaul Blundell
Talk about what MVP means to different people and how using MVP doesn't even matter. It's about the discussion.
I've hacked an app together with MVP, I want to show my findings and opinions about the most over defined term for a pattern ever.
Android Testing Support Library: The Nitty Gritty - Zan Markan - Codemotion M...Codemotion
8 years since Android’s been released we finally have a proper Google-supported solution for testing in the Testing Support Library. We’ll go through the various stages of it, explore it’s (not so) hidden features and learn how to use it to build better apps. We will cover things such as (breaking the) test Rules, (outrunning the) test Runners and how to make most of tools such as Espresso & Firebase Test Lab.
Http Caching for the Android AficionadoPaul Blundell
Talk about how API caching works and what we expect our clients APIs to have in the best case and what we usually get.
Explaining how ETags work and Cache-Control is used. Touches a little on cache invalidation and rest level 3.
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
Formalizing (Web) Standards: An Application of Test and ProofAchim D. Brucker
Most popular technologies are based on informal or semiformal standards that lack a rigid formal semantics. Typical examples include web technologies such as the DOM or HTML, which are defined by the Web Hypertext Application Technology Working Group (WHATWG) and the World Wide Web Consortium (W3C). While there might be API specifications and test cases meant to assert the compliance of a certain implementation, the actual standard is rarely accompanied by a formal model that would lend itself for, e.g., verifying the security or safety properties of real systems.
Even when such a formalization of a standard exists, two important questions arise: first, to what extend does the formal model comply to the standard and, second, to what extend does the implementation comply to the formal model and the assumptions made during the verification? In this paper, we present an approach that brings all three involved artifacts - the (semi-)formal standard, the formalization of the standard, and the implementations - closer together by combining verification, symbolic execution, and specification based testing.
My perspective on MVP and architecture discussionsPaul Blundell
Talk about what MVP means to different people and how using MVP doesn't even matter. It's about the discussion.
I've hacked an app together with MVP, I want to show my findings and opinions about the most over defined term for a pattern ever.
Android Testing Support Library: The Nitty Gritty - Zan Markan - Codemotion M...Codemotion
8 years since Android’s been released we finally have a proper Google-supported solution for testing in the Testing Support Library. We’ll go through the various stages of it, explore it’s (not so) hidden features and learn how to use it to build better apps. We will cover things such as (breaking the) test Rules, (outrunning the) test Runners and how to make most of tools such as Espresso & Firebase Test Lab.
Http Caching for the Android AficionadoPaul Blundell
Talk about how API caching works and what we expect our clients APIs to have in the best case and what we usually get.
Explaining how ETags work and Cache-Control is used. Touches a little on cache invalidation and rest level 3.
Dependency Injection for Android @ Ciklum speakers corner Kiev 29. May 2014First Tuesday Bergen
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design
Patterns are formalized best practices that the programmer must implement in the application.
Refactoring can either completely disrupt your project or make you go faster. This presentation will help you to avoid some pitfalls.
It also demonstrates refactorings that you could apply straight away to make your code better.
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
Simple Commsion Calculationbuild.xmlBuilds, tests, and runs t.docxbudabrooks46239
Simple Commsion Calculation/build.xml
Builds, tests, and runs the project Simple Commsion Calculation.
Simple Commsion Calculation/manifest.mf
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Simple Commsion Calculation/nbproject/build-impl.xml
Must set src.dir
Must set test.src.dir
Must set build.dir
Must set dist.dir
Must set build.classes.dir
Must set dist.javadoc.dir
Must set build.test.classes.dir
Must set build.test.results.dir
Must set build.classes.excludes
Must set dist.jar
Must set javac.includes
.
At upday, we’ve been successfully using the Model-View-ViewModel pattern together with RxJava for more than a year and half. After sharing with the community a very high level overview of what this pattern entails, we decided that it’s time to go deeper in the implementation details.
I will present our way of handling Android classes and other 3rd party dependencies, and how we make sure that our code is as unit-testable as possible. I’ll speak about our decision process on how to split classes, may they be Views, ViewModels or DataModels, and the benefits and drawbacks of these separations.
Any non-”Hello World” app will most likely have two things: multiple Activities/Fragments, of which at least one will contain a ListView/RecyclerView. I will show how we decided to implement the navigation between Views and how we test it. Then I’ll show how we handle lists: how is the data added to the list, and how and who listens and reacts to list items taps.
Morgage/build/classes/.netbeans_automatic_build
Morgage/build/classes/.netbeans_update_resources
Morgage/build/classes/morgage/Morgage.classpackage morgage;
publicsynchronizedclass Morgage {
public void Morgage();
public void programFunction();
public double calculateMonthlyPropertyTax(double);
public double calculateMonthlyInsurancePremium(double);
public double calculateMonthlyPrincipleInterestLoan(double, double);
public void display(double, double, double);
publicstatic void main(String[]);
}
Morgage/build.xml
Builds, tests, and runs the project Morgage.
Morgage/manifest.mf
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Morgage/nbproject/build-impl.xml
...
How much do we know about Object-Oriented Programming?Sandro Mancuso
This talk goes through many of the Object-Oriented Programming principles and characteristics. Things that all developers should have in mind while writing code.
In this presentation reflects on the entire journey of refactoring a legacy code base.
Some of the main discussion points:
- Why refactoring is necessary
- How, give step-by-step examples
- How to manage the lack of automated functional tests effectively.
Through this presentation you can gain more insights and tips on how to handle their own pile of code and refactor happily.
This Presentation will give u information about Android :
1. Creating menus- Options Menu.
2. Context Menu Styles and themes Creating dialogs- Alert Dialog,
3. DatePicker Dialog,
4. TimePicker Dialog,
5. Progress Dialog
In depth overview of the Flex data binding code generation. Provides info on accomplish data binding through actionscript as well as limitations of the process.
What is software crafting and software craftsmanship, how does it relate to you and your career. This is a lightening talk based on the longer variant given at various conferences.
The journey of a craftsperson is difficult and never-ending, full of hard work, sweat, and tears but it is also a journey of joy, discovery, knowledge acquisition, and professional growth.
We’ve created Novoda Craftsmanship University (NCU) so that employee's can take this journey together.
In this talk Paul Blundell will show how you can apply principles of craftsmanship to complex & iterative mobile Android & iOS products and how mobile craftspeople develop together and share knowledge at Novoda through the NCU.
We are happy to invite you to the Speakers’ Corner today, on Thursday May 29, from 18.30 till 19.30 at SkyPoint to meet Thomas Vervik, Head of Development Bipper Communications who will talk on “How to save money on QA - Dependency Injection and automated testing on Android”
Thomas is Head of Development for Bipper Communications, and has been managing the company's team in Kiev since February 2012. Originally a seasoned Java server backend/frontend developer, he has the last two years started mobile development, first with HTML 5 and later Android.
Mobile development has since its birth around 2008 gone from simple apps to more complex enterprise similar software. The increase in size and complexity yields the need for structuring the code differently in order to handle the new complexity. The tools used to handle this complexity has been applied to server side development for years, but mobile development has been lagging behind.
But not anymore. New frameworks built on proven paradigms are emerging, and in this Speakers Corner we will introduce Dependency Injection for Android, the motivation for its use, and one of the implementations - Dagger. Dependency Injection has several advantages, but in this presentation we will focus on how it enables to write proper automated tests.
In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design
Patterns are formalized best practices that the programmer must implement in the application.
Refactoring can either completely disrupt your project or make you go faster. This presentation will help you to avoid some pitfalls.
It also demonstrates refactorings that you could apply straight away to make your code better.
Domain Driven Design (DDD) is a topic that's been gaining a lot of popularity in both the Java and .NET camps recently. Entities, value types, repositories, bounded contexts and anti-corruption layers -- find out what all the buzz is about, and how establishing a domain model can help you combat complexity in your code.
Richard Dingwall is a .NET developer and blogger with a passion for architecture and maintainable code.
He is currently working at Provoke Solutions as lead developer on a six-month project introducing test-driven development (TDD) and domain-driven design (DDD) to a large ASP.NET ERP system.
An hour-long talk given at Wellington .NET user group, Sept 23 2009.
Simple Commsion Calculationbuild.xmlBuilds, tests, and runs t.docxbudabrooks46239
Simple Commsion Calculation/build.xml
Builds, tests, and runs the project Simple Commsion Calculation.
Simple Commsion Calculation/manifest.mf
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Simple Commsion Calculation/nbproject/build-impl.xml
Must set src.dir
Must set test.src.dir
Must set build.dir
Must set dist.dir
Must set build.classes.dir
Must set dist.javadoc.dir
Must set build.test.classes.dir
Must set build.test.results.dir
Must set build.classes.excludes
Must set dist.jar
Must set javac.includes
.
At upday, we’ve been successfully using the Model-View-ViewModel pattern together with RxJava for more than a year and half. After sharing with the community a very high level overview of what this pattern entails, we decided that it’s time to go deeper in the implementation details.
I will present our way of handling Android classes and other 3rd party dependencies, and how we make sure that our code is as unit-testable as possible. I’ll speak about our decision process on how to split classes, may they be Views, ViewModels or DataModels, and the benefits and drawbacks of these separations.
Any non-”Hello World” app will most likely have two things: multiple Activities/Fragments, of which at least one will contain a ListView/RecyclerView. I will show how we decided to implement the navigation between Views and how we test it. Then I’ll show how we handle lists: how is the data added to the list, and how and who listens and reacts to list items taps.
Morgage/build/classes/.netbeans_automatic_build
Morgage/build/classes/.netbeans_update_resources
Morgage/build/classes/morgage/Morgage.classpackage morgage;
publicsynchronizedclass Morgage {
public void Morgage();
public void programFunction();
public double calculateMonthlyPropertyTax(double);
public double calculateMonthlyInsurancePremium(double);
public double calculateMonthlyPrincipleInterestLoan(double, double);
public void display(double, double, double);
publicstatic void main(String[]);
}
Morgage/build.xml
Builds, tests, and runs the project Morgage.
Morgage/manifest.mf
Manifest-Version: 1.0
X-COMMENT: Main-Class will be added automatically by build
Morgage/nbproject/build-impl.xml
...
How much do we know about Object-Oriented Programming?Sandro Mancuso
This talk goes through many of the Object-Oriented Programming principles and characteristics. Things that all developers should have in mind while writing code.
In this presentation reflects on the entire journey of refactoring a legacy code base.
Some of the main discussion points:
- Why refactoring is necessary
- How, give step-by-step examples
- How to manage the lack of automated functional tests effectively.
Through this presentation you can gain more insights and tips on how to handle their own pile of code and refactor happily.
This Presentation will give u information about Android :
1. Creating menus- Options Menu.
2. Context Menu Styles and themes Creating dialogs- Alert Dialog,
3. DatePicker Dialog,
4. TimePicker Dialog,
5. Progress Dialog
In depth overview of the Flex data binding code generation. Provides info on accomplish data binding through actionscript as well as limitations of the process.
What is software crafting and software craftsmanship, how does it relate to you and your career. This is a lightening talk based on the longer variant given at various conferences.
The journey of a craftsperson is difficult and never-ending, full of hard work, sweat, and tears but it is also a journey of joy, discovery, knowledge acquisition, and professional growth.
We’ve created Novoda Craftsmanship University (NCU) so that employee's can take this journey together.
In this talk Paul Blundell will show how you can apply principles of craftsmanship to complex & iterative mobile Android & iOS products and how mobile craftspeople develop together and share knowledge at Novoda through the NCU.
Android Things is Googles latest foray into the Internet of Things. Android Things lets you build professional, mass-market products on a trusted platform, without previous knowledge of embedded system design. IoT devices need testing too.
We will talk about how to architect your Android Things applications to enable testing and explore best practices to keep your codebase clean and your IoT devices solid.
The second half of the talk will be a deeper dive into controlling Android Things peripherals. We'll explain what are user drivers, how they work, how to use them, and most importantly: how you can create and test a new driver from scratch that can be used from Android Things to interact with new peripherals.
A deep dive into Jenkins Continuos Integration, how you can enable your team to collaborate more, run tests and configure the robots to do all the things for you. Also talking about caveats around automation, testing on real devices, usb hub woes and more.
Google I/O 2015 Android & Tech AnnouncementsPaul Blundell
Explaining what went on at Google I/O 2015, what new announcements where made my Google with the release of Android M, their new API's, the technology around ATAP including Project Ara, Soli and Jacquard
Android Jam - Services & Notifications - Udacity Lesson 6 Paul Blundell
http://developerstudyjams.com/
Week 7 - Retrospectively looking at Udacity Lesson 6 Services & Notifications
Google Developers Study Jams is a free series of global, community-run, in-person study groups. The first Study Jams series is presented in partnership with Udacity and will follow their Android Fundamentals curriculum. Google Developer Group facilitators certified in the course will lead the Study Jams that meet once weekly for 8 - 9 weeks.
Promote using hashtag #devstudyjam
Android Jam - Loaders - Udacity Lesson 4cPaul Blundell
http://developerstudyjams.com/
Week 6 - Retrospectively looking at Udacity Lesson 4c Loaders
Google Developers Study Jams is a free series of global, community-run, in-person study groups. The first Study Jams series is presented in partnership with Udacity and will follow their Android Fundamentals curriculum. Google Developer Group facilitators certified in the course will lead the Study Jams that meet once weekly for 8 - 9 weeks.
Promote using hashtag #devstudyjam
Android Jam - ContentProviders - Udacity Lesson 4bPaul Blundell
http://developerstudyjams.com/
Week 6 - Retrospectively looking at Udacity Lesson 4b ContentProviders
Google Developers Study Jams is a free series of global, community-run, in-person study groups. The first Study Jams series is presented in partnership with Udacity and will follow their Android Fundamentals curriculum. Google Developer Group facilitators certified in the course will lead the Study Jams that meet once weekly for 8 - 9 weeks.
Promote using hashtag #devstudyjam
http://developerstudyjams.com/
Week 5 - Retrospectively looking at Udacity Lesson 4 Activity Lifecycle & Databases
Google Developers Study Jams is a free series of global, community-run, in-person study groups. The first Study Jams series is presented in partnership with Udacity and will follow their Android Fundamentals curriculum. Google Developer Group facilitators certified in the course will lead the Study Jams that meet once weekly for 8 - 9 weeks.
Promote using hashtag #devstudyjam
Releasing a great app is more than having a unique idea. It takes teamwork, collaboration and the will to be the best. At Novoda we make awesomeness happen. This talk is about our process from coding dojos to group design and iterative sprint planning with our customers. We'll describe some of our best practices as well as some of the components that can make a good app great.
This includes:
- Day-to-day processes: pairing tennis, gif code reviews and toggling hidden features.
- Work Environment: hack & tells, continuous communication & kicking ass at Tekken.
- Releasing the app: polishing & quantifying can get you top of the class and not listening to Google can get you expelled.
Finishing with some bonus Android coding tips and tricks and crazy AOSP anti-patterns.
Oh so you test? - A guide to testing on Android from Unit to MutationPaul Blundell
Everyone knows you need testing, but what are the different types of testing, how will each type benefit you and what libraries are available to ease the pain? This talk will run through an explanation of each type of testing (unit, integration, functional, acceptance, fuzz, mutation...) explaining upon each level of an Android app, the testing involved, how this will benefit you and how it will benefit your users. It will also explain the architecture of a well tested app. Finally ending with some examples and libraries that ease your accessibility into testing and help with faster more descriptive feedback.
How to add project based jenkings authorisation on your build server. This shows the benefits and the caveats of using this approach to secure your build server projects so that people can only view what they are authorised to view.
Large Language Models and the End of ProgrammingMatt Welsh
Talk by Matt Welsh at Craft Conference 2024 on the impact that Large Language Models will have on the future of software development. In this talk, I discuss the ways in which LLMs will impact the software industry, from replacing human software developers with AI, to replacing conventional software with models that perform reasoning, computation, and problem-solving.
Unleash Unlimited Potential with One-Time Purchase
BoxLang is more than just a language; it's a community. By choosing a Visionary License, you're not just investing in your success, you're actively contributing to the ongoing development and support of BoxLang.
Listen to the keynote address and hear about the latest developments from Rachana Ananthakrishnan and Ian Foster who review the updates to the Globus Platform and Service, and the relevance of Globus to the scientific community as an automation platform to accelerate scientific discovery.
How Recreation Management Software Can Streamline Your Operations.pptxwottaspaceseo
Recreation management software streamlines operations by automating key tasks such as scheduling, registration, and payment processing, reducing manual workload and errors. It provides centralized management of facilities, classes, and events, ensuring efficient resource allocation and facility usage. The software offers user-friendly online portals for easy access to bookings and program information, enhancing customer experience. Real-time reporting and data analytics deliver insights into attendance and preferences, aiding in strategic decision-making. Additionally, effective communication tools keep participants and staff informed with timely updates. Overall, recreation management software enhances efficiency, improves service delivery, and boosts customer satisfaction.
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisGlobus
JASMIN is the UK’s high-performance data analysis platform for environmental science, operated by STFC on behalf of the UK Natural Environment Research Council (NERC). In addition to its role in hosting the CEDA Archive (NERC’s long-term repository for climate, atmospheric science & Earth observation data in the UK), JASMIN provides a collaborative platform to a community of around 2,000 scientists in the UK and beyond, providing nearly 400 environmental science projects with working space, compute resources and tools to facilitate their work. High-performance data transfer into and out of JASMIN has always been a key feature, with many scientists bringing model outputs from supercomputers elsewhere in the UK, to analyse against observational or other model data in the CEDA Archive. A growing number of JASMIN users are now realising the benefits of using the Globus service to provide reliable and efficient data movement and other tasks in this and other contexts. Further use cases involve long-distance (intercontinental) transfers to and from JASMIN, and collecting results from a mobile atmospheric radar system, pushing data to JASMIN via a lightweight Globus deployment. We provide details of how Globus fits into our current infrastructure, our experience of the recent migration to GCSv5.4, and of our interest in developing use of the wider ecosystem of Globus services for the benefit of our user community.
Quarkus Hidden and Forbidden ExtensionsMax Andersen
Quarkus has a vast extension ecosystem and is known for its subsonic and subatomic feature set. Some of these features are not as well known, and some extensions are less talked about, but that does not make them less interesting - quite the opposite.
Come join this talk to see some tips and tricks for using Quarkus and some of the lesser known features, extensions and development techniques.
Software Engineering, Software Consulting, Tech Lead, Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Transaction, Spring MVC, OpenShift Cloud Platform, Kafka, REST, SOAP, LLD & HLD.
Navigating the Metaverse: A Journey into Virtual Evolution"Donna Lenk
Join us for an exploration of the Metaverse's evolution, where innovation meets imagination. Discover new dimensions of virtual events, engage with thought-provoking discussions, and witness the transformative power of digital realms."
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Shahin Sheidaei
Games are powerful teaching tools, fostering hands-on engagement and fun. But they require careful consideration to succeed. Join me to explore factors in running and selecting games, ensuring they serve as effective teaching tools. Learn to maintain focus on learning objectives while playing, and how to measure the ROI of gaming in education. Discover strategies for pitching gaming to leadership. This session offers insights, tips, and examples for coaches, team leads, and enterprise leaders seeking to teach from simple to complex concepts.
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
In this slide, we show the simulation example and the way to compile this solver.
In this solver, the Helmholtz equation can be solved by helmholtzFoam. Also, the Helmholtz equation with uniformly dispersed bubbles can be simulated by helmholtzBubbleFoam.
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!
Atelier - Innover avec l’IA Générative et les graphes de connaissancesNeo4j
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Allez au-delà du battage médiatique autour de l’IA et découvrez des techniques pratiques pour utiliser l’IA de manière responsable à travers les données de votre organisation. Explorez comment utiliser les graphes de connaissances pour augmenter la précision, la transparence et la capacité d’explication dans les systèmes d’IA générative. Vous partirez avec une expérience pratique combinant les relations entre les données et les LLM pour apporter du contexte spécifique à votre domaine et améliorer votre raisonnement.
Amenez votre ordinateur portable et nous vous guiderons sur la mise en place de votre propre pile d’IA générative, en vous fournissant des exemples pratiques et codés pour démarrer en quelques minutes.
OpenMetadata Community Meeting - 5th June 2024OpenMetadata
The OpenMetadata Community Meeting was held on June 5th, 2024. In this meeting, we discussed about the data quality capabilities that are integrated with the Incident Manager, providing a complete solution to handle your data observability needs. Watch the end-to-end demo of the data quality features.
* How to run your own data quality framework
* What is the performance impact of running data quality frameworks
* How to run the test cases in your own ETL pipelines
* How the Incident Manager is integrated
* Get notified with alerts when test cases fail
Watch the meeting recording here - https://www.youtube.com/watch?v=UbNOje0kf6E
Globus Connect Server Deep Dive - GlobusWorld 2024Globus
We explore the Globus Connect Server (GCS) architecture and experiment with advanced configuration options and use cases. This content is targeted at system administrators who are familiar with GCS and currently operate—or are planning to operate—broader deployments at their institution.
Globus Compute wth IRI Workflows - GlobusWorld 2024Globus
As part of the DOE Integrated Research Infrastructure (IRI) program, NERSC at Lawrence Berkeley National Lab and ALCF at Argonne National Lab are working closely with General Atomics on accelerating the computing requirements of the DIII-D experiment. As part of the work the team is investigating ways to speedup the time to solution for many different parts of the DIII-D workflow including how they run jobs on HPC systems. One of these routes is looking at Globus Compute as a way to replace the current method for managing tasks and we describe a brief proof of concept showing how Globus Compute could help to schedule jobs and be a tool to connect compute at different facilities.
Innovating Inference - Remote Triggering of Large Language Models on HPC Clus...Globus
Large Language Models (LLMs) are currently the center of attention in the tech world, particularly for their potential to advance research. In this presentation, we'll explore a straightforward and effective method for quickly initiating inference runs on supercomputers using the vLLM tool with Globus Compute, specifically on the Polaris system at ALCF. We'll begin by briefly discussing the popularity and applications of LLMs in various fields. Following this, we will introduce the vLLM tool, and explain how it integrates with Globus Compute to efficiently manage LLM operations on Polaris. Attendees will learn the practical aspects of setting up and remotely triggering LLMs from local machines, focusing on ease of use and efficiency. This talk is ideal for researchers and practitioners looking to leverage the power of LLMs in their work, offering a clear guide to harnessing supercomputing resources for quick and effective LLM inference.
3. What is it?
“Define a family of algorithms, encapsulate each one, and
make them interchangeable. Strategy lets the algorithm
vary independently from clients that use it.” Gang of Four
5. Why would I use it?
Strategy lets the algorithm vary independently from clients that use it
Strategy pattern allows you to prefer composition over inheritance
Adhere’s to the Open/Closed principle of SOLID
Helps manage the complexity of having numerous variations of an
algorithm
8. Walkthrough
Conditional logic in a variant controls which of several
variants of a calculation are executed.
Create a strategy for each variant and make the method
delegate the calculation to a Strategy instance.
12. Delegate to your Concrete
Strategy
public double capital() {
return new CapitalStrategy().capital(this);
}
public double capital() {
return new CapitalStrategy().capital(expiry, maturity, commitment, duration(), riskFactor()...);
}
Pass the context as parameter
Pass the necessary data parameters
13. Pass the context as parameter
- Making context methods visible to obtain
information, breaking ‘information hiding’
+ When your class gets new public methods they’re
instantly available
14. Pass the necessary data
parameters
- All data will be passed to all strategies regardless if
it needs that data
+ Involves the least coupling between the context and
the strategy
16. Pass the context as
parameterpublic class Loan {
….
public double capital() {
return new CapitalStrategy().capital(this);
}
double duration() {
return 0d;
}
int getUnusedPercentage() {
return new Random().nextInt(1);
}
double outstandingRiskAmount() {
return 0d;
}
double unusedRiskAmount() {
return 0d;
}
Date getExpiry() {
return expiry;
}
Date getMaturity() {
return maturity;
}
double getCommitment() {
return commitment;
}
}
17. Move functionality related to capital calc
public class CapitalStrategy {
public double capital(Loan loan) {
if (loan.getExpiry() == null && loan.getMaturity() != null) {
return loan.getCommitment() * duration() * riskFactorFor(loan);
}
if (loan.getExpiry() != null && loan.getMaturity() == null) {
if (getUnusedPercentage() != 1) {
return loan.getCommitment() * getUnusedPercentage()
* duration() * riskFactorFor(loan);
} else {
return (outstandingRiskAmount()
* duration() * riskFactorFor(loan))
+ unusedRiskAmount()
* duration() * unusedRiskFactorFor(loan);
}
}
return 0d;
}
...
18. Extract Field
public class Loan {
private final Date expiry;
private final Date maturity;
private final double commitment;
private final CapitalStrategy strategy;
public Loan(Date expiry, Date maturity, double commitment) {
this.expiry = expiry;
this.maturity = maturity;
this.commitment = commitment;
this.strategy = new CapitalStrategy();
}
public double capital() {
return strategy.capital(this);
}
...
...
Date getExpiry() {
return expiry;
}
Date getMaturity() {
return maturity;
}
double getCommitment() {
return commitment;
}
}
19. Extract Parameter
public static Loan newTermLoad(Date expiry, Date maturity, double commitment) {
return new Loan(expiry, maturity, commitment, new CapitalStrategy());
}
public static Loan newRevolver(Date expiry, Date maturity, double commitment) {
return new Loan(expiry, maturity, commitment, new CapitalStrategy());
}
public Loan(Date expiry, Date maturity, double commitment, CapitalStrategy capitalStrategy) {
this.expiry = expiry;
this.maturity = maturity;
this.commitment = commitment;
this.strategy = capitalStrategy;
}
20. Replace conditional with Polymorphism
public class CapitalStrategyTermLoan extends CapitalStrategy {
public double capital(Loan loan) {
return loan.getCommitment() * duration() * riskFactorFor(loan);
}
@Override
protected double duration() {
return 0d; // specific calculation for term loans
}
}
public static Loan newTermLoad(Date expiry, Date maturity, double commitment) {
return new Loan(expiry, maturity, commitment, new CapitalStrategyTermLoan());
}
21. Replace conditional with Polymorphism
public static Loan newTermLoad(Date expiry, Date maturity, double commitment) {
return new Loan(expiry, maturity, commitment, new CapitalStrategyTermLoan());
}
public static Loan newRevolver(Date expiry, Date maturity, double commitment) {
return new Loan(expiry, maturity, commitment, new CapitalStrategyRevolver());
}
public static Loan newAdvisedLine(Date expiry, Date maturity, double commitment, int riskRating) {
if(riskRating > 3) return null;
return new Loan(expiry, maturity, commitment, new CapitalStrategyAdvisedLine());
}
24. Benefits
+ Clarifies algorithms by decreasing or moving conditional
logic
+ Simplifies a class by moving variations of an algorithm
to a hierarchy
+ Enables one algorithm to be swapped for another at
runtime
25. Liabilities
- Complicates a design when simpler refactorings like
compose method are available
- Complicates how an algorithm obtains or receives data
from their context class
29. Refactoring ‘towards’ a
pattern- Refactor to, towards or away
- Some patterns are all or nothing
- Aim is always for a better design
- Evaluate if the design has improved
- Pools of Insight
http://www.industriallogic.com/papers/khdraft.pdf
30. Further Reading
Refactoring - Martin Fowler
Refactoring to Patterns - Joshua Kerievsky
Head First Design Patterns - Elisabeth Freeman
Design Patterns - Gof
https://www.goodreads.com/genres/novoda-new-starts-
reading
This is my strategy. There are many many like it, but this one is mine.
the strategy pattern (also known as the policy pattern)
The strategy pattern is the creation an inter-changeable family of algorithms interchangeable at run-time.
You can think of the strategy pattern in use at a Formula One race track, the tyres are inter-changeable at runtime, they can be changed when the car comes into the pit lane depending on how the car is running, track conditions, weather, other drivers. It’s always a car but the tyre style can change.
Using composition allows you to have a Car that has a normal brake strategy or a break with ABS strategy.
Allowing the car to be open to extension but closed to modification. (Modification & inheritance would mean someone can subclass & override braking behavour).
Enough TALK, let’s get hands on and run through a real scenario for using the Strategy Pattern.
You can introduce parameter objects, or pass data through constructors
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Passing the context is much simpler at the moment because otherwise i’d have to pass 8+ parameters
Once size does not fit all
When not to use replace conditional with strategy pattern
When to consider replace conditional with polymorphism
Decorator & Strategy both eliminate conditional logic around special cases or alternative behaviour.
If the code under inspection is part of an inheritance hierarchy each algorithm might map to one subclass.
if not already inheritance you have to consider if your algorithm just depends on one type code, you might be better creating subclasses.
No type code - go for strategy.
Swapping algorithms at runtime, you should avoid inheritance based approaches because this would mean changing the type of the object the client is working with rather than substituting a strategy.