From 27fcd02b16e882392ace2c03dbe312777c217476 Mon Sep 17 00:00:00 2001 From: Kelvin Olaiya Date: Sat, 21 Sep 2024 23:10:58 +0200 Subject: [PATCH] docs: add some slides --- content/_generator.md | 403 +++++------------------------------------- 1 file changed, 48 insertions(+), 355 deletions(-) diff --git a/content/_generator.md b/content/_generator.md index eeff9f0..1f28a93 100644 --- a/content/_generator.md +++ b/content/_generator.md @@ -52,391 +52,84 @@ More details in the [documentation](https://revue-org.github.io/revue/docs/repor --- -# Lists and enums - -1. First ordered list item -1. Another item - * Unordered sub-list. - * with two items - * another sublist - 1. With a sub-enum - 1. yay! -1. Actual numbers don't matter, just that it's a number - 1. Ordered sub-list -1. And another item. +# Design --- -# Inline images +# Event Storming -![Alternative text](https://upload.wikimedia.org/wikipedia/commons/6/6c/Scavolino_innevata.jpg) +In order to create a better understanding of the domain, we used the Event Storming technique. We performed the following steps: ---- - -## Fallback to shortcodes for resizing - -Autoresize specifying - -* `max-w` (percent of parent element width) and/or `max-h` (percent of viewport height) as max sizes , and -* `width` and/or `height` as *exact* sizes (as percent of viewport size) - -{{< figure src="https://upload.wikimedia.org/wikipedia/commons/6/6c/Scavolino_innevata.jpg" height="20">}} - ---- - -## Multi-column slide - -{{% multicol %}}{{% col %}} -Column 1 -{{% /col %}}{{% col %}} -Column 2 -{{% /col %}}{{% /multicol %}} - -{{% multicol %}} -{{% col class="col-8" %}} -Larger columns using bootstrap -{{% /col %}} -{{% col %}} -[Link to bootstrap grid system](https://getbootstrap.com/docs/4.0/layout/grid/) -{{% /col %}} -{{% /multicol %}} - - ---- - -## Tick and Cross - -* {{% tick %}} This is something good -* {{% cross %}} This is something bad - ---- - -## Chart.js - -{{< chart >}} -{ - type: 'bar', - data: { - labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'], - datasets: [{ - label: 'Bar Chart', - data: [12, 19, 18, 16, 13, 14], - backgroundColor: [ - 'rgba(255, 99, 132, 0.2)', - 'rgba(54, 162, 235, 0.2)', - 'rgba(255, 206, 86, 0.2)', - 'rgba(75, 192, 192, 0.2)', - 'rgba(153, 102, 255, 0.2)', - 'rgba(255, 159, 64, 0.2)' - ], - borderColor: [ - 'rgba(255, 99, 132, 1)', - 'rgba(54, 162, 235, 1)', - 'rgba(255, 206, 86, 1)', - 'rgba(75, 192, 192, 1)', - 'rgba(153, 102, 255, 1)', - 'rgba(255, 159, 64, 1)' - ], - borderWidth: 1 - }] - }, - options: { - maintainAspectRatio: false, - scales: { - yAxes: [{ - ticks: { - beginAtZero: true - } - }] - } - } -} -{{< /chart >}} - ---- - -## FontAwesome +1. **Unstructured exploration**: the goal is to identify the main events +2. **Timeline**: the events are ordered in time +3. **Pivotal events & pain points**: discussion about critical point that require attention and reasoning on events that have impact on the domain. +4. **Actors, Commands, Policies and Read Models** +5. **Aggregates**: groping of event into aggregates +6. **Bounded contexts**: identification of bounded contexts based on aggregates interaction - - - - - - - +[Documentation](https://revue-org.github.io/revue/docs/report/design/event-storming) --- -## Bootstrap 1 +# Bouded Contexts -
- ... -
-
Card title
-

Some quick example text to build on the card title and make up the bulk of the card's content.

- Go somewhere -
-
+After the event storming session, the following contexts have been identified: ---- - -## Bootstrap 2 - - - - - - - - - - - +* **Auth**: Responsible for managing the authentication and authorization of the users. It also is responsible for managing the permissions of the users. +* **User**: This context is responsible for managing the users of the system, in particular, nothing regarding the authentication process but only the management of the user registry. +* **Monitoring**: It is responsible for managing the devices and the data they produce. This context is responsible for consulting the data produced by the devices, their configurations and everything regarding the WoT interactions. +* **Alarm**: Responsible for managing the alarms in the overall system. It is also responsible for the object recognition feature of the system. +* **Notification**: Responsible for managing the notifications of the system. It is responsible for sending notifications to the users when particular events occur. +* **Location**: Responsible for the location management of the system. --- -## Low res, plain markdown +## Bounded Contexts -![](https://upload.wikimedia.org/wikipedia/commons/thumb/6/6c/Scavolino_innevata.jpg/260px-Scavolino_innevata.jpg) +![Bounded Contexts](https://revue-org.github.io/revue/assets/images/ContextMap-7e49c19a18bd072c726a8ec3ffe73d6e.png) +Context Map --- -## Hi res, plain markdown - -![](https://upload.wikimedia.org/wikipedia/commons/6/6c/Scavolino_innevata.jpg) +# Architecture ---- +We chose to use a microservices architecture for the system. This architecture consists on designing software applications as suites of independently deployable services. Each service runs in its own process and communicates with other services through a well-defined interface. -{{< slide background-image="https://upload.wikimedia.org/wikipedia/commons/6/6c/Scavolino_innevata.jpg" >}} - -# Large images as background -## (May affect printing) +[Components & connectors view](https://revue-org.github.io/revue/docs/report/design/architecture/documentation#components--connectors) +[Module view](https://revue-org.github.io/revue/docs/report/design/architecture/documentation#module-view) +[Deployment view](https://revue-org.github.io/revue/docs/report/design/architecture/documentation#deployment-view) --- +# Clean Architecture -{{< slide background-video="https://github.com/DanySK/slides-2024-acsos-imageonomics/raw/master/content/nonnadir.mkv" background-video-loop="true" background-video-muted="true" background-opacity="0.95">}} - -# Video background - ---- - -# $$\LaTeX{}$$ +The design of all relevant microservices follows the Clean Architecture pattern. This helped us in maintaining a core domain design that abstracts away from all technical issues. As showed in the picture above, we made use of the following layers: +* **Domain**: DDD entities, value objects, factories, ... +* **Application**: DDD services, repositories, ... +* **Presentation**: Machinery to translate external data representation to domain entities and vice versa. +* **Infrastructure**: Mostly external service implementation, DB interfaces, REST APIs, Events managers, ... -Inline equations like $E=mc^2$ - -$$\frac{n!}{k!(n-k)!} = \binom{n}{k}$$ - ---- - -# Code snippets - - -```kotlin -val x = pippo -``` - -```go -package main - -import "fmt" - -func main() { - fmt.Println("Hello world!") -} -``` +[Documentation](https://revue-org.github.io/revue/docs/report/design/architecture/microservices#clean-architecture) --- -# Tables - -Colons can be used to align columns. +# Microservices patterns -| Tables | Are | Cool | -| ------------- |:-------------:| -----:| -| col 3 is | right-aligned | $1600 | -| col 2 is | centered | $12 | -| zebra stripes | are neat | $1 | +We reasoned about: -There must be at least 3 dashes separating each header cell. -The outer pipes (|) are optional, and you don't need to make the -raw Markdown line up prettily. You can also use inline Markdown. - ---- - -# Quotes - -> Multiple -> lines -> of -> a -> single -> quote -> get -> joined - -> Very long one liners of Markdown text automatically get broken into a multiline quotation, which is then rendered in the slides. - ---- - -# Fragments - -* {{< frag c="pluto" >}} -* {{< frag c="pluto" >}} -* {{< frag c="pluto" >}} - ---- - -# Stacking images with Fragments -{{% multicol %}} -{{% col %}} -

Pippo

-

Pluto

-

Paperino

-{{%/ col %}} - -{{% col %}} -
- - - -
-{{%/ col %}} - -{{%/ multicol %}} - - ---- - -# Graphs via Gravizo - -{{< gravizo "Example Gravizo graph" >}} - digraph G { - aize ="4,4"; - main [shape=box]; - main -> parse [weight=8]; - parse -> execute; - main -> init [style=dotted]; - main -> cleanup; - execute -> { make_string; printf} - init -> make_string; - edge [color=red]; - main -> printf [style=bold,label="100 times"]; - make_string [label="make a string"]; - node [shape=box,style=filled,color=".7 .3 1.0"]; - execute -> compare; - } -{{< /gravizo >}} - ---- - -# Graphs via mermaid.js - -```mermaid -classDiagram - Class01 <|-- AveryLongClass : Coosssl - Class03 *-- Class04 - Class05 o-- Class06 - Class07 .. Class08 - Class09 --> C2 : Where am i? - Class09 --* C3 - Class09 --|> Class07 - Class07 : equals() - Class07 : Object[] elementData - Class01 : size() - Class01 : int chimp - Class01 : int gorillasaaaaaaaaaaaaaaaaaaaaaa - Class08 <--> C2: Cool label -``` - ---- - - -# Graphs via mermaid.js with options - -```mermaid -%%{init: {'theme':'default', 'themeVariables': { 'fontSize': '.34em', 'fontFamily': 'verdana' }}}%% -classDiagram - Class01 <|-- AveryLongClass : Coosssl - Class03 *-- Class04 - Class05 o-- Class06 - Class07 .. Class08 - Class09 --> C2 : Where am i? - Class09 --* C3 - Class09 --|> Class07 - Class07 : equals() - Class07 : Object[] elementData - Class01 : size() - Class01 : int chimp - Class01 : int gorillasaaaaaaaaaaaaaaaaaaaaaa - Class08 <--> C2: Cool label -``` - - ---- -# Graphs via mermaid.js 2 - -```mermaid -graph TD - SL([fa:fa-user second level]) --> L[solution] - L -- solution email --> db[(mysql)] - db --> X[automatic] - X --> CM([fa:fa-users first level]) - db -- Email --> c([customer support]); -``` - ---- - -# Graphs via mermaid.js 3 - -```mermaid -gitGraph - commit id: "Initialize project" - commit id: "Make some changes" - branch develop - checkout develop - commit - commit - checkout main - merge develop - commit - commit -``` - ---- - -# Keystrokes - -Ctrl + Alt + Del - ---- - -# QR code - -{{% qrcode data="https://www.google.com" %}} - ---- +* **Communication patterns** + * Remote Procedure Invocation + * Asynchronous Messaging +* **External API patterns** + * API Gateway (reverse proxy) +* **Deployment patterns** + * Service as container + * Database per service + * Externalized configuration +* **Security patterns** + * Token-based security -# Import shared slides +[Documentation](https://revue-org.github.io/revue/docs/report/design/architecture/patterns) - - +--- \ No newline at end of file