Fix typos and change some grammatical constructions

This commit is contained in:
daniel.motzko
2021-07-02 13:54:18 +02:00
parent ea00db0ac6
commit 51c8a54795
54 changed files with 185 additions and 152 deletions

View File

@@ -7,7 +7,8 @@ This is the location of AOE techradar content - published under: https://www.aoe
Install the [yarn package manager](https://yarnpkg.com/getting-started/install). Install the [yarn package manager](https://yarnpkg.com/getting-started/install).
### Host the application under a sub path ### Host the application under a sub path
To host the application under a sub path, set the environment variable `PUBLIC_URL`, e.g. "/techradar". The default is `/build`. To host the application under a sub path, set the environment variable `PUBLIC_URL`, e.g. "/techradar".
The default is `/build`.
> For local development I recommend using `/build` and use this for the following steps. > For local development I recommend using `/build` and use this for the following steps.
@@ -30,4 +31,5 @@ Then open here: http://localhost:8080/build
yarn generateJson yarn generateJson
``` ```
You can do this while the server is running. You can find the newly created rd.json in "/build/rd.json". You can do this while the server is running.
You can find the newly created rd.json in "/build/rd.json".

View File

@@ -12,4 +12,4 @@ The abbreviation "[ELK](https://www.elastic.co/products) Stack" stands for the T
Logstash is used to process and forward different data (or logfile) formats. <u>E</u>lasticsearch is used as a search index and together with the Kibana plugin you can configure highly individual dashboards. Recently, there are also the Beats Tools joining this toolstack to ship data to Elasticsearch. Logstash is used to process and forward different data (or logfile) formats. <u>E</u>lasticsearch is used as a search index and together with the Kibana plugin you can configure highly individual dashboards. Recently, there are also the Beats Tools joining this toolstack to ship data to Elasticsearch.
We have been using the ELK Stack for several years now in several projects and different infrastructure setups - we use it to visualize traffic, certain KPIs or just to analyze and search in application logs. We encourage all teams to use such a solution and take care to write useful logs in your applications. We have been using the ELK Stack for several years now in several projects and different infrastructure setups - we use it to visualize traffic, certain KPIs or just to analyze and search in application logs. We encourage all teams to use such a solution and take care to write useful logs in your applications.

View File

@@ -4,6 +4,8 @@ ring: assess
quadrant: tools quadrant: tools
--- ---
[Spring REST Docs](https://projects.spring.io/spring-restdocs/) auto generates [Asciidoctor](http://asciidoctor.org/) snippets with the help of [Spring MVC Test](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle#spring-mvc-test-framework) or [RestAssured](/tools/rest-assured.html). So you can be sure that your tests are inline with the documentation. [Spring REST Docs](https://projects.spring.io/spring-restdocs/) auto generates [Asciidoctor](http://asciidoctor.org/) snippets with the help of [Spring MVC Test](http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle#spring-mvc-test-framework) or [RestAssured](/tools/rest-assured.html).
So you can be sure that your tests are inline with the documentation.
At AOE, we use [Spring REST Docs](https://projects.spring.io/spring-restdocs/) to document our Rest Services and Hal Resources. We also use it to auto generate [WireMock](/tools/wiremock.html) Stubs, so the consumer of the service can test against the exact API of the service. At AOE, we use [Spring REST Docs](https://projects.spring.io/spring-restdocs/) to document our Rest Services and Hal Resources.
We also use it to auto generate [WireMock](/tools/wiremock.html) Stubs, so the consumer of the service can test against the exact API of the service.

View File

@@ -9,4 +9,4 @@ We still recommend the usage of HAL and HATEOAS.
But, depending on the resource structure, there are some pitfalls to be aware of: But, depending on the resource structure, there are some pitfalls to be aware of:
- Increased amount of HTTP calls - Increased amount of HTTP calls
- Parallelization of client-side calls is more difficult or even impossible when following links on heavily nested resource structures - Parallelization of client-side calls is more difficult or even impossible when following links on heavily nested resource structures
- Consumer side code might get larger - Consumer side code might get larger

View File

@@ -31,7 +31,7 @@ Flamingo has a clean architecture with clear dependencies in mind and offers a t
* GraphQL support and therefore support to build nice SPA and PWAs on top of it * GraphQL support and therefore support to build nice SPA and PWAs on top of it
* Resilience and Caching for external APIs calls. * Resilience and Caching for external APIs calls.
Flamingo itself does not contain ORM Mapper or libraries - instead it emphasizes ["ports and adapters"](/methods-and-patterns/ports-and-adapters.html) architecture - so that you have a technology free (domain) model and any possible (and replaceable) persistence behind it. Flamingo itself does not contain ORM Mapper or libraries - instead it emphasizes ["ports and adapters"](/methods-and-patterns/ports-and-adapters.html) architecture - so that you have a technology free (domain) model and any possible (and replaceable) persistence behind it.
That makes Flamingo useful to build microservices and applications - especially to build "frontends" or portals that require interaction with other (micro) services in a distributed architecture. That makes Flamingo useful to build microservices and applications - especially to build "frontends" or portals that require interaction with other (micro) services in a distributed architecture.
When sticking to the architectural recommendation, you can build modular applications with replaceable adapters that gives you independent testability. When sticking to the architectural recommendation, you can build modular applications with replaceable adapters that gives you independent testability.

View File

@@ -7,7 +7,7 @@ quadrant: languages-and-frameworks
Kotlin is used successfully in production by multiple teams. Kotlin is used successfully in production by multiple teams.
Kotlin is 100% interoperable with Java. It means the code can live side-by-side in one code base and interact. Kotlin is 100% interoperable with Java. It means the code can live side-by-side in one code base and interact.
From the beginning it was designed with practical thought in mind. So the IDE Support in IntelliJ is really great. From the beginning it was designed with practical thought in mind. So the IDE Support in IntelliJ is really great.
The Spring Framework Developer put a lot of effort that Springs play well together with Kotlin. The Spring Framework Developer put a lot of effort that Springs play well together with Kotlin.

View File

@@ -4,6 +4,6 @@ ring: hold
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
Since the RAML project has decided to [join](https://blogs.mulesoft.com/dev/api-dev/open-api-raml-better-together/) the OpenAPI initiative and the RAML ecosystem lacks further development and additional tools, we decided to use and recommend using ["OpenAPI specification (OAS)"](/tools/open-api.html) as description standard instead. Since the RAML project has decided to [join](https://blogs.mulesoft.com/dev/api-dev/open-api-raml-better-together/) the OpenAPI initiative and the RAML ecosystem lacks further development and additional tools, we decided to use and recommend using ["OpenAPI specification (OAS)"](/tools/open-api.html) as description standard instead.
RAML still provides advantages in modeling an API through it's more expressive modeling language and can produce OAS RAML still provides advantages in modeling an API through it's more expressive modeling language and can produce OAS

View File

@@ -5,5 +5,5 @@ quadrant: tools
--- ---
[Hashicorp Vault](https://www.vaultproject.io/) is a Go application with a Rest/Cli interface that you can use to securely access secrets. [Hashicorp Vault](https://www.vaultproject.io/) is a Go application with a Rest/Cli interface that you can use to securely access secrets.
A secret can be any sensitive data, such as credentials, certificates, access tokens, encryption keys etc. A secret can be any sensitive data, such as credentials, certificates, access tokens, encryption keys etc.
Vaults key features are a secure secret storage, dynamic secretes (create on-demand secrets), data encryption, secret leasing, renewal and revocation. Vaults key features are a secure secret storage, dynamic secretes (create on-demand secrets), data encryption, secret leasing, renewal and revocation.

View File

@@ -2,16 +2,11 @@
title: "Angular" title: "Angular"
ring: adopt ring: adopt
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
Actually in version 11 Angular has become an adult SPA framework with much faster build time and significant smaller
production builds. Updating to newer versions has become mostly a "no-brainer" which helps us to integrate latest Actually in version 11 Angular has become an adult SPA framework with much faster build time and significant smaller production builds.
community bug-fix & improvements on a friday during a cup of coffee. Angular ships as a fully integrated development Updating to newer versions has become mostly a "no-brainer" which helps us to integrate the latest community bug-fix & improvements on a friday during a cup of coffee.
platform from scaffolding, code generation, routing, guarding, unit/e2e-testing, multi-language builds (i18n) and stable Angular ships as a fully integrated development platform from scaffolding, code generation, routing, guarding, unit/e2e-testing, multi-language builds (i18n) and stable dev/build processes and keeping it extensible at the same time.
dev/build processes and keeping it extensible at the same time. This holistic nature of Angular makes it in the beginning This holistic nature of Angular makes it in the beginning way more difficult to learn but once understood it's a great candidate to go very fast into "requirement implementation" aka providing early value rather than library wiring.
way more difficult to learn but once understood it's a great candidate to go very fast into "requirement implementation" Beside the existing telco-industry projects we've actually also chosen Angular for resource critical industry 4.0 / embedded projects.
aka early providing value rather than library wiring. Beside the existing telco-industry projects we've actually also Here we've selected Angular beside the performance aspects to fulfill requirements like adaptive multi device support (custom hardware buttons, tablets and laptops) on the one hand and on the other hand to reduce the risk loosing time by having too many self-managed external dependencies.
chosen Angular for resource critical industry 4.0 / embedded projects. Here we've selected Angular beside the
performance aspects to fulfill requirements like adaptive multi device support (custom hardware buttons, tablets and
laptops) on the one hand and on the other hand to reduce the risk loosing time by having too many self-managed external
dependencies.

View File

@@ -5,6 +5,9 @@ quadrant: methods-and-patterns
--- ---
Application performance management (APM) enables to predict and prevent performance issues before they impact your users or your business. APM solutions help organizations to ensure that applications meet performance, availability and user experience expectations. This can be achieved by measuring application performance, providing visibility into performance issues, alerting developers and administrators when performance problems appear, and allow analysing how reliable an improvement is compared to a previous state. In the last years APM solutions are evolving from application performance monitoring tools to more feature full systems that incorporating observability, performance data collection and analysis, which is more to date with distributed cloud-native applications. Application performance management (APM) enables to predict and prevent performance issues before they impact your users or your business.
APM solutions help organizations to ensure that applications meet performance, availability and user experience expectations.
This can be achieved by measuring application performance, providing visibility into performance issues, alerting developers and administrators when performance problems appear, and allow analysing how reliable an improvement is compared to a previous state.
In the last years APM solutions are evolving from application performance monitoring tools to more feature full systems that incorporating observability, performance data collection and analysis, which is more to date with distributed cloud-native applications.
Our experience with APM relates to the instrumentation of applications. This includes exposing metrics, tracing and integration with external services such as [New Relic](https://newrelic.com/). We decided to go for this approach given the simplicity and the benefits they proved on a daily basis when analyzing and optimizing our software. Our experience with APM relates to the instrumentation of applications. This includes exposing metrics, tracing and integration with external services such as [New Relic](https://newrelic.com/). We decided to go for this approach given the simplicity and the benefits they proved on a daily basis when analyzing and optimizing our software.

View File

@@ -5,5 +5,4 @@ quadrant: platforms-and-aoe-services
featured: false featured: false
--- ---
Artifactory is still a valid tool but SCM platforms tools like [GitLab](https://gitlab.org/) and similar hosted services offer integrated artifact management which remove the requirements for external artifact management in many projects. Artifactory is still a valid tool but SCM platforms tools like [GitLab](https://gitlab.org/) and similar hosted services offer integrated artifact management which remove the requirements for external artifact management in many projects.

View File

@@ -2,7 +2,6 @@
title: "Checkov" title: "Checkov"
ring: assess ring: assess
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
Checkov is a static code analysis tool for infrastructure-as-code. Checkov is a static code analysis tool for infrastructure-as-code.
@@ -16,4 +15,4 @@ It scans cloud infrastructure provisioned using
and detects security and compliance misconfigurations. and detects security and compliance misconfigurations.
At AOE we use checkov in CI/CD processes to get insights into our Terraform-Modules. At AOE we use Checkov in CI/CD processes to get insights into our Terraform-Modules.

View File

@@ -28,6 +28,6 @@ An understanding of how communication systems are working - and what conditions
That includes the awareness that we can always learn from each other! That includes the awareness that we can always learn from each other!
That is the reason we see systemic perspectives with proper system theoretical background emerging in the space of organisational development. We believe that proper learning of this perspectives and the awareness of complexity management capabilities can help organisations to form functional collaboration. This learning helps to reflect systems and oneself more conscious - and that can be a healthy condition for more impact and learning. It may also help that an organisation does not blindly follow the next model, agile "hype" or consultant promises. That is the reason we see systemic perspectives with proper system theoretical background emerging in the space of organisational development. We believe that proper learning of these perspectives and the awareness of complexity management capabilities can help organisations to form functional collaboration. This learning helps to reflect systems and oneself more conscious - and that can be a healthy condition for more impact and learning. It may also help that an organisation does not blindly follow the next model, agile "hype" or consultant promises.
More on that topic: [Systemic Communication](https://www.carl-auer.de/magazin/systemzeit/communication-reorganization-of-undetermined) More on that topic: [Systemic Communication](https://www.carl-auer.de/magazin/systemzeit/communication-reorganization-of-undetermined)

View File

@@ -2,8 +2,13 @@
title: "Conventional Commits" title: "Conventional Commits"
ring: trial ring: trial
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
The Conventional Commits specification is a lightweight convention on top of commit messages. It provides a small set of rules for writing commit messages and therefore creating an explicit commit history. The convention dovetails with [SemVer](/methods-and-patterns/semver2.html), by describing the features, fixes, and breaking changes made in commit messages. The specification contains only 16 items that are easy to follow. The predefined structure allows everyone in the team to get a better overview of what the commit messages relates to and what part of the code a change has to do with. Some benefits of using these specifications include: the ability to automatically generate changelogs, the ability to determine a semantic version bump (based on the types of commits landed) and being able to communicate the nature of changes to teammates and stakeholders.
We use conventional commits in the team with the help of a git template. The template contains a guide of elements that are required in the specification plus some information about project specific items that should also be part of a commit, such as a ticket number. The Conventional Commits specification is a lightweight convention on top of commit messages.
It provides a small set of rules for writing commit messages and therefore creating an explicit commit history.
The convention dovetails with [SemVer](/methods-and-patterns/semver2.html), by describing the features, fixes, and breaking changes made in commit messages.
The specification contains only 16 items that are easy to follow. The predefined structure allows everyone in the team to get a better overview of what the commit messages relates to and what part of the code a change has to do with.
Some benefits of using these specifications include: the ability to automatically generate changelogs, the ability to determine a semantic version bump (based on the types of commits landed) and being able to communicate the nature of changes to teammates and stakeholders.
We use conventional commits in the team with the help of a git template.
The template contains a guide of elements that are required in the specification plus some information about project specific items that should also be part of a commit, such as a ticket number.

View File

@@ -2,8 +2,8 @@
title: "Cypress" title: "Cypress"
ring: adopt ring: adopt
quadrant: tools quadrant: tools
--- ---
Cypress has proven itself in AOE projects. Cypress has proven itself in AOE projects.
With its support for JavaScript and TypeScript, Cypress is a testing tool that strongly relates to front-end developers. With its support for JavaScript and TypeScript, Cypress is a testing tool that strongly relates to front-end developers.
It is very easy to adopt, and the test specifications are easy to implement and to maintain. It is very easy to adopt, and the test specifications are easy to implement and to maintain.

View File

@@ -5,8 +5,12 @@ quadrant: tools
featured: true featured: true
--- ---
[DDEV](https://www.ddev.com/ddev-local/) is an open source tool that makes it dead simple to get local PHP development environments up and running within minutes. It's powerful and flexible as a result of its per-project environment configurations, which can be extended, version controlled, and shared. In short, DDEV aims to allow development teams to use Docker in their workflow without the complexities of bespoke configuration. [DDEV](https://www.ddev.com/ddev-local/) is an open source tool that makes it dead simple to get local PHP development environments up and running within minutes.
It's powerful and flexible as a result of its per-project environment configurations, which can be extended, version controlled, and shared.
In short, DDEV aims to allow development teams to use Docker in their workflow without the complexities of bespoke configuration.
At AOE, we use DDEV in a variety of PHP projects (large and small). It has made the onboarding process extremely easy for new developers and developers who have already worked with DDEV feel right at home in other projects. At AOE, we use DDEV in a variety of PHP projects (large and small).
It has made the onboarding process extremely easy for new developers and developers who have already worked with DDEV feel right at home in other projects.
DDEV makes adding needed dependencies super easy and so far has met every requirement we've ever had. This is mainly because DDEV is just a wrapper for existing tools like Docker-Compose. However, it does take away a lot of the complexity that is normally involved in configuring these tools. DDEV makes adding needed dependencies super easy and so far has met every requirement we've ever had.
This is mainly because DDEV is just a wrapper for existing tools like Docker-Compose. However, it does take away a lot of the complexity that is normally involved in configuring these tools.

View File

@@ -2,9 +2,11 @@
title: "Dependency Update Scan" title: "Dependency Update Scan"
ring: trial ring: trial
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
Tools for automated dependency updates continue to offer a big productivity gain when integrated well into the build workflow. Tools for automated dependency updates continue to offer a big productivity gain when integrated well into the build workflow.
Nonetheless, this comes not without a word of warning. While it's great in theory, constant updates might quickly lead to a bombardment of merge requests. It is crucial that the chosen tools work reliably and are really well integrated. Otherwise, this might become overwhelming for teams. As an alternative, we also had good experience with disabled automatic merge requests and just manually triggered a job when we wanted to take care of the updates. Nonetheless, this comes not without a word of warning.
While it's great in theory, constant updates might quickly lead to a bombardment of merge requests.
It is crucial that the chosen tools work reliably and are really well integrated. Otherwise, this might become overwhelming for teams.
As an alternative, we also had good experience with disabled automatic merge requests and just manually triggered a job when we wanted to take care of the updates.

View File

@@ -4,7 +4,8 @@ ring: assess
quadrant: tools quadrant: tools
--- ---
The [DGS Framework](https://netflix.github.io/dgs/) is a [GraphQL](https://graphql.org/) server framework based on [Spring Boot](https://spring.io/projects/spring-boot/). It extends [GraphQL Java](https://www.graphql-java.com/) with additional features such as: The [DGS Framework](https://netflix.github.io/dgs/) is a [GraphQL](https://graphql.org/) server framework based on [Spring Boot](https://spring.io/projects/spring-boot/).
It extends [GraphQL Java](https://www.graphql-java.com/) with additional features such as:
- an annotation-based programming model for Spring - an annotation-based programming model for Spring
- a test framework for writing query tests as unit tests - a test framework for writing query tests as unit tests
- a [Gradle](https://gradle.org/) code generation plugin to create types from a GraphQL schema - a [Gradle](https://gradle.org/) code generation plugin to create types from a GraphQL schema

View File

@@ -8,6 +8,5 @@ Documenting concepts and software architecture as diagrams using code offers gre
Having documentation and diagrams treated as code and checked-in into version control increases transparency, collaboration as well as productivity. Having documentation and diagrams treated as code and checked-in into version control increases transparency, collaboration as well as productivity.
The textual representation of diagrams is easy to write and read. Generation of graphical representations as SVG or PNG images is also easy with the associated tools. The textual representation of diagrams is easy to write and read. Generation of graphical representations as SVG or PNG images is also easy with the associated tools.
We make heavy use of [PlantUML](/tools/plant-uml.html) combined with [Asciidoc](/tools/asciidoc.html) and tools We make heavy use of [PlantUML](/tools/plant-uml.html) combined with [Asciidoc](/tools/asciidoc.html) and tools like [AsciiDoctor Diagram](https://asciidoctor.org/docs/asciidoctor-diagram/) to include and inline PlantUML diagrams into documentations.
like [AsciiDoctor Diagram](https://asciidoctor.org/docs/asciidoctor-diagram/) to include and inline PlantUML diagrams into documentations.
The latter allows a variety of other diagram formats which can be easily mixed and matched. The latter allows a variety of other diagram formats which can be easily mixed and matched.

View File

@@ -5,6 +5,11 @@ quadrant: platforms-and-aoe-services
featured: false featured: false
--- ---
Docker is best known for its capability to build and run containers. This is how we have used the term "Docker" in the Tech Radar recently. But "Docker" is also a complete production platform, where the capability to build and run Containers is only a small fraction of its capabilities. At the same time numerous alternate runtimes for containers like containerd and podman as well as image builders like Kaniko and Buildah have evolved during the last years. Thanks to the standards established by the Open Container Initiative these tools are mostly interchangeable for the purposes of building and running containers. Docker is best known for its capability to build and run containers.
This is how we have used the term "Docker" in the Tech Radar recently.
But Docker is also a complete production platform, where the capability to build and run Containers is only a small fraction of its capabilities.
At the same time numerous alternate runtimes for containers like containerd and podman as well as image builders like Kaniko and Buildah have evolved during the last years.
Thanks to the standards established by the Open Container Initiative these tools are mostly interchangeable for the purposes of building and running containers.
To be more distinct, we now recommend using [Containers and Runtimes as specified by the Open Container Initiative](/platforms-and-aoe-services/oci-container.html). "Docker" is one of many tools to achieve that. To be more distinct, we now recommend using [Containers and Runtimes as specified by the Open Container Initiative](/platforms-and-aoe-services/oci-container.html).
Docker is one of many tools to achieve that.

View File

@@ -2,7 +2,6 @@
title: "Amazon EKS" title: "Amazon EKS"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
[Amazon Elastic Kubernetes Service](https://aws.amazon.com/de/eks/) (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to stand up or maintain your own Kubernetes control plane or workloads. [Amazon Elastic Kubernetes Service](https://aws.amazon.com/de/eks/) (Amazon EKS) is a managed service that makes it easy for you to run Kubernetes on AWS without needing to stand up or maintain your own Kubernetes control plane or workloads.
@@ -10,7 +9,10 @@ Amazon EKS runs Kubernetes control plane instances across multiple Availability
It also provides automated version upgrades and patching for them. It also provides automated version upgrades and patching for them.
Amazon EKS is fully supported by [Terraform](https://www.aoe.com/techradar/platforms-and-aoe-services/terraform.html) which brings the advantage that its configuration is written in code, Amazon EKS is fully supported by [Terraform](https://www.aoe.com/techradar/platforms-and-aoe-services/terraform.html) which brings the advantage that its configuration is written in code,
which fulfils the [infrastructure as code](https://www.aoe.com/techradar/platforms-and-aoe-services/infrastructure-as-code.html) philosophy. Amazon has also implemented important (security) features to their service to ensure that Amazon EKS is well integrated into the broader AWS landscape. Kubernetes version upgrades and security patches are provided in a reliable schedule and with proper documentation. Alongside with the managed service, Amazons also provides it's own [EKS distribution](https://aws.amazon.com/de/blogs/opensource/introducing-amazon-eks-distro/) which closes the gap for on-premise installations. which fulfils the [infrastructure as code](https://www.aoe.com/techradar/platforms-and-aoe-services/infrastructure-as-code.html) philosophy.
Amazon has also implemented important (security) features to their service to ensure that Amazon EKS is well integrated into the broader AWS landscape.
Kubernetes version upgrades and security patches are provided in a reliable schedule and with proper documentation.
Alongside with the managed service, Amazons also provides its own [EKS distribution](https://aws.amazon.com/de/blogs/opensource/introducing-amazon-eks-distro/) which closes the gap for on-premise installations.
Different Amazon EKS Clusters are in use on a variety of environments like development, integration, testing and production. Different Amazon EKS Clusters are in use on a variety of environments like development, integration, testing and production.
We experienced that Kubernetes version updates are done without major efforts or impact to the running cluster. Along with that, using EKS avoids a lot of low-level optimization and component management which were required in manually configured clusters in the past. We experienced that Kubernetes version updates are done without major efforts or impact to the running cluster. Along with that, using EKS avoids a lot of low-level optimization and component management which were required in manually configured clusters in the past.

View File

@@ -3,8 +3,6 @@ title: "Flow"
ring: hold ring: hold
quadrant: tools quadrant: tools
featured: false featured: false
--- ---
With a much larger community,
better support from frameworks (React, Angular, Vue) and IDEs With a much larger community, better support from frameworks (React, Angular, Vue) and IDEs and a similar feature set, Typescript is the better choice instead of Flow.
and a similar feature set, Typescript is the better choice instead of Flow.

View File

@@ -2,7 +2,6 @@
title: "Flutter" title: "Flutter"
ring: assess ring: assess
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
[Flutter](https://flutter.io) allows writing native applications for different platforms with a single code base in [Dart](https://dart.dev). [Flutter](https://flutter.io) allows writing native applications for different platforms with a single code base in [Dart](https://dart.dev).

View File

@@ -5,4 +5,5 @@ quadrant: tools
featured: false featured: false
--- ---
Gatling is still a valid tool which is widely used in our teams. Other alternatives like [locust](https://locust.io/) exist and fill the same niche but Gatling is a better fit for our toolstack. Gatling is still a valid tool which is widely used in our teams.
Other alternatives like [Locust](https://locust.io/) exist and fill the same niche but Gatling is a better fit for our toolstack.

View File

@@ -2,12 +2,11 @@
title: "Graal Native Image" title: "Graal Native Image"
ring: trial ring: trial
quadrant: tools quadrant: tools
--- ---
Native Image is a technology to ahead-of-time compile Java code to a standalone executable, called a native image. In the process Native Image is a technology to ahead-of-time compile Java code to a standalone executable, called a native image.
of building a native image all library dependencies, including those from the JDK will be packed in the native image. In the process of building a native image all library dependencies, including those from the JDK will be packed in the native image.
The application created as a native image can be run without a JDK. The natively compiled applications require generally The application created as a native image can be run without a JDK.
less memory and have shorter start up times. The natively compiled applications require generally less memory and have shorter start up times.
We at AOE have already running microservices written in Scala with Graal Native Image. We at AOE have already running microservices written in Scala with Graal Native Image.

View File

@@ -2,7 +2,6 @@
title: "Helm" title: "Helm"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
Helm has a fast growing community and is used in more and more projects. It's our default tool to manage kubernetes resources - every other alternative has to benchmark itself with it. Therefore we have updated it to "adopt". Helm has a fast growing community and is used in more and more projects. It's our default tool to manage kubernetes resources - every other alternative has to benchmark itself with it. Therefore we have updated it to "adopt".

View File

@@ -2,9 +2,14 @@
title: "k6" title: "k6"
ring: assess ring: assess
quadrant: tools quadrant: tools
--- ---
Load Testing is a testing process in which the performance of a software application or system is tested under a specific expected load. It determines how the system behaves while being accessed by multiple users simultaneously. The goals of Load Testing is to improve performance bottlenecks and to ensure stability under high traffic. When dore regularly, it provides confidence in the system, its reliability and performance, helps identify the bottlenecks in the system under heavy user stress scenarios before they happen in a production environment, and gives protection against poor user experience when using the system. Load Testing is a testing process in which the performance of a software application or system is tested under a specific expected load.
It determines how the system behaves while being accessed by multiple users simultaneously.
The goals of Load Testing is to improve performance bottlenecks and to ensure stability under high traffic.
When done regularly, it provides confidence in the system, its reliability and performance, helps identify the bottlenecks in the system under heavy user stress scenarios before they happen in a production environment, and gives protection against poor user experience when using the system.
[K6](https://k6.io/) is a developer-centric, free and open-source load testing tool. The command line runner executes scripts written in JavaScript and allows to configure the execution time and the number of virtual users. The tool can be used for load testing and performance testing. However, it can not be used to run tests that rely only on the browser, making it more suitable for testing of APIs. [K6](https://k6.io/) is a developer-centric, free and open-source load testing tool.
The command line runner executes scripts written in JavaScript and allows to configure the execution time and the number of virtual users.
The tool can be used for load testing and performance testing.
However, it can not be used to run tests that rely only on the browser, making it more suitable for testing of APIs.

View File

@@ -2,11 +2,15 @@
title: "Kubernetes Operators" title: "Kubernetes Operators"
ring: trial ring: trial
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
The [Kubernetes Operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) allow to manage application configuration within Kubernetes through [custom resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/). The operators are implemented as Kubernetes controllers and all interaction happens through the Kubernetes API. This allows to manage application deployment and configuration with the same toolset, it also allows to create another abstraction layer to describe the desired application state and let the operator decide how this state should be reached. The [Kubernetes Operators](https://kubernetes.io/docs/concepts/extend-kubernetes/operator/) allow to manage application configuration within Kubernetes through [custom resources](https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/).
The operators are implemented as Kubernetes controllers and all interaction happens through the Kubernetes API.
This allows to manage application deployment and configuration with the same toolset, it also allows to create another abstraction layer to describe the desired application state and let the operator decide how this state should be reached.
Kubernetes Operators are widely available for many community projects. These can be shared and found on [operatorhub.io](https://operatorhub.io/). Implementing custom operators is greatly simplified through the [Operators SDK](https://sdk.operatorframework.io/) which is used as base for many [existing implementations](https://github.com/operator-framework/awesome-operators). Kubernetes Operators are widely available for many community projects.
These can be shared and found on [operatorhub.io](https://operatorhub.io/).
Implementing custom operators is greatly simplified through the [Operators SDK](https://sdk.operatorframework.io/) which is used as base for many [existing implementations](https://github.com/operator-framework/awesome-operators).
We use operators in most projects and prefer them to custom management code. We encourage teams to try the existing community operators for e.g. observability and operations tasks. We use operators in most projects and prefer them to custom management code.
We encourage teams to try the existing community operators for e.g. observability and operations tasks.

View File

@@ -1,12 +1,14 @@
--- ---
title: "LOKI" title: "Loki"
ring: trial ring: trial
quadrant: tools quadrant: tools
featured: true featured: true
--- ---
Archiving indexed log-data with a system like Elastic Search can be expensive and archiving it as simple text files makes it hard to query them. [Loki](https://grafana.com/oss/loki/) solves this issue by adding a reference database based on kubernetes-labels to each log-line similar to prometheus, but holding the log-data inside a simple blob-storage like s3. This allows the user to query the data by pre-defined labels and keeps the costs for indexing low. Archiving indexed log data with a system like Elasticsearch can be expensive and archiving it as simple text files makes it hard to query them.
[Loki](https://grafana.com/oss/loki/) solves this issue by adding a reference database based on Kubernetes labels to each log line similar to Prometheus, but holding the log data inside a simple blob storage like S3.
This allows the user to query the data by pre-defined labels and keeps the costs for indexing low.
Another benefit is the fact that does not have an endpoint for mutating log-data which makes the data immutable from a potential compromised system. Another benefit is the fact that does not have an endpoint for mutating log data which makes the data immutable from a potential compromised system.
We at AOE are using it for longer term log-archiving in several kubernetes-clusters. We at AOE are using it for longer term log archiving in several Kubernetes clusters.

View File

@@ -4,6 +4,7 @@ ring: adopt
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
The Micro Frontends approach continues to prove to be a valuable pattern for large-scale systems developed by several teams. Therefore, we moved this pattern to "adopt". The Micro Frontends approach continues to prove to be a valuable pattern for large-scale systems developed by several teams.
Therefore, we moved this pattern to "adopt".
We use [page composing](methods-and-patterns/page-composing.html) as one implementation of this pattern. We use [page composing](methods-and-patterns/page-composing.html) as one implementation of this pattern.

View File

@@ -2,8 +2,13 @@
title: "MLOps" title: "MLOps"
ring: assess ring: assess
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
After spending some time diving into the world of data science and machine learning we're realizing our existing DevOps best practices aren't a perfect fit for the specific workflows we're seeing here. Data science is not only about code but also all about managing large datasets and models. Data is being analyzed, models are being trained in many iterations and then software needs to be deployed that does the actual prediction/inference. And this circle (see: CRISP-DM) will repeat over and over again during the development phase and after the first production release. "**MLOps**" extends the DevOps best practices in order to cover these new scenarios specific to machine learning workflows.
After spending some time diving into the world of data science and machine learning we're realizing our existing DevOps best practices aren't a perfect fit for the specific workflows we're seeing here.
Data science is not only about code but also all about managing large datasets and models.
Data is being analyzed, models are being trained in many iterations and then software needs to be deployed that does the actual prediction/inference.
And this circle (see: CRISP-DM) will repeat over and over again during the development phase and after the first production release.
"**MLOps**" extends the DevOps best practices in order to cover these new scenarios specific to machine learning workflows.
[DVC](https://dvc.org/) helps dealing with large data sets and models by connecting external storage to your Git repositories and [CML](https://cml.dev/) helps integrating the CI/CD into your GitHub or GitLab workflows. [DVC](https://dvc.org/) helps dealing with large data sets and models by connecting external storage to your Git repositories and [CML](https://cml.dev/) helps integrating the CI/CD into your GitHub or GitLab workflows.
Since we're already using Kubernetes extensively we're exploring [kubeflow](https://www.kubeflow.org/) for running the full machine learning workflow on Kubernetes clusters. Since we're already using Kubernetes extensively we're exploring [Kubeflow](https://www.kubeflow.org/) for running the full machine learning workflow on Kubernetes clusters.

View File

@@ -6,5 +6,7 @@ featured: true
--- ---
[NATS](https://nats.io/) is a cloud native messaging and stream-data system for modern distributed software systems. [NATS](https://nats.io/) is a cloud native messaging and stream-data system for modern distributed software systems.
Two design-goals [design-goals](https://github.com/nats-io/nats-general/blob/master/architecture/DESIGN.md) were simplicity and performance. These are adopted by selecting [golang](https://golang.org/) for the server implementation and reducing the memory footprint for both: server- and client-side. Two design-goals [design-goals](https://github.com/nats-io/nats-general/blob/master/architecture/DESIGN.md) were simplicity and performance.
The server-side provides simple and efficient horizontal scaling (e.g. deploying it inside kubernetes) and the small client-footprint allows us to use it in embedded-systems, edge-computing and IoT devices e.g. for command and controll use-cases. Also the long list of existing [integrations](https://docs.nats.io/compare-nats#integrations) and the plugin-systems bring a great flexibility. These are adopted by selecting [golang](https://golang.org/) for the server implementation and reducing the memory footprint for both: server- and client-side.
The server-side provides simple and efficient horizontal scaling (e.g. deploying it inside Kubernetes) and the small client-footprint allows us to use it in embedded-systems, edge-computing and IoT devices e.g. for command and controll use-cases.
Also, the long list of existing [integrations](https://docs.nats.io/compare-nats#integrations) and the plugin-systems bring a great flexibility.

View File

@@ -4,6 +4,8 @@ ring: adopt
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
[Next.js](https://nextjs.org/) claims itself as **the** React framework for production. It comes with first-class developer experience and many features for example: hybrid static & server-side rendering, TypeScript support, image optimization, code splitting & much more. [Next.js](https://nextjs.org/) claims itself as **the** React framework for production.
It comes with first-class developer experience and many features for example: hybrid static & server-side rendering, TypeScript support, image optimization, code splitting & much more.
We at AOE are already using Next.js for some big projects. The main reason for that is the modern stack (React with TypeScript) and the possibility to render on the server (static pre-rendering or dynamic SSR) to be able to get crawled by search engines and stay SEO relevant. We at AOE are already using Next.js for some big projects.
The main reason for that is the modern stack (React with TypeScript) and the possibility to render on the server (static pre-rendering or dynamic SSR) to be able to get crawled by search engines and stay SEO relevant.

View File

@@ -2,7 +2,6 @@
title: "OCI Container" title: "OCI Container"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
OCI-compatible containers are currently the most-used solution for creating and managing container-based infrastructures and deployments. OCI-compatible containers are currently the most-used solution for creating and managing container-based infrastructures and deployments.

View File

@@ -2,15 +2,17 @@
title: "Open Policy Agent" title: "Open Policy Agent"
ring: assess ring: assess
quadrant: tools quadrant: tools
--- ---
[Open Policy Agent](https://www.openpolicyagent.org/) (OPA) is a framework which allows modelling and evaluating policy access services. The underlying expression language *Rego* is purpose-built for the policy evaluations and implements the **Policy As Code** pattern. [Open Policy Agent](https://www.openpolicyagent.org/) (OPA) is a framework which allows modelling and evaluating policy access services.
The underlying expression language *Rego* is purpose-built for the policy evaluations and implements the **Policy As Code** pattern.
This allows to decouple policy from the service's code, so you can release, and review policies separately. This allows to decouple policy from the service's code, so you can release, and review policies separately.
The benefits of using OPA and Rego comes from the various available integrations into other cloud-native services and tools. It can be used with the "Kubernetes Admission Controller", to authorize decisions within a Service Mesh or as part of infrastructure evaluation pipelines. The benefits of using OPA and Rego comes from the various available integrations into other cloud-native services and tools.
It can be used with the "Kubernetes Admission Controller", to authorize decisions within a Service Mesh or as part of infrastructure evaluation pipelines.
We use OPA in some of our infrastructure pipelines to ensure that changes don't have undesired impact or within Kubernetes to evaluate the overall conformity of our deployments with the given policies. We use OPA in some of our infrastructure pipelines to ensure that changes don't have undesired impact or within Kubernetes to evaluate the overall conformity of our deployments with the given policies.
We have also evaluated OPA as part of permission management in distributed architectures. The concept promises to provide value especially for distributed enterprise architectures. We have also evaluated OPA as part of permission management in distributed architectures.
The concept promises to provide value especially for distributed enterprise architectures.

View File

@@ -5,4 +5,5 @@ quadrant: tools
featured: false featured: false
--- ---
At AOE we continue to use PACT but would like to use it even more. It therefore remains in the trail ring but was faded out from the overview page. At AOE we continue to use PACT but would like to use it even more.
It therefore remains in the trial ring but was faded out from the overview page.

View File

@@ -4,9 +4,12 @@ ring: trial
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
Page composing is a way to aggregate multiple independent page fragments into one combined web page. As an implementation of [Micro Frontends](methods-and-patterns/micro-frontends.html), this approach supports to deploy and run services agnostic to the technologies used per team. Page composing is a way to aggregate multiple independent page fragments into one combined web page.
As an implementation of [Micro Frontends](methods-and-patterns/micro-frontends.html), this approach supports to deploy and run services agnostic to the technologies used per team.
The concept builds upon the fact that all involved services deliver valid HTML as their output. Our solution is a small application which takes care of gathering the page fragments from all services and composing each into a defined HTML template. A configuration layer further allows controlling which fragment gets pulled from the serving instance. The concept builds upon the fact that all involved services deliver valid HTML as their output.
Our solution is a small application which takes care of gathering the page fragments from all services and composing each into a defined HTML template.
A configuration layer further allows controlling which fragment gets pulled from the serving instance.
With such a page composing application in place, teams can autonomously develop, deploy and operate their service with the freedom of choosing technologies and release strategies. With such a page composing application in place, teams can autonomously develop, deploy and operate their service with the freedom of choosing technologies and release strategies.

View File

@@ -5,5 +5,5 @@ quadrant: tools
featured: false featured: false
--- ---
Postman is now the tool of choice for API testing and widely used in our projects. We therefore moved it to the Postman is now the tool of choice for API testing and widely used in our projects.
**Adopt** level. We therefore moved it to the **Adopt** level.

View File

@@ -2,12 +2,16 @@
title: "Prometheus" title: "Prometheus"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
[Prometheus](https://prometheus.io) is an open-source monitoring and alerting system. It was the second project within the CNCF which reached the "graduated" status and has since seen a large rate of adoption across many CNCF projects. It primarily utilizes a pull-based metrics flow through HTTP which allows the easy integration of a variety of application-specific metrics sources. Compared to other monitoring systems it stands out in its simple, still powerful and fully code-based configuration and the equally powerful service discovery mechanism. [Prometheus](https://prometheus.io) is an open-source monitoring and alerting system.
It was the second project within the CNCF which reached the "graduated" status and has since seen a large rate of adoption across many CNCF projects.
It primarily utilizes a pull-based metrics flow through HTTP which allows the easy integration of a variety of application-specific metrics sources.
Compared to other monitoring systems it stands out in its simple, still powerful and fully code-based configuration and the equally powerful service discovery mechanism.
Prometheus integrates very well with Grafana which is our tool of choice for dashboard visualization. Through the [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) project, the monitoring system can be configured through Kubernetes custom resource definitions. These can be shipped by development teams alongside with their application deployments and allow [sharing responsibility](https://www.aoe.com/techradar/methods-and-patterns/shared-responsibility.html) for monitoring tasks between operations and engineering teams with a clear interface. Prometheus integrates very well with Grafana which is our tool of choice for dashboard visualization.
Through the [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator) project, the monitoring system can be configured through Kubernetes custom resource definitions.
These can be shipped by development teams alongside with their application deployments and allow [sharing responsibility](https://www.aoe.com/techradar/methods-and-patterns/shared-responsibility.html) for monitoring tasks between operations and engineering teams with a clear interface.
With [Cortex](https://cortexmetrics.io/) and [Thanos](https://thanos.io/) the Prometheus-ecosystem knows two well-settled solutions for high-availability of the underlying time series database and with [Amazon Managed Services for Prometheus](https://aws.amazon.com/en/prometheus/) there's also a SaaS-Solution available. With [Cortex](https://cortexmetrics.io/) and [Thanos](https://thanos.io/) the Prometheus-ecosystem knows two well-settled solutions for high-availability of the underlying time series database and with [Amazon Managed Services for Prometheus](https://aws.amazon.com/en/prometheus/) there's also a SaaS-Solution available.

View File

@@ -4,25 +4,18 @@ ring: assess
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
[Pulumi](https://www.pulumi.com/) is a tool in the infrastructure-as-code space [Pulumi](https://www.pulumi.com/) is a tool in the infrastructure-as-code space that is quite similar to [Terraform](https://www.terraform.io/) in that it also provide a declarative way to provision cloud infrastructure and services.
that is quite similar to [Terraform](https://www.terraform.io/) in that it also
provide a declarative way to provision cloud infrastructure and services. What makes it interesting is that all configuration is done in one of currently 4 supported general-purpose languages/runtimes:
What makes it interesting is that all configuration is done in one of currently
4 supported general-purpose languages/runtimes:
* Javascript/Typescript * Javascript/Typescript
* Python * Python
* .NET Core * .NET Core
* Go * Go
This differs from the Terraform approach which is using its own domain specific This differs from the Terraform approach which is using its own domain specific 'Terraform Configuration Language'.
'Terraform Configuration Language'. While Terraform kept this language While Terraform kept this language intentionally small and limited in functionality in order to make it purely declarative sometimes there is the need to abstract over configuration to keep your configs "DRY".
intentionally small and limited in functionality in order to make it purely For this there are modules in Terraform but sometimes all you need is a small function to iterate an input.
declarative sometimes there is the need to abstract over configuration
to keep your configs "DRY". For this there are modules in Terraform but sometimes
all you need is a small function to iterate an input.
This is where Pulumi shines by allowing you to use the powers of the chosen This is where Pulumi shines by allowing you to use the powers of the chosen programming language to build whatever abstractions you need to get the job done.
programming language to build whatever abstractions you need to get the job done.
We currently test-drive it in small projects to compare it over Terraform. We currently test-drive it in small projects to compare it over Terraform.

View File

@@ -4,17 +4,14 @@ ring: assess
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
--- ---
[Python](https://www.python.org) is an easy to learn programming language that is pre-installed on [Python](https://www.python.org) is an easy to learn programming language that is pre-installed on most Linux distributions and CI runners.
most Linux distributions and CI runners.
This makes it an ideal candidate for infrastructure glue code and adapters. This makes it an ideal candidate for infrastructure glue code and adapters.
Shell scripts serve the same purpose. But they usually start simple and get more complex over time. Shell scripts serve the same purpose.
This is the point where Python's features like testing capabilities, modularity, variable scoping and refactoring But they usually start simple and get more complex over time.
support comes in strong. We found that Python scripts are easier maintained in the long run and pose This is the point where Python's features like testing capabilities, modularity, variable scoping and refactoring support comes in strong.
a lower barrier for contributions by our development teams. And they run across platforms and shells We found that Python scripts are easier maintained in the long run and pose a lower barrier for contributions by our development teams.
without much trouble which is a big plus for developers running different operating systems. And they run across platforms and shells without much trouble which is a big plus for developers running different operating systems.
The Python language has a wide eco-system and a vast module library that can simplify scripting The Python language has a wide eco-system and a vast module library that can simplify scripting significantly.
significantly. We currently value [requests](https://pypi.org/project/requests/) for HTTP API calls We currently value [requests](https://pypi.org/project/requests/) for HTTP API calls and [Click](https://click.palletsprojects.com/en/7.x/) for simple interactive CLI scripts, along with [pytest](https://docs.pytest.org/) for automated testing.
and [Click](https://click.palletsprojects.com/en/7.x/) for simple interactive CLI scripts, along with
[pytest](https://docs.pytest.org/) for automated testing.

View File

@@ -4,7 +4,9 @@ ring: trial
quadrant: tools quadrant: tools
--- ---
[Renovate](https://github.com/renovatebot/renovate/) is an automated dependency update tool. It vastly reduces the time and effort spent on keeping a project's dependencies up-to-date by automatically creating merge requests whenever a dependency needs to be updated. The tool is easy to set up and configure, offers built-in support for monorepo architectures and works with various programming languages and package managers, e.g. [Renovate](https://github.com/renovatebot/renovate/) is an automated dependency update tool.
It vastly reduces the time and effort spent on keeping a project's dependencies up-to-date by automatically creating merge requests whenever a dependency needs to be updated.
The tool is easy to set up and configure, offers built-in support for monorepo architectures and works with various programming languages and package managers, e.g.
- JavaScript & Yarn - JavaScript & Yarn
- Java & Gradle - Java & Gradle

View File

@@ -13,7 +13,7 @@ Since every memory-allocation is directly released after it can't be used anymor
C/C++ code/libraries can be integrated by its [binding generator tool](https://github.com/rust-lang/rust-bindgen). C/C++ code/libraries can be integrated by its [binding generator tool](https://github.com/rust-lang/rust-bindgen).
At stackoverflow it is votes 5 years in a row ([2016](https://insights.stackoverflow.com/survey/2016#technology-most-loved-dreaded-and-wanted), [2017](https://insights.stackoverflow.com/survey/2017#technology-_-most-loved-dreaded-and-wanted-languages), [2018](https://insights.stackoverflow.com/survey/2018#technology-_-most-loved-dreaded-and-wanted-languages), [2019](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages), [2020](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved)) for the `most loved programming-language` by programmers. At stackoverflow it is votes 5 years in a row ([2016](https://insights.stackoverflow.com/survey/2016#technology-most-loved-dreaded-and-wanted), [2017](https://insights.stackoverflow.com/survey/2017#technology-_-most-loved-dreaded-and-wanted-languages), [2018](https://insights.stackoverflow.com/survey/2018#technology-_-most-loved-dreaded-and-wanted-languages), [2019](https://insights.stackoverflow.com/survey/2019#technology-_-most-loved-dreaded-and-wanted-languages), [2020](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved)) for the `most loved programming-language` by programmers.
The [popularity](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved) is growing continuous. The [popularity](https://insights.stackoverflow.com/survey/2020#technology-most-loved-dreaded-and-wanted-languages-loved) is growing continuous.
With it's memory-safety/efficiency and energy-efficiency it helps to save money for bug-fixing, energy and cloud-computing. With it's memory-safety/efficiency and energy-efficiency it helps to save money for bug-fixing, energy and cloud-computing.

View File

@@ -6,12 +6,9 @@ quadrant: languages-and-frameworks
--- ---
RX/JS aka reactive streams RX/JS aka reactive streams
RxJS is an implementation for the reactive programming paradigm which implements mostly the observer and iterator RxJS is an implementation for the reactive programming paradigm which implements mostly the observer and iterator pattern and follows the functional programming ideas.
pattern and follows the functional programming ideas. The pattern actually got a renaissance because it's not completely The pattern actually got a renaissance because it's not completely new but has new implementations in many frameworks and languages like Angular, Akka, Spring and many more.
new but has new implementations in many frameworks and languages like Angular, Akka, Spring and many more. Reason for Reason for that attention actually is (in the JavaScript world), that observables can be cancelled (by rules too) and observables can pass (stream) data on multiple events.
that attention actually is (in the javascript world), that observables can be cancelled (by rules too) and observables Both aspects are not well realizable using promises e.g. and both were also detected as a huge limitation in the JavaScript community — and so it's worth to get an understanding for reactive programming in general.
can pass (stream) data on multiple events. Both aspects are not well realizable using promises e.g. and both were also
detected as a huge limitation in the JavaScript community — and so it's worth to get an understanding for reactive
programming in general.
We at AOE actually use RxJS in combination with Angular and can fully recommend the approach of observables. We at AOE actually use RxJS in combination with Angular and can fully recommend the approach of observables.

View File

@@ -5,11 +5,9 @@ quadrant: "languages-and-frameworks"
featured: true featured: true
--- ---
[Scala 3](https://docs.scala-lang.org/scala3/) is the successor of the Scala 2.x [Scala 3](https://docs.scala-lang.org/scala3/) is the successor of the Scala 2.x series programming language.
series programming language.
It's not just a small iteration on Scala 2 but a complete overhaul of the It's not just a small iteration on Scala 2 but a complete overhaul of the language trying to improve in several areas like:
language trying to improve in several areas like:
* Syntax * Syntax
* "quiet" syntax for control structures like `if`, `while` and `for` * "quiet" syntax for control structures like `if`, `while` and `for`
* optional `new` operator * optional `new` operator
@@ -30,8 +28,6 @@ language trying to improve in several areas like:
* Improvements for object oriented design * Improvements for object oriented design
* Completely new metaprogramming facilities while Scala 2 macros were removed * Completely new metaprogramming facilities while Scala 2 macros were removed
Even with these big changes Scala 3 provides a great compatibility story supporting Even with these big changes Scala 3 provides a great compatibility story supporting Scala >2.13.5 libraries in Scala 3 projects and vice versa.
Scala >2.13.5 libraries in Scala 3 projects and vice versa.
Although slowly we will update our existing Scala 2 codebase to Scala 3 over the Although slowly we will update our existing Scala 2 codebase to Scala 3 over the next months and years to take advantage of the improvements made.
next months and years to take advantage of the improvements made.

View File

@@ -6,6 +6,7 @@ featured: false
--- ---
[Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html) is a scheme for specifying a software's version. [Semantic Versioning 2.0](https://semver.org/spec/v2.0.0.html) is a scheme for specifying a software's version.
As the de facto standard, this is widely used and established in all areas of software development. It offers a clear way of communicating changes over the lifetime of the software being developed. As the de facto standard, this is widely used and established in all areas of software development.
It offers a clear way of communicating changes over the lifetime of the software being developed.
Especially in large-scale projects with many components being dependent on each other, it is important to use unambiguous communication across teams. Especially in large-scale projects with many components being dependent on each other, it is important to use unambiguous communication across teams.

View File

@@ -2,7 +2,8 @@
title: "Shared Responsibility Model" title: "Shared Responsibility Model"
ring: trial ring: trial
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
Since introducing "Platform Engineering Team" who build, maintain and operate our Kubernetes clusters and other related platform services, the question occurs who is in charge of the various tasks like keeping things up and running, applying critical security fixes, update software in general, keeping an eye on the bill and many more topics. We're not proposing a solution on how to split responsibilities here, but we want to raise awareness for bringing everybody together and formally discuss all responsibilities and write them down similar to (and possibly extending) AWS's [shared responsibility model](https://aws.amazon.com/compliance/shared-responsibility-model/).
Some of the topics include: 24/7 on-call support, broken deployment pipelines, and vulnerability scans. Since introducing "Platform Engineering Team" who build, maintain and operate our Kubernetes clusters and other related platform services, the question occurs who is in charge of the various tasks like keeping things up and running, applying critical security fixes, update software in general, keeping an eye on the bill and many more topics.
We're not proposing a solution on how to split responsibilities here, but we want to raise awareness for bringing everybody together and formally discuss all responsibilities and write them down similar to (and possibly extending) AWS's [shared responsibility model](https://aws.amazon.com/compliance/shared-responsibility-model/).
Some topics are 24/7 on-call support, broken deployment pipelines, and vulnerability scans.

View File

@@ -2,9 +2,13 @@
title: "Sitespeed.io" title: "Sitespeed.io"
ring: assess ring: assess
quadrant: tools quadrant: tools
--- ---
Web Performance Monitoring is the process of measuring a Web services ability to respond efficiently to user interactions. Data gathered through monitoring helps analyze performance bottlenecks, plan improvements, and measure a site's responsiveness. Web Performance Monitoring is the process of measuring a Web services ability to respond efficiently to user interactions.
Data gathered through monitoring helps analyze performance bottlenecks, plan improvements, and measure a site's responsiveness.
[Sitespeed.io](https://www.sitespeed.io/) is a set of Open Source tools that makes it easy to monitor and measure the performance of a website. It tests websites using real (or headless) browsers, simulating users connectivity and collecting important user-centric metrics. The tools are packaged as a docker image that can be easily deployed. Data collected can be saved to different locations for later analysis which makes it easy to track changes. Last, Sitespeed.io can be used as part of a continuous integration pipeline or as part of a monitoring solution. [Sitespeed.io](https://www.sitespeed.io/) is a set of Open Source tools that makes it easy to monitor and measure the performance of a website.
It tests websites using real (or headless) browsers, simulating users connectivity and collecting important user-centric metrics.
The tools are packaged as a docker image that can be easily deployed.
Data collected can be saved to different locations for later analysis which makes it easy to track changes.
Last, Sitespeed.io can be used as part of a continuous integration pipeline or as part of a monitoring solution.

View File

@@ -2,13 +2,13 @@
title: "State Management Pattern" title: "State Management Pattern"
ring: adopt ring: adopt
quadrant: methods-and-patterns quadrant: methods-and-patterns
--- ---
State Management is a design pattern with the goal of properly sharing state data across components and separating domain representation from state management. State Management is a design pattern with the goal of properly sharing state data across components and separating domain representation from state management.
This pattern is applied by many popular web frameworks such as [Vuex](/languages-and-frameworks/vuex.html), [Redux](/languages-and-frameworks/redux.html) or [Flux](/methods-and-patterns/flux.html). This pattern is applied by many popular web frameworks such as [Vuex](/languages-and-frameworks/vuex.html), [Redux](/languages-and-frameworks/redux.html) or [Flux](/methods-and-patterns/flux.html).
Especially in [reactive](/methods-and-patterns/reactive-programming.html) systems, this pattern helps to solve the task of maintaining decoupled, stateless components with immutable data. The ways of implementing state management differs and depends on the specific requirements of the application at hand. Especially in [reactive](/methods-and-patterns/reactive-programming.html) systems, this pattern helps to solve the task of maintaining decoupled, stateless components with immutable data.
The ways of implementing state management differs and depends on the specific requirements of the application at hand.
For distributed backend systems one might want to utilize [Akka's](/languages-and-frameworks/akka.html) cluster sharding module to elastically manage domain object states. For distributed backend systems one might want to utilize [Akka's](/languages-and-frameworks/akka.html) cluster sharding module to elastically manage domain object states.

View File

@@ -2,14 +2,14 @@
title: "Storybook" title: "Storybook"
ring: adopt ring: adopt
quadrant: tools quadrant: tools
--- ---
In recent years, Storybook has become the de facto standard for creating UI components in isolation. In recent years, Storybook has become the de facto standard for creating UI components in isolation.
We have been using Storybook in many projects for quite some time now and really loving the approach. We have been using Storybook in many projects for quite some time now and really loving the approach.
With version 6, the config has been greatly simplified to achieve the goal of a zero-config approach in the future. With version 6, the config has been greatly simplified to achieve the goal of a zero-config approach in the future.
* compatible and easy to integrate with major frameworks like react, angular, vue ... * compatible and easy to integrate with major frameworks like React, Angular, Vue.js ...
* presets for Create React App, Next.js, nuxt ... * presets for Create React App, Next.js, nuxt ...
* build in typescript support * build in TypeScript support
* build in addons like controls, actions, docs ... * build in addons like controls, actions, docs ...
* growing library of third party addons * growing library of third party addons

View File

@@ -2,14 +2,15 @@
title: "Strapi" title: "Strapi"
ring: trial ring: trial
quadrant: tools quadrant: tools
--- ---
Strapi is a headless CMS built with Javascript on Node.js. Its data-centered approach offers great flexibility for many use cases by integrating with the available APIs. Strapi is a headless CMS built with Javascript on Node.js.
Its data-centered approach offers great flexibility for many use cases by integrating with the available APIs.
Strapi's API comes in a RESTful and [GraphQL](/methods-and-patterns/graphql.html) variant. Strapi's API comes in a RESTful and [GraphQL](/methods-and-patterns/graphql.html) variant.
Both perfectly support the [API-first design approach](/methods-and-patterns/api-first-design-approach.html). Both perfectly support the [API-first design approach](/methods-and-patterns/api-first-design-approach.html).
Ever since the stable release version 3.0.0 from mid-2020, the CMS reached market maturity and offers a good choice for scalable headless CMSs. As of the 3.6 release in April 2021, Strapi features [full internationalization support](https://strapi.io/blog/announcing-content-internationalization-v3-6), making it a viable candidate to be evaluated toe to toe with solutions like Drupal. Ever since the stable release version 3.0.0 from mid-2020, the CMS reached market maturity and offers a good choice for scalable headless CMSs.
As of the 3.6 release in April 2021, Strapi features [full internationalization support](https://strapi.io/blog/announcing-content-internationalization-v3-6), making it a viable candidate to be evaluated toe to toe with solutions like Drupal.
At AOE we are evaluating Strapi for various projects, appreciating its straightforward installation, setup, and use by editors in lieu of more heavy-weight solutions used in the past. At AOE we are evaluating Strapi for various projects, appreciating its straightforward installation, setup, and use by editors in lieu of more heavy-weight solutions used in the past.

View File

@@ -2,8 +2,8 @@
title: "Tailwind CSS" title: "Tailwind CSS"
ring: trial ring: trial
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
Tailwind CSS is a framework that heavily utilizes CSS classes. Tailwind CSS is a framework that heavily utilizes CSS classes.
What seems to be a very different approach in the beginning, turns into a big "ah-ha-moment" during development and even more during the build step. What seems to be a very different approach in the beginning, turns into a big "ah-ha-moment" during development and even more during the build step.
CSS classes are entirely generated based on a configuration file that outlines the entire design system including states, nuances, etc. CSS classes are entirely generated based on a configuration file that outlines the entire design system including states, nuances, etc.
@@ -18,6 +18,5 @@ These projects have a huge demand on a variety of interaction forms.
Tailwind helps us to fulfil modern user expectations by reducing the complexity of sophisticated industrial processes with a multi-device approach. Tailwind helps us to fulfil modern user expectations by reducing the complexity of sophisticated industrial processes with a multi-device approach.
This is an unspoken expectation of today's operators of industrial processes. The evolution from classic This is an unspoken expectation of today's operators of industrial processes.
cellular phones towards smartphones showed, there is still a huge untapped potential for usability improvements and The evolution from classic cellular phones towards smartphones showed, there is still a huge untapped potential for usability improvements and adaptive processes, that reduce complexity especially the industry 4.0 field.
adaptive processes, that reduce complexity especially the industry 4.0 field.

View File

@@ -5,8 +5,7 @@ quadrant: methods-and-patterns
--- ---
A team start page helps (new) members to orientate themselves. A team start page helps (new) members to orientate themselves.
It normally displays all team members with their roles and contact data as well as a It normally displays all team members with their roles and contact data as well as a collection of links to the necessary tools, e.g.
collection of links to the necessary tools, e.g.
* Project environments (staging, prod, ...) * Project environments (staging, prod, ...)
* Project development setup * Project development setup

View File

@@ -2,7 +2,6 @@
title: "Vue.js" title: "Vue.js"
ring: adopt ring: adopt
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
--- ---
Updated to "adopt". Updated to "adopt".