From a4a7e3aac6b066408ba082748a2ae3d20668c5ee Mon Sep 17 00:00:00 2001 From: Tony Bedford Date: Tue, 7 Nov 2023 14:45:59 +0000 Subject: [PATCH 01/13] Update ISO status (#217) --- docs/manage/security.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/manage/security.md b/docs/manage/security.md index c24dc25f..f7ce3df4 100644 --- a/docs/manage/security.md +++ b/docs/manage/security.md @@ -72,12 +72,14 @@ Restricted access ensures only colleagues in the necessary roles can work on the ## Compliance -Quix is aiming to meet and exceed one of the most broadly recognised security standards. +Quix is ISO-27001 certified, a widely recognised standard that sets forth the criteria for an information security management system (ISMS). ### ISO-27001 -ISO-27001 details IT security management systems and procedures. We are currently pursuing certification under this rigorous standard while actively working towards standardising our written policies and procedures. +This standard provides a structured approach for implementing, operating, monitoring, and improving an ISMS. -An ISO-27001 certification is a quick and easy way to judge the general security posture of an organisation. By obtaining this certification soon, we aim to demonstrate our commitment to information security. +Quix adheres to ISO 27001, ensuring that the company applies systematic methodologies and a solid framework to identify, manage, and reduce information security risks. Certification in this standard indicates Quix's commitment to establishing international best practices in information security. -We are aiming to complete the internal audit by October 2023 and obtain the certification by the end of the calendar year 2023. +For Quix's clients, the ISO 27001 certification assures a dependable security framework. This certification signals our dedication to data protection and the strength of our risk management practices, aiming to secure client data against potential threats. + +You can verify the validity of our ISO certificate by entering the certificate number 251068 using the [certification verification link](https://www.british-assessment.co.uk/verify-certification/){target=_blank}. From 492dd90525888a4dd905e2986fc259a5bab17263 Mon Sep 17 00:00:00 2001 From: tbedford Date: Tue, 7 Nov 2023 16:44:33 +0000 Subject: [PATCH 02/13] [add] - templates page --- docs/get-started/project-templates.md | 33 ++++++++++++++++++ .../chat-sentiment-pipeline.png | Bin 0 -> 96807 bytes .../computer-vision-pipeline.png | Bin 0 -> 65213 bytes mkdocs.yml | 1 + 4 files changed, 34 insertions(+) create mode 100644 docs/get-started/project-templates.md create mode 100644 docs/images/project-templates/chat-sentiment-pipeline.png create mode 100644 docs/images/project-templates/computer-vision-pipeline.png diff --git a/docs/get-started/project-templates.md b/docs/get-started/project-templates.md new file mode 100644 index 00000000..4034828e --- /dev/null +++ b/docs/get-started/project-templates.md @@ -0,0 +1,33 @@ +# Project templates + +Project templates provide a way for you to examine your use case running in Quix. + +Project templates also provide a starting point for your own projects - our project templates are hosted as open source in GitHub, so you can fork them and import them into Quix, and use them to build out your own solution. + +
+ +- __Computer Vision__ + + --- + + ![Computer vision pipeline](../images/project-templates/computer-vision-pipeline.png) + + A project template that implements a real-time computer vision application. + + See the project running in Quix + + Try the tutorial + +- __Chat sentiment analysis__ + + --- + + ![Chat sentiment analysis pipeline](../images/project-templates/chat-sentiment-pipeline.png) + + A project template that implements a chat application with sentiment analysis. + + See the project running in Quix + + Try the tutorial + +
diff --git a/docs/images/project-templates/chat-sentiment-pipeline.png b/docs/images/project-templates/chat-sentiment-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..abf9f4bb90553d7af16efc7e8b60929700e8c76d GIT binary patch literal 96807 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%0Ak1;Wly#EV0Xe4(sLf4l6 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 SxMT?6pR~BVSe}TM_x}f(q=D!F literal 0 HcmV?d00001 diff --git a/docs/images/project-templates/computer-vision-pipeline.png b/docs/images/project-templates/computer-vision-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..25485d5c43013442579fc1e71b31ccd3efaca553 GIT binary patch literal 65213 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 literal 0 HcmV?d00001 diff --git a/mkdocs.yml b/mkdocs.yml index 2576f071..78e3dfc7 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,6 +21,7 @@ nav: - '1. Ingest': 'get-started/quixtour/ingest-push.md' - '2. Process': 'get-started/quixtour/process-threshold.md' - '3. Serve': 'get-started/quixtour/serve-sms.md' + - 'Project templates': 'get-started/project-templates.md' - 'What is Quix?': 'get-started/what-is-quix.md' - 'Glossary': 'get-started/glossary.md' - 'Contribute': 'get-started/contribute.md' From 58ba5df0d2a20db0fbb85c254c70895d28d2605d Mon Sep 17 00:00:00 2001 From: tbedford Date: Tue, 7 Nov 2023 16:44:46 +0000 Subject: [PATCH 03/13] [update] - tutorials page --- docs/tutorials/overview.md | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/docs/tutorials/overview.md b/docs/tutorials/overview.md index b3925fd9..756c12ed 100644 --- a/docs/tutorials/overview.md +++ b/docs/tutorials/overview.md @@ -4,24 +4,41 @@ The Quix tutorials provide you with experience of using Quix. They guide you in Each tutorial is divided into parts, so that you can leave a tutorial at a convenient point, come back to it later, and continue where you left off. +Some tutorials use [project templates](../get-started/project-templates.md) - these are marked accordingly. + From f0274fc7797e5e212fcd439083e9de7c7ffc140e Mon Sep 17 00:00:00 2001 From: tbedford Date: Wed, 8 Nov 2023 12:25:08 +0000 Subject: [PATCH 04/13] [wip] - improve project templates --- docs/get-started/project-templates.md | 12 ++++-------- docs/get-started/welcome.md | 2 +- docs/tutorials/computer-vision/overview.md | 9 ++++++--- docs/tutorials/sentiment-analysis/overview.md | 7 +++++-- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/docs/get-started/project-templates.md b/docs/get-started/project-templates.md index 4034828e..6edc7a0b 100644 --- a/docs/get-started/project-templates.md +++ b/docs/get-started/project-templates.md @@ -1,8 +1,8 @@ # Project templates -Project templates provide a way for you to examine your use case running in Quix. +Project templates provide a way for you to examine your use case running in Quix. You don't need to sign up to see these projects running in Quix. -Project templates also provide a starting point for your own projects - our project templates are hosted as open source in GitHub, so you can fork them and import them into Quix, and use them to build out your own solution. +Project templates also provide a starting point for your own projects - our project templates are hosted as open source in the [Quix GitHub repository](https://github.com/quixio), so you can fork them and import them into Quix, and use them to build out your own solution.
@@ -14,9 +14,7 @@ Project templates also provide a starting point for your own projects - our proj A project template that implements a real-time computer vision application. - See the project running in Quix - - Try the tutorial + [Explore :octicons-arrow-right-24:](../tutorials/computer-vision/overview.md) - __Chat sentiment analysis__ @@ -26,8 +24,6 @@ Project templates also provide a starting point for your own projects - our proj A project template that implements a chat application with sentiment analysis. - See the project running in Quix - - Try the tutorial + [Explore :octicons-arrow-right-24:](../tutorials/sentiment-analysis/overview.md)
diff --git a/docs/get-started/welcome.md b/docs/get-started/welcome.md index d389b5b2..226152b7 100644 --- a/docs/get-started/welcome.md +++ b/docs/get-started/welcome.md @@ -5,7 +5,7 @@ diff --git a/docs/tutorials/computer-vision/overview.md b/docs/tutorials/computer-vision/overview.md index 28e130ae..0e07d379 100644 --- a/docs/tutorials/computer-vision/overview.md +++ b/docs/tutorials/computer-vision/overview.md @@ -1,15 +1,18 @@ # Computer vision -In this tutorial you learn about a real-time computer vision application, using a [Quix template project](https://github.com/quixio/computer-vision-demo){target=_blank}. +In this tutorial you learn about a real-time computer vision application, using a [Quix template project](https://github.com/quixio/computer-vision-demo){target=_blank}. + +![Computer vision pipeline](../../images/project-templates/computer-vision-pipeline.png) The project uses the Transport for London (TfL) traffic cameras, known as Jam Cams, as the video input. The [YOLO v8](https://docs.ultralytics.com/) machine learning model is used to identify various objects such as types of vehicles. Additional services count the vehicles and finally the data is displayed on a map which is part of the web UI that has been created for this project. You'll fork the complete project from GitHub, and then create a Quix project from the forked repo, so you have a copy of the full application code running in your Quix account. You then examine the data flow through the project's pipeline, using tools provided by the Quix Portal. diff --git a/docs/tutorials/sentiment-analysis/overview.md b/docs/tutorials/sentiment-analysis/overview.md index 204f0d14..9a2114d1 100644 --- a/docs/tutorials/sentiment-analysis/overview.md +++ b/docs/tutorials/sentiment-analysis/overview.md @@ -2,14 +2,17 @@ In this tutorial you learn about a real-time chat sentiment analysis application, using a [Quix template project](https://github.com/quixio/chat-demo-app){target=_blank}. +![Sentiment analysis pipeline](../../images/project-templates/chat-sentiment-pipeline.png) + Sentiment analysis is performed on chat messages. The project includes a chat UI, where you can type chat messages. You can also connect to Twitch and perform sentiment analysis on large volumes of messages. You learn how to get the project, try out the UI, look more deeply into the UI and the sentiment analysis service, and then customize the UI. From 45833ca4555911bb9acb3ed4e61ebd7744cdc243 Mon Sep 17 00:00:00 2001 From: tbedford Date: Wed, 8 Nov 2023 14:52:37 +0000 Subject: [PATCH 05/13] [chore] - remove use of platform --- docs/apis/streaming-reader-api/overview.md | 3 +-- docs/deploy/deploy-public-page.md | 2 +- docs/deploy/environment-variables.md | 4 ++-- docs/develop/apis-overview.md | 4 ++-- docs/develop/authentication/streaming-token.md | 2 +- docs/develop/integrate-data/jupyter-nb.md | 6 +++--- docs/develop/integrate-data/quix-streams.md | 2 +- docs/develop/integrate-data/read-csv.md | 2 +- docs/get-started/glossary.md | 12 ++++++------ docs/get-started/quickstart.md | 6 +++--- docs/get-started/quixtour/ingest-push.md | 6 +++--- docs/get-started/quixtour/overview.md | 10 +++++----- docs/get-started/what-is-quix.md | 6 +++--- docs/manage/MLOps.md | 4 ++-- docs/manage/replay.md | 2 +- docs/manage/security.md | 10 +++++----- docs/tutorials/computer-vision/overview.md | 2 +- .../tutorials/currency-alerting/currency-alerting.md | 7 +++---- docs/tutorials/data-science/3-data.md | 4 ++-- docs/tutorials/data-science/4-train.md | 4 ++-- docs/tutorials/data-science/6-conclusion.md | 2 +- docs/tutorials/data-science/overview.md | 8 ++++---- docs/tutorials/event-detection/data-acquisition.md | 2 +- docs/tutorials/train-and-deploy-ml/conclusion.md | 2 +- docs/tutorials/train-and-deploy-ml/deploy-ml.md | 4 ++-- docs/tutorials/train-and-deploy-ml/overview.md | 6 +++--- mkdocs.yml | 2 +- 27 files changed, 61 insertions(+), 63 deletions(-) diff --git a/docs/apis/streaming-reader-api/overview.md b/docs/apis/streaming-reader-api/overview.md index 39ad7c58..35665368 100644 --- a/docs/apis/streaming-reader-api/overview.md +++ b/docs/apis/streaming-reader-api/overview.md @@ -1,6 +1,6 @@ # Overview -As an alternative to Quix Streams, the Quix platform supports real-time data streaming over WebSockets (or Long Polling depending on client support). +Quix supports real-time data streaming over WebSockets (or Long Polling depending on client support). Clients can receive updates on data and definitions for parameters and events, as they happen. @@ -9,4 +9,3 @@ Streaming Reader API is typically used by clients written in languages not suppo !!! note The following examples use the Microsoft [SignalR](https://docs.microsoft.com/en-us/aspnet/core/signalr/javascript-client?view=aspnetcore-5.0){target=_blank} JavaScript client library. - diff --git a/docs/deploy/deploy-public-page.md b/docs/deploy/deploy-public-page.md index 492f2d44..59a65813 100644 --- a/docs/deploy/deploy-public-page.md +++ b/docs/deploy/deploy-public-page.md @@ -1,6 +1,6 @@ # How to deploy a public service -The Quix Platform enables you to deploy public-facing web pages and APIs. +Quix enables you to deploy public-facing web pages and APIs. This how-to will help to explain the features and options and ensure projects containing public facing web pages and APIs are successful. diff --git a/docs/deploy/environment-variables.md b/docs/deploy/environment-variables.md index 373886ee..f54798ff 100644 --- a/docs/deploy/environment-variables.md +++ b/docs/deploy/environment-variables.md @@ -1,6 +1,6 @@ -# How to add environment variables in Quix Platform +# How to add environment variables in Quix -In Quix Platform, it is possible to create new environment variables that your code can then access. This is useful for things like API keys, secrets, and passwords for other services that your code may need to access. +In Quix, it is possible to create new environment variables that your code can then access. This is useful for things like API keys, secrets, and passwords for other services that your code may need to access. ## To create an environment variable diff --git a/docs/develop/apis-overview.md b/docs/develop/apis-overview.md index 2d70d6a4..4ad908aa 100644 --- a/docs/develop/apis-overview.md +++ b/docs/develop/apis-overview.md @@ -1,6 +1,6 @@ # Quix APIs Overview -The Quix Platform provides several APIs. These are: +Quix provides several APIs. These are: * Streaming Writer API * Streaming Reader API @@ -56,7 +56,7 @@ The [Portal API](../apis/portal-api/overview.md) gives access to the Quix Portal ## Query API -The [Query API](../apis/query-api/overview.md) enables you to fetch persisted data from Quix. You can use it for exploring the platform, testing, prototyping applications, or working with persisted data in any language with HTTP capabilities. +The [Query API](../apis/query-api/overview.md) enables you to fetch persisted data from Quix. You can use it for exploring Quix, testing, prototyping applications, or working with persisted data in any language with HTTP capabilities. !!! note diff --git a/docs/develop/authentication/streaming-token.md b/docs/develop/authentication/streaming-token.md index fe6f3e49..26e165f4 100644 --- a/docs/develop/authentication/streaming-token.md +++ b/docs/develop/authentication/streaming-token.md @@ -28,7 +28,7 @@ Having two keys lets you update your services without interruption, as both `Tok You have two main options regarding how you rotate: -1. The easiest way to rotate comes with some service downtime. This assumes you do not directly set the token for your `QuixStreamingClient`, instead you let the platform take care of it for you by using the default environment variable. In this scenario all you have to do is rotate keys, stop and start all your deployments. Until a service is restarted it’ll try to communicate with the platform using the deactivated token. If you’re using local environments, those need to be updated manually. +1. The easiest way to rotate comes with some service downtime. This assumes you do not directly set the token for your `QuixStreamingClient`, instead you let Quix take care of it for you by using the default environment variable. In this scenario all you have to do is rotate keys, stop and start all your deployments. Until a service is restarted it’ll try to communicate with Quix using the deactivated token. If you’re using local environments, those need to be updated manually. 2. The alternative option is more complicated, but you can achieve no downtime. This requires you to set a new environment variable you control. This should point to the token to be used. Provide the value of this environment variable to `QuixStreamingClient` by passing it as an argument. Once you have that, set the value of this environment variable to `Token 2` and start your services. When you’re sure you replaced the tokens for all services, rotate your keys. diff --git a/docs/develop/integrate-data/jupyter-nb.md b/docs/develop/integrate-data/jupyter-nb.md index c8ba4792..78b3dff4 100644 --- a/docs/develop/integrate-data/jupyter-nb.md +++ b/docs/develop/integrate-data/jupyter-nb.md @@ -1,6 +1,6 @@ # Use Jupyter Notebook -In this documentation, you learn how to use Jupyter Notebook to analyze data persisted in the Quix platform. +In this documentation, you learn how to use Jupyter Notebook to analyze data persisted in Quix. ## Why this is important @@ -8,7 +8,7 @@ Although Quix is a real-time platform, to build real-time in-memory models and d ## Prerequisites -You'll need some data stored in the Quix platform. You can use any of the Quix [data sources](../../connectors/index.md) available in the Quix Code Samples. +You'll need some data stored in Quix. You can use any of the Quix [data sources](../../connectors/index.md) available in the Quix Code Samples. You can also follow the onboarding process when you [sign-up to Quix](https://portal.platform.quix.ai/self-sign-up?xlink=docs){target=_blank}. This process helps you create a source. @@ -32,7 +32,7 @@ Then create a new Python 3 notebook: The Quix web application has a Python code generator to help you connect your Jupyter notebook with Quix. -You need to be logged into the platform for this. To import persisted data: +You need to be logged into Quix for this. To import persisted data: 1. Select an environment. diff --git a/docs/develop/integrate-data/quix-streams.md b/docs/develop/integrate-data/quix-streams.md index 590d2d71..63fd19bd 100644 --- a/docs/develop/integrate-data/quix-streams.md +++ b/docs/develop/integrate-data/quix-streams.md @@ -2,7 +2,7 @@ You can use Quix Streams to push and pull data to and from Quix, as well as use it to transform data. -Some example code showing Quix Streams pushing data inot the platform is shown here: +Some example code showing Quix Streams pushing data into Quix is shown here: ```python import psutil diff --git a/docs/develop/integrate-data/read-csv.md b/docs/develop/integrate-data/read-csv.md index 63d317f9..aa41c667 100644 --- a/docs/develop/integrate-data/read-csv.md +++ b/docs/develop/integrate-data/read-csv.md @@ -30,7 +30,7 @@ Note, the data is loaded into a pandas dataframe, and then published to the outp If you're not using pandas, you can write your own code to load data from a CSV file. -The following code demonstrates loading data from a CSV file and adding the timestamp column, and only adding other data columns of interest. In addition, this code is designed to be run on the command line. This code reads a CSV file on, for example, your laptop, and pushes the data into Quix Platform, using the Quix Streams client library: +The following code demonstrates loading data from a CSV file and adding the timestamp column, and only adding other data columns of interest. In addition, this code is designed to be run on the command line. This code reads a CSV file on, for example, your laptop, and pushes the data into Quix, using the Quix Streams client library: ``` python # pip install quixstreams diff --git a/docs/get-started/glossary.md b/docs/get-started/glossary.md index 5e320d8c..53ac7f1d 100644 --- a/docs/get-started/glossary.md +++ b/docs/get-started/glossary.md @@ -8,9 +8,9 @@ In addition to the Quix Streams client library, there are several APIs that you ## Application -A set of code in Quix Platform that can be edited, compiled, run, and deployed as one Docker image (configured using a `dockerfile`). +A set of code in Quix that can be edited, compiled, run, and deployed as one Docker image (configured using a `dockerfile`). -Applications in Quix Platform exist inside the Git branch associated with an [environment](#environment), and are therefore fully version controlled. You can also tag your code as an easy way to manage deployments. +Applications in Quix exist inside the Git branch associated with an [environment](#environment), and are therefore fully version controlled. You can also tag your code as an easy way to manage deployments. Read more about [applications](../create/overview.md). @@ -22,13 +22,13 @@ With this data you can stream, process and store any type of audio, image, video ## Code Samples -Quix Platform contains a large number of [open source](https://github.com/quixio/quix-samples){target=_blank} Code Samples. You can use these to quickly build out your stream processing pipeline. Generally the code samples are divided into three main categories: source, transform, destination. You can access the Code Samples from within the Quix Portal by using the navigation menu as show here: +Quix contains a large number of [open source](https://github.com/quixio/quix-samples){target=_blank} Code Samples. You can use these to quickly build out your stream processing pipeline. Generally the code samples are divided into three main categories: source, transform, destination. You can access the Code Samples from within the Quix Portal by using the navigation menu as show here: ![Code Samples](../images/code-samples.png){height=30%} ## Connectors -There are [many ways](../develop/integrate-data/overview.md) to get data into Quix Platform. One option is to use the many connectors already provided by Quix. These can be viewed in Quix Platform by clicking Code Samples and then selecting Source and Destination filters. Alternatively, you can see a useful page in our documentation, that lists the [available connectors](../connectors/index.md). +There are [many ways](../develop/integrate-data/overview.md) to get data into Quix. One option is to use the many connectors already provided by Quix. These can be viewed in Quix by clicking Code Samples and then selecting Source and Destination filters. Alternatively, you can see a useful page in our documentation, that lists the [available connectors](../connectors/index.md). ## Consumer @@ -206,11 +206,11 @@ Read more about [streams](../quix-streams/features/streaming-context.md). ## Streaming Reader API -A [WebSockets API](../apis/streaming-reader-api/overview.md) used to stream any data directly from a topic to an external application. Most commonly used to read the results of a model or service to a real-time web application. Your application **reads** data from Quix Platform. +A [WebSockets API](../apis/streaming-reader-api/overview.md) used to stream any data directly from a topic to an external application. Most commonly used to read the results of a model or service to a real-time web application. Your application **reads** data from Quix. ## Streaming Writer API -An [HTTP API](../apis/streaming-writer-api/overview.md) used to send telemetry data from any source to a topic in the Quix platform. It should be used when it is not possible to use [Quix Streams](../client-library-intro.md). Your application **writes** data into Quix Platform. +An [HTTP API](../apis/streaming-writer-api/overview.md) used to send telemetry data from any source to a topic in Quix. It should be used when it is not possible to use [Quix Streams](../client-library-intro.md). Your application **writes** data into Quix. ## Template project diff --git a/docs/get-started/quickstart.md b/docs/get-started/quickstart.md index e61dfc29..b3d10a4d 100644 --- a/docs/get-started/quickstart.md +++ b/docs/get-started/quickstart.md @@ -21,7 +21,7 @@ Get data into Quix and display it: If you're just curious, click the box to see the complete code. -??? example "Push CPU load data to Quix Platform" +??? example "Push CPU load data to Quix" Click the (+) symbols to see the code annotations. @@ -75,7 +75,7 @@ If you're just curious, click the box to see the complete code. 2. Make sure you `pip install quixstreams`. 3. Make sure you `pip install python-dotenv`. 4. The function to return CPU load. - 5. You can connect to Quix Platform using the token you can find in your Quix account. + 5. You can connect to Quix using the token you can find in your Quix account. 6. Get the topic you are going to publish data to. If the topic does not exist, it is created. 7. Create a Quix stream to write to. You can think of a stream as a channel within a topic. 8. Publish your data to the stream. @@ -105,7 +105,7 @@ pip install python-dotenv If you're on Mac and using Homebrew, you may have multiple Python versions installed. In this case you may have to use the command `pip3` to install your modules. -You're going to use the [Quix Streams](../client-library-intro.md) library to push data into Quix Platform. This is just one of [many ways](../develop/integrate-data/overview.md) to get your data into Quix. You could for example simply log into Quix and use one of our already available [connectors](../connectors/index.md), but where's the fun in that! +You're going to use the [Quix Streams](../client-library-intro.md) library to push data into Quix. This is just one of [many ways](../develop/integrate-data/overview.md) to get your data into Quix. You could for example simply log into Quix and use one of our already available [connectors](../connectors/index.md), but where's the fun in that! You use the `psutil` module to retrieve the CPU load on your laptop. diff --git a/docs/get-started/quixtour/ingest-push.md b/docs/get-started/quixtour/ingest-push.md index e866c1b3..dee15ca0 100644 --- a/docs/get-started/quixtour/ingest-push.md +++ b/docs/get-started/quixtour/ingest-push.md @@ -2,7 +2,7 @@ There are [many ways](../../develop/integrate-data/overview.md) to get your data into Quix, a process usually known as ingestion or data integration. Data can be loaded using CSV files, by polling external web services, WebSockets and so on. The option you use depends on your use case. -In this part of the Quix Tour, you'll learn how to send data into Quix using Quix Streams to publish data into a topic hosted in the Quix Platform. +In this part of the Quix Tour, you'll learn how to send data into Quix using Quix Streams to publish data into a topic hosted in Quix. You'll write a short Python program to retrieve your CPU load and publish that data into a Quix topic in real time. @@ -24,7 +24,7 @@ pip install python-dotenv If you're on Mac and using Homebrew, you may have multiple Python versions installed. In this case you may have to use the command `pip3` to install your modules. -You're going to use the [Quix Streams](../../client-library-intro.md) library to publish data into Quix Platform. This is just one of many ways to get your data into Quix. You could for example simply log into Quix and use one of our already available [connectors](../../connectors/index.md). +You're going to use the [Quix Streams](../../client-library-intro.md) library to publish data into Quix. This is just one of many ways to get your data into Quix. You could for example simply log into Quix and use one of our already available [connectors](../../connectors/index.md). You use the `psutil` module to retrieve the CPU load on your laptop. @@ -127,7 +127,7 @@ The code runs and, after creating the `cpu-load` topic, displays your CPU load. ## 7. Create an external source -At this point you have an external program sending data into the Quix Platform, and it is writing into a topic. However, you can't currently see this in the Pipeline view. To help you visualize what you've created, you can add an external source component, to provide a visual entity in the pipeline view. To do this: +At this point you have an external program sending data into Quix, and it is writing into a topic. However, you can't currently see this in the Pipeline view. To help you visualize what you've created, you can add an external source component, to provide a visual entity in the pipeline view. To do this: 1. Click on `Code Samples`. 2. Select the `Python`, `Source`, and `Basic templates` filters. diff --git a/docs/get-started/quixtour/overview.md b/docs/get-started/quixtour/overview.md index 3fd1e9f7..6988e5bd 100644 --- a/docs/get-started/quixtour/overview.md +++ b/docs/get-started/quixtour/overview.md @@ -18,9 +18,9 @@ The complete code for the Quix Tour can be found in the [Quix Tutorials GitHub r The Quix Tour is split into three parts. These parts represent the typical stream processing **pipeline**: -1. **Ingest** - this is where you get your data into Quix using one of [many methods](../../develop/integrate-data/overview.md). In Quix Platform this is typically implemented using a **Source**. -2. **Process** - here you process your data in a manner depending on your use case. In Quix Platform this is implemented using a **Transform**. -3. **Serve** - typically you display information, such as on real-time charts, or perhaps persist your data in a database. In Quix Platform this is implemented using a **Destination**. +1. **Ingest** - this is where you get your data into Quix using one of [many methods](../../develop/integrate-data/overview.md). In Quix this is typically implemented using a **Source**. +2. **Process** - here you process your data in a manner depending on your use case. In Quix this is implemented using a **Transform**. +3. **Serve** - typically you display information, such as on real-time charts, or perhaps persist your data in a database. In Quix this is implemented using a **Destination**. This general stream processing architecture is illustrated in the following diagram: @@ -30,7 +30,7 @@ This general stream processing architecture is illustrated in the following diag The pipeline you will implement: -1. **Ingest** - you publish data from your laptop into Quix Platform using the Quix client library, Quix Streams. You're going to publish your real-time CPU load. You could alternatively publish data from a CSV file, or any other source required for your use case. If you needed to connect to an external service, you could alternatively use one of Quix's many [connectors](../../connectors/index.md). +1. **Ingest** - you publish data from your laptop into Quix using the Quix client library, Quix Streams. You're going to publish your real-time CPU load. You could alternatively publish data from a CSV file, or any other source required for your use case. If you needed to connect to an external service, you could alternatively use one of Quix's many [connectors](../../connectors/index.md). 2. **Process** - in this step, you process your data. There are many [types of processing](../../develop/process/types-of-processing.md), one of which is the transform. There are many possible [types of transform](../../develop/process/types-of-transform.md). Here you create a transform that performs threshold detection. You publish a message to the transform's output topic. 3. **Serve** - when you receive a message indicating CPU load has exceeded the threshold you (optionally) send an SMS to the system administrator. @@ -48,6 +48,6 @@ To complete the Quix Tour you'll need the following: ## 🏃‍♀️ Next step -Get your data into Quix Platform! +Get your data into Quix! [Ingest your data :material-arrow-right-circle:{ align=right }](./ingest-push.md) diff --git a/docs/get-started/what-is-quix.md b/docs/get-started/what-is-quix.md index 3dbb8ee6..e6323ce8 100644 --- a/docs/get-started/what-is-quix.md +++ b/docs/get-started/what-is-quix.md @@ -29,11 +29,11 @@ The following sections take a look at the key components of creating your stream While this short introduction to Quix is intentionally brief, there are abundant links for more detailed information you can follow to increase your knowledge of Quix. Alternatively, simply drop into our [Community](https://forum.quix.io/){target=_blank} and ask any question you may have. -## The Quix Platform +## Quix Cloud -The Quix Platform provides everything a developer needs to build industrial-strength event streaming applications. +Quix Cloud provides everything a developer needs to build industrial-strength event streaming applications. -The components that make up the Quix Platform enable developers to: +The components that make up the Quix Cloud enable developers to: * Use a full web-based IDE with version control and logging, to build, deploy, and monitor their event streaming applications. * Have abstracted access to underlying broker infrastructure, including fully-managed Kafka topics. diff --git a/docs/manage/MLOps.md b/docs/manage/MLOps.md index 026d59ea..cecb21fa 100644 --- a/docs/manage/MLOps.md +++ b/docs/manage/MLOps.md @@ -6,7 +6,7 @@ There are a number of barriers that prevent companies from successfully implemen Solving these challenges is a new field of expertise called [MLOps](https://en.wikipedia.org/wiki/MLOps){target=_blank} -Quix have incorporated MLOps into the Quix Platform so that your data team has a seamless journey from concept to production. The key steps in the MLOps process are: +Quix have incorporated MLOps into the Quix so that your data team has a seamless journey from concept to production. The key steps in the MLOps process are: 1. Build and train models on historical data 2. Test models on live data @@ -52,6 +52,6 @@ In the Quix Portal, data teams can: Here are some suggested next steps to find out more about MLOps in Quix: -* [Platform Quickstart](../get-started/quickstart.md) - get data into Quix and displayed in real time in under 10 minutes. +* [Quickstart](../get-started/quickstart.md) - get data into Quix and displayed in real time in under 10 minutes. * [Building real-time ML pipelines tutorial](../tutorials/train-and-deploy-ml/overview.md) - train and run an ML model in Quix. * [Building real-time ML predictions](../tutorials/data-science/overview.md) - use data science and ML to predict bicycle availability in New York. diff --git a/docs/manage/replay.md b/docs/manage/replay.md index 6686dd2f..e4b46daa 100644 --- a/docs/manage/replay.md +++ b/docs/manage/replay.md @@ -1,6 +1,6 @@ # How to replay data -Quix Platform features a **replay service**. This service enables you to replay persisted data into a topic, as if it were live data. This is very useful for the following use cases: +Quix features a **replay service**. This service enables you to replay persisted data into a topic, as if it were live data. This is very useful for the following use cases: * Testing and debugging connectors and transforms * [Stream reprocessing](https://quix.io/blog/intro-stream-reprocessing-python/?x-craft-preview=VDVjwJTquq&token=7oGSdC9yxYk0zECNUz2RtzJLtGqG-aZB){target=_blank} diff --git a/docs/manage/security.md b/docs/manage/security.md index f7ce3df4..5ab58199 100644 --- a/docs/manage/security.md +++ b/docs/manage/security.md @@ -12,7 +12,7 @@ This document outlines how Quix helps customers configure, deploy and use the cl Securing your information starts with identity controls, no matter where your users are located. Quix enables you to manage users, streamline authentication using your identity provider, and assign roles. We give you the solutions to ensure that only the right people can access your company's information in Quix. -OAuth is the protocol Quix uses when you auth against our platform using Google or your preferred Identity provider. Customers are responsible for integrating and managing their identity provider (for single sign-on and provisioning) as well as assigning roles in Quix. +OAuth is the protocol Quix uses when you authenticate against our servers using Google or your preferred Identity provider. Customers are responsible for integrating and managing their identity provider (for single sign-on and provisioning) as well as assigning roles in Quix. Data in flight is protected with Authentication (OAuth 2.0 tokens, SASL, SSL Certificates), Authorisation (RBAC) and Encryption (TLS 1.2). @@ -28,7 +28,7 @@ By default, Quix encrypts data at rest and data in transit as part of our founda ### Encryption -Our preferred encryption is TLS 1.3, with 1.2 allowed as a fallback. We don't support TLS 1.1 or older in any part of our platform. +Our preferred encryption is TLS 1.3, with 1.2 allowed as a fallback. We don't support TLS 1.1 or older in any part of Quix. Older cyphers are cryptographically unsafe. We do not serve or support unsafe and weak cyphers, ensuring that our posture is in line with your standards and expectations. @@ -52,7 +52,7 @@ To give you even further protection and control, we architected Quix on independ Environments at Quix are hermetically sealed with no reused components between them. Development and Production environments are distinct entities with no cross-talk. -The separation of these concerns enables us to deliver a Quix platform experience in a way that minimizes the chance of errors and mistakes and is a well-supported industry standard of software delivery. +The separation of these concerns enables us to deliver a Quix experience in a way that minimizes the chance of errors and mistakes and is a well-supported industry standard of software delivery. In case you choose to host Quix on your platform, we recommend that you follow the same practices. @@ -60,13 +60,13 @@ In case you choose to host Quix on your platform, we recommend that you follow t Firewalls in cloud-native infrastructure and applications work differently from how they used to in the days of monolithic apps running on bare metal servers stacked neatly in a server room. -All networking technologies utilised during the delivery of the Quix Platform follow the principle of least privilege; we configure our security groups to only allow the minimum necessary traffic, and we configure our access lists to do the same. We follow industry best practices in architecting these safeguards and constantly monitor and audit them. +All networking technologies utilised during the delivery of Quix follow the principle of least privilege; we configure our security groups to only allow the minimum necessary traffic, and we configure our access lists to do the same. We follow industry best practices in architecting these safeguards and constantly monitor and audit them. ## Employee access policies Quix employees access our key systems with multi-factor authentication enforced. This helps us verify the identity of the person accessing these services and reduce the chance of unauthorised access by way of compromised channels or devices. -At Quix, systems that make up the Quix platform are only ever accessed when necessary and only by authorised personnel. We take our commitment to security and confidentiality seriously. +At Quix, systems that make up Quix are only ever accessed when necessary and only by authorised personnel. We take our commitment to security and confidentiality seriously. Restricted access ensures only colleagues in the necessary roles can work on the underlying software and infrastructure stack. This, combined with audit trails built right into our processes and tooling helps us maintain the principle of least privilege, an important security practice. diff --git a/docs/tutorials/computer-vision/overview.md b/docs/tutorials/computer-vision/overview.md index 28e130ae..2f342d03 100644 --- a/docs/tutorials/computer-vision/overview.md +++ b/docs/tutorials/computer-vision/overview.md @@ -141,7 +141,7 @@ This tutorial is divided up into several parts, to make it a more manageable lea 7. [Add new service](add-service.md). You add a new service to a feature branch, test it, and then merge to the tutorial branch. -8. [Summary](summary.md). In this concluding part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about the Quix Platform. +8. [Summary](summary.md). In this concluding part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about Quix. ## 🏃‍♀️ Next step diff --git a/docs/tutorials/currency-alerting/currency-alerting.md b/docs/tutorials/currency-alerting/currency-alerting.md index eb60a316..812974ab 100644 --- a/docs/tutorials/currency-alerting/currency-alerting.md +++ b/docs/tutorials/currency-alerting/currency-alerting.md @@ -30,7 +30,7 @@ The objective of this tutorial is to create a pipeline that resembles the follow The colors describe the role of the microservice that is being deployed. The possible roles are as follows: -
Source — enables streaming of data into the Quix platform from any external source, such as an API or WebSocket.
+
Source — enables streaming of data into Quix from any external source, such as an API or WebSocket.
Transformation — implements the processing of data, for example, cleaning data or implementing a Machine Learning (ML) model.
Destination — enables streaming of processed data to an external destination, such as a database or dashboard.
@@ -47,7 +47,7 @@ To summarize this functionality: To set up the CoinAPI source, follow these steps: -1. In the [Quix Portal](https://portal.platform.quix.ai/){target=_blank}, click the `Code Samples` icon in the main left-hand navigation. +1. In [Quix](https://portal.platform.quix.ai/){target=_blank}, click the `Code Samples` icon in the main left-hand navigation. 2. In the search box on the Code Samples page, enter "CoinAPI - Exchange Rate Feed". @@ -193,7 +193,7 @@ Here's what you accomplished in this tutorial: ✅ You deployed three real-time serverless microservices: the CoinAPI source to read data from another platform, the Threshold Alert transformation to make decisions based on that data, and the Pushover destination to send push notifications to your phone. -✅ You gained some experience in navigating the Quix platform, and learned how to deploy microservices without needing to write any code. +✅ You gained some experience in navigating Quix, and learned how to deploy microservices without needing to write any code. ## Next steps @@ -203,7 +203,6 @@ To learn more, try one of these tutorials: * [Perform chat sentiment analysis](../sentiment-analysis/overview.md) * [Gather and processes data from an RSS feed and get an alert when specific criteria are met](../rss-tutorial/rss-processing-pipeline.md) - !!! tip "Getting Help" If you need any help, please sign up to the [Quix community forum](https://forum.quix.io/){target=_blank}. \ No newline at end of file diff --git a/docs/tutorials/data-science/3-data.md b/docs/tutorials/data-science/3-data.md index 7f58de23..81a87684 100644 --- a/docs/tutorials/data-science/3-data.md +++ b/docs/tutorials/data-science/3-data.md @@ -1,8 +1,8 @@ # View and store the data -With the Quix Platform it's easy to visualize your data in a powerful and flexible way, you can see the data in real time, as well as viewing historical data. +With Quix it's easy to visualize your data in a powerful and flexible way, you can see the data in real time, as well as viewing historical data. -The Quix Platform was designed for real-time data, so if you want to see data-at-rest for any topic you must turn on data persistence for that specific topic. You'll do this in the [historical data](#historical-data) section. +Quix was designed for real-time data, so if you want to see data-at-rest for any topic you must turn on data persistence for that specific topic. You'll do this in the [historical data](#historical-data) section. ## Real-time data diff --git a/docs/tutorials/data-science/4-train.md b/docs/tutorials/data-science/4-train.md index 360e0bb8..4fea0a8b 100644 --- a/docs/tutorials/data-science/4-train.md +++ b/docs/tutorials/data-science/4-train.md @@ -1,6 +1,6 @@ # Training data -Quix gives you the freedom to train the ML model your own way. If you already have tools and processes for doing that then you can train the model and use it in the Quix Platform where you can run it in real-time. +Quix gives you the freedom to train the ML model your own way. If you already have tools and processes for doing that then you can train the model and use it in Quix where you can run it in real-time. Follow along and learn how to retrieve historical data from your topics, so you can train your model. @@ -87,7 +87,7 @@ To access historical data: ## Train the model -At this point, you are collecting historical data and you know how to query it for use outside the Quix Platform to train your ML models. +At this point, you are collecting historical data and you know how to query it for use outside Quix to train your ML models. ???- example "Need help training a model?" diff --git a/docs/tutorials/data-science/6-conclusion.md b/docs/tutorials/data-science/6-conclusion.md index 734f094d..68614f20 100644 --- a/docs/tutorials/data-science/6-conclusion.md +++ b/docs/tutorials/data-science/6-conclusion.md @@ -22,4 +22,4 @@ What will you build? Let us know! Quix would like to feature your application or ## Getting help -If you need any assistance, we're here to help in [The Quix Forum](https://forum.quix.io/){target=_blank}. Introduce yourself and then ask any questions in [Quix Platform](https://forum.quix.io/c/quix-saas-platform/6){target=_blank}. +If you need any assistance, we're here to help in [The Quix Forum](https://forum.quix.io/){target=_blank}. Introduce yourself and then ask any questions in [Quix](https://forum.quix.io/c/quix-saas-platform/6){target=_blank}. diff --git a/docs/tutorials/data-science/overview.md b/docs/tutorials/data-science/overview.md index 2d79874a..46266963 100644 --- a/docs/tutorials/data-science/overview.md +++ b/docs/tutorials/data-science/overview.md @@ -4,7 +4,7 @@ In this tutorial you will learn how to deploy a real-time **data science** appli ## Aim -The Quix Platform enables you to harness complex, efficient real-time infrastructure in a quick and simple way. You are going to build an application that uses real-time New York bicycle data and weather data to predict the future availability of bikes in New York. +Quix enables you to harness complex, efficient real-time infrastructure in a quick and simple way. You are going to build an application that uses real-time New York bicycle data and weather data to predict the future availability of bikes in New York. You will complete all the typical phases of a data science application: @@ -16,7 +16,7 @@ You will complete all the typical phases of a data science application: - Deploy the ML models into production and create predictions in real time. -This would traditionally take several people with a wide set of different skills (Data Engineers, Data Scientists and Developers) and weeks of work. However, you will complete this tutorial on your own in a fraction of the time using the Quix Platform. +This would traditionally take several people with a wide set of different skills (Data Engineers, Data Scientists and Developers) and weeks of work. However, you will complete this tutorial on your own in a fraction of the time using Quix. ## Prerequisites @@ -28,7 +28,7 @@ This tutorial has the following prerequisites: If you don't already know how to train an ML model, follow our "How to train an ML model" tutorial [here](../../tutorials/train-and-deploy-ml/overview.md). - We take you through the process of getting the code to access the data, running the code in a Jupyter notebook, training the model and uploading your pickle file to the Quix Platform. + We take you through the process of getting the code to access the data, running the code in a Jupyter notebook, training the model and uploading your pickle file to Quix. 2. You will need a Quix account and be logged into the [Quix Portal](https://portal.platform.quix.ai/workspaces){target=_blank}. @@ -51,6 +51,6 @@ This tutorial is divided up into several parts, to make it a more manageable lea 5. **Deploy pre-trained ML models and produce predictions in real time**. Use our pre-trained models to get CitiBike predictions based on historical bicycle availability and weather forecasts. You also use the built-in visualization tools to view the models prediction. -6. **Conclusion**. In this [concluding](6-conclusion.md) part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about the Quix Platform. +6. **Conclusion**. In this [concluding](6-conclusion.md) part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about Quix. [Part 1 - CitiBike data stream :material-arrow-right-circle:{ align=right }](1-bikedata.md) diff --git a/docs/tutorials/event-detection/data-acquisition.md b/docs/tutorials/event-detection/data-acquisition.md index 44914eda..7070b8b3 100644 --- a/docs/tutorials/event-detection/data-acquisition.md +++ b/docs/tutorials/event-detection/data-acquisition.md @@ -268,7 +268,7 @@ Follow these instructions to deploy the data source: 7. Stop the code by clicking the same button you clicked to run it. -8. You now deploy the code as a service, so it stays running when you navigate around the platform. +8. You now deploy the code as a service, so it stays running when you navigate around in the UI. 9. Click `Deploy`. diff --git a/docs/tutorials/train-and-deploy-ml/conclusion.md b/docs/tutorials/train-and-deploy-ml/conclusion.md index 30fd2510..fd98a4a9 100644 --- a/docs/tutorials/train-and-deploy-ml/conclusion.md +++ b/docs/tutorials/train-and-deploy-ml/conclusion.md @@ -1,6 +1,6 @@ # Conclusion -In this tutorial you've learned how to use Quix to generate real-time data. You've also learned how to import that data into Jupyter Notebook using the Quix code generator. You then saw how to deploy your ML model to the Quix Platform, and visualize its output in real time. +In this tutorial you've learned how to use Quix to generate real-time data. You've also learned how to import that data into Jupyter Notebook using the Quix code generator. You then saw how to deploy your ML model to Quix, and visualize its output in real time. ![Data explorer](./images/visualize-result.png) diff --git a/docs/tutorials/train-and-deploy-ml/deploy-ml.md b/docs/tutorials/train-and-deploy-ml/deploy-ml.md index 212817b2..285d799d 100644 --- a/docs/tutorials/train-and-deploy-ml/deploy-ml.md +++ b/docs/tutorials/train-and-deploy-ml/deploy-ml.md @@ -1,6 +1,6 @@ # Deploy your ML model -In this part of the tutorial, you deploy the Pickle file [containing your ML model](./train-ml.md) to the Quix Platform. Your ML code then uses this model to predict braking in real time. +In this part of the tutorial, you deploy the Pickle file [containing your ML model](./train-ml.md) to Quix. Your ML code then uses this model to predict braking in real time. ![What you'll build](./images/run-live.png) @@ -181,6 +181,6 @@ You now see a graphical output for the prediction being output by the model as w !!! note - Don't forget the purpose of this tutorial was to show you how to deploy an ML model in Quix Platform, rather than to train an accurate model. So the prediction may not always match the actual brake value. + Don't forget the purpose of this tutorial was to show you how to deploy an ML model in Quix, rather than to train an accurate model. So the prediction may not always match the actual brake value. [Conclusion and next steps :material-arrow-right-circle:{ align=right }](conclusion.md) diff --git a/docs/tutorials/train-and-deploy-ml/overview.md b/docs/tutorials/train-and-deploy-ml/overview.md index 39a3a387..8a47253f 100644 --- a/docs/tutorials/train-and-deploy-ml/overview.md +++ b/docs/tutorials/train-and-deploy-ml/overview.md @@ -1,6 +1,6 @@ # Real-time Machine Learning (ML) pipelines -In this tutorial, you learn how to extract data from Quix to train your Machine Learning (ML) model in Jupyter Notebook. You then learn how to deploy this model to the Quix Platform, so ML can be used to process your data in real time. +In this tutorial, you learn how to extract data from Quix to train your Machine Learning (ML) model in Jupyter Notebook. You then learn how to deploy this model to Quix, so ML can be used to process your data in real time. ## Video @@ -28,8 +28,8 @@ This tutorial is divided up into several parts, to make the learning experience 3. **Train your ML model** - You learn how to train an ML model. For this tutorial, this is done in Jupyter, but could also be done in Quix. -4. **Deploy your ML model** - You learn how to deploy your ML model to the Quix Platform. +4. **Deploy your ML model** - You learn how to deploy your ML model to Quix. -5. **Summary** - In this [concluding](conclusion.md) part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about the Quix Platform. +5. **Summary** - In this [concluding](conclusion.md) part you are presented with a summary of the work you have completed, and also some next steps for more advanced learning about Quix. [Get some data :material-arrow-right-circle:{ align=right }](./create-data.md) diff --git a/mkdocs.yml b/mkdocs.yml index 2576f071..467cb0ac 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: 'Quix Docs' -site_description: 'Quix Developer Documentation. Includes documentation (tutorials, reference guides, how-tos, concepts) for Quix Platform, Quix Streams client library, and REST and websocket APIs.' +site_description: 'Quix Developer Documentation. Includes documentation (guides, tutorials, references) for Quix Cloud, Quix Streams client library, and REST and websocket APIs.' site_author: 'Quix.io' site_url: 'https://quix.io/docs' From 031998f8c3cd37f23ac762810555530a413770d3 Mon Sep 17 00:00:00 2001 From: tbedford Date: Wed, 8 Nov 2023 14:53:09 +0000 Subject: [PATCH 06/13] [update] - add developer journey --- BEST-PRACTICE.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/BEST-PRACTICE.md b/BEST-PRACTICE.md index e56dcbd7..7eca213b 100644 --- a/BEST-PRACTICE.md +++ b/BEST-PRACTICE.md @@ -49,12 +49,14 @@ The Quix documentation search facility is incremental - you start typing your se Good navigation is **critical** to effective TBW. Once a reader finds themselves in the Quix documentation, they need to be able to quickly orientate themselves on the page and in the documentation set overall. -The main left-hand navbar, or TOC, provides the main element of the information architecture, and is purposely organized into the following top-level hierarchy: +The main left-hand navbar, or TOC, provides the main element of the information architecture, and is purposely organized into the following top-level hierarchy, based around the developer journey: -1. **Landing page and Quickstart**. The idea here is to quickly orientate the reader. From the landing page they can jump to key pieces of documentation. The Quickstart provides an easy way to "dip a toe" into Quix, and try the product out. The Quickstart is divided into two parts: one aimed at all users, and one specifically targeting developers. -2. **Quix Platform**. This is the main Quix product, and consists of the SaaS offering, UI, pipelines, deployments, and pre-built connectors and transforms. Concepts, How-Tos and Tutorials for Quix Platform are contained in here. -3. **Client Library**. The Quix Streams client library provides a very effective way to write scalable real-time streaming applications. Using Quix Streams you can create solutions that work with Quix Platform, or with other services depending on your requirement. The `Client Library` section also includes API reference documentation generated from source code for both the Python and C# versions of Quix Streams. -4. **APIs**. These are additional Quix APIs, other than those provided by Quix Streams. The documentation consists of general topics, as well as REST API references based on OAS3 documents. +1. Get started - you're new to Quix and went to get up and running quickly. +2. Create your project - you need to have a project to do anything in Quix. +3. Develop your application - this is the job or service that will actually do the work. +4. Deploy your application - you're now ready to deploy the application so it can be used. +5. Manage your projects/pipelines - a typical event streaming app consists of a collections of services (or jobs) connected in a pipeline. +6. Quix Streams - the client library, as a stand-alone product it is displayed as a top level item. The longer topics can be navigated using the right-hand "on this page" TOC. This enables you to quickly navigate through the sections of a topic. It is important that topics are structured with the correct heading levels. There should only ever be one `h1` heading per topic, but there can be several `h2`s. Section headings below `h3` should be used sparingly, as they won't be displayed in the navigation, and could indicate the topic has become too convoluted. The solution can be to split the topic into multiple topics, or otherwise rethink the structure. @@ -92,7 +94,7 @@ The key tooling used for the Quix documentation includes: Quix uses multiple (currently two) repositories to manage the Quix documentation, these are: -1. [Quix Docs](https://github.com/quixio/quix-docs) - this is the repository for general docs, Quix Platform docs, and API docs. +1. [Quix Docs](https://github.com/quixio/quix-docs) - this is the repository for general docs, Quix Cloud docs, and API docs. 2. [Quix Streams](https://github.com/quixio/quix-streams) - a stand-alone repository for Quix Streams, including all Quix Streams documentation. Quix uses the MkDocs [multirepo plugin](https://github.com/jdoiro3/mkdocs-multirepo-plugin) to import a complete repo and make it part of a documentation set. Quix uses this to import the Quix Streams documentation stored in the Quix Streams repo. From 99180ff26dc5746887e26d29c5ca7300372d6654 Mon Sep 17 00:00:00 2001 From: tbedford Date: Wed, 8 Nov 2023 15:24:24 +0000 Subject: [PATCH 07/13] [chore] - remove use of portal --- WRITING-STYLE.md | 31 ++++++++++++++----- docs/apis/portal-api/setup.md | 4 +-- docs/apis/query-api/raw-data.md | 2 +- docs/apis/query-api/setup.md | 4 +-- docs/apis/streaming-reader-api/setup.md | 4 +-- docs/apis/streaming-writer-api/setup.md | 4 +-- docs/connectors/index.md | 2 +- docs/create/syncing-environment.md | 2 +- docs/develop/apis-overview.md | 4 +-- .../authentication/personal-access-token.md | 2 +- .../develop/authentication/streaming-token.md | 4 +-- docs/develop/code-samples.md | 2 +- .../integrate-data/external-destination.md | 2 +- .../develop/integrate-data/external-source.md | 2 +- docs/develop/integrate-data/streaming-apis.md | 4 +-- docs/get-started/glossary.md | 10 +++--- docs/get-started/quickstart.md | 4 +-- docs/get-started/quixtour/ingest-push.md | 2 +- docs/get-started/what-is-quix.md | 14 ++++----- docs/manage/MLOps.md | 10 +++--- docs/manage/overview.md | 2 +- docs/manage/troubleshooting.md | 4 +-- docs/tutorials/computer-vision/get-project.md | 2 +- docs/tutorials/computer-vision/overview.md | 2 +- docs/tutorials/computer-vision/summary.md | 2 +- .../computer-vision/tfl-camera-feed.md | 2 +- docs/tutorials/data-science/overview.md | 2 +- .../data-stream-processing.md | 2 +- .../event-detection/data-acquisition.md | 4 +-- docs/tutorials/matlab/matlab-and-simulink.md | 6 ++-- .../rss-tutorial/rss-processing-pipeline.md | 2 +- .../sentiment-analysis/get-project.md | 2 +- .../slack-alerting/slack-alerting.md | 2 +- .../train-and-deploy-ml/create-data.md | 2 +- .../train-and-deploy-ml/deploy-ml.md | 2 +- .../train-and-deploy-ml/import-data.md | 6 ++-- 36 files changed, 86 insertions(+), 71 deletions(-) diff --git a/WRITING-STYLE.md b/WRITING-STYLE.md index ca096f63..a5759cda 100644 --- a/WRITING-STYLE.md +++ b/WRITING-STYLE.md @@ -33,14 +33,31 @@ Use the following guidelines regarding the company's name: * Possessive: Quix's technology * Plural: "multiple Quix deployments." * Quix is the name of our company - * Quix Portal is our product, which includes: - * Managed Kafka - * Serverless compute - * Quix data store - * APIs +* Quix product: + * 'The whole thing" = Quix - one tool to build event streaming apps + * Components of Quix: + * Quix Cloud - Packaging of Quix SaaS that is fully managed and hosted on Quix owned and operated cloud infrastructure (the place where everything runs). + * Serverless - multi-tenant + * Dedicated - single-tenant + * Quix BYOC - Packaging of Quix SaaS designed for self-hosting on customer’s infrastructure + * Quix Event Streaming Application - (legacy: pipeline) a collection of applications and kafka topics that fulfill an event streaming component of an event-driven platform. + * Quix Kafka - Our specific installed version "flavour" of Kakfa vs Confluent Cloud (our "Confluent Integration"), Redpanda, Aiven. + * Quix Application: a service with a code project & a container + * Quix Connectors - Quix Applications that integrate data between external systems and Quix (sources, destinations) + * Quix Processors - Quix Applications that run code to transform data (transforms) + * Quix Containers - Quix Applications that act as auxiliary resources for an application + * Code Samples - Ready-to-run templates of code and service configuration to create your own Quix Services + * Quix Project - (legacy: workspace) one Git repository that contains all the code that you need to build and deploy an Event Streaming Application in multiple environments.. + + * CI/CD Features + * Quix Project Configuration - YAML files, they define workflow and setting and env variables as code. It describes your services, topics, and relations between them. + * Git Integration, Git (GitHub, Azure DevOps, GitLab) link to Quix Workspace. + * Quix Environments (staging, dev prod) - isolated infrastructure connected to a branch of your Git project + * Quix CLI (coming soon) + * Project Templates (legacy: blueprints) ungated experiences * Quix Streams is our client library: - * A client library is a collection of code specific to one programming language. - * Quix currently offers Python and C# client libraries. + * A client library is a collection of code specific to one programming language. + * Quix currently offers Python and C# client libraries. ### Industry and Quix terms diff --git a/docs/apis/portal-api/setup.md b/docs/apis/portal-api/setup.md index 9ca4f403..a5e92889 100644 --- a/docs/apis/portal-api/setup.md +++ b/docs/apis/portal-api/setup.md @@ -18,7 +18,7 @@ Each of these is described in the following sections. Useful information can also be found in the settings panels for your environment: -1. Click `Settings` in the bottom left corner of the Quix portal. +1. Click `Settings` in the bottom left corner of the UI. 2. From `Project settings` select the environment you are working with. @@ -34,7 +34,7 @@ Personal Access Tokens, or PATs, are bearer tokens that can be used to authentic To obtain a PAT, log in to Quix, and click on your profile icon in the top right corner, then click `Personal Access Tokens`. You can then generate a PAT with a lifetime suitable for your use case. -Alternatively, log in to the Quix Portal, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. +Alternatively, log in to Quix, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. In the `APIs and tokens` dialog, you can click `Personal Access Tokens` to generate PATs, or a Streaming Token for use with the Quix Streams client library. diff --git a/docs/apis/query-api/raw-data.md b/docs/apis/query-api/raw-data.md index 2fe72235..281884e3 100644 --- a/docs/apis/query-api/raw-data.md +++ b/docs/apis/query-api/raw-data.md @@ -60,7 +60,7 @@ In reality, you’ll have far more data in the stored data, so you’ll want to - `to` -Each stream you create has a unique ID. You can view the ID of a persisted via the Data section of the Quix Portal. Supply a list of stream IDs to restrict fetched data to just those streams: +Each stream you create has a unique ID. You can view the ID of a persisted via the Data section of the UI. Supply a list of stream IDs to restrict fetched data to just those streams: ```json { diff --git a/docs/apis/query-api/setup.md b/docs/apis/query-api/setup.md index f47cf86e..ed65c0c8 100644 --- a/docs/apis/query-api/setup.md +++ b/docs/apis/query-api/setup.md @@ -18,7 +18,7 @@ Each of these is described in the following sections. Useful information can also be found in the settings panels for your environment: -1. Click `Settings` in the bottom left corner of the Quix portal. +1. Click `Settings` in the bottom left corner of the UI. 2. From `Project settings` select the environment you are working with. @@ -34,7 +34,7 @@ Personal Access Tokens, or PATs, are bearer tokens that can be used to authentic To obtain a PAT, log in to Quix, and click on your profile icon in the top right corner, then click `Personal Access Tokens`. You can then generate a PAT with a lifetime suitable for your use case. -Alternatively, log in to the Quix Portal, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. +Alternatively, log in to Quix, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. In the `APIs and tokens` dialog, you can click `Personal Access Tokens` to generate PATs, or a Streaming Token for use with the Quix Streams client library. diff --git a/docs/apis/streaming-reader-api/setup.md b/docs/apis/streaming-reader-api/setup.md index 711f1204..b1ed4664 100644 --- a/docs/apis/streaming-reader-api/setup.md +++ b/docs/apis/streaming-reader-api/setup.md @@ -18,7 +18,7 @@ Each of these is described in the following sections. Useful information can also be found in the settings panels for your environment: -1. Click `Settings` in the bottom left corner of the Quix portal. +1. Click `Settings` in the bottom left corner of the UI. 2. From `Project settings` select the environment you are working with. @@ -34,7 +34,7 @@ Personal Access Tokens, or PATs, are bearer tokens that can be used to authentic To obtain a PAT, log in to Quix, and click on your profile icon in the top right corner, then click `Personal Access Tokens`. You can then generate a PAT with a lifetime suitable for your use case. -Alternatively, log in to the Quix Portal, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. +Alternatively, log in to Quix, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. In the `APIs and tokens` dialog, you can click `Personal Access Tokens` to generate PATs, or a Streaming Token for use with the Quix Streams client library. diff --git a/docs/apis/streaming-writer-api/setup.md b/docs/apis/streaming-writer-api/setup.md index 79eb526c..d2564135 100644 --- a/docs/apis/streaming-writer-api/setup.md +++ b/docs/apis/streaming-writer-api/setup.md @@ -18,7 +18,7 @@ Each of these is described in the following sections. Useful information can also be found in the settings panels for your environment: -1. Click `Settings` in the bottom left corner of the Quix portal. +1. Click `Settings` in the bottom left corner of the UI. 2. From `Project settings` select the environment you are working with. @@ -34,7 +34,7 @@ Personal Access Tokens, or PATs, are bearer tokens that can be used to authentic To obtain a PAT, log in to Quix, and click on your profile icon in the top right corner, then click `Personal Access Tokens`. You can then generate a PAT with a lifetime suitable for your use case. -Alternatively, log in to the Quix Portal, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. +Alternatively, log in to Quix, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. In the `APIs and tokens` dialog, you can click `Personal Access Tokens` to generate PATs, or a Streaming Token for use with the Quix Streams client library. diff --git a/docs/connectors/index.md b/docs/connectors/index.md index 382bf769..e5f6c5c2 100644 --- a/docs/connectors/index.md +++ b/docs/connectors/index.md @@ -4,6 +4,6 @@ Connectors are part of our [open source](https://github.com/quixio/quix-samples) Connectors help our users connect with other vendors such as AWS and Kafka. -You can explore the connector README files here in Quix Docs. When you are ready to start using them, head over to the Quix Code Samples [GitHub](https://github.com/quixio/quix-samples){target="_blank"} repository, or [sign up](https://quix.io/signup){target="_blank"} and [login to the platform](https://portal.platform.quix.ai/){target="_blank"}. +You can explore the connector README files here in Quix Docs. When you are ready to start using them, head over to the Quix Code Samples [GitHub](https://github.com/quixio/quix-samples){target="_blank"} repository, or [sign up](https://quix.io/signup){target="_blank"} and [log in to the platform](https://portal.platform.quix.ai/){target="_blank"}. [//]: <> (#connectors_tile_replacement) \ No newline at end of file diff --git a/docs/create/syncing-environment.md b/docs/create/syncing-environment.md index f494391b..433b2aad 100644 --- a/docs/create/syncing-environment.md +++ b/docs/create/syncing-environment.md @@ -8,7 +8,7 @@ You can always review the changes that will be made to your `quix.yaml` file, be The rules around manual and automatic synchronization are: -1. Operations performed in the Quix portal should not cause "out of sync", as those operations are automatically saved to the Git repository. This is the case for both Quix-managed and third-party hosted Git. +1. Operations performed in Quix should not cause "out of sync", as those operations are automatically saved to the Git repository. This is the case for both Quix-managed and third-party hosted Git. 2. The exception to this is the case of YAML variables. When variables are created, if those are included in the `quix.yaml`, you will need to perform manual synchronization. You are prompted if this is required. 3. If you change the `quix.yaml` in the Git repository, then you may get "out of sync". The `quix.yaml` file currently only includes topics and deployments. diff --git a/docs/develop/apis-overview.md b/docs/develop/apis-overview.md index 4ad908aa..3e792748 100644 --- a/docs/develop/apis-overview.md +++ b/docs/develop/apis-overview.md @@ -15,7 +15,7 @@ While [Quix Streams](../client-library-intro.md) is the main client library for In these situations Streaming Reader and Writer APIs can provide an alternative solution - for example, they can easily be accommodated in a modern web browser, or using most modern programming languages with an HTTP or SignalR client. -Portal API is useful for automating processes normally carried out manually in the Quix Portal. +Portal API is useful for automating processes normally carried out manually in Quix. Query API is useful for testing and examining data persisted into the Quix internal database. @@ -50,7 +50,7 @@ Streaming Reader uses Microsoft's [SignalR](https://learn.microsoft.com/en-us/as ## Portal API -The [Portal API](../apis/portal-api/overview.md) gives access to the Quix Portal interface enabling you to automate your project deployment, management and monitoring. For example, you could build command line tools in any language with an HTTP interface available, to create, deploy, and monitor services. +The [Portal API](../apis/portal-api/overview.md) gives access to Quix, enabling you to automate your project deployment, management and monitoring. For example, you could build command line tools in any language with an HTTP interface available, to create, deploy, and monitor services. [Read more about Portal API](../apis/portal-api/overview.md) diff --git a/docs/develop/authentication/personal-access-token.md b/docs/develop/authentication/personal-access-token.md index 1bbdac2b..3ddcf0a9 100644 --- a/docs/develop/authentication/personal-access-token.md +++ b/docs/develop/authentication/personal-access-token.md @@ -4,6 +4,6 @@ Personal Access Tokens, or PATs, are bearer tokens that can be used to authentic To obtain a PAT, log in to Quix, and click on your profile icon in the top right corner, then click `Personal Access Tokens`. You can then generate a PAT with a lifetime suitable for your use case. -Alternatively, log in to the Quix Portal, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. +Alternatively, log in to Quix, and click `Settings` in the main left-hand navigation. Then, for a specific environment, click `APIs and tokens`. In the `APIs and tokens` dialog, you can click `Personal Access Tokens` to generate PATs, or a Streaming Token for use with the Quix Streams client library. diff --git a/docs/develop/authentication/streaming-token.md b/docs/develop/authentication/streaming-token.md index 26e165f4..45a0a1de 100644 --- a/docs/develop/authentication/streaming-token.md +++ b/docs/develop/authentication/streaming-token.md @@ -1,12 +1,12 @@ # Streaming token -A streaming token is a type of bearer token that can be used to authenticate your client library (Quix Streams) to access functionality necessary for streaming actions. Think of streaming tokens as a token you use to access the Quix Portal but with limited scope. +A streaming token is a type of bearer token that can be used to authenticate your client library (Quix Streams) to access functionality necessary for streaming actions. Think of streaming tokens as a token you use to access Quix, but with limited scope. Each environment comes with one of these tokens, limited in use for that specific environment. ## How to find -You can access these tokens by logging into the Quix Portal and clicking on `Settings` in the main left-hand navigation. Select your environment, and then click on `APIs and tokens` and then click on `Streaming Tokens`. +You can access these tokens by logging into Quix and clicking on `Settings` in the main left-hand navigation. Select your environment, and then click on `APIs and tokens` and then click on `Streaming Tokens`. If you are looking for a bearer token to access the Quix APIs, such as the Portal API, you can select `Personal Access Tokens`. These are custom JWTs. diff --git a/docs/develop/code-samples.md b/docs/develop/code-samples.md index 758b2ec4..347c19c3 100644 --- a/docs/develop/code-samples.md +++ b/docs/develop/code-samples.md @@ -22,4 +22,4 @@ You can become a contributor of our Code Samples by generating new samples or up !!! important - Note that when you use a public code sample in the Quix Portal, it is added to your private repository, so any changes you make can be kept private if you so wish. Of course, if you are working in a public repository, then any code samples you add or modify will also be public. + Note that when you use a public code sample in Quix, it is added to your private repository, so any changes you make can be kept private if you so wish. Of course, if you are working in a public repository, then any code samples you add or modify will also be public. diff --git a/docs/develop/integrate-data/external-destination.md b/docs/develop/integrate-data/external-destination.md index 019f6e0b..6925c717 100644 --- a/docs/develop/integrate-data/external-destination.md +++ b/docs/develop/integrate-data/external-destination.md @@ -4,7 +4,7 @@ One simple way to read data out of a Quix topic, is to use the prebuilt connecto To use the `External destination` connector, step through the following procedure: -1. In the Quix Portal click on `Code Samples` in the left-hand sidebar. +1. In the UI click on `Code Samples` in the left-hand sidebar. 2. Search for `External destination`. diff --git a/docs/develop/integrate-data/external-source.md b/docs/develop/integrate-data/external-source.md index a772ddf9..9345edb4 100644 --- a/docs/develop/integrate-data/external-source.md +++ b/docs/develop/integrate-data/external-source.md @@ -4,7 +4,7 @@ One simple way to write data into a Quix topic, is to use the prebuilt connector To use the `External source` connector, step through the following procedure: -1. In the Quix Portal click on `Code Samples` in the left-hand sidebar. +1. In the UI click on `Code Samples` in the left-hand sidebar. 2. Search for `External source`. diff --git a/docs/develop/integrate-data/streaming-apis.md b/docs/develop/integrate-data/streaming-apis.md index 0c4ea6c5..49f58d91 100644 --- a/docs/develop/integrate-data/streaming-apis.md +++ b/docs/develop/integrate-data/streaming-apis.md @@ -44,7 +44,7 @@ Some example code that shows how to connect to Quix and write data into a Quix s
- __Computer vision__ --- - Use ML in real-time computer vision using London's 'Jam Cams'. + ![Computer vision pipeline](../images/project-templates/computer-vision-pipeline.png) + + Real-time computer vision (uses project template). - [:octicons-arrow-right-24: Computer vision](./computer-vision/overview.md) + See the project running in Quix + Try the tutorial - __Chat sentiment analysis__ --- - Build a chat sentiment analysis application from a project template. + ![Chat sentiment analysis pipeline](../images/project-templates/chat-sentiment-pipeline.png) + + Chat application with sentiment analysis (uses project template). + + See the project running in Quix + + Try the tutorial + +- __Train and deploy machine learning (ML)__ + + --- + + Extract data from Quix to train your Machine Learning (ML) model in Jupyter Notebook, then deploy your solution in Quix. - [:octicons-arrow-right-24: Chat sentiment analysis](./sentiment-analysis/overview.md) + Try the tutorial - __MATLAB and Simulink__ @@ -29,7 +46,7 @@ Each tutorial is divided into parts, so that you can leave a tutorial at a conve Deploy real-time MATLAB transformations and Simulink models to Quix. - [:octicons-arrow-right-24: MATLAB and Simulink](./matlab/matlab-and-simulink.md) + Try the tutorial