This is a rapid fire talk that outline some of the issues around multithreaded code, some of the tools you can use to test it and how best to spend your resources doing so
Just recently I've checked the VirtualDub project with PVS-Studio. This was a random choice. You see, I believe that it is very important to regularly check and re-check various projects to show users that the PVS-Studio analyzer is evolving, and which project you run it on doesn't matter that much - bugs can be found everywhere. We already checked the VirtualDub project in 2011, but we found almost nothing of interest then. So, I decided to take a look at it now, 2 years later.
GDG Jakarta Meetup - Streaming Analytics With Apache BeamImre Nagi
Google slide version of this slide can be accessed from: https://docs.google.com/presentation/d/1Ws73JxlVH39HiKiYuF3vW903j8wFzxPQihXz4CQ_HZM/edit?usp=sharing
This is a rapid fire talk that outline some of the issues around multithreaded code, some of the tools you can use to test it and how best to spend your resources doing so
Just recently I've checked the VirtualDub project with PVS-Studio. This was a random choice. You see, I believe that it is very important to regularly check and re-check various projects to show users that the PVS-Studio analyzer is evolving, and which project you run it on doesn't matter that much - bugs can be found everywhere. We already checked the VirtualDub project in 2011, but we found almost nothing of interest then. So, I decided to take a look at it now, 2 years later.
GDG Jakarta Meetup - Streaming Analytics With Apache BeamImre Nagi
Google slide version of this slide can be accessed from: https://docs.google.com/presentation/d/1Ws73JxlVH39HiKiYuF3vW903j8wFzxPQihXz4CQ_HZM/edit?usp=sharing
Workshop slides from the Alt.Net Seattle 2011 workshop. Presented by Wes Dyer and Ryan Riley. Get the slides and the workshop code at http://rxworkshop.codeplex.com/
Swift & ReactiveX – Asynchronous Event-Based Funsies with RxSwiftAaron Douglas
This is an introduction to reactive concepts using Swift specifically with ReactiveX’s implementation, RxSwift. ReactiveX is an API for asynchronous programming with observable streams originally implemented with .NET and LINQ. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.
You’ll learn about all the basic moving parts of RxSwift and why you want to use it in your application.
Original presented 23-Aug-2016 at 360iDev 2016 - Denver, CO.
Spring Boot Revisited with KoFu and JaFuVMware Tanzu
SpringOne 2020
Spring Boot Revisited with KoFu and JaFu
Audrey Neveu, Software Engineer on Reactor at VMware
Sébastien Deleuze, Spring Framework Committer at VMware
During past years, the requirements for modern applications have increased from gigabytes of data to terabytes, from thousands of requests per second to millions, from seconds of response time to milliseconds, and this list can be continued. Until now, most of these problems have been solved using the Microservices architecture, but what's next? What next approach should we apply where Microservices fail? In this presentation, we will overview modern approaches to application development with Reactive and Distributed architecture and see how Vert.x help to implement such solutions.
Modeling more complicated logic using sequential statements
Skills gained:
1- Identify sequential environment in VHDL
2- Model simple sequential logic
This is part of VHDL 360 course
An exploration into RxJava on Android for the experienced, yet uninitiated software engineer. This presentation explores Declarative vs Imperative programming paradigms and expands the discussion into Functional Reactive Programming. It explains the benefits of the observer contract, high-order functions, and schedulers available in RxJava. It also explains the purpose of the Android integration libraries: RxAndroid, RxLifecycle, and RxBindings.
Project Loom is one of the most important change coming to JDK. The talk explores the Constraints and benefits of the request pre thread model and why there is a big push towards Aysnc frameworks.
How Project Loom and Structured Concurrency And Project Loom gives a new design paradigm to write scalable maintainable code
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Codemotion
In a world where Imperative Programming is the most used paradigm, Reactive comes up to make our code more reusable, robust, and stateless. Learn what Functional Reactive Programming means and how it could help you with problems you have to face daily in your projects. We’ll present basic concepts and practical examples for iOS developers that will help you to start thinking in streams, observers, .. and mix them with cool Swift functional concepts.
Eddystone Beacons - Physical Web - Giving a URL to All ObjectsJeff Prestes
More mobile technologies are empowering people and machines to become more autonomous. In the same way as people, machines need ways to be identified to other sources in a connected environment. This begs the question, why not give a URL to objects? With Eddystone, a new Google specification for Beacon data, this is possible, and it works with both Android and iOS based devices.
With it you can implement what physical-web.org stands
Jeff Prestes
Braintree / PayPal - Developer Advocate
Tuesday, Oct 20th
3:30 pm - Mobile
Find more by Jeff Prestes: http://www.slideshare.net/jeffprestes/
Workshop slides from the Alt.Net Seattle 2011 workshop. Presented by Wes Dyer and Ryan Riley. Get the slides and the workshop code at http://rxworkshop.codeplex.com/
Swift & ReactiveX – Asynchronous Event-Based Funsies with RxSwiftAaron Douglas
This is an introduction to reactive concepts using Swift specifically with ReactiveX’s implementation, RxSwift. ReactiveX is an API for asynchronous programming with observable streams originally implemented with .NET and LINQ. ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming.
You’ll learn about all the basic moving parts of RxSwift and why you want to use it in your application.
Original presented 23-Aug-2016 at 360iDev 2016 - Denver, CO.
Spring Boot Revisited with KoFu and JaFuVMware Tanzu
SpringOne 2020
Spring Boot Revisited with KoFu and JaFu
Audrey Neveu, Software Engineer on Reactor at VMware
Sébastien Deleuze, Spring Framework Committer at VMware
During past years, the requirements for modern applications have increased from gigabytes of data to terabytes, from thousands of requests per second to millions, from seconds of response time to milliseconds, and this list can be continued. Until now, most of these problems have been solved using the Microservices architecture, but what's next? What next approach should we apply where Microservices fail? In this presentation, we will overview modern approaches to application development with Reactive and Distributed architecture and see how Vert.x help to implement such solutions.
Modeling more complicated logic using sequential statements
Skills gained:
1- Identify sequential environment in VHDL
2- Model simple sequential logic
This is part of VHDL 360 course
An exploration into RxJava on Android for the experienced, yet uninitiated software engineer. This presentation explores Declarative vs Imperative programming paradigms and expands the discussion into Functional Reactive Programming. It explains the benefits of the observer contract, high-order functions, and schedulers available in RxJava. It also explains the purpose of the Android integration libraries: RxAndroid, RxLifecycle, and RxBindings.
Project Loom is one of the most important change coming to JDK. The talk explores the Constraints and benefits of the request pre thread model and why there is a big push towards Aysnc frameworks.
How Project Loom and Structured Concurrency And Project Loom gives a new design paradigm to write scalable maintainable code
Reactive Thinking in iOS Development - Pedro Piñera Buendía - Codemotion Amst...Codemotion
In a world where Imperative Programming is the most used paradigm, Reactive comes up to make our code more reusable, robust, and stateless. Learn what Functional Reactive Programming means and how it could help you with problems you have to face daily in your projects. We’ll present basic concepts and practical examples for iOS developers that will help you to start thinking in streams, observers, .. and mix them with cool Swift functional concepts.
Eddystone Beacons - Physical Web - Giving a URL to All ObjectsJeff Prestes
More mobile technologies are empowering people and machines to become more autonomous. In the same way as people, machines need ways to be identified to other sources in a connected environment. This begs the question, why not give a URL to objects? With Eddystone, a new Google specification for Beacon data, this is possible, and it works with both Android and iOS based devices.
With it you can implement what physical-web.org stands
Jeff Prestes
Braintree / PayPal - Developer Advocate
Tuesday, Oct 20th
3:30 pm - Mobile
Find more by Jeff Prestes: http://www.slideshare.net/jeffprestes/
Similar to リアクティブプログラミングにおける時変値永続化の試み (第2回ステアラボソフトウェア技術セミナー) (20)
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.
GraphSummit Paris - The art of the possible with Graph TechnologyNeo4j
Sudhir Hasbe, Chief Product Officer, Neo4j
Join us as we explore breakthrough innovations enabled by interconnected data and AI. Discover firsthand how organizations use relationships in data to uncover contextual insights and solve our most pressing challenges – from optimizing supply chains, detecting fraud, and improving customer experiences to accelerating drug discoveries.
AI Genie Review: World’s First Open AI WordPress Website CreatorGoogle
AI Genie Review: World’s First Open AI WordPress Website Creator
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-genie-review
AI Genie Review: Key Features
✅Creates Limitless Real-Time Unique Content, auto-publishing Posts, Pages & Images directly from Chat GPT & Open AI on WordPress in any Niche
✅First & Only Google Bard Approved Software That Publishes 100% Original, SEO Friendly Content using Open AI
✅Publish Automated Posts and Pages using AI Genie directly on Your website
✅50 DFY Websites Included Without Adding Any Images, Content Or Doing Anything Yourself
✅Integrated Chat GPT Bot gives Instant Answers on Your Website to Visitors
✅Just Enter the title, and your Content for Pages and Posts will be ready on your website
✅Automatically insert visually appealing images into posts based on keywords and titles.
✅Choose the temperature of the content and control its randomness.
✅Control the length of the content to be generated.
✅Never Worry About Paying Huge Money Monthly To Top Content Creation Platforms
✅100% Easy-to-Use, Newbie-Friendly Technology
✅30-Days Money-Back Guarantee
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
#AIGenieApp #AIGenieBonus #AIGenieBonuses #AIGenieDemo #AIGenieDownload #AIGenieLegit #AIGenieLiveDemo #AIGenieOTO #AIGeniePreview #AIGenieReview #AIGenieReviewandBonus #AIGenieScamorLegit #AIGenieSoftware #AIGenieUpgrades #AIGenieUpsells #HowDoesAlGenie #HowtoBuyAIGenie #HowtoMakeMoneywithAIGenie #MakeMoneyOnline #MakeMoneywithAIGenie
Zoom is a comprehensive platform designed to connect individuals and teams efficiently. With its user-friendly interface and powerful features, Zoom has become a go-to solution for virtual communication and collaboration. It offers a range of tools, including virtual meetings, team chat, VoIP phone systems, online whiteboards, and AI companions, to streamline workflows and enhance productivity.
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.
Understanding Nidhi Software Pricing: A Quick Guide 🌟
Choosing the right software is vital for Nidhi companies to streamline operations. Our latest presentation covers Nidhi software pricing, key factors, costs, and negotiation tips.
📊 What You’ll Learn:
Key factors influencing Nidhi software price
Understanding the true cost beyond the initial price
Tips for negotiating the best deal
Affordable and customizable pricing options with Vector Nidhi Software
🔗 Learn more at: www.vectornidhisoftware.com/software-for-nidhi-company/
#NidhiSoftwarePrice #NidhiSoftware #VectorNidhi
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.
Climate Science Flows: Enabling Petabyte-Scale Climate Analysis with the Eart...Globus
The Earth System Grid Federation (ESGF) is a global network of data servers that archives and distributes the planet’s largest collection of Earth system model output for thousands of climate and environmental scientists worldwide. Many of these petabyte-scale data archives are located in proximity to large high-performance computing (HPC) or cloud computing resources, but the primary workflow for data users consists of transferring data, and applying computations on a different system. As a part of the ESGF 2.0 US project (funded by the United States Department of Energy Office of Science), we developed pre-defined data workflows, which can be run on-demand, capable of applying many data reduction and data analysis to the large ESGF data archives, transferring only the resultant analysis (ex. visualizations, smaller data files). In this talk, we will showcase a few of these workflows, highlighting how Globus Flows can be used for petabyte-scale climate analysis.
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/
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Crescat
Crescat is industry-trusted event management software, built by event professionals for event professionals. Founded in 2017, we have three key products tailored for the live event industry.
Crescat Event for concert promoters and event agencies. Crescat Venue for music venues, conference centers, wedding venues, concert halls and more. And Crescat Festival for festivals, conferences and complex events.
With a wide range of popular features such as event scheduling, shift management, volunteer and crew coordination, artist booking and much more, Crescat is designed for customisation and ease-of-use.
Over 125,000 events have been planned in Crescat and with hundreds of customers of all shapes and sizes, from boutique event agencies through to international concert promoters, Crescat is rigged for success. What's more, we highly value feedback from our users and we are constantly improving our software with updates, new features and improvements.
If you plan events, run a venue or produce festivals and you're looking for ways to make your life easier, then we have a solution for you. Try our software for free or schedule a no-obligation demo with one of our product specialists today at crescat.io
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.
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."
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!
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI AppGoogle
AI Fusion Buddy Review: Brand New, Groundbreaking Gemini-Powered AI App
👉👉 Click Here To Get More Info 👇👇
https://sumonreview.com/ai-fusion-buddy-review
AI Fusion Buddy Review: Key Features
✅Create Stunning AI App Suite Fully Powered By Google's Latest AI technology, Gemini
✅Use Gemini to Build high-converting Converting Sales Video Scripts, ad copies, Trending Articles, blogs, etc.100% unique!
✅Create Ultra-HD graphics with a single keyword or phrase that commands 10x eyeballs!
✅Fully automated AI articles bulk generation!
✅Auto-post or schedule stunning AI content across all your accounts at once—WordPress, Facebook, LinkedIn, Blogger, and more.
✅With one keyword or URL, generate complete websites, landing pages, and more…
✅Automatically create & sell AI content, graphics, websites, landing pages, & all that gets you paid non-stop 24*7.
✅Pre-built High-Converting 100+ website Templates and 2000+ graphic templates logos, banners, and thumbnail images in Trending Niches.
✅Say goodbye to wasting time logging into multiple Chat GPT & AI Apps once & for all!
✅Save over $5000 per year and kick out dependency on third parties completely!
✅Brand New App: Not available anywhere else!
✅ Beginner-friendly!
✅ZERO upfront cost or any extra expenses
✅Risk-Free: 30-Day Money-Back Guarantee!
✅Commercial License included!
See My Other Reviews Article:
(1) AI Genie Review: https://sumonreview.com/ai-genie-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
#AIFusionBuddyReview,
#AIFusionBuddyFeatures,
#AIFusionBuddyPricing,
#AIFusionBuddyProsandCons,
#AIFusionBuddyTutorial,
#AIFusionBuddyUserExperience
#AIFusionBuddyforBeginners,
#AIFusionBuddyBenefits,
#AIFusionBuddyComparison,
#AIFusionBuddyInstallation,
#AIFusionBuddyRefundPolicy,
#AIFusionBuddyDemo,
#AIFusionBuddyMaintenanceFees,
#AIFusionBuddyNewbieFriendly,
#WhatIsAIFusionBuddy?,
#HowDoesAIFusionBuddyWorks
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.
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.
Mobile App Development Company In Noida | Drona InfotechDrona Infotech
Looking for a reliable mobile app development company in Noida? Look no further than Drona Infotech. We specialize in creating customized apps for your business needs.
Visit Us For : https://www.dronainfotech.com/mobile-application-development/
2. Outline of this talk
uIntroduction to Reactive Programming (RP)
uSignalJ: a simple Java-based RP language
uPersistent signals: challenges & current
solutions
2021/2/24 第2回ステアラボソフトウェア技術セミナー 2
3. Reactive Programming (RP)
uAbstractions for time-varying values (TVVs)
uContinuously changing values
ue.g., current time
uStreams of timed values
ue.g., events triggered by users' actions
uDeclarative dependencies
uPropagation b/w TVVs
uConsidered useful for "reactive systems"
uGUI, sensors & actuators, …
2021/2/24 第2回ステアラボソフトウェア技術セミナー 3
4. Stopwatch Example
uHaving two states: active and inactive
uCounter is moving only when it is active
uState is changed by pressing the main button
uThe label of main button is switching
uactive → "Stop", inactive → "Start"
uThe reset button set the counter zero, and
make the stopwatch inactive (not moving)
2021/2/24 第2回ステアラボソフトウェア技術セミナー 4
5. Stopwatch by Java
boolean isActive = false;
Thread th = null;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == start) {
if (isActive) {
isActive = false;
start.setLabel("Start");
th = null;
} else {
isActive = true;
start.setLabel("Stop");
th = new Thread(this);
th.start();
}
} else {
isActive = false;
start.setLabel("Start");
th = null;
textField.setText("0.0"); } }
public void run() { … /* counter behavior */ }
Counter is moving
only when it is active
2021/2/24 第2回ステアラボソフトウェア技術セミナー 5
6. Stopwatch by Java
boolean isActive = false;
Thread th = null;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == start) {
if (isActive) {
isActive = false;
start.setLabel("Start");
th = null;
} else {
isActive = true;
start.setLabel("Stop");
th = new Thread(this);
th.start();
}
} else {
isActive = false;
start.setLabel("Start");
th = null;
textField.setText("0.0"); } }
public void run() { … /* counter behavior */ }
State changes by the
main button
2021/2/24 第2回ステアラボソフトウェア技術セミナー 6
7. Stopwatch by Java
boolean isActive = false;
Thread th = null;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == start) {
if (isActive) {
isActive = false;
start.setLabel("Start");
th = null;
} else {
isActive = true;
start.setLabel("Stop");
th = new Thread(this);
th.start();
}
} else {
isActive = false;
start.setLabel("Start");
th = null;
textField.setText("0.0"); } }
public void run() { … /* counter behavior */ }
Label of main button is
switching
2021/2/24 第2回ステアラボソフトウェア技術セミナー 7
8. Stopwatch by Java
boolean isActive = false;
Thread th = null;
public void actionPerformed(ActionEvent e) {
if (e.getSource() == start) {
if (isActive) {
isActive = false;
start.setLabel("Start");
th = null;
} else {
isActive = true;
start.setLabel("Stop");
th = new Thread(this);
th.start();
}
} else {
isActive = false;
start.setLabel("Start");
th = null;
textField.setText("0.0"); } }
public void run() { … /* counter behavior */ }
Reset button set the
counter zero and make
the watch inactive
2021/2/24 第2回ステアラボソフトウェア技術セミナー 8
9. Stopwatch as a flow b/w TVVs
Button
Activation
Counter
Time
Label
Counter is moving
only when it is active
2021/2/24 第2回ステアラボソフトウェア技術セミナー 9
10. Stopwatch as a flow b/w TVVs
Button
Activation
Counter
Time
Label
State changes by the
main button
2021/2/24 第2回ステアラボソフトウェア技術セミナー 10
11. Stopwatch as a flow b/w TVVs
Button
Activation
Counter
Time
Label
Label of main button is
switching
2021/2/24 第2回ステアラボソフトウェア技術セミナー 11
12. Stopwatch as a flow b/w TVVs
Button
Activation
Counter
Time
Label
Reset button set the
counter zero and make
the watch inactive
2021/2/24 第2回ステアラボソフトウェア技術セミナー 12
13. Abstractions of TVV in RP
uFRP
uBehavior: continuous time-varying values
uEvent: discrete values
uReactive extensions (e.g., RxJava)
uFlowable: publisher of values
uObservable: consumer of values
uSubject/Processor: both of publisher & consumer
uSignalJ
uSignal
2021/2/24 第2回ステアラボソフトウェア技術セミナー 13
14. Stopwatch by RxJava
BehaviorSubject<Button> buttonSeq = BehaviorSubject.create();
BehaviorSubject<Boolean> activation = BehaviorSubject.create();
BehaviorSubject<Integer> counter = BehaviorSubject.create();
Observable<String> label = activation.map(x -> x ? "Stop" : "Start");
Flowable<Long> time = Flowable.interval(100, TimeUnit.MILLISECONDS);
…
time.subscribe(x -> { if (activation.getValue()) {
counter.onNext(counter.getValue() + 1); } });
buttonSeq.subscribe(b -> {
if (b == start) {
activation.onNext(!activation.getValue());
} else {
counter.onNext(0);
activation.onNext(false);
} });
Counter is moving
only when it is active
2021/2/24 第2回ステアラボソフトウェア技術セミナー 14
15. Stopwatch by RxJava
BehaviorSubject<Button> buttonSeq = BehaviorSubject.create();
BehaviorSubject<Boolean> activation = BehaviorSubject.create();
BehaviorSubject<Integer> counter = BehaviorSubject.create();
Observable<String> label = activation.map(x -> x ? "Stop" : "Start");
Flowable<Long> time = Flowable.interval(100, TimeUnit.MILLISECONDS);
…
time.subscribe(x -> { if (activation.getValue()) {
counter.onNext(counter.getValue() + 1); } });
buttonSeq.subscribe(b -> {
if (b == start) {
activation.onNext(!activation.getValue());
} else {
counter.onNext(0);
activation.onNext(false);
} });
State changes by the
main button
2021/2/24 第2回ステアラボソフトウェア技術セミナー 15
16. Stopwatch by RxJava
BehaviorSubject<Button> buttonSeq = BehaviorSubject.create();
BehaviorSubject<Boolean> activation = BehaviorSubject.create();
BehaviorSubject<Integer> counter = BehaviorSubject.create();
Observable<String> label = activation.map(x -> x ? "Stop" : "Start");
Flowable<Long> time = Flowable.interval(100, TimeUnit.MILLISECONDS);
…
time.subscribe(x -> { if (activation.getValue()) {
counter.onNext(counter.getValue() + 1); } });
buttonSeq.subscribe(b -> {
if (b == start) {
activation.onNext(!activation.getValue());
} else {
timer.onNext(0);
activation.onNext(false);
} });
Label of main button is
switching
2021/2/24 第2回ステアラボソフトウェア技術セミナー 16
17. Stopwatch by RxJava
BehaviorSubject<Button> buttonSeq = BehaviorSubject.create();
BehaviorSubject<Boolean> activation = BehaviorSubject.create();
BehaviorSubject<Integer> timer = BehaviorSubject.create();
Observable<String> label = activation.map(x -> x ? "Stop" : "Start");
Flowable<Long> time = Flowable.interval(100, TimeUnit.MILLISECONDS);
…
time.subscribe(x -> { if (activation.getValue()) {
timer.onNext(timer.getValue() + 1); } });
buttonSeq.subscribe(b -> {
if (b == start) {
activation.onNext(!activation.getValue());
} else {
counter.onNext(0);
activation.onNext(false);
} });
Reset button set the
counter zero and make
the watch inactive
2021/2/24 第2回ステアラボソフトウェア技術セミナー 17
18. Taxonomy of RP Languages
uExisting RP languages
uFran, Yampa, Flapjax, Rx, REScala, SignalJ, …
uDesign spaces
uEvaluation strategy
uLifting
uGlitch avoidance
uSupport for switching
uSupport for distribution
E. Bainomugisha et al., A Survey on Reactive Programming,
ACM Computing Surveys, 45(4), 2013.
2021/2/24 第2回ステアラボソフトウェア技術セミナー 18
19. Evaluation Strategies
uPush-based
uProducer pushes to the consumer
uSuitable for event-driven reactions
uGlitch avoidance is necessary
uPull-based
uConsumer triggers computation on demand
uNo glitches
uUnable to represent `instantaneous' reaction
Producer Consumer
flow of data
push
Producer Consumer
flow of data
pull
2021/2/24 第2回ステアラボソフトウェア技術セミナー 19
20. Lifting
uConverting existing operators/methods to
operate on TVV
uNecessary when embedded on the host language
ureturning value of 𝑓 at current time
uExplicit lifting:
uStatically typed languages
uImplicit lifting:
uDynamic languages
2021/2/24 第2回ステアラボソフトウェア技術セミナー 20
lift ∶ 𝑓(𝑇) → 𝑓lifted(𝑇𝑉𝑉 < 𝑇 >)
𝑓(𝑏) → 𝑓lifted(𝑏)
lift(𝑓)(𝑏) → 𝑓lifted(𝑏)
22. Switching propagations
uDynamic reconfiguration of propagations
uFRP languages typically provide switching
combinators
2021/2/24 第2回ステアラボソフトウェア技術セミナー 22
var4 = if var1 then var2 * var3
else var2 + var3
var2 var3
+
var2 var3
*
var4
var1
T F
23. Support for Distribution
uInteractive applications are becoming
increasingly distributed
uWeb applications, mobile applications, …
uMore difficult to ensure consistency within
propagations
ulatency, network failure, …
uKnown approaches
uUsing a central coordinator
uCan be a bottleneck, failures affect the entire system
uDistributed decentralized propagation algorithm
uIntensive research on distributed systems
2021/2/24 第2回ステアラボソフトウェア技術セミナー 23
24. SignalJ: a simple Java-based
RP language
uSimplified programming interface
uSupporting events and FRP-like propagation
using one abstraction
uNo lifting: signals are 'compatible' with normal
values
uSupporting rich expressive power of RP
uPush-pull, glitch-freedom, switching support,
and side-effects
2021/2/24 第2回ステアラボソフトウェア技術セミナー 24
T. Kamina and T. Aotani, Harmonizing Signals and Events with a Lightweight,
Extension to Java, The Arts, Science, and Engineering of Programming, 2(3), 2018.
25. Signals in SignalJ
uDeclared using the modifier signal
uComposite signal
uAutomatically reevaluated by propagation
uReassignment is disallowed
uSource signal
uCan be updated imperatively
signal int a = 5;
signal int b = a + 3;
a++;
System.out.println(b);
source signal
composite signal
9
2021/2/24 第2回ステアラボソフトウェア技術セミナー 25
26. signal as a modifier
uNo lifting
uA signal can appear on any places where non-
signal is expected
signal int a = 6;
signal int count = Integer.bitCount(a);
a++;
System.out.println(count); 3
• Dependency is statically determined
• The type system considered their types are int
2021/2/24 第2回ステアラボソフトウェア技術セミナー 26
27. API-based operators
uEvent handling
uFolding operators
signal int a = 5;
a.subscribe(e -> System.out.println(e));
a++;
Handler is called in response to this update
signal int a = 5;
a++;
System.out.println(a.sum()); 11
2021/2/24 第2回ステアラボソフトウェア技術セミナー 27
28. Evaluation strategies: signals
uPropagation occurs immediately
udiff and sensorValue change at the same
time
uEvaluation is mostly pull-based
uFolding operators are eagerly evaluated
signal int sensorValue = …;
signal int sum = sensorValue.sum();
signal int diff = P*sensorValue + I*sum;
PI control
2021/2/24 第2回ステアラボソフトウェア技術セミナー 28
29. Evaluation strategies: events
uTime proceeds after event firing
ulast is updated after sensorValue is
updated
uOutputs for motors are performed after diff
is updated
int last = …;
sensorValue.subscribe(x -> last = x);
signal int diff =
P*sensorValue + I*sum + D*(sensorValue - last);
diff.subscribe(x -> setMotors(x));
PID control
2021/2/24 第2回ステアラボソフトウェア技術セミナー 29
30. Changing signal networks
uUpdate of “a signal of objects” is
considered switching
signal int tabIndex = 0;
List tabs = new List().add(new View());
signal View currentView = tabs.getViewByIndex(tabIndex);
2021/2/24 第2回ステアラボソフトウェア技術セミナー 30
tabIndex
currentView view1: View
content
view2: View
content
31. Stopwatch in SignalJ
uMostly the same structure with RxJava
(w/ simpler syntax)
signal Button buttonSeq = reset;
signal boolean activation = false;
signal int counter = 0;
signal String label = activation ? "Stop" : "Start";
Timer time = new SimpleCounter(counter, 100);
…
activation.subscribe(x -> {
if (x) time.start();
else time.stop() });
buttonSeq.subscribe(b -> {
if (b == start) {
activation != activation;
} else {
counter = 0;
activation = false;
} });
2021/2/24 第2回ステアラボソフトウェア技術セミナー 31
32. Signal as time-series data?
uTVVs are everywhere
uWeather, IoT sensors, SNS, …
uUpdated over time
uPersistent data queried by time
uOften used in reactive systems
uDo signals provide suitable abstraction?
uSignals are transient, not supporting queries
2021/2/24 第2回ステアラボソフトウェア技術セミナー 32
33. Vehicle tracking example
2021/2/24 第2回ステアラボソフトウェア技術セミナー 33
x
y
v
…
selected
time
xt yt vt
position of the vehicle
estimated velocity
vehicle tracking record
(history of updated values)
(displayed values)
Can we represent this as
'propagations' as well?
34. Persistent Signals
uSignals with their execution histories
persistent signal double posX, posY;
SERIAL: id TIMESTAMP: time DOUBLE: value
1 2020-08-01'T'12:34:00 131.605591
2 2020-08-01'T'12:34:05 131.605956
3 2020-08-01'T'12:34:11 131.606385
… … …
Internally, mapping to time-series database
is maintained
2021/2/24 第2回ステアラボソフトウェア技術セミナー 34
T. Kamina and T. Aotani, An Approach for Persistent Time-Varying Values,
In Onward! 2019.
35. Propagation by views
uAssuming posX and posY are updated at
the same time, views ensure the consistency
persistent signal double posX, posY;
signal double dx = posX.lastDiff(1);
signal double dy = posY.lastDiff(1);
signai double v = dx.distance(dy);
CREATE VIEW dy AS
SELECT
x.id AS id, x.value-y.value AS value
FROM
posX as x,
(SELECT id,value FROM posY OFFSET 1) as y
WHERE x.id = y.id-1
view-creating
API is prepared
'in advance'
2021/2/24 第2回ステアラボソフトウェア技術セミナー 35
36. Problems of persistent signals
uNot providing abstractions for representing
complex data structures
uUsing signals for each x- and y-coordinates
instead of using a signal representing "a vehicle"
uSimultaneity of updates of coordinates are not
imposed by the language, but maintained by the
programmer
uPropagating only by predefined API
uCannot be created dynamically
uNot supporting switching of propagation
2021/2/24 第2回ステアラボソフトウェア技術セミナー 36
37. Signal Classes
uClass that packages related persistent signals
signal class Vehicle {
persistent signal double x, y;
signal double dx = x.lastDiff(1);
signal double dy = y.lastDiff(1);
signai double v = dx.distance(dy);
Vehicle(String id) { … } …
}
Vehicle v = new Vehicle("Oita_a_1234");
v.set(33.240240, 131.611679);
Permanently
identifying an object
• Unit of synchronization
• Unit of lifecycle management
2021/2/24 第2回ステアラボソフトウェア技術セミナー 37
T. Kamina et al., Managing Persistent Signals using Signal Classes, In REBLS 2020.
38. Lifecycle Model
uManaging each instance with unique ID
uInterface for lifecycle management
DB table is created
with the fresh ID
Instance exists on the disk even
after the application stops
Instance resumes with
the previous state
public interface SignalClassInstance {
set(Object... args);
reset();
destroy();
}
2021/2/24 第2回ステアラボソフトウェア技術セミナー 38
39. Time-oriented queries
uImplemented as an API-based operator
uPropagated to every enclosed persistent signals
2021/2/24 第2回ステアラボソフトウェア技術セミナー 39
Vehicle v = new Vehicle("Oita_a_1234");
Timer t = new Timer(v, 10000, v::setPosition);
Vehicle mirror = new Vehicle("Oita_a_1234");
…
mirror.snapshot(slider.getValue());
Viewer application (not expected to set the vehicle's position)
Tracking application
40. TIMESTAMP: time value
2020-08-01'T'12:34:05 0.000043
2020-08-01'T'12:34:11 0.000102
… …
Propagation
uTimestamp is assigned for each set
2021/2/24 第2回ステアラボソフトウェア技術セミナー 40
Vehicle v = new Vehicle("Oita_a_1234");
Timer t = new Timer(v, 10000, v::setPosition);
double[] current = getGeographicCoordinates();
set(current[0],current[1]);
TIMESTAMP: time x y travelled
2020-08-01'T'12:34:00 131.605591 33.240240 0.1
2020-08-01'T'12:34:05 131.605956 33.239148 0.3
… …
1. Every propagation is calculated (push-based)
2. Inserted to the table with a timestamp
dx
*views are still supported by API methods
(pull-based)
41. Switching propagation
uPersistent signals only support primitive
types
uOne exception: signal class types
uSupport of switching
2021/2/24 第2回ステアラボソフトウェア技術セミナー 41
signal class Monitor {
persistent signal Vehicle v;
public Monitor(String id) { … } }
Monitor m = new Monitor("aMonitor");
m.set(aCar); // DB records its identifier
42. Issues remain
uID resolution
uID should be unique, but currently no
mechanisms to ensure uniqueness
uRefactoring and migration
uEvolution of signal classes
uSignal classes using existing time-series data
2021/2/24 第2回ステアラボソフトウェア技術セミナー 42
43. Distributed RP and
persistent signals
uRequired: time-series data are glitch-free
uThen, every observation is consistent!
uAssumption: every entry has its timestamp
uGlobal clock, Lamport
uProperties characterizing glitches
uTiming
uConsistency: total order, causal, …
uCan distributed DB provide a platform for
considering these properties?
2021/2/24 第2回ステアラボソフトウェア技術セミナー 43
44. Toward multi-tier signals
uLocation transparency supported by IDs
2021/2/24 第2回ステアラボソフトウェア技術セミナー 44
Distributed time-series DB
Vehicle v = new Vehicle(“ID9999”);
Traffic r210 = new Traffic(“R210”);
r210.addVehicle(“ID9999”);
45. Summary
uRP represents a system as a flow b/w TVVs
uSignalJ provides a simple abstraction for
TVVs
uEvery TVV is a signal
uSimple programming interface
uNo lifting, push-pull, API-based operators
uPersistent signals provide an abstraction
for TVVs as time-series data
uSignal classes manage their lifecycles and
identities
uLocation transparency
2021/2/24 第2回ステアラボソフトウェア技術セミナー 45