This is an automated email from the ASF dual-hosted git repository.

sjwiesman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink-training.git


The following commit(s) were added to refs/heads/master by this push:
     new a8307f7  [FLINK-23448] update README
a8307f7 is described below

commit a8307f72fd01a9021320d6960849617739820320
Author: Daisy T <[email protected]>
AuthorDate: Wed Jul 21 12:12:28 2021 +0200

    [FLINK-23448] update README
    
    This closes #30
---
 CONTRIBUTING.md                | 107 ++++++++++++++++++
 LABS-OVERVIEW.md               |  29 -----
 README.md                      | 240 ++++++++++++++---------------------------
 hourly-tips/DISCUSSION.md      |   2 +-
 hourly-tips/README.md          |   2 +-
 long-ride-alerts/DISCUSSION.md |   2 +-
 long-ride-alerts/README.md     |   2 +-
 ride-cleansing/README.md       |   2 +-
 rides-and-fares/README.md      |   2 +-
 9 files changed, 192 insertions(+), 196 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..92cfe6a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,107 @@
+# How to contribute to this project
+
+> **:heavy_exclamation_mark: Important:** This section contains tips for 
developers who are
+> maintaining the `flink-training` project (not so much people doing the 
training).
+
+The following sections apply on top of the [Setup 
Instructions](README.md#set-up-your-development-environment) above.
+
+## Format code
+
+Just like [Apache Flink](https://github.com/apache/flink), we use the [Spotless
+plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven) together
+with [google-java-format](https://github.com/google/google-java-format) to
+format our Java code. You can configure your IDE to automatically apply
+formatting upon saving with these steps:
+
+1. Install the [google-java-format
+   plugin](https://plugins.jetbrains.com/plugin/8527-google-java-format) and
+   enable it for the project
+2. In the plugin settings, change the code style to "AOSP" (4-space indents)
+3. Install the [Save Actions
+   plugin](https://plugins.jetbrains.com/plugin/7642-save-actions)
+4. Enable the plugin, along with "Optimize imports" and "Reformat file" but
+   ignoring `.*README\.md`.
+
+## Ignore refactoring commits
+
+There is a list of refactoring commits in `.git-blame-ignore-revs`.
+When looking at change annotations using `git blame`, it is helpful to ignore 
these.
+You can configure git and your IDE to do so with:
+
+```bash
+git config blame.ignoreRevsFile .git-blame-ignore-revs
+```
+
+## :heavy_plus_sign: Add new exercises :heavy_plus_sign:
+
+To add a new exercise, we recommend copying an existing one and adapting it. 
Make sure the new subproject's `build.gradle` file
+contains appropriate class name properties so that we can create the right 
tasks for
+[running tests and solutions on the command 
line](README.md#running-exercises-tests-and-solutions-on-the-command-line).
+
+For example:
+
+```groovy
+ext.javaExerciseClassName = 
'org.apache.flink.training.exercises.ridesandfares.RidesAndFaresExercise'
+ext.scalaExerciseClassName = 
'org.apache.flink.training.exercises.ridesandfares.scala.RidesAndFaresExercise'
+ext.javaSolutionClassName = 
'org.apache.flink.training.solutions.ridesandfares.RidesAndFaresSolution'
+ext.scalaSolutionClassName = 
'org.apache.flink.training.solutions.ridesandfares.scala.RidesAndFaresSolution'
+
+apply plugin: 'application'
+
+mainClassName = ext.javaExerciseClassName
+```
+
+## Useful Gradle Commands and Tricks
+
+### Clean build with all checks
+
+```bash
+./gradlew clean check shadowJar
+./gradlew clean check shadowJar --no-build-cache
+```
+
+### Force a re-run of all tests only
+
+```bash
+./gradlew cleanTest test  --no-build-cache
+```
+
+> **:information_source: Note:** Ignoring the build-cache is required if you 
really want to run the test again
+> (without any changes in code). Otherwise the test tasks will just pull the 
latest test results from the cache.
+
+### Fix formatting
+
+```bash
+./gradlew spotlessApply
+./gradlew :rides-and-fares:spotlessApply
+```
+
+> **:information_source: Note:** You do not have to remember this since 
`./gradlew check` will not only
+> verify the formatting and print any errors but also tell you the command to 
use to fix these.
+
+### Tune the Java compiler
+
+Add the following code to the `subprojects { /*...*/ }` section of the
+[`build.gradle`](build.gradle) file and adapt accordingly. For example:
+
+```groovy
+    tasks.withType(JavaCompile) {
+        options.compilerArgs << '-Xlint:unchecked'
+        options.deprecation = true
+    }
+```
+
+> **:information_source: Note:** We do not add this by default to keep the 
training
+> requirements low for participants and focus on the exercises.
+
+### :warning: Deprecated Gradle Features
+
+You may see this warning being reported from Gradle:
+> Deprecated Gradle features were used in this build, making it incompatible 
with Gradle 8.0.
+>
+> You can use '--warning-mode all' to show the individual deprecation warnings 
and determine if they come from your own scripts or plugins.
+>
+> See 
https://docs.gradle.org/7.1/userguide/command_line_interface.html#sec:command_line_warnings
+
+This is currently caused by https://github.com/johnrengelman/shadow/issues/680
+and has to be fixed by the shadow plugin developers.
diff --git a/LABS-OVERVIEW.md b/LABS-OVERVIEW.md
deleted file mode 100644
index 4f35cdc..0000000
--- a/LABS-OVERVIEW.md
+++ /dev/null
@@ -1,29 +0,0 @@
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-
-# Labs
-
-1. [Filtering a Stream (Ride Cleansing)](ride-cleansing)
-1. [Stateful Enrichment (Rides and Fares)](rides-and-fares)
-1. [Windowed Analytics (Hourly Tips)](hourly-tips)
-   - [Exercise](hourly-tips/README.md)
-   - [Discussion](hourly-tips/DISCUSSION.md)
-1. [`ProcessFunction` and Timers (Long Ride Alerts)](long-ride-alerts)
-   - [Exercise](long-ride-alerts/README.md)
-   - [Discussion](long-ride-alerts/DISCUSSION.md)
diff --git a/README.md b/README.md
index 15f98ce..6ff5cb5 100644
--- a/README.md
+++ b/README.md
@@ -19,50 +19,54 @@ under the License.
 
 # Apache Flink Training Exercises
 
-Exercises that go along with the training content in the documentation.
+Exercises that accompany the training content in the documentation.
 
 ## Table of Contents
 
-[**Set up your Development Environment**](#set-up-your-development-environment)
+[**Set up your development environment**](#set-up-your-development-environment)
 
 1. [Software requirements](#software-requirements)
 1. [Clone and build the flink-training 
project](#clone-and-build-the-flink-training-project)
 1. [Import the flink-training project into your 
IDE](#import-the-flink-training-project-into-your-ide)
 
-[**Using the Taxi Data Streams**](#using-the-taxi-data-streams)
+[**Use the taxi data streams**](#using-the-taxi-data-streams)
 
-1. [Schema of Taxi Ride Events](#schema-of-taxi-ride-events)
-1. [Generating Taxi Ride Data Streams in a Flink 
program](#generating-taxi-ride-data-streams-in-a-flink-program)
+1. [Schema of taxi ride events](#schema-of-taxi-ride-events)
+1. [Schema of taxi fare events](#schema-of-taxi-fare-events)
 
-[**How to do the Labs**](#how-to-do-the-labs)
+[**How to do the lab exercises**](#how-to-do-the-lab-exercises)
 
 1. [Learn about the data](#learn-about-the-data)
 1. [Modify `ExerciseBase`](#modify-exercisebase)
 1. [Run and debug Flink programs in your 
IDE](#run-and-debug-flink-programs-in-your-ide)
-1. [Exercises, Tests, and Solutions](#exercises-tests-and-solutions)
+1. [Exercises, tests, and solutions](#exercises-tests-and-solutions)
 
-[**Labs**](LABS-OVERVIEW.md)
+[**Lab exercises**](#lab-exercises)
+
+[**Contributing**](#contributing)
 
 [**License**](#license)
 
-## Set up your Development Environment
+## Set up your development environment
 
-The following instructions guide you through the process of setting up a 
development environment for the purpose of developing, debugging, and executing 
solutions to the Flink developer training exercises and examples.
+You will need to set up your environment in order to develop, debug, and 
execute solutions to the training exercises and examples.
 
 ### Software requirements
 
 Flink supports Linux, OS X, and Windows as development environments for Flink 
programs and local execution. The following software is required for a Flink 
development setup and should be installed on your system:
 
-- a JDK for Java 8 or Java 11 (a JRE is not sufficient; other versions of Java 
are currently not supported)
 - Git
-- an IDE for Java (and/or Scala) development with Gradle support.
-  We recommend [IntelliJ](https://www.jetbrains.com/idea/), but 
[Eclipse](https://www.eclipse.org/downloads/) or [Visual Studio 
Code](https://code.visualstudio.com/) (with the [Java extension 
pack](https://code.visualstudio.com/docs/java/java-tutorial)) can also be used 
so long as you stick to Java. For Scala, you will need to use IntelliJ (and its 
[Scala plugin](https://plugins.jetbrains.com/plugin/1347-scala/)).
+- a JDK for Java 8 or Java 11 (a JRE is not sufficient; other versions of Java 
are currently not supported)
+- an IDE for Java (and/or Scala) development with Gradle support
+  - We recommend [IntelliJ](https://www.jetbrains.com/idea/), but 
[Eclipse](https://www.eclipse.org/downloads/) or [Visual Studio 
Code](https://code.visualstudio.com/) (with the [Java extension 
pack](https://code.visualstudio.com/docs/java/java-tutorial)) can also be used 
so long as you stick to Java
+  - For Scala, you will need to use IntelliJ (and its [Scala 
plugin](https://plugins.jetbrains.com/plugin/1347-scala/))
 
-> **:information_source: Note for Windows users:** The examples of shell 
commands provided in the training instructions are for UNIX systems. To make 
things easier, you may find it worthwhile to setup cygwin or WSL. For 
developing Flink jobs, Windows works reasonably well: you can run a Flink 
cluster on a single machine, submit jobs, run the webUI, and execute jobs in 
the IDE.
+> **:information_source: Note for Windows users:** The shell command examples 
provided in the training instructions are for UNIX systems.
+> You may find it worthwhile to setup cygwin or WSL. For developing Flink 
jobs, Windows works reasonably well: you can run a Flink cluster on a single 
machine, submit jobs, run the webUI, and execute jobs in the IDE.
 
 ### Clone and build the flink-training project
 
-This `flink-training` project contains exercises, tests, and reference 
solutions for the programming exercises. Clone the `flink-training` project 
from Github and build it.
+This `flink-training` repository contains exercises, tests, and reference 
solutions for the programming exercises.
 
 > **:information_source: Repository Layout:** This repository has several 
 > branches set up pointing to different Apache Flink versions, similarly to 
 > the [apache/flink](https://github.com/apache/flink) repository with:
 > - a release branch for each minor version of Apache Flink, e.g. 
 > `release-1.10`, and
@@ -70,20 +74,22 @@ This `flink-training` project contains exercises, tests, 
and reference solutions
 >
 > If you want to work on a version other than the current Flink release, make 
 > sure to check out the appropriate branch.
 
+Clone the `flink-training` repository from GitHub, navigate into the project 
repository, and build it:
+
 ```bash
 git clone https://github.com/apache/flink-training.git
 cd flink-training
 ./gradlew test shadowJar
 ```
 
-If you haven’t done this before, at this point you’ll end up downloading all 
of the dependencies for this Flink training project. This usually takes a few 
minutes, depending on the speed of your internet connection.
+If this is your first time building it, you will end up downloading all of the 
dependencies for this Flink training project. This usually takes a few minutes, 
depending on the speed of your internet connection.
 
 If all of the tests pass and the build is successful, you are off to a good 
start.
 
 <details>
-<summary><strong>Users in China: click here for instructions about using a 
local maven mirror.</strong></summary>
+<summary><strong>:cn: Users in China: click here for instructions on using a 
local Maven mirror.</strong></summary>
 
-If you are in China, we recommend configuring the maven repository to use a 
mirror. You can do this by uncommenting the appropriate line in our 
[`build.gradle`](build.gradle) like this:
+If you are in China, we recommend configuring the Maven repository to use a 
mirror. You can do this by uncommenting this section in our 
[`build.gradle`](build.gradle) file:
 
 ```groovy
     repositories {
@@ -100,13 +106,13 @@ If you are in China, we recommend configuring the maven 
repository to use a mirr
 ```
 </details>
 
-
-### Enable Scala (optional)
+<details>
+<summary><strong>Enable Scala (optional)</strong></summary>
 
 The exercises in this project are also available in Scala but due to a couple
 of reported problems from non-Scala users, we decided to disable these by
 default. You can re-enable all Scala exercises and solutions by uncommenting
-the Scala plugin in our [`build.gradle`](build.gradle) file:
+this section in our [`build.gradle`](build.gradle) file:
 
 ```groovy
 subprojects {
@@ -116,24 +122,31 @@ subprojects {
 ```
 
 You can also selectively apply this plugin in a single subproject if desired.
+</details>
+
 
 ### Import the flink-training project into your IDE
 
 The project needs to be imported as a gradle project into your IDE.
 
-Once that’s done you should be able to open 
[`RideCleansingTest`](ride-cleansing/src/test/java/org/apache/flink/training/exercises/ridecleansing/RideCleansingTest.java)
 and successfully run this test.
+Then you should be able to open 
[`RideCleansingTest`](ride-cleansing/src/test/java/org/apache/flink/training/exercises/ridecleansing/RideCleansingTest.java)
 and run this test.
+
+> **:information_source: Note for Scala users:** You will need to use IntelliJ 
with the JetBrains Scala plugin, and you will need to add a Scala 2.12 SDK to 
the Global Libraries section of the Project Structure.
+> IntelliJ will ask you for the latter when you open a Scala file.
 
-> **:information_source: Note for Scala users:** You will need to use IntelliJ 
with the JetBrains Scala plugin, and you will need to add a Scala 2.12 SDK to 
the Global Libraries section of the Project Structure. IntelliJ will ask you 
for the latter when you open a Scala file.
+## Use the taxi data streams
 
-## Using the Taxi Data Streams
+These exercises use data 
[generators](common/src/main/java/org/apache/flink/training/exercises/common/sources)
 that produce simulated event streams.
+The data is inspired by the [New York City Taxi & Limousine 
Commission's](http://www.nyc.gov/html/tlc/html/home/home.shtml) public
+[data set](https://uofi.app.box.com/NYCtaxidata) about taxi rides in New York 
City.
 
-These exercises use data 
[generators](common/src/main/java/org/apache/flink/training/exercises/common/sources)
 that produce simulated event streams
-inspired by those shared by the [New York City Taxi & Limousine 
Commission](http://www.nyc.gov/html/tlc/html/home/home.shtml)
-in their public [data set](https://uofi.app.box.com/NYCtaxidata) about taxi 
rides in New York City.
+### Schema of taxi ride events
 
-### Schemas of Taxi Ride and Taxi Fare Events
+Our taxi data set contains information about individual taxi rides in New York 
City.
 
-Our taxi data set contains information about individual taxi rides in New York 
City. Each ride is represented by two events: a trip start, and a trip end 
event. Each event consists of eleven fields:
+Each ride is represented by two events: a trip start, and a trip end.
+
+Each event consists of eleven fields:
 
 ```
 rideId         : Long      // a unique id for each ride
@@ -150,7 +163,9 @@ endLat         : Float     // the latitude of the ride end 
location
 passengerCnt   : Short     // number of passengers on the ride
 ```
 
-There is also a related data set containing fare data about those same rides, 
with these fields:
+### Schema of taxi fare events
+
+There is also a related data set containing fare data about those same rides, 
with the following fields:
 
 ```
 rideId         : Long      // a unique id for each ride
@@ -163,169 +178,72 @@ tolls          : Float     // tolls for this ride
 totalFare      : Float     // total fare collected
 ```
 
-## How to do the Labs
+## How to do the lab exercises
 
-In the hands-on sessions you will implement Flink programs using various Flink 
APIs.
+In the hands-on sessions, you will implement Flink programs using various 
Flink APIs.
 
 The following steps guide you through the process of using the provided data 
streams, implementing your first Flink streaming program, and executing your 
program in your IDE.
 
-We assume you have set up your development environment according to our [setup 
guide above](#set-up-your-development-environment).
+We assume you have set up your development environment according to our [setup 
guide](#set-up-your-development-environment).
 
 ### Learn about the data
 
-The initial set of exercises are all based on data streams of events about 
taxi rides and taxi fares. These streams are produced by source functions which 
reads data from input files. Please read the [instructions 
above](#using-the-taxi-data-streams) to learn how to use them.
+The initial set of exercises are all based on data streams of events about 
taxi rides and taxi fares. These streams are produced by source functions which 
reads data from input files.
+Read the [instructions](#using-the-taxi-data-streams) to learn how to use them.
 
 ### Run and debug Flink programs in your IDE
 
 Flink programs can be executed and debugged from within an IDE. This 
significantly eases the development process and provides an experience similar 
to working on any other Java (or Scala) application.
 
-Starting a Flink program in your IDE is as easy as running its `main()` 
method. Under the hood, the execution environment will start a local Flink 
instance within the same process. Hence it is also possible to put breakpoints 
in your code and debug it.
-
-Assuming you have an IDE with this `flink-training` project imported, you can 
run (or debug) a simple streaming job as follows:
-
-- Open the `org.apache.flink.training.examples.ridecount.RideCountExample` 
class in your IDE
-- Run (or debug) the `main()` method of the `RideCountExample` class using 
your IDE.
-
-### Exercises, Tests, and Solutions
-
-Each of these exercises includes an `...Exercise` class with most of the 
necessary boilerplate code for getting started, as well as a JUnit Test class 
(`...Test`) with a few tests for your implementation, and a `...Solution` class 
with a complete solution.
-
-> **:information_source: Note:** As long as your `...Exercise` class is 
throwing a `MissingSolutionException`, the provided JUnit test classes will 
ignore that failure and verify the correctness of the solution implementation 
instead.
-
-There are Java and Scala versions of all the exercise, test, and solution 
classes, each of which can be run from IntelliJ as usual.
-
-#### Running Exercises, Tests, and Solutions on the Command Line
-
-You can execute exercises, solutions, and tests via `gradlew` from a CLI.
-
-- Tests can be executed as usual:
-
-    ```bash
-    ./gradlew test
-    ./gradlew :<subproject>:test
-    ```
-
-- For Java/Scala exercises and solutions, we provide special tasks that are 
listed via
-
-    ```bash
-    ./gradlew printRunTasks
-    ```
-
------
-
-Now you are ready to begin with the first exercise in our 
[**Labs**](LABS-OVERVIEW.md).
-
------
+To start a Flink program in your IDE, run its `main()` method. Under the hood, 
the execution environment will start a local Flink instance within the same 
process. Hence, it is also possible to put breakpoints in your code and debug 
it.
 
-## How to work on this project
+If you have an IDE with this `flink-training` project imported, you can run 
(or debug) a streaming job by:
 
-> **:heavy_exclamation_mark: Important:** This section contains tips for 
developers who are
-> maintaining the `flink-training` project (not so much people doing the
-> training).
+- opening the `org.apache.flink.training.examples.ridecount.RideCountExample` 
class in your IDE
+- running (or debugging) the `main()` method of the `RideCountExample` class 
using your IDE
 
-The following sections apply on top of the [Setup 
Instructions](#set-up-your-development-environment) above.
+### Exercises, tests, and solutions
 
-### Code Formatting
+Each of these exercises include:
+- an `...Exercise` class with most of the necessary boilerplate code for 
getting started
+- a JUnit Test class (`...Test`) with a few tests for your implementation
+- a `...Solution` class with a complete solution
 
-Just like [Apache Flink](https://github.com/apache/flink), we use the [Spotless
-plugin](https://github.com/diffplug/spotless/tree/main/plugin-maven) together
-with [google-java-format](https://github.com/google/google-java-format) to
-format our Java code. You can configure your IDE to automatically apply
-formatting on saving with these steps:
+There are Java and Scala versions of all the exercise, test, and solution 
classes. They can each be run from IntelliJ.
 
-1. Install the [google-java-format
-   plugin](https://plugins.jetbrains.com/plugin/8527-google-java-format) and
-   enable it for the project
-2. In the plugin settings, change the code style to "AOSP" (4-space indents)
-3. Install the [Save Actions
-   plugin](https://plugins.jetbrains.com/plugin/7642-save-actions)
-4. Enable the plugin, along with "Optimize imports" and "Reformat file" but
-   ignoring `.*README\.md`.
-
-### Ignoring Refactoring Commits
-
-We keep a list of big refactoring commits in `.git-blame-ignore-revs`. When 
looking at change annotations using `git blame` it's helpful to ignore these. 
You can configure git and your IDE to do so using:
-
-```bash
-git config blame.ignoreRevsFile .git-blame-ignore-revs
-```
-
-### Adding new exercises
-
-If you want to add a new exercise, we recommend copying an existing one and
-adapting it accordingly. Make sure the new subproject's `build.gradle` file
-contains appropriate class name properties so that we can create the right
-tasks for [Running Tests and Solutions on the Command 
Line](#running-exercises-tests-and-solutions-on-the-command-line), e.g.:
-
-```groovy
-ext.javaExerciseClassName = 
'org.apache.flink.training.exercises.ridesandfares.RidesAndFaresExercise'
-ext.scalaExerciseClassName = 
'org.apache.flink.training.exercises.ridesandfares.scala.RidesAndFaresExercise'
-ext.javaSolutionClassName = 
'org.apache.flink.training.solutions.ridesandfares.RidesAndFaresSolution'
-ext.scalaSolutionClassName = 
'org.apache.flink.training.solutions.ridesandfares.scala.RidesAndFaresSolution'
-
-apply plugin: 'application'
-
-mainClassName = ext.javaExerciseClassName
-```
-
-### Useful Gradle Commands and Tricks
-
-#### Clean Build with all Checks
+> **:information_source: Note:** As long as your `...Exercise` class is 
throwing a `MissingSolutionException`, the provided JUnit test classes will 
ignore that failure and verify the correctness of the solution implementation 
instead.
 
-```bash
-./gradlew clean check shadowJar
-./gradlew clean check shadowJar --no-build-cache
-```
+You can run exercises, solutions, and tests with the `gradlew` command.
 
-#### Force a Re-run of all Tests Only
+To run tests:
 
 ```bash
-./gradlew cleanTest test  --no-build-cache
+./gradlew test
+./gradlew :<subproject>:test
 ```
 
-> **:information_source: Note:** Ignoring the build-cache is required if you 
really want to run the test again (without any changes in code).
-> Otherwise the test tasks will just pull the latest test results from the 
cache.
-
-#### Fix Formatting
+For Java/Scala exercises and solutions, we provide special tasks that can be 
listed with:
 
 ```bash
-./gradlew spotlessApply
-./gradlew :rides-and-fares:spotlessApply
+./gradlew printRunTasks
 ```
 
-> **:information_source: Note:** You actually do not have to remember this 
since
-> `./gradlew check` will not only verify the formatting and print any errors 
but
-> also mention the command to fix these.
+:point_down: Now you are ready to begin the lab exercises. :point_down:
 
-#### Tune the Java Compiler
+## Lab exercises
 
-Add the following code to the `subprojects { /*...*/ }` section of the
-[`build.gradle`](build.gradle) file and adapt accordingly, for example:
-
-```groovy
-    tasks.withType(JavaCompile) {
-        options.compilerArgs << '-Xlint:unchecked'
-        options.deprecation = true
-    }
-```
-
-> **:information_source: Note:** We don't add this by default for now to keep
-> the training requirements low for participants and keep focus on the
-> exercises at hand.
-
-#### Deprecated Gradle Features
-
-You may see this warning being reported from Gradle:
-> Deprecated Gradle features were used in this build, making it incompatible 
with Gradle 8.0.
->
-> You can use '--warning-mode all' to show the individual deprecation warnings 
and determine if they come from your own scripts or plugins.
->
-> See 
https://docs.gradle.org/7.1/userguide/command_line_interface.html#sec:command_line_warnings
+1. [Filtering a Stream (Ride Cleansing)](ride-cleansing)
+1. [Stateful Enrichment (Rides and Fares)](rides-and-fares)
+1. [Windowed Analytics (Hourly Tips)](hourly-tips)
+   - [Exercise](hourly-tips/README.md)
+   - [Discussion](hourly-tips/DISCUSSION.md)
+1. [`ProcessFunction` and Timers (Long Ride Alerts)](long-ride-alerts)
+   - [Exercise](long-ride-alerts/README.md)
+   - [Discussion](long-ride-alerts/DISCUSSION.md)
 
-This is currently caused by https://github.com/johnrengelman/shadow/issues/680
-and has to be fixed by the shadow plugin developers.
+## Contribute
 
------
+If you would like to contribute to this repository or add new exercises, 
please read the [contributing](CONTRIBUTING.md) guide.
 
 ## License
 
diff --git a/hourly-tips/DISCUSSION.md b/hourly-tips/DISCUSSION.md
index 56a55d4..ef7c6c0 100644
--- a/hourly-tips/DISCUSSION.md
+++ b/hourly-tips/DISCUSSION.md
@@ -149,4 +149,4 @@ an indicator of when this state can be cleared -- to get 
those semantics, we nee
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/hourly-tips/README.md b/hourly-tips/README.md
index 396d609..142edec 100644
--- a/hourly-tips/README.md
+++ b/hourly-tips/README.md
@@ -73,4 +73,4 @@ Reference solutions are available at GitHub:
 
 [**Lab Discussion: Windowed Analytics (Hourly Tips)**](DISCUSSION.md)
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/long-ride-alerts/DISCUSSION.md b/long-ride-alerts/DISCUSSION.md
index 571094b..158edc2 100644
--- a/long-ride-alerts/DISCUSSION.md
+++ b/long-ride-alerts/DISCUSSION.md
@@ -41,4 +41,4 @@ exceptionally late is a challenge that is inherent to 
stateful stream processing
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/long-ride-alerts/README.md b/long-ride-alerts/README.md
index 3366fbb..c38b587 100644
--- a/long-ride-alerts/README.md
+++ b/long-ride-alerts/README.md
@@ -99,4 +99,4 @@ Reference solutions are available at GitHub:
 
 [**Lab Discussion: `ProcessFunction` and Timers (Long Ride 
Alerts)**](DISCUSSION.md)
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/ride-cleansing/README.md b/ride-cleansing/README.md
index 2a1c2fd..c357399 100644
--- a/ride-cleansing/README.md
+++ b/ride-cleansing/README.md
@@ -90,4 +90,4 @@ Reference solutions are available in this project:
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)
diff --git a/rides-and-fares/README.md b/rides-and-fares/README.md
index 888d763..04c355e 100644
--- a/rides-and-fares/README.md
+++ b/rides-and-fares/README.md
@@ -84,4 +84,4 @@ Reference solutions are available in this project:
 
 -----
 
-[**Back to Labs Overview**](../LABS-OVERVIEW.md)
+[**Back to Labs Overview**](../README.md#lab-exercises)

Reply via email to