docs: tag blips with related academy trainings

This commit is contained in:
Stefan Rotsch
2024-05-03 11:11:36 +02:00
committed by Stefan Rotsch
parent e5738950cf
commit 291dfd138b
11 changed files with 77 additions and 78 deletions

View File

@@ -2,16 +2,17 @@
title: "Go / Golang" title: "Go / Golang"
ring: assess ring: assess
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
tags: [academy training, coding]
--- ---
2016 was the year of Go, with a lot of Open Source projects gaining a lot of attention and many companies started to use it. 2016 was the year of Go, with many open-source projects gaining significant attention, and numerous companies started to adopt it.
Go went from #54 to #13 on the [TIOBE index](http://www.tiobe.com/tiobe-index/) in January 2017, and it became the TIOBE programming language of the year 2016. Go jumped from #54 to #13 on the [TIOBE index](http://www.tiobe.com/tiobe-index/) in January 2017, earning the title of TIOBE programming language of the year 2016.
Here at AOE, we use several services written in Go on a daily basis, such as Mattermost, Docker, Consul and Kubernetes. Also, more and more applications, such as GitLab, incorporate Go-based services to "off load" heavy work. Here at AOE, we rely on several services written in Go on a daily basis, such as Mattermost, Docker, Consul, and Kubernetes. Moreover, more and more applications, like GitLab, are incorporating Go-based services to handle heavy workloads.
Go, as a programming language, has some very interesting features such as native support for concurrency (go routines), static compiled binaries with a very small memory footprint, cross compiling and much more. A big advantage of Go is the very flat learning curve, which allows developers from more dynamic languages such as PHP to be proficient in a very short time. Go, as a programming language, offers several compelling features, including native support for concurrency (goroutines), statically compiled binaries with a minimal memory footprint, cross-compiling, and more. One significant advantage of Go is its shallow learning curve, enabling developers from more dynamic languages such as PHP to become proficient in a short time.
If you want to get a feeling for Go, you should start with the [online tour](https://tour.golang.org/welcome/1), within a day you'll have a good understanding of the core concepts, syntax, etc. - that is also because the language often tries to provide only one simple way of doing things; an example for this is that code formatting and styling is defined (yet not enforced as in Python). Part of this is also that Go itself is very opinionated: So, for example, for object oriented programming in Go, composition is the preferred way of defining data structures, and some might miss advanced concepts such as inheritance. If you're interested in getting a feel for Go, you should start with the [online tour](https://tour.golang.org/welcome/1). Within a day, you'll gain a good understanding of the core concepts, syntax, etc. This is partly because the language often provides only one simple way of doing things; an example of this is the defined code formatting and styling (though not enforced as in Python). Additionally, Go itself is very opinionated; for instance, composition is the preferred way of defining data structures for object-oriented programming in Go, and some developers may miss advanced concepts such as inheritance.
We currently use Go for projects and microservices where we need flexibility and performance. Currently, we use Go for projects and microservices where we require flexibility and performance.

View File

@@ -2,8 +2,9 @@
title: "Kubernetes" title: "Kubernetes"
ring: assess ring: assess
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
tags: [academy training, devops]
--- ---
Kubernetes is a container orchestration platform, which supports many infrastructure providers. It allows you to deploy containers and takes care of running, scaling or self-healing your applications based on configurations you provide. It's based on years of knowledge and experience Google gained by using containers. Kubernetes is a container orchestration platform that supports many infrastructure providers. It enables you to deploy containers and manages the running, scaling, or self-healing of your applications based on configurations you provide. It is built on years of knowledge and experience gained by Google through its use of containers.
At AOE, we started Kubernetes in a test environment on bare metal to experiment with it. It's currently used for running AOE internal apps such as dashboards as well as running builds in containers. We also started to use it for upcoming projects to run and manage several services. There are Tools to automate the setup of kubernetes in AWS like [Cops](https://kubernetes.io/docs/getting-started-guides/kops/). Another helpful tool is [Minikube](https://github.com/kubernetes/minikube), which allows to test and run kubernetes locally. At AOE, we initially implemented Kubernetes in a test environment on bare metal to experiment with its capabilities. Currently, it is utilized for running internal AOE applications such as dashboards and for running builds in containers. We have also begun using it for upcoming projects to manage several services. There are tools available to automate the setup of Kubernetes in AWS, such as [Cops](https://kubernetes.io/docs/getting-started-guides/kops/). Another helpful tool is [Minikube](https://github.com/kubernetes/minikube), which allows for testing and running Kubernetes locally.

View File

@@ -2,17 +2,16 @@
title: "Strategic Domain Driven Design" title: "Strategic Domain Driven Design"
ring: adopt ring: adopt
quadrant: methods-and-patterns quadrant: methods-and-patterns
tags: [architecture] tags: [academy training, architecture]
--- ---
Design of distributed applications need to be done wisely. Strategic Domain Driven Design is an approach for modelling large-scale applications and systems and is introduced in the last part of Eric Evans' book _**Domain Driven Design**_. Designing distributed applications needs to be done wisely. Strategic Domain-Driven Design (DDD) is an approach for modeling large-scale applications and systems, introduced in the last part of Eric Evans' book *Domain-Driven Design*.
Domain driven design is a well-known pattern family and has been established at AOE for quite some time now. Unlike Domain Driven Design, which focuses on the tactical design in an application, strategic domain driven design is an approach that is very helpful for the high-level strategic design of an application and distributed software architecture. Domain-driven design is a well-known pattern family that has been established at AOE for quite some time now. Unlike Domain-Driven Design, which focuses on the tactical design in an application, strategic Domain-Driven Design is an approach that is very helpful for the high-level strategic design of an application and distributed software architecture.
It is a pattern family focused on using and defining Bounded Context and thinking explicitly of the different relationship patterns and the required "translation" of similar "concepts" between the bounded contexts. It is helpful to argue and find a good strategic architecture in alignment with the requirements, the domain and by considering Conway's Law. It is a pattern family focused on using and defining Bounded Context and thinking explicitly about the different relationship patterns and the required "translation" of similar "concepts" between the bounded contexts. It is helpful to argue and find a good strategic architecture in alignment with the requirements, the domain, and by considering Conway's Law. A context map and a common conceptual core help to understand and improve the overall strategic picture. Especially with the Microservice approach, it is important to define and connect services following the high cohesion - low coupling principles by identifying fitting bounded contexts.
A context map and a common conceptional core help to understand and improve the overall strategic picture. Especially with the [Microservice](/methods-and-patterns/microservices/) approach, it is important to define and connect services following the low coupling - high cohesion principles by idendifying fitting bounded contexts.
The following chart gives an overview of possible relationships between bounded contexts: The following chart gives an overview of possible relationships between bounded contexts:
![strategic-domain-driven-design-relationships](/images/strategic-domain-driven-design-relationships.png) ![strategic-domain-driven-design-relationships](/images/strategic-domain-driven-design-relationships.png)
While we have found that this approach is especially useful in designing distributed systems and applications with [microservices](/methods-and-patterns/microservices/), we have also extended this approach to provide guidelines for general enterprise architectures. While we have found that this approach is especially useful in designing distributed systems and applications with microservices, we have also extended this approach to provide guidelines for general enterprise architectures.

View File

@@ -2,7 +2,10 @@
title: "Go / Golang" title: "Go / Golang"
ring: trial ring: trial
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
tags: [academy training, coding]
--- ---
We have moved Go to Trial because multiple teams have used Go with success for different services and tools. We have decided to trial Go because multiple teams have successfully used it for various services and tools.
The learning curve and productivity have proven to be immense and we are convinced that this language will find more adoption in other teams.
The learning curve and productivity have proven to be significant, and we are convinced that this language will gain
more adoption in other teams.

View File

@@ -2,12 +2,13 @@
title: "Kubernetes" title: "Kubernetes"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
tags: [devops] tags: [academy training, devops]
--- ---
Kubernetes has developed into the quasi-standard for container orchestration: Nearly every cloud provider provides managed Kubernetes, and even Docker Enterprise uses Kubernetes. Kubernetes has evolved into the quasi-standard for container orchestration: Nearly every cloud provider offers managed Kubernetes, and even Docker Enterprise utilizes Kubernetes.
We are running several production systems with Kubernetes and we are using it in concepts such as:
* "secrets" and "configmaps" to manage configurations for the applications. By updating these resources with an automated configuration pipeline you have a great method for configuration management. We run several production systems with Kubernetes and employ it in concepts such as:
* Autoscaling of Kubernetes nodes and the usage of "horizontal pod scaling" inside Kubernetes allows elastic scaling - Utilizing "secrets" and "configmaps" to manage configurations for applications. By updating these resources with an automated configuration pipeline, you have an excellent method for configuration management.
* The support of managing permissions with OAuth allows you to secure Kubernetes with [Keycloak](/tools/keycloak/) (SSO) - Implementing autoscaling of Kubernetes nodes and utilizing "horizontal pod scaling" within Kubernetes allows for elastic scaling.
* Kubernetes extensibility and API can be used for automation and customization. There is a growing ecosystem around extensions, which adds additional features. - Leveraging support for managing permissions with OAuth, enabling you to secure Kubernetes with [Keycloak](/tools/keycloak/) (SSO).
- Utilizing Kubernetes' extensibility and API for automation and customization. There is a growing ecosystem around extensions, which adds additional features.

View File

@@ -2,10 +2,9 @@
title: "Terraform" title: "Terraform"
ring: trial ring: trial
quadrant: tools quadrant: tools
tags: [academy training, devops]
--- ---
For the infrastructure of our OM3 projects we run multiple Kubernetes clusters, and to orchestrate the infrastructure provisioning we quickly decided to go with Terraform. For the infrastructure of our OM3 projects, we operate multiple Kubernetes clusters, and to orchestrate the infrastructure provisioning, we quickly decided to use Terraform. Terraform enables us to easily manage our infrastructure, from AWS EC2 instances to RabbitMQ message queues. Additionally, the Kops installer for Kubernetes on AWS utilizes Terraform as its main building block, and we can trigger Kops via Terraform.
Terraform allows us to easily manage our infrastructure, from AWS EC2 instances to RabbitMQ message queues.
Also, the Kops installer for Kubernetes on AWS uses Terraform as its main building brick, and we can trigger Kops via Terraform.
We bring terraform together with [Helm](/platforms-and-aoe-services/helm/) to manage similar parts of the infrastructure, for example a shared file with domain name to application mappings allows us to provision Route 53 DNS entries via Terraform and then roll out Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm. We combine Terraform with [Helm](/platforms-and-aoe-services/helm/) to manage similar parts of the infrastructure. For example, a shared file with domain name to application mappings allows us to provision Route 53 DNS entries via Terraform and then deploy Kubernetes Ingress definitions with the appropriate hostname to service mapping via Helm.

View File

@@ -2,26 +2,26 @@
title: "Cypress" title: "Cypress"
ring: assess ring: assess
quadrant: tools quadrant: tools
tags: [frontend, quality assurance] tags: [academy training, frontend, quality assurance]
--- ---
[Cypress](https://www.cypress.io/) is a front-end testing tool (E2E). It comes as a simple node package and is therefore easy to use and maintain for front-end developers and testers. Cypress has a different approach than Selenium. It runs in the browser and in the same loop as the device under test. [Cypress](https://www.cypress.io/) is a front-end testing tool (E2E). It comes as a simple node package, making it easy to use and maintain for front-end developers and testers. Cypress has a different approach than Selenium; it runs in the browser and in the same loop as the device under test.
Good: **Good:**
* [Open source](https://github.com/cypress-io/cypress) * [Open source](https://github.com/cypress-io/cypress)
* [Locally installed](https://docs.cypress.io/guides/getting-started/installing-cypress.html#System-requirements) * [Locally installed](https://docs.cypress.io/guides/getting-started/installing-cypress.html#System-requirements)
* Straightforward (installed via npm and all tests are written in Javascript) * Straightforward (installed via npm, and all tests are written in JavaScript)
* Good [documentation](https://docs.cypress.io/guides/overview/why-cypress.html#In-a-nutshell) and learning material * Good [documentation](https://docs.cypress.io/guides/overview/why-cypress.html#In-a-nutshell) and learning materials
* Can run in a [headless mode](https://docs.cypress.io/guides/guides/command-line.html#cypress-run) * Can run in a [headless mode](https://docs.cypress.io/guides/guides/command-line.html#cypress-run)
Not so good: **Not so good:**
* No cross browser testing (only Chrome and Electron) * No cross-browser testing (only Chrome and Electron)
* Scenarios with multiple browser tabs cannot be tested * Scenarios with multiple browser tabs cannot be tested
* Relatively new test tool, though it is becoming more popular * Relatively new test tool, although it is becoming more popular
Example of a test : **Example of a test:**
```js ```js
describe('My First Test', function() { describe('My First Test', function() {

View File

@@ -2,38 +2,34 @@
title: "Flamingo" title: "Flamingo"
ring: adopt ring: adopt
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
tags: [coding] tags: [academy training, coding]
--- ---
Flamingo is a high productivity go based framework for rapidly building fast and pluggable web projects. Flamingo is a high productivity Go-based framework for rapidly building fast and pluggable web projects. It is used to construct scalable and maintainable (web) applications.
It is used to build scalable and maintainable (web)applications.
Flamingo is: Flamingo is:
* open source - Open source
* written in go - Written in Go
* easy to learn - Easy to learn
* fast and flexible - Fast and flexible
Go as simple, powerful and typesafe language is great to implement and scale serverside logic. Go, as a simple, powerful, and typesafe language, is excellent for implementing and scaling server-side logic. Flamingo has a clean architecture with clear dependencies in mind and offers typical features and support for modern web applications:
Flamingo has a clean architecture with clear dependencies in mind and offers a typical features and support for nowadays web applications:
* Powerful Templating Engines, e.g. support for Pug templates with reusable mixins and lightweight scripting. - Powerful templating engines, e.g., support for Pug templates with reusable mixins and lightweight scripting.
* Configuration concepts using yml and support for multiple areas and contexts - Configuration concepts using YAML and support for multiple areas and contexts.
* Powerful Dependency Injection - Powerful dependency injection.
* A Module concept for building modular and pluggable applications - A module concept for building modular and pluggable applications.
* Authentication concepts and security middleware - Authentication concepts and security middleware.
* Flexible routing with support for prefix routes and reverse routing - Flexible routing with support for prefix routes and reverse routing.
* Web Controller Support with: Request / Response / Form Handling etc - Web controller support with Request/Response/Form Handling, etc.
* Operational Readiness: Logging, (distributed) Tracing, Metrics and Healthchecks with separate endpoint - Operational readiness: Logging, (distributed) Tracing, Metrics, and Healthchecks with separate endpoints.
* Localisation - Localization.
* Commands - Commands.
* Session Handling and Management - Session handling and management.
* GraphQL support and therefore support to build nice SPA and PWAs on top of it - GraphQL support and, therefore, support to build nice SPAs and PWAs on top of it.
* Resilience and Caching for external APIs calls. - Resilience and caching for external API calls.
Flamingo itself does not contain ORM Mapper or libraries - instead it emphasizes ["ports and adapters"](/methods-and-patterns/ports-and-adapters/) architecture - so that you have a technology free (domain) model and any possible (and replaceable) persistence behind it. Flamingo itself does not contain an ORM mapper or libraries. Instead, it emphasizes a "ports and adapters" architecture so that you have a technology-free (domain) model and any possible (and replaceable) persistence behind it. This makes Flamingo useful for building microservices and applications, especially for constructing "frontends" or portals that require interaction with other (micro)services in a distributed architecture. By adhering to the architectural recommendation, you can build modular applications with replaceable adapters that provide independent testability.
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.
With **"Flamingo Commerce"** there is an additional active projects that offer rich and flexible features to build modern e-commerce applications. With **"Flamingo Commerce,"** there is an additional active project that offers rich and flexible features to build modern e-commerce applications.

View File

@@ -2,7 +2,7 @@
title: "Go / Golang" title: "Go / Golang"
ring: adopt ring: adopt
quadrant: languages-and-frameworks quadrant: languages-and-frameworks
tags: [coding] tags: [academy training, coding]
--- ---
We have moved Go to "adopt". We have moved Go to "adopt".

View File

@@ -2,16 +2,13 @@
title: "Terraform" title: "Terraform"
ring: adopt ring: adopt
quadrant: platforms-and-aoe-services quadrant: platforms-and-aoe-services
tags: [devops] tags: [academy training, devops]
--- ---
[Terraform](https://www.terraform.io/) is a tool for building, changing and versioning infrastructure using the infrastructure as code pattern. [Terraform](https://www.terraform.io/) is a tool for building, changing, and versioning infrastructure using the infrastructure as code pattern. Terraform supports popular service providers like AWS, Google Cloud Platform, Azure, and many more.
Terraform supports popular service providers like AWS, Google Cloud Platform, Azure and many more.
Infrastructure is described in configuration files through the HCL (HashiCorp Configuration Language), which brings a set of string interpolations and built-in functions, Infrastructure is described in configuration files through the HCL (HashiCorp Configuration Language), which offers a set of string interpolations and built-in functions, including conditionals and loops. Terraform validates configuration files before attempting to run updates, checking not only that all files use the correct syntax, but also that all parameters are accessible and the configuration as a whole is valid. In Terraform, you can (and should) run a 'plan' step before applying any changes. This step precisely outlines what is going to change and why.
including conditionals and loops. Terraform validates configuration files before trying to run updates. It checks not only that all files use the correct syntax,
but also that all parameters are accessible and the configuration as a whole is valid. In Terraform, you can (and should) run a plan step before applying any changes.
This step tells you precisely what is going to change and why.
Another feature of Terraform is that it makes it easy to reuse code by using modules. That gives a lot of leeway in structuring projects in the way it makes most sense.
Here at AOE we use terraform in multiple teams to provision infrastructure and manage their lifecycle on cloud platforms such as AWS and for platforms such as Kubernetes. Another feature of Terraform is its facilitation of code reuse through modules. This allows for a lot of flexibility in structuring projects in the way that makes the most sense.
Here at AOE, we utilize Terraform across multiple teams to provision infrastructure and manage its lifecycle on cloud platforms such as AWS, as well as for platforms such as Kubernetes.

View File

@@ -2,10 +2,12 @@
title: "Cypress" title: "Cypress"
ring: adopt ring: adopt
quadrant: tools quadrant: tools
tags: [academy training, frontend, quality assurance]
--- ---
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
With its support for JavaScript and TypeScript, Cypress is a testing tool that strongly relates to front-end developers. that strongly resonates with front-end developers. It is very easy to adopt, and the test specifications are easy to
It is very easy to adopt, and the test specifications are easy to implement and to maintain. implement and maintain. Test execution is swift, and the results are well-documented, understandable, and easy to
Test execution is very fast, and the results are well documented, understandable and easy to publish, e.g. via GitLab Pages. publish, for example, via GitLab Pages.
It currently supports Chrome, Firefox and Electron.
Currently, it supports Chrome, Firefox, and Electron.