Research @ RELEASeD (presented at SATTOSE2013)kim.mens
An overview of recent research results and directions at Prof. Kim Mens's RELEASeD research lab. Presented in July 2013 at SATTOSE2013 in Bern, Switzerland.
Why another test framework in dotnet ? In this presentation, I will try to convince you to switch to xUnit. Main concepts & extensibility points are covered here. Happy testing !
Research @ RELEASeD (presented at SATTOSE2013)kim.mens
An overview of recent research results and directions at Prof. Kim Mens's RELEASeD research lab. Presented in July 2013 at SATTOSE2013 in Bern, Switzerland.
Why another test framework in dotnet ? In this presentation, I will try to convince you to switch to xUnit. Main concepts & extensibility points are covered here. Happy testing !
Slides from my Feature Bits presentation at the 2010 Lean Software and Systems conference in Atlanta. See http://atlanta2010.leanssc.org/home/erik-sowa/ and http://www.leanssc.org/files/201004/videos/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams.html
Generation of Testcases from UML Sequence Diagram and Detecting Deadlocks usi...KIIT
Abstract:In an environment where processes those execute concurrently, speeding up their computation is important. Deadlock
is a major issue that occurs during concurrent execution. In this paper, we present an approach to generate testcases from UML
sequence diagram for detecting deadlocks during the design phase. This will reduce the effort and cost involved to fix deadlocks
at a later stage. Our work begins with design of sequence diagram for the system, then converting it to intermediate graph where
deadlock points are marked and then traverse to get testcases. The testcases thus generated are suitable for detecting deadlocks.
Benchmarking the Parallel 1D Heat Equation Solver in Chapel, Charm++, C++, HP...Patrick Diehl
Many scientific high performance codes that simulate e.g. black holes, coastal waves, climate and weather, etc. rely on block-structured meshes and use finite differencing methods to iteratively solve the ap- propriate systems of differential equations. In this paper we investigate implementations of an extremely simple simulation of this type using var- ious programming systems and languages. We focus on a shared memory, parallelized algorithm that simulates a 1D heat diffusion using asyn- chronous queues for the ghost zone exchange. We discuss the advantages of the various platforms and explore the performance of this model code on different computing architectures: Intel, AMD, and ARM64FX. As a result, Python was the slowest of the set we compared. Java, Go, Swift, and Julia were the intermediate performers. The higher performing plat- forms were C++, Rust, Chapel, Charm++, and HPX.
Julia: A modern language for software 2.0Viral Shah
This talk introduces the Julia language, the size of the community, the package ecosystem, differentiable programming, compiler design, and applications of scientific machine learning.
Ptidej Architecture, Design, and Implementation in Action v2.1Yann-Gaël Guéhéneuc
A set of process, architecture, design, and implementation patterns from a real, large program, the Ptidej Tool Suite. This set shows concrete problems and their solutions in Java. It includes: Be A Profiler, Tests as Documentation, Multi-layered Architecture, Proxy Console, Proxy Disk, Hidden Language, Internal Observer, Run-time Deprecation, String Parsimony, Object Identity, Object Address, Final Construction, StringBuffer as Positioning Element.
Just Click on Below Link To Download This Course:
https://www.devrycoursehelp.com/product/devry-cis-355a-full-course-latest/
Go to a job posting site (CareerBuilder, Dice, ComputerJobs, etc.) or use search engines to find Java developer or Java programmer positions. Copy and paste the job posting into the Discussion area. Briefly explore all the topics that you will learn in this class this session. What are the skills you will learn in this course that are also requirements for the positions you see posted by you and your classmates?
Slides from my Feature Bits presentation at the 2010 Lean Software and Systems conference in Atlanta. See http://atlanta2010.leanssc.org/home/erik-sowa/ and http://www.leanssc.org/files/201004/videos/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams/20100421_Sowa_EnabilingFlowWithinAndAcrossTeams.html
Generation of Testcases from UML Sequence Diagram and Detecting Deadlocks usi...KIIT
Abstract:In an environment where processes those execute concurrently, speeding up their computation is important. Deadlock
is a major issue that occurs during concurrent execution. In this paper, we present an approach to generate testcases from UML
sequence diagram for detecting deadlocks during the design phase. This will reduce the effort and cost involved to fix deadlocks
at a later stage. Our work begins with design of sequence diagram for the system, then converting it to intermediate graph where
deadlock points are marked and then traverse to get testcases. The testcases thus generated are suitable for detecting deadlocks.
Benchmarking the Parallel 1D Heat Equation Solver in Chapel, Charm++, C++, HP...Patrick Diehl
Many scientific high performance codes that simulate e.g. black holes, coastal waves, climate and weather, etc. rely on block-structured meshes and use finite differencing methods to iteratively solve the ap- propriate systems of differential equations. In this paper we investigate implementations of an extremely simple simulation of this type using var- ious programming systems and languages. We focus on a shared memory, parallelized algorithm that simulates a 1D heat diffusion using asyn- chronous queues for the ghost zone exchange. We discuss the advantages of the various platforms and explore the performance of this model code on different computing architectures: Intel, AMD, and ARM64FX. As a result, Python was the slowest of the set we compared. Java, Go, Swift, and Julia were the intermediate performers. The higher performing plat- forms were C++, Rust, Chapel, Charm++, and HPX.
Julia: A modern language for software 2.0Viral Shah
This talk introduces the Julia language, the size of the community, the package ecosystem, differentiable programming, compiler design, and applications of scientific machine learning.
Ptidej Architecture, Design, and Implementation in Action v2.1Yann-Gaël Guéhéneuc
A set of process, architecture, design, and implementation patterns from a real, large program, the Ptidej Tool Suite. This set shows concrete problems and their solutions in Java. It includes: Be A Profiler, Tests as Documentation, Multi-layered Architecture, Proxy Console, Proxy Disk, Hidden Language, Internal Observer, Run-time Deprecation, String Parsimony, Object Identity, Object Address, Final Construction, StringBuffer as Positioning Element.
Just Click on Below Link To Download This Course:
https://www.devrycoursehelp.com/product/devry-cis-355a-full-course-latest/
Go to a job posting site (CareerBuilder, Dice, ComputerJobs, etc.) or use search engines to find Java developer or Java programmer positions. Copy and paste the job posting into the Discussion area. Briefly explore all the topics that you will learn in this class this session. What are the skills you will learn in this course that are also requirements for the positions you see posted by you and your classmates?
May Marketo Masterclass, London MUG May 22 2024.pdfAdele Miller
Can't make Adobe Summit in Vegas? No sweat because the EMEA Marketo Engage Champions are coming to London to share their Summit sessions, insights and more!
This is a MUG with a twist you don't want to miss.
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I ...Juraj Vysvader
In 2015, I used to write extensions for Joomla, WordPress, phpBB3, etc and I didn't get rich from it but it did have 63K downloads (powered possible tens of thousands of websites).
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.
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."
Check out the webinar slides to learn more about how XfilesPro transforms Salesforce document management by leveraging its world-class applications. For more details, please connect with sales@xfilespro.com
If you want to watch the on-demand webinar, please click here: https://www.xfilespro.com/webinars/salesforce-document-management-2-0-smarter-faster-better/
AI Pilot Review: The World’s First Virtual Assistant Marketing SuiteGoogle
AI Pilot Review: The World’s First Virtual Assistant Marketing Suite
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-pilot-review/
AI Pilot Review: Key Features
✅Deploy AI expert bots in Any Niche With Just A Click
✅With one keyword, generate complete funnels, websites, landing pages, and more.
✅More than 85 AI features are included in the AI pilot.
✅No setup or configuration; use your voice (like Siri) to do whatever you want.
✅You Can Use AI Pilot To Create your version of AI Pilot And Charge People For It…
✅ZERO Manual Work With AI Pilot. Never write, Design, Or Code Again.
✅ZERO Limits On Features Or Usages
✅Use Our AI-powered Traffic To Get Hundreds Of Customers
✅No Complicated Setup: Get Up And Running In 2 Minutes
✅99.99% Up-Time Guaranteed
✅30 Days Money-Back Guarantee
✅ZERO Upfront Cost
See My Other Reviews Article:
(1) TubeTrivia AI Review: https://sumonreview.com/tubetrivia-ai-review
(2) SocioWave Review: https://sumonreview.com/sociowave-review
(3) AI Partner & Profit Review: https://sumonreview.com/ai-partner-profit-review
(4) AI Ebook Suite Review: https://sumonreview.com/ai-ebook-suite-review
top nidhi software solution freedownloadvrstrong314
This presentation emphasizes the importance of data security and legal compliance for Nidhi companies in India. It highlights how online Nidhi software solutions, like Vector Nidhi Software, offer advanced features tailored to these needs. Key aspects include encryption, access controls, and audit trails to ensure data security. The software complies with regulatory guidelines from the MCA and RBI and adheres to Nidhi Rules, 2014. With customizable, user-friendly interfaces and real-time features, these Nidhi software solutions enhance efficiency, support growth, and provide exceptional member services. The presentation concludes with contact information for further inquiries.
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar
The European Union Agency for Law Enforcement Cooperation (Europol) has suffered an alleged data breach after a notorious threat actor claimed to have exfiltrated data from its systems. Infamous data leaker IntelBroker posted on the even more infamous BreachForums hacking forum, saying that Europol suffered a data breach this month.
The alleged breach affected Europol agencies CCSE, EC3, Europol Platform for Experts, Law Enforcement Forum, and SIRIUS. Infiltration of these entities can disrupt ongoing investigations and compromise sensitive intelligence shared among international law enforcement agencies.
However, this is neither the first nor the last activity of IntekBroker. We have compiled for you what happened in the last few days. To track such hacker activities on dark web sources like hacker forums, private Telegram channels, and other hidden platforms where cyber threats often originate, you can check SOCRadar’s Dark Web News.
Stay Informed on Threat Actors’ Activity on the Dark Web with SOCRadar!
In software engineering, the right architecture is essential for robust, scalable platforms. Wix has undergone a pivotal shift from event sourcing to a CRUD-based model for its microservices. This talk will chart the course of this pivotal journey.
Event sourcing, which records state changes as immutable events, provided robust auditing and "time travel" debugging for Wix Stores' microservices. Despite its benefits, the complexity it introduced in state management slowed development. Wix responded by adopting a simpler, unified CRUD model. This talk will explore the challenges of event sourcing and the advantages of Wix's new "CRUD on steroids" approach, which streamlines API integration and domain event management while preserving data integrity and system resilience.
Participants will gain valuable insights into Wix's strategies for ensuring atomicity in database updates and event production, as well as caching, materialization, and performance optimization techniques within a distributed system.
Join us to discover how Wix has mastered the art of balancing simplicity and extensibility, and learn how the re-adoption of the modest CRUD has turbocharged their development velocity, resilience, and scalability in a high-growth environment.
Understanding Globus Data Transfers with NetSageGlobus
NetSage is an open privacy-aware network measurement, analysis, and visualization service designed to help end-users visualize and reason about large data transfers. NetSage traditionally has used a combination of passive measurements, including SNMP and flow data, as well as active measurements, mainly perfSONAR, to provide longitudinal network performance data visualization. It has been deployed by dozens of networks world wide, and is supported domestically by the Engagement and Performance Operations Center (EPOC), NSF #2328479. We have recently expanded the NetSage data sources to include logs for Globus data transfers, following the same privacy-preserving approach as for Flow data. Using the logs for the Texas Advanced Computing Center (TACC) as an example, this talk will walk through several different example use cases that NetSage can answer, including: Who is using Globus to share data with my institution, and what kind of performance are they able to achieve? How many transfers has Globus supported for us? Which sites are we sharing the most data with, and how is that changing over time? How is my site using Globus to move data internally, and what kind of performance do we see for those transfers? What percentage of data transfers at my institution used Globus, and how did the overall data transfer performance compare to the Globus users?
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.
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.
Top Features to Include in Your Winzo Clone App for Business Growth (4).pptxrickgrimesss22
Discover the essential features to incorporate in your Winzo clone app to boost business growth, enhance user engagement, and drive revenue. Learn how to create a compelling gaming experience that stands out in the competitive market.
Software Engineering, Software Consulting, Tech Lead.
Spring Boot, Spring Cloud, Spring Core, Spring JDBC, Spring Security,
Spring Transaction, Spring MVC,
Log4j, REST/SOAP WEB-SERVICES.
Experience our free, in-depth three-part Tendenci Platform Corporate Membership Management workshop series! In Session 1 on May 14th, 2024, we began with an Introduction and Setup, mastering the configuration of your Corporate Membership Module settings to establish membership types, applications, and more. Then, on May 16th, 2024, in Session 2, we focused on binding individual members to a Corporate Membership and Corporate Reps, teaching you how to add individual members and assign Corporate Representatives to manage dues, renewals, and associated members. Finally, on May 28th, 2024, in Session 3, we covered questions and concerns, addressing any queries or issues you may have.
For more Tendenci AMS events, check out www.tendenci.com/events
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
CyanicLab, an offshore custom software development company based in Sweden,India, Finland, is your go-to partner for startup development and innovative web design solutions. Our expert team specializes in crafting cutting-edge software tailored to meet the unique needs of startups and established enterprises alike. From conceptualization to execution, we offer comprehensive services including web and mobile app development, UI/UX design, and ongoing software maintenance. Ready to elevate your business? Contact CyanicLab today and let us propel your vision to success with our top-notch IT solutions.
Enhancing Research Orchestration Capabilities at ORNL.pdfGlobus
Cross-facility research orchestration comes with ever-changing constraints regarding the availability and suitability of various compute and data resources. In short, a flexible data and processing fabric is needed to enable the dynamic redirection of data and compute tasks throughout the lifecycle of an experiment. In this talk, we illustrate how we easily leveraged Globus services to instrument the ACE research testbed at the Oak Ridge Leadership Computing Facility with flexible data and task orchestration capabilities.
Accelerate Enterprise Software Engineering with PlatformlessWSO2
Key takeaways:
Challenges of building platforms and the benefits of platformless.
Key principles of platformless, including API-first, cloud-native middleware, platform engineering, and developer experience.
How Choreo enables the platformless experience.
How key concepts like application architecture, domain-driven design, zero trust, and cell-based architecture are inherently a part of Choreo.
Demo of an end-to-end app built and deployed on Choreo.
Accelerate Enterprise Software Engineering with Platformless
[COSCUP 2023] 我的Julia軟體架構演進之旅
1. 我的 Julia 軟體架構演進之旅
Yueh-Hua Tu Ph.D.
ML Engineer@Taiwan AI Labs
Saturday 29th July, 2023
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 1 / 28
3. Outline
1. Prototyping-Development Iteration
2. TDD and Test Coverage
3. Evolutionary Design
4. Principles of Software Engineering
5. Development Mindset
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 3 / 28
4. Developing from scratch
If we want a project for statistical analysis, where could we start?
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 4 / 28
5. Prototyping linear regression
Inference
y = Xβ
1 julia> predict(X, β)=X∗β
Fitting
β = (XT
X)−1
XT
y
1 julia> fit(X, y) = inv(X'*X) * X'*y
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 5 / 28
7. Prototyping-Development Iteration
Prototyping-Development Iteration (PDI)
Prototyping first then develop for flexibility and performance!
For prototyping and researching
Figure: Scripts
⇒
For development
Figure: Codebase
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 7 / 28
8. Prototyping-Development Iteration
Prototyping
Figure: Scripts
Implement a simple and standalone feature in a script
to ensure correctness.
1 julia> predict(X, β)=X∗β
2
3 julia> fit(X, y) = inv(X'*X) * X'*y
And try to wrap these features into functions.
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 8 / 28
9. Prototyping-Development Iteration
Development
Figure: Codebase
Puts functions or components into your codebase and design for
reusablility and flexibility.
1 struct LinearRegressionModel
2 β
3 end
4
5 coefs(m::LinearRegressionModel) = m.β
6
7 predict(m::LinearRegressionModel, X) = X*coefs(m)
8
9 fit(::Type{LinearRegressionModel}, X, y) =
LinearRegressionModel(inv(X'*X) * X'*y)
,
→
After putting components into codebase, ensure your scripts still work for you. Don't put to
much specifics into codebase (e.g. data, configs).
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 9 / 28
10. TDD and Test Coverage
TDD and Test Coverage
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 10 / 28
11. TDD and Test Coverage
Test-Driven Development (TDD)
Actually, PDI is a kind of TDD process.
We still need to add some test cases and ensure tests are passed.
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 11 / 28
12. TDD and Test Coverage
TDD in Julia
TDD is very simple in Julia.
test/runtests.jl
1 @testset "MyProject.jl" begin
2 @test coefs(model) == β
3 ...
4 end
1 (@v1.9) pkg> test
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 12 / 28
13. TDD and Test Coverage
Develop for flexibility
src/stats.jl
1 cov(X, Y) = innerprod(X, Y)
src/linalg.jl
1 innerprod(x, y) = x'*y
src/regression.jl
fit(::Type{LinearRegressionModel}, X, y) = LinearRegressionModel(inv(innerprod(X, X)) *
innerprod(X, y))
,
→
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 13 / 28
14. TDD and Test Coverage
Develop for performance
src/linalg.jl
function innerprod(X::AbstractMatrix, y::AbstractVector)
# acceleration techniques: SIMD, GPU...
end
function innerprod(X::AbstractMatrix, Y::AbstractMatrix)
# acceleration techniques: SIMD, GPU...
end
Specification for optimization and keep consistent interfaces.
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 14 / 28
15. TDD and Test Coverage
Test coverage
Keep high test coverage as possible to ensure your codebase provides desired features.
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 15 / 28
17. Evolutionary Design
Adding new features
If we want to add new approach to solve a linear system, how can we do?
Ax = b
1 using LinearSolve
2
3 A = rand(4, 4)
4 b = rand(4)
5 prob = LinearProblem(A, b)
6 sol = solve(prob)
Adding new features could be prototyped by
Adding types
Extending existing functions
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 17 / 28
18. Evolutionary Design
Adding types
Original
struct RegularSolver end
solve(m::RegularSolver, A, b) =
solve(LinearProblem(A, b))
,
→
⇒
Adding CholeskySolver
1 abstract type LinearSolver end
2
3 struct RegularSolver <: LinearSolver end
4 struct CholeskySolver <: LinearSolver end
5
6 solve(m::RegularSolver, A, b) =
solve(LinearProblem(A, b))
,
→
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 18 / 28
19. Evolutionary Design
Extending functions/methods
Original
abstract type LinearSolver end
struct RegularSolver <:
LinearSolver end
,
→
struct CholeskySolver <:
LinearSolver end
,
→
solve(m::RegularSolver, A, b) =
solve(LinearProblem(A, b))
,
→
⇒
Extending solve to CholeskySolver.
1 abstract type LinearSolver end
2
3 struct RegularSolver <: LinearSolver end
4 struct CholeskySolver <: LinearSolver end
5
6 solve(m::RegularSolver, A, b) =
solve(LinearProblem(A, b))
,
→
7 solve(m::CholeskySolver, A, b) = #
Cholesky decomposition...
,
→
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 19 / 28
20. Principles of Software Engineering
Principles of Software Engineering
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 20 / 28
21. Principles of Software Engineering
Single Responsibility Principle
A class or function should be responsible to only one actor.
LinearModel: represent a linear model
coefs: returns model coefficients
fit: fitting model
LinearSolver: approach to solve a linear system
solve: determines how to solve a linear system
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 21 / 28
22. Principles of Software Engineering
Open-Closed Principle
A module will be said to be open for extension and be said to be closed for modification.
struct LinearRegressionModel
β
end
coefs(m::LinearRegressionModel) =
m.β
⇒
1 abstract type LinearModel end
2
3 struct LinearRegressionModel <:
LinearModel
,
→
4 β
5 end
6
7 struct LogisticRegressionModel <:
LinearModel
,
→
8 β
9 end
10
11 coefs(m::LinearRegressionModel) = m.β
12 coefs(m::LogisticRegressionModel) = m.β
Benefitial from Julia's features of type and method separation, it's easy to add new types or
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 22 / 28
23. Principles of Software Engineering
Liskov Substitution Principle
Derived class can be able to replace its base class.
abstract type LinearModel end
struct LinearRegressionModel <: LinearModel
β
end
struct LogisticRegressionModel <: LinearModel
β
end
Since Julia's subtyping system doesn't allow composite types as super types, Julia always run
composite types in practice.
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 23 / 28
24. Principles of Software Engineering
Interface Segregation Principle
No code should be forced to depend on methods it does not use.
1 julia> model = fit(LinearRegressionModel,
X, y)
,
→
2
3 julia> coefs(model)
4
5 julia> model =
fit(LogisticRegressionModel, X, y)
,
→
6
7 julia> coefs(model)
User just need to know interfaces.
1 module MyPackage
2 abstract type LinearModel end
3 struct LinearRegressionModel <:
LinearModel
,
→
4 β
5 end
6 struct LogisticRegressionModel <:
LinearModel
,
→
7 β
8 end
9 coefs(m::LinearRegressionModel) = m.β
10 coefs(m::LogisticRegressionModel) =
m.β
11 end
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 24 / 28
25. Principles of Software Engineering
Dependency Inversion Principle
Dependency injection
1 abstract type LinearSolver end
2
3 struct RegularSolver <: LinearSolver end
4 struct CholeskySolver <: LinearSolver end
5 struct QRSolver <: LinearSolver end
1 abstract type LinearModel end
2
3 struct LinearRegressionModel <:
LinearModel end
,
→
4 struct LogisticRegressionModel <:
LinearModel end
,
→
5
6 fit(::Type{LinearRegressionModel}, X, y;
algo=CholeskySolver())
,
→
7 fit(::Type{LogisticRegressionModel}, X, y;
algo=CholeskySolver())
,
→
Y.H. Tu (Taiwan AI Labs) Evolutional Software Architecture Saturday 29th
July, 2023 25 / 28