diff --git a/radar/2023-01-31/artificial-intelligence.md b/radar/2023-01-31/artificial-intelligence.md index f91a3aa..6e3fa8a 100644 --- a/radar/2023-01-31/artificial-intelligence.md +++ b/radar/2023-01-31/artificial-intelligence.md @@ -4,7 +4,7 @@ ring: assess quadrant: concepts-and-methods --- -Unter Artificial Intellgence (AI) versteht man menschliches Lernen und Denken auf Computer zu übertragen. Mit +Unter Artificial Intelligence (AI) versteht man menschliches Lernen und Denken auf Computer zu übertragen. Mit [GPT-3][gpt-3], [DALL-E][dall-e] und [Stable Diffusion][stable-diff] wurden im letzten Jahr Deep-Learning-Modelle entwickelt, die bereits so ausgereift sind, dass darauf Produkte entwickelt werden können. AI wird in Zukunft mit Sicherheit eine grosse Rolle in der Digitalisierung spielen. Als Inventage wollen wir herausfinden, was diese diff --git a/radar/2023-01-31/hybride-mobile-applikationen.md b/radar/2023-01-31/hybride-mobile-applikationen.md index 6b592de..335fa78 100644 --- a/radar/2023-01-31/hybride-mobile-applikationen.md +++ b/radar/2023-01-31/hybride-mobile-applikationen.md @@ -1,5 +1,5 @@ --- -title: Hybride Mobile Applikationen +title: Hybride mobile Applikationen ring: trial quadrant: concepts-and-methods --- diff --git a/radar/2023-01-31/kotlin.md b/radar/2023-01-31/kotlin.md index 72643b7..76c63b6 100644 --- a/radar/2023-01-31/kotlin.md +++ b/radar/2023-01-31/kotlin.md @@ -6,18 +6,19 @@ quadrant: libraries-frameworks-and-languages [Kotlin][kotlin] ist eine statisch typisierte Programmiersprache, die Konzepte aus der objektorientierten und der funktionalen Programmierung vereint, und viele moderne Sprachfeatures mitbringt. Kotlin-Code wird vom Compiler in -Bytecode für die JVM übersetzt,1 wobei eine grösstmögliche Interoperabilität2 beider Sprachen gewährleistet wird. -Dadurch lassen sich in Kotlin Java-Libraries und -Frameworks problemlos weiterverwenden, womit bestehendes Knowhow für -den Java-Programmierer keinesfalls obsolet wird. Diese Interoperabilität erlaubt auch die Integration von Kotlin in -bestehende Java-Projekte, womit sich Applikationen schrittweise modernisieren lassen. +Bytecode für die JVM übersetzt,1 wobei eine grösstmögliche Interoperabilität2 beider Sprachen +gewährleistet wird. Dadurch lassen sich in Kotlin Java-Libraries und -Frameworks problemlos weiterverwenden, womit +bestehendes Knowhow für den Java-Programmierer keinesfalls obsolet wird. Diese Interoperabilität erlaubt auch die +Integration von Kotlin in bestehende Java-Projekte, womit sich Applikationen schrittweise modernisieren lassen. Java als Plattform, auf die wir auch in Zukunft setzen möchten, hat sich für Enterprise-Applikationen über viele Jahre bestens bewährt. Durch das Commitment zur Rückwärtskompatibilität sind der Modernisierung von Java als Programmiersprache jedoch enge Grenzen gesteckt. Genau hier sehen wir grosses Potenzial in Kotlin, das beide Welten — bewährte Plattform und moderne Programmiersprache — in sich vereinen kann. -___ -1 Neben JVM-Bytecode kann Kotlin auch nach JavaScript oder nativen Programmdateien (MacOS, Windows, Linux) übersetzt werden.
+___ +1 Neben JVM-Bytecode kann Kotlin auch nach JavaScript oder nativen Programmdateien (MacOS, Windows, +Linux) übersetzt werden.
2 Kotlin-Code kann Java-Code aufrufen und umgekehrt. [kotlin]: https://kotlinlang.org diff --git a/radar/2023-01-31/microservice-architektur.md b/radar/2023-01-31/microservice-architektur.md index 915ebf7..4bb1e52 100644 --- a/radar/2023-01-31/microservice-architektur.md +++ b/radar/2023-01-31/microservice-architektur.md @@ -4,9 +4,9 @@ ring: adopt quadrant: concepts-and-methods --- -[Microservices][microservices] sind ein Architekturstil, bei dem eine Anwendung als Sammlung kleiner, unabhängiger +[Microservices][microservices] sind ein Architekturstil, bei dem eine Anwendung als Sammlung unabhängiger Dienste entwickelt wird, die zusammenarbeiten, um eine übergreifende Funktionalität anzubieten. Die einzelnen -spezialisierten Dienste kommunizieren miteinander über Netzwerkaufrufe. +spezialisierten Dienste kommunizieren miteinander über ein Nachrichtensystem, wie zum Beispiel [Kafka][kafka]. Bei Inventage erweitern wir die Definition von Microservices auf das Frontend. Ein Microservice besteht sowohl aus Micro-Backend, als auch aus [Micro-Frontend][martinfowler]. Mit den Micro-Frontends werden unabhängig voneinander @@ -19,7 +19,7 @@ der Anwendung. Die Applikation lässt sich erweitern, indem neue Microservices e Architektur integriert werden. Unsere Erfahrung zeigt aber auch, dass Microservices bei der Entwicklung und Wartung zu einer erhöhten Komplexität -führen. Einerseits aufgrund der Kommunikation der einzelnen Services über Netzwerkaufrufe, die möglicherweise die +führen. Einerseits aufgrund der Kommunikation der einzelnen Services über Nachrichten, die möglicherweise die Verwaltung von Fehlern und die Überwachung von Leistungsproblemen erfordern. Andererseits aufgrund der expliziten Trennung des eigentlichen Codes, was Refactorings der Schnittstellen erschwert. @@ -34,6 +34,7 @@ Lösung, wie eine Software umgesetzt werden kann. Eine Alternative zur Microserv [modulare Monolith][modularized-monolith], bei dem ein Monolith in austauschbare und wiederverwendbare Module unterteilt wird. +[kafka]: ../platforms/kafka.html [microservices]: https://microservices.io/ [martinfowler]: https://martinfowler.com/articles/micro-frontends.html [web-components]: ../concepts-and-methods/web-components.html diff --git a/radar/2023-01-31/web-assembly.md b/radar/2023-01-31/web-assembly.md index 48aff2a..9d25288 100644 --- a/radar/2023-01-31/web-assembly.md +++ b/radar/2023-01-31/web-assembly.md @@ -1,14 +1,14 @@ --- -title: Web Assembly +title: WebAssembly ring: assess quadrant: platforms --- -[Web Assembly][web-assembly] definiert einen Bytecode, der performant innerhalb des Webbrowsers ausgeführt wird. Dabei +[WebAssembly][web-assembly] definiert einen Bytecode, der performant innerhalb des Webbrowsers ausgeführt wird. Dabei werden unterschiedliche Programmiersprachen unterstützt. Rechenintensive Algorithmen können ins Frontend portiert werden, sodass Server und Netzwerk entlastet werden. Backend-Code kann direkt für den Browser aufbereitet und wiederverwendet werden. Dies ist für eine Reihe von [Anwendungsfällen][use-cases] interessant, wie z.B. Verschlüsselung, Signierung, Komprimierung, Visualisierungen oder Simulationen. -[web-assembly]: https://webassembly.org/ -[use-cases]: https://webassembly.org/docs/use-cases/ +[web-assembly]: https://webassembly.org +[use-cases]: https://webassembly.org/docs/use-cases diff --git a/radar/2024-02-29/ai-assistant.md b/radar/2024-02-29/ai-assistant.md new file mode 100644 index 0000000..95db722 --- /dev/null +++ b/radar/2024-02-29/ai-assistant.md @@ -0,0 +1,18 @@ +--- +title: AI-Assistant +ring: assess +quadrant: concepts-and-methods +--- + +AI-gestützte Assistenten zur Codegenerierung, wie sie beispielsweise von GitHub mit [Copilot][copilot] oder JetBrains mit [AI +Assistant][aiAssistant] angeboten werden, erfreuen sich zunehmender Beliebtheit. Es ist jedoch wichtig, ihre Verwendung kritisch zu hinterfragen. Zum einen ist die Rechtslage in Bezug auf Urheberrechtsfragen noch unklar. Zum anderen verlassen die +Daten beim Einsatz von Cloud-basierten Tools die Schweiz, was datenschutzrechtliche Bedenken aufwirft. + +Aus diesem Grund verzichten wir bei Inventage vorerst auf den Einsatz von AI-gestützter Codegenerierung. Wir nehmen die +Datenschutzbedenken unserer Kunden sehr ernst. + +Dennoch möchten auch wir in Zukunft die Vorteile von AI in der Entwicklung nutzen. Eine Möglichkeit, um sensible Daten zu schützen, wäre die On-Premise-Installation eines AI-Coding-Assistants. Dies ermöglicht die +Kontrolle über Daten und Code und minimiert gleichzeitig das Risiko von Datenschutzverletzungen. + +[copilot]: https://github.com/features/copilot +[aiAssistant]: https://www.jetbrains.com/ai/ diff --git a/radar/2024-02-29/angular.md b/radar/2024-02-29/angular.md new file mode 100644 index 0000000..c9244f2 --- /dev/null +++ b/radar/2024-02-29/angular.md @@ -0,0 +1,5 @@ +--- +title: Angular +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/apache-tomcat.md b/radar/2024-02-29/apache-tomcat.md new file mode 100644 index 0000000..ce556e2 --- /dev/null +++ b/radar/2024-02-29/apache-tomcat.md @@ -0,0 +1,6 @@ +--- +title: Apache Tomcat +ring: hold +quadrant: libraries-frameworks-and-languages +featured: false +--- diff --git a/radar/2024-02-29/apache-wicket.md b/radar/2024-02-29/apache-wicket.md new file mode 100644 index 0000000..908cff6 --- /dev/null +++ b/radar/2024-02-29/apache-wicket.md @@ -0,0 +1,5 @@ +--- +title: Apache Wicket +ring: hold +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/api-first-development.md b/radar/2024-02-29/api-first-development.md new file mode 100644 index 0000000..95c717f --- /dev/null +++ b/radar/2024-02-29/api-first-development.md @@ -0,0 +1,5 @@ +--- +title: API-first Development +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/architectural-decision-record-adr.md b/radar/2024-02-29/architectural-decision-record-adr.md new file mode 100644 index 0000000..85614c9 --- /dev/null +++ b/radar/2024-02-29/architectural-decision-record-adr.md @@ -0,0 +1,6 @@ +--- +title: Architectural Decision Records (ADR) +ring: assess +quadrant: concepts-and-methods +featured: false +--- diff --git a/radar/2024-02-29/archunit.md b/radar/2024-02-29/archunit.md new file mode 100644 index 0000000..b21e435 --- /dev/null +++ b/radar/2024-02-29/archunit.md @@ -0,0 +1,5 @@ +--- +title: ArchUnit +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/argo-cd.md b/radar/2024-02-29/argo-cd.md new file mode 100644 index 0000000..c20e307 --- /dev/null +++ b/radar/2024-02-29/argo-cd.md @@ -0,0 +1,5 @@ +--- +title: Argo CD +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/artificial-intelligence.md b/radar/2024-02-29/artificial-intelligence.md new file mode 100644 index 0000000..c9a22f6 --- /dev/null +++ b/radar/2024-02-29/artificial-intelligence.md @@ -0,0 +1,27 @@ +--- +title: Artificial Intelligence +ring: trial +quadrant: concepts-and-methods +--- + +Artificial Intelligence (AI) bleibt eines der dominierenden IT-Themen. Im letzten Jahr wurden unzählige neue Dienstleistungen und +Produkte in verschiedenen Bereichen mithilfe von AI entwickelt. + +Der Einsatz von AI bringt jedoch seine eigenen Herausforderungen mit sich, wobei wir die Gewährleistung des Datenschutzes als +eine der grössten Hürden sehen. Um AI-Systeme zu nutzen, müssen diese mit Daten gefüttert werden. Diese sind in unserem +Projektumfeld jedoch oft sensibel bzw. geschützt. Somit ist deren Weitergabe in jeglicher Form, z.B. durch die Anbindung +eines Cloud-basierten AI-Produkts, höchst problematisch und nicht mit unseren Kundenverträgen vereinbar. + +Trotz dieser Herausforderungen bietet AI auch für uns als Inventage grosses Potenzial. Dieses Jahr möchten wir uns +deshalb intensiv mit folgenden Themen beschäftigen: + +- [AI-Coding-Assistants][ai-coding-assistant] sollen die Softwareentwicklung effizienter machen und uns bei + Routineaufgaben unterstützen. +- Lokal betriebene [Self-hosted LLMs][self-hosted-llm] könnten eine Lösung für die Herausforderung des Datenschutzes + sein. +- Die [LangChain4j][langchain4j]-Bibliothek ermöglicht die Integration von LLMs mit Java, was die Entwicklung + von AI-basierten Anwendungen vereinfacht. + +[ai-coding-assistant]: ../concepts-and-methods/ai-assistant.html +[self-hosted-llm]: ../concepts-and-methods/self-hosted-llms.html +[langchain4j]: ../libraries-frameworks-and-languages/langchain4j.html diff --git a/radar/2024-02-29/asdf.md b/radar/2024-02-29/asdf.md new file mode 100644 index 0000000..3e7b7b8 --- /dev/null +++ b/radar/2024-02-29/asdf.md @@ -0,0 +1,5 @@ +--- +title: asdf +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/automatisiertes-e2e-testing.md b/radar/2024-02-29/automatisiertes-e2e-testing.md new file mode 100644 index 0000000..46cf61d --- /dev/null +++ b/radar/2024-02-29/automatisiertes-e2e-testing.md @@ -0,0 +1,5 @@ +--- +title: Automatisiertes E2E-Testing +ring: trial +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/bazel.md b/radar/2024-02-29/bazel.md new file mode 100644 index 0000000..13f776a --- /dev/null +++ b/radar/2024-02-29/bazel.md @@ -0,0 +1,5 @@ +--- +title: Bazel +ring: assess +quadrant: tools +--- diff --git a/radar/2024-02-29/buildah.md b/radar/2024-02-29/buildah.md new file mode 100644 index 0000000..74f751a --- /dev/null +++ b/radar/2024-02-29/buildah.md @@ -0,0 +1,5 @@ +--- +title: Buildah +ring: trial +quadrant: tools +--- diff --git a/radar/2024-02-29/buildless-web-development.md b/radar/2024-02-29/buildless-web-development.md new file mode 100644 index 0000000..79e56bc --- /dev/null +++ b/radar/2024-02-29/buildless-web-development.md @@ -0,0 +1,16 @@ +--- +title: Buildless Web Development +ring: trial +quadrant: concepts-and-methods +--- + +Wir sind weiterhin vom Buildless-Development-Ansatz überzeugt und setzen ihn heute insbesondere bei unseren internen +Applikationen und in [Uniport][uniport] ein. + +Der grosse Vorteil, während der Entwicklung im Browser möglichst nahe am Quellcode zu arbeiten, bleibt bestehen. Dank +dem [Web Dev Server][web-dev-server] in Kombination mit [Rollup][rollup] kann während der Entwicklung mit den gleichen +Plugins gearbeitet werden, die auch beim späteren finalen Build für den produktiven Code verwendet werden. + +[uniport]: https://uniport.ch +[web-dev-server]: ../tools/web-dev-server.html +[rollup]: https://rollupjs.org diff --git a/radar/2024-02-29/ci-cd.md b/radar/2024-02-29/ci-cd.md new file mode 100644 index 0000000..adbc3e5 --- /dev/null +++ b/radar/2024-02-29/ci-cd.md @@ -0,0 +1,5 @@ +--- +title: CI/CD +ring: adopt +quadrant: concepts-and-methods +--- diff --git "a/radar/2024-02-29/codequali\303\244t.md" "b/radar/2024-02-29/codequali\303\244t.md" new file mode 100644 index 0000000..a9622b0 --- /dev/null +++ "b/radar/2024-02-29/codequali\303\244t.md" @@ -0,0 +1,5 @@ +--- +title: Codequaliät +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/ddd.md b/radar/2024-02-29/ddd.md new file mode 100644 index 0000000..0e1b9fb --- /dev/null +++ b/radar/2024-02-29/ddd.md @@ -0,0 +1,11 @@ +--- +title: DDD +ring: adopt +quadrant: concepts-and-methods +--- + +Der Einsatz von [Domain Driven Design][ddd] (DDD) hat sich in vielen unserer Projekte bewährt, weshalb wir diese Methode +neu im "Adopt"-Ring aufführen. Wir setzen DDD auch zur Unterstützung in den vier grossen Aufgabengebieten der +Software-Entwicklung ein: Anforderungsermittlung, Modellbildung, fachliche und technische Architektur. + +[ddd]: https://martinfowler.com/tags/domain%20driven%20design.html \ No newline at end of file diff --git a/radar/2024-02-29/debezium.md b/radar/2024-02-29/debezium.md new file mode 100644 index 0000000..de63dee --- /dev/null +++ b/radar/2024-02-29/debezium.md @@ -0,0 +1,5 @@ +--- +title: Debezium +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/deno.md b/radar/2024-02-29/deno.md new file mode 100644 index 0000000..0453c94 --- /dev/null +++ b/radar/2024-02-29/deno.md @@ -0,0 +1,6 @@ +--- +title: Deno +ring: assess +quadrant: libraries-frameworks-and-languages +featured: false +--- diff --git a/radar/2024-02-29/design-system.md b/radar/2024-02-29/design-system.md new file mode 100644 index 0000000..25e3b60 --- /dev/null +++ b/radar/2024-02-29/design-system.md @@ -0,0 +1,18 @@ +--- +title: Design System +ring: assess +quadrant: concepts-and-methods +--- + +Wir haben in unseren Projekten die Erfahrung gemacht, dass Design-Tokens allein häufig nicht ausreichen, um die +Konsistenzanforderungen zu erfüllen, insbesondere bei Projekten im Umfeld komplexer Systeme. Solche Systeme bestehen in +der Regel aus mehreren Applikationen oder Produkten verschiedener Lieferanten. + +Design-Tokens definieren wiederverwendbare Elemente wie Farben, Grössen oder Schriften. Jedoch besteht oft auch +Bedarf an wiederverwendbaren Komponenten höherer Ebene, wie beispielsweise Buttons, Badges oder Formularelementen. +Um zu vermeiden, dass jede Anwendung diese Elemente neu erstellen muss, können sie durch ein Design-System bereitgestellt werden. + +Die bereitgestellten Komponenten kapseln sowohl Layout als auch Logik und können über eine wohldefinierte API +angepasst werden. Ein solches System kann schrittweise aufgebaut und erweitert werden. Mittel- bis langfristig +profitieren nicht nur die Benutzer von einem einheitlichen Erlebnis, sondern auch die Design- und Code-Welt von einem +wiederverwendbaren Baukastensystem. diff --git a/radar/2024-02-29/design-tokens.md b/radar/2024-02-29/design-tokens.md new file mode 100644 index 0000000..5202220 --- /dev/null +++ b/radar/2024-02-29/design-tokens.md @@ -0,0 +1,6 @@ +--- +title: Design Tokens +ring: assess +quadrant: concepts-and-methods +featured: false +--- diff --git a/radar/2024-02-29/elastic-stack.md b/radar/2024-02-29/elastic-stack.md new file mode 100644 index 0000000..931fdbe --- /dev/null +++ b/radar/2024-02-29/elastic-stack.md @@ -0,0 +1,5 @@ +--- +title: Elastic Stack +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/figma.md b/radar/2024-02-29/figma.md new file mode 100644 index 0000000..b900917 --- /dev/null +++ b/radar/2024-02-29/figma.md @@ -0,0 +1,15 @@ +--- +title: Figma +ring: trial +quadrant: tools +--- + +[Figma][figma] ist eine webbasierte, kollaborative Software zur Erstellung von Prototypen im Bereich des [UX][ux] ("User +Experience Design") und [UI Design][ui-design] ("Interfacedesign"). Wir sehen jedoch auch den gewinnbringenden Einsatz +von Figma bei der frühen Anforderungsaufnahme zur Visualisierung des Projektumfangs. Dadurch wird bereits zu Beginn ein +umfassendes Verständnis der angestrebten Lösung erreicht. Der neue Dev-Modus von Figma unterstützt anschliessend bei der +Übernahme des Designs in die Implementierung der Benutzeroberfläche. + +[figma]: https://www.figma.com +[ux]: https://de.wikipedia.org/wiki/User_Experience_Design +[ui-design]: https://de.wikipedia.org/wiki/Interfacedesign \ No newline at end of file diff --git a/radar/2024-02-29/flyway.md b/radar/2024-02-29/flyway.md new file mode 100644 index 0000000..0b373dc --- /dev/null +++ b/radar/2024-02-29/flyway.md @@ -0,0 +1,5 @@ +--- +title: Flyway +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/github-actions.md b/radar/2024-02-29/github-actions.md new file mode 100644 index 0000000..28e9e91 --- /dev/null +++ b/radar/2024-02-29/github-actions.md @@ -0,0 +1,13 @@ +--- +title: GitHub Actions +ring: adopt +quadrant: tools +--- + +[GitHub Actions][github-actions] ist eine Container-basierte [CI/CD][ci-cd]-Lösung von [GitHub][github]. Dank der Integration mit GitHub, der Flexibilität und der Möglichkeit für Projektteams, sich selbst zu +verwalten, ersetzen wir unseren bisherigen [Jenkins][jenkins]-Build-Server durch GitHub Actions. + +[github-actions]: https://docs.github.com/en/actions +[github]: https://github.com +[ci-cd]: ../concepts-and-methods/ci-cd.html +[jenkins]: ../tools/jenkins.html diff --git a/radar/2024-02-29/grafana.md b/radar/2024-02-29/grafana.md new file mode 100644 index 0000000..6d7d3ba --- /dev/null +++ b/radar/2024-02-29/grafana.md @@ -0,0 +1,5 @@ +--- +title: Grafana +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/graphql.md b/radar/2024-02-29/graphql.md new file mode 100644 index 0000000..ca1e5ff --- /dev/null +++ b/radar/2024-02-29/graphql.md @@ -0,0 +1,5 @@ +--- +title: GraphQL +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/guice.md b/radar/2024-02-29/guice.md new file mode 100644 index 0000000..0ae36d4 --- /dev/null +++ b/radar/2024-02-29/guice.md @@ -0,0 +1,5 @@ +--- +title: Guice +ring: hold +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/hybride-mobile-applikationen.md b/radar/2024-02-29/hybride-mobile-applikationen.md new file mode 100644 index 0000000..fc2e6df --- /dev/null +++ b/radar/2024-02-29/hybride-mobile-applikationen.md @@ -0,0 +1,14 @@ +--- +title: Hybride mobile Applikationen +ring: adopt +quadrant: concepts-and-methods +--- + +Das Konzept der [hybriden mobilen Applikationen][hybride-mobile-app] haben wir bereits erfolgreich in diversen Kundenprojekten angewendet. Die eingesetzten Technologien für die Wrapper-Applikationen haben sich bewährt und sind inzwischen reif für den +produktiven Einsatz. + +Im Rahmen unserer Composite-Application-Plattform [Uniport][uniport] haben wir eine Lösung entwickelt, die viele +beliebte Zusatzfeatures in einem Produkt bündelt und sich zu einer kundenspezifischen Applikation konfigurieren lässt. + +[hybride-mobile-app]: https://www.brightsolutions.de/blog/native-vs-hybride-vs-web-app +[uniport]: https://uniport.ch diff --git a/radar/2024-02-29/infrastructure-as-code.md b/radar/2024-02-29/infrastructure-as-code.md new file mode 100644 index 0000000..bf13054 --- /dev/null +++ b/radar/2024-02-29/infrastructure-as-code.md @@ -0,0 +1,5 @@ +--- +title: Infrastructure as Code +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/insomnia.md b/radar/2024-02-29/insomnia.md new file mode 100644 index 0000000..670bb36 --- /dev/null +++ b/radar/2024-02-29/insomnia.md @@ -0,0 +1,13 @@ +--- +title: Insomnia +ring: hold +quadrant: tools +--- + +Leider hat sich Insomnia zunehmend von einer schlanken Anwendung zu einer schwerfälligen Plattform entwickelt, ähnlich +wie es bereits bei Postman der Fall war. + +Angesichts dieser Entwicklung haben wir beschlossen, Insomnia auf "Hold" zu setzen. Als vielversprechende Alternative +bietet sich das [IntelliJ HTTP Client Plugin][intellij-http-client-plugin] an. + +[intellij-http-client-plugin]: ../tools/intellij-http-client-plugin.html diff --git a/radar/2024-02-29/intellij-http-client-plugin.md b/radar/2024-02-29/intellij-http-client-plugin.md new file mode 100644 index 0000000..a84812d --- /dev/null +++ b/radar/2024-02-29/intellij-http-client-plugin.md @@ -0,0 +1,21 @@ +--- +title: Intellij HTTP Client Plugin +ring: assess +quadrant: tools +--- + +Da wir mit [Insomnia][insomnia] und [Postman][postman] als Tools für das Testen von APIs unzufrieden sind, suchen wir +nach einer besseren Lösung. Eine vielversprechende Alternative ist das [IntelliJ HTTP Client +Plugin][intellij-http-client-plugin]. Es bietet die Möglichkeit, HTTP-Requests zu definieren, auszuführen, und mittels +JavaScript die Korrektheit der Response zu überprüfen. Durch die nahtlose Integration in IntelliJ IDEA können die APIs +direkt aus der IDE angesprochen werden. + +Als Ergänzung zum Plugin bietet IntelliJ IDEA das [HTTP Client CLI][http-client-cli] an. Dieses erlaubt das Ausführen +der konfigurierten HTTP-Requests von der Kommandozeile, was insbesondere zur Automatisierung der Tests in +Build-Pipelines von [CI/CD-Umgebungen][ci-cd] wichtig ist. + +[insomnia]: ../tools/insomnia.html +[postman]: https://www.postman.com +[intellij-http-client-plugin]: https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html +[http-client-cli]: https://www.jetbrains.com/help/idea/http-client-cli.html +[ci-cd]: ../concepts-and-methods/ci-cd.html diff --git a/radar/2024-02-29/jakarta-ee.md b/radar/2024-02-29/jakarta-ee.md new file mode 100644 index 0000000..c0b283a --- /dev/null +++ b/radar/2024-02-29/jakarta-ee.md @@ -0,0 +1,6 @@ +--- +title: Jakarta EE +ring: hold +quadrant: libraries-frameworks-and-languages +featured: false +--- diff --git a/radar/2024-02-29/javascript.md b/radar/2024-02-29/javascript.md new file mode 100644 index 0000000..4a2ba0b --- /dev/null +++ b/radar/2024-02-29/javascript.md @@ -0,0 +1,6 @@ +--- +title: JavaScript +ring: hold +quadrant: libraries-frameworks-and-languages +featured: false +--- diff --git a/radar/2024-02-29/jenkins.md b/radar/2024-02-29/jenkins.md new file mode 100644 index 0000000..6d3e028 --- /dev/null +++ b/radar/2024-02-29/jenkins.md @@ -0,0 +1,16 @@ +--- +title: Jenkins +ring: hold +quadrant: tools +--- + +[Jenkins][jenkins], der weit verbreitete Open-Source Build-Server, wird bei Inventage in vielen Projekten als +Build-, Integrations- und Delivery-Plattform verwendet. Mittels Plugins kann Jenkins an vielfältige Bedürfnisse +angepasst werden. Allerdings erweist sich diese Vielfalt je länger je mehr als Belastung, da viele Plugins +veraltet sind oder Kompatibilitätsprobleme haben, was die Wartung des Servers erschwert. Ausserdem müssen die Projektteams für Anpassungen auf die Hilfe der Jenkins-Administratoren zurückgreifen, da die Verwaltung dieser Plugins zentral erfolgt. + +Aus diesem Grund setzen wir bei neuen Projekten nur noch auf containerbasierte Build-Plattformen wie beispielsweise [GitHub +Actions][gitHubActions], die von den Projektteams autonom verwaltet werden können. + +[jenkins]: https://www.jenkins.io/ +[gitHubActions]: ../tools/github-actions.html \ No newline at end of file diff --git a/radar/2024-02-29/jooq.md b/radar/2024-02-29/jooq.md new file mode 100644 index 0000000..904e9b1 --- /dev/null +++ b/radar/2024-02-29/jooq.md @@ -0,0 +1,17 @@ +--- +title: jOOQ +ring: trial +quadrant: libraries-frameworks-and-languages +--- + +Bisher wurde [jOOQ][jooq] bei Inventage noch in keinem Projekt eingesetzt. Wir sehen jedoch einige vielversprechende +Anwendungsfälle: + +- Als Backend für GraphQL-APIs, um ausgehend von GraphQQL-Queries dynamische SQL-Queries zusammenzustellen. +- Für die Ablösung von Legacy-Technologien, die nur schwer auf JPA oder ähnliche Technologien umgestellt werden können. +- Als Grundlage für ein neues Regelwerk, um Datenbank-Zugriffe mit rollenbasierten Filterkriterien automatisch zu + schützen, ähnlich unserer bewährten SecurityEngine. +- Als Unterstützung in Projekten, die bereits JPA einsetzen, um Anforderungen umzusetzen, die mit JPQL schwierig zu + meistern sind. + +[jooq]: https://www.jooq.org diff --git a/radar/2024-02-29/kafka.md b/radar/2024-02-29/kafka.md new file mode 100644 index 0000000..c0621a5 --- /dev/null +++ b/radar/2024-02-29/kafka.md @@ -0,0 +1,5 @@ +--- +title: Kafka +ring: adopt +quadrant: platforms +--- diff --git a/radar/2024-02-29/keycloak.md b/radar/2024-02-29/keycloak.md new file mode 100644 index 0000000..23c7327 --- /dev/null +++ b/radar/2024-02-29/keycloak.md @@ -0,0 +1,5 @@ +--- +title: Keycloak +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/kind.md b/radar/2024-02-29/kind.md new file mode 100644 index 0000000..a60ac20 --- /dev/null +++ b/radar/2024-02-29/kind.md @@ -0,0 +1,5 @@ +--- +title: kind +ring: trial +quadrant: tools +--- diff --git a/radar/2024-02-29/kotlin.md b/radar/2024-02-29/kotlin.md new file mode 100644 index 0000000..a25e1bf --- /dev/null +++ b/radar/2024-02-29/kotlin.md @@ -0,0 +1,10 @@ +--- +title: Kotlin +ring: adopt +quadrant: libraries-frameworks-and-languages +--- + +Mit der Implementierung von Integrationstests für REST-APIs als auch der Implementierung von REST-APIs zum Mocken von +Umsystemen konnten wir seit der letzten Publikation des Tech-Radars erste Erfahrungen mit Kotlin sammeln. Die Sprache +hat sich dabei so gut bewährt, dass wir sie neu im "Adopt"-Ring aufführen und in unseren Projekten vermehrt einsetzen +möchten. diff --git a/radar/2024-02-29/ktor.md b/radar/2024-02-29/ktor.md new file mode 100644 index 0000000..5a955a6 --- /dev/null +++ b/radar/2024-02-29/ktor.md @@ -0,0 +1,23 @@ +--- +title: Ktor +ring: adopt +quadrant: libraries-frameworks-and-languages +--- + +[Ktor][ktor] ist ein leichtgewichtiges Framework für [Kotlin][kotlin], mit dem sowohl HTTP-Server als auch HTTP-Clients +realisiert werden können. Es wird von JetBrains entwickelt, dem Unternehmen hinter der Kotlin-Programmiersprache. + +Wir verwenden Ktor einerseits zur Implementierung von Mock-Servern, um REST-APIs unserer Kunden-Umsysteme zu simulieren. +Die Kombination von Kotlin und Ktor erlaubt es, schlanke Mock-Server zu schreiben, die — im Gegensatz zu statischen oder +randomisierten Mocks — eine dynamische und in sich konsistente Funktionalität bereitstellen. + +Andererseits verwenden wir den HTTP-Client von Ktor, um Integrationstests für unsere eigenen REST-APIs zu schreiben. +JUnit dient als Test-Runner, wodurch die Tests sowohl innerhalb der IDE als auch während dem Build innerhalb einer +dockerisierten Applikationsumgebung ausgeführt werden können. Das Programmieren der Integrationstests in Kotlin hat +sich bestens bewährt, da der Entwickler mit seinen bekannten Werkzeugen arbeitet und die Konzepte für qualitativ +hochwertigen Code nahtlos weiterverwenden kann. Zudem erlaubt der programmatische Ansatz den einfachen Zugriff auf +Umsysteme (wie z.B. die Datenbank), was sich insbesondere während der Setup- und Teardown-Phasen eines Tests als +praktisch erweist. + +[kotlin]: ../libraries-frameworks-and-languages/kotlin.html +[ktor]: https://ktor.io diff --git a/radar/2024-02-29/kubernetes.md b/radar/2024-02-29/kubernetes.md new file mode 100644 index 0000000..c6b502d --- /dev/null +++ b/radar/2024-02-29/kubernetes.md @@ -0,0 +1,5 @@ +--- +title: Kubernetes +ring: adopt +quadrant: platforms +--- diff --git a/radar/2024-02-29/langchain4j.md b/radar/2024-02-29/langchain4j.md new file mode 100644 index 0000000..87cd848 --- /dev/null +++ b/radar/2024-02-29/langchain4j.md @@ -0,0 +1,34 @@ +--- +title: LangChain4j +ring: assess +quadrant: libraries-frameworks-and-languages +--- + +Bei der Integration eines Sprachmodells (LLMs) in eine Applikation, muss diese die AI mit natürlicher Sprache steuern. +Dabei sollten nicht nur Informationen innerhalb des Sprachmodells, sondern auch aus dem Kontext der Applikation genutzt werden können. Um diese Aufgaben zu vereinfachen, bietet [LangChain4j][langchain4j] zwei +Mechanismen an: Tools und Document-Stores. + +Durch den Einsatz von Tools kann das Sprachmodell auf zusätzliche Systeme zugreifen. Hierfür werden die verfügbaren Funktionen +deklariert, z.B. die Statusabfrage einer Bestellung. Dabei wird festgelegt, wann eine Funktion +mit welchen Parametern aufgerufen wird und was mit dem Ergebnis geschehen soll. + +Bei Document-Stores handelt es sich um einen zusätzlichen Speicher. Aus diesem kann die Applikation vorgängig +aufbereitete Daten beziehen und als Prompt-Zusatz verwenden. Das Sprachmodell kann so neben internem Wissen auch +externe Daten mitberücksichtigen.1 + +Eine einheitliche API, die verschiedene Anbieter von Sprachmodellen vereint, erleichtert den Einstieg und macht den +Einsatz unterschiedlicher Modelle effizienter. Zudem gibt es Integrationen für [Quarkus][quarkus-langchain4j] und +[Spring Boot][spring-boot-langchain4j]. + +In verschiedenen Prototyp-Einsätzen haben wir bereits erstaunliche Resultate erzielt, zum Beispiel bei der Beantwortung +und Verarbeitung von Kundenanfragen sowie bei der Abfrage von firmeninternem Wissen. + +___ + +1: [Retrieval-Augmented Generation][rag] (RAG) + +[langchain4j]: https://github.com/langchain4j/langchain4j +[rag]: https://aws.amazon.com/de/what-is/retrieval-augmented-generation +[quarkus-langchain4j]: https://quarkus.io/extensions/io.quarkiverse.langchain4j/quarkus-langchain4j-core +[spring-boot-langchain4j]: https://github.com/langchain4j/langchain4j-spring + diff --git a/radar/2024-02-29/lit.md b/radar/2024-02-29/lit.md new file mode 100644 index 0000000..60eefa9 --- /dev/null +++ b/radar/2024-02-29/lit.md @@ -0,0 +1,5 @@ +--- +title: Lit +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/living-documentation.md b/radar/2024-02-29/living-documentation.md new file mode 100644 index 0000000..57d8d82 --- /dev/null +++ b/radar/2024-02-29/living-documentation.md @@ -0,0 +1,6 @@ +--- +title: Living Documentation +ring: assess +quadrant: concepts-and-methods +featured: false +--- diff --git a/radar/2024-02-29/microservice-architektur.md b/radar/2024-02-29/microservice-architektur.md new file mode 100644 index 0000000..69b750b --- /dev/null +++ b/radar/2024-02-29/microservice-architektur.md @@ -0,0 +1,23 @@ +--- +title: Microservice-Architektur +ring: adopt +quadrant: concepts-and-methods +--- + +Unsere Erfahrungen des letzten Jahres bestärken uns im Einsatz von [Microservices][microservices]. Sie ermöglichen eine +effiziente Entwicklung und gute Testbarkeit komplexer Systeme durch deren Aufteilung in unabhängige und überprüfbare +Dienste. + +Die Koordination und Kommunikation zwischen den Diensten stellt jedoch eine Herausforderung dar. Jeder zusätzliche +Microservice bedeutet ein Mehr an Komplexität, sowohl im Betrieb als auch in der Entwicklung. Der Frage, +welche Teile einer Applikation als eigenständige Dienste ausgeführt werden sollen, kommt deshalb eine grosse Bedeutung +zu. + +Um die Anzahl der Dienste überschaubar zu halten, ist es nicht zwingend notwendig, diese so klein wie möglich zu +gestalten, wie es der Begriff "Microservice" suggeriert. Es kann sich auch als Vorteil erweisen, ein System zunächst als +Monolith zu bauen, um es später in Microservices aufzuteilen. Da die einzelnen Dienste erst voneinander getrennt werden, +wenn das System und dessen Anforderungen etwas besser bekannt sind, können voreilig gezogene Grenzen vermieden werden, +welche den Betrieb und die Weiterentwicklung des Systems erschweren würden. Eine solch organischer Entwicklungsansatz +minimiert die Herausforderungen und nutzt dennoch die Vorteile von Microservices. + +[microservices]: https://microservices.io/ diff --git a/radar/2024-02-29/minikube.md b/radar/2024-02-29/minikube.md new file mode 100644 index 0000000..e5061d0 --- /dev/null +++ b/radar/2024-02-29/minikube.md @@ -0,0 +1,5 @@ +--- +title: minikube +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/modern-web-apis.md b/radar/2024-02-29/modern-web-apis.md new file mode 100644 index 0000000..03a368d --- /dev/null +++ b/radar/2024-02-29/modern-web-apis.md @@ -0,0 +1,20 @@ +--- +title: Modern Web APIs +ring: adopt +quadrant: concepts-and-methods +--- + +Die Philosophie hinter "Modern Web APIs" hat zum Ziel, robuste, wartungsfreundliche und performante +Web-Applikationen zu erstellen. Anstelle von schwergewichtigen Frameworks und Libraries kommen vorzugsweise HTML, CSS, +JavaScript und die Web-APIs zum Einsatz. + +Diese immer umfangreicheren Web-Fundamentals ermöglichen, was zuvor nur mit viel JavaScript oder Backend-Technologien +möglich war. Somit wird der Aufwand und die Komplexität reduziert. Die Auslassung von höheren oder zusätzlichen +Abstraktionsschichten kommt der Flexibilität zugute. + +Der Aufwand, um dutzende Frameworks und Libraries zu erlernen, die demselben Zweck dienen, wird primär in das +Verständnis der eigentlichen Plattform gesteckt. Dies kommt den Mitarbeitern und den Firmen zugute, wodurch sie +langlebigeres Wissen und Produkte erhalten. + +Man ist nicht mehr an einzelne Hersteller und spezifische Sprachen gebunden, sondern baut direkt auf die Plattform und +den Best Practices der gesamten Community auf. \ No newline at end of file diff --git a/radar/2024-02-29/modularized-monolith.md b/radar/2024-02-29/modularized-monolith.md new file mode 100644 index 0000000..fa38d3e --- /dev/null +++ b/radar/2024-02-29/modularized-monolith.md @@ -0,0 +1,5 @@ +--- +title: Modularized Monolith +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/oidc.md b/radar/2024-02-29/oidc.md new file mode 100644 index 0000000..0313deb --- /dev/null +++ b/radar/2024-02-29/oidc.md @@ -0,0 +1,5 @@ +--- +title: OIDC +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/open-telemetry.md b/radar/2024-02-29/open-telemetry.md new file mode 100644 index 0000000..4fa9396 --- /dev/null +++ b/radar/2024-02-29/open-telemetry.md @@ -0,0 +1,16 @@ +--- +title: OpenTelemetry +ring: adopt +quadrant: libraries-frameworks-and-languages +--- + +Eine umfassende Sicht auf die Systemleistung und das Verhalten von Anwendungen ist für das Monitoring und die Fehlerbehebung +in komplexen Architekturen entscheidend. [OpenTelemetry][openTelemetry] vereinfacht die Observability von Microservice-Anwendungen durch standardisierte Übertragungsprotokolle und Datenmodelle, sowie einheitliche Schnittstellen für das Sammeln, Verarbeiten und Exportieren von Telemetriedaten wie Traces, Metriken und Logs. + +In unseren [Uniport][uniport]-Projekten setzen wir OpenTelemetry ein, um Request-Traces vom Browser über Gateways, +Service-Proxies, Microservices bis hin zur Datenbank zu erfassen. Dadurch erhalten wir detaillierte Einblicke in die gesamte +Transaktionskette, was es uns ermöglicht, Performance-Engpässe und Fehlerquellen effizienter zu identifizieren +und zu beheben. + +[openTelemetry]: https://opentelemetry.io +[uniport]: https://uniport.ch diff --git a/radar/2024-02-29/passkeys.md b/radar/2024-02-29/passkeys.md new file mode 100644 index 0000000..9354a97 --- /dev/null +++ b/radar/2024-02-29/passkeys.md @@ -0,0 +1,18 @@ +--- +title: Passkeys +ring: adopt +quadrant: concepts-and-methods +--- + +Als Alternative zu traditionellen Passwörtern bieten [Passkeys][passkeys] eine sicherere Möglichkeit zur Benutzerauthentisierung. Passkeys sind zufällig generierte Schlüsselpaare, die aus einem Private- und einem Public-Key bestehen. + +Dabei wird nur der Public-Key auf Serverseite gespeichert. Der Private-Key verbleit immer auf einem Gerät des Benutzers +(z.B. einem Smartphone oder einem dedizierten [Hardware-Security-Module][hardware-security-module]). Die Gefahr von Data-Breaches auf Serverseite wird dadurch stark verringert, da mit dem Public-Key allein keine erfolgreiche Authentisierung möglich ist. + +Immer mehr Dienste und Identity-Provider unterstützen Passkeys. Wir bei Inventage und dem [Keycloak Competence +Center][keycloak-competence-center] bieten auch bei unseren Kundenprojekten [Unterstützung für Passkeys][keycloak-competence-center-passkeys]. + +[passkeys]: https://passkeys.dev/ +[hardware-security-module]: https://de.wikipedia.org/wiki/Hardware-Sicherheitsmodul +[keycloak-competence-center]: https://keycloak.ch +[keycloak-competence-center-passkeys]: https://passkey.keycloak.ch diff --git a/radar/2024-02-29/podman.md b/radar/2024-02-29/podman.md new file mode 100644 index 0000000..1410cd6 --- /dev/null +++ b/radar/2024-02-29/podman.md @@ -0,0 +1,5 @@ +--- +title: Podman +ring: trial +quadrant: tools +--- diff --git a/radar/2024-02-29/postgresql.md b/radar/2024-02-29/postgresql.md new file mode 100644 index 0000000..cbd134a --- /dev/null +++ b/radar/2024-02-29/postgresql.md @@ -0,0 +1,5 @@ +--- +title: PostgreSQL +ring: adopt +quadrant: tools +--- diff --git a/radar/2024-02-29/postman.md b/radar/2024-02-29/postman.md new file mode 100644 index 0000000..3290295 --- /dev/null +++ b/radar/2024-02-29/postman.md @@ -0,0 +1,6 @@ +--- +title: Postman +ring: hold +quadrant: tools +featured: false +--- diff --git a/radar/2024-02-29/pwa.md b/radar/2024-02-29/pwa.md new file mode 100644 index 0000000..d64119d --- /dev/null +++ b/radar/2024-02-29/pwa.md @@ -0,0 +1,28 @@ +--- +title: Progressive Web Application +ring: adopt +quadrant: concepts-and-methods +--- + +Eine [Progressive Web Application][pwa] (PWA) ist eine mit Web-Technologien gebaute Applikation, die sich wie eine +native Applikation anfühlt und wie eine solche aussieht. PWAs umfassen sowohl Desktop- als auch Mobile-Applikationen. + +Der Vorteil von PWAs liegt darin, dass dank offener Web-Technologien Funktionen wie die Offline-Nutzung, +Hintergrundaktualisierung oder Push-Benachrichtigungen in einer einzigen Code-Basis implementiert und auf allen Plattformen +eingesetzt werden können. Bestehende Web-Applikationen können idealerweise zu einer PWA ausgebaut werden, um +das Benutzererlebnis zu verbessern. + +Die neueste iOS-Version 17.4. von Apple in der EU wird die Attraktivität von PWAs massgeblich beeinflussen1. Auf Drängen der +EU erlaubt Apple mit dem neuesten Update zwar die Installation von Drittanbieter-App-Marktplätzen und die Unterstützung +alternativer Browser-Engines auf dem iPhone. Aufgrund der damit verbundenen Sicherheitsbedenken wird dieses iOS-Update +jedoch keine Web-Apps auf dem Homescreen mehr zulassen. Wir werden diese Entwicklungen im Auge behalten und unsere +Einschätzung gegebenenfalls entsprechend anpassen. + +___ + +1[Apple kündigt Änderungen in iOS, Safari und dem App Store in der Europäischen Union an][apple-newsroom]
+2[Why don't users in the EU have access to Home Screen apps?][apple-developer] + +[pwa]: https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps +[apple-newsroom]: https://www.apple.com/chde/newsroom/2024/01/apple-announces-changes-to-ios-safari-and-the-app-store-in-the-european-union/ +[apple-developer]: https://developer.apple.com/support/dma-and-apps-in-the-eu#8 \ No newline at end of file diff --git a/radar/2024-02-29/quarkus.md b/radar/2024-02-29/quarkus.md new file mode 100644 index 0000000..ddd4b5f --- /dev/null +++ b/radar/2024-02-29/quarkus.md @@ -0,0 +1,5 @@ +--- +title: Quarkus +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/redpanda.md b/radar/2024-02-29/redpanda.md new file mode 100644 index 0000000..d2817a6 --- /dev/null +++ b/radar/2024-02-29/redpanda.md @@ -0,0 +1,5 @@ +--- +title: Redpanda +ring: assess +quadrant: platforms +--- diff --git a/radar/2024-02-29/rest-assured.md b/radar/2024-02-29/rest-assured.md new file mode 100644 index 0000000..3c4a078 --- /dev/null +++ b/radar/2024-02-29/rest-assured.md @@ -0,0 +1,5 @@ +--- +title: REST Assured +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/secure-software-supply-chain.md b/radar/2024-02-29/secure-software-supply-chain.md new file mode 100644 index 0000000..05ac43e --- /dev/null +++ b/radar/2024-02-29/secure-software-supply-chain.md @@ -0,0 +1,5 @@ +--- +title: Secure Software Supply-Chain +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/self-hosted-llms.md b/radar/2024-02-29/self-hosted-llms.md new file mode 100644 index 0000000..bcf622a --- /dev/null +++ b/radar/2024-02-29/self-hosted-llms.md @@ -0,0 +1,31 @@ +--- +title: Self-hosted LLMs +ring: assess +quadrant: concepts-and-methods +--- + +Self-hosted LLMs bieten eine Alternative für den Betrieb von Large-Language-Models, die keine umfangreiche +GPU-Infrastruktur voraussetzen. Durch Techniken wie Quantisierung1 und Projekte wie +[llama.cpp][llamaCpp]2 können LLMs auf handelsüblicher Hardware mit reduziertem Speicherbedarf ausgeführt +werden. Über Plattformen wie [Hugging Face][huggingFace] oder [Ollama][ollama] können LLMs bezogen und lokal ausgeführt +werden. + +Durch den Einsatz von Self-hosted LLMs streben wir eine Verbesserung des Datenschutzes an, denn diese können entweder auf firmeneigenen Servern oder lokal auf einem Laptop betrieben werden und somit vollständig offline genutzt werden. + +Einerseits möchten wir die organisatorischen Möglichkeiten und Kosten für den Betrieb solcher LLMs abschätzen. +Andererseits ist es uns wichtig zu untersuchen, wie gut die Qualität dieser Self-hosted LLMs ist und ob sie in +bestimmten Anwendungsfällen mit kommerziellen Konkurrenten wie [ChatGPT][chatGPT] oder [Gemini][gemini] mithalten +können. + +___ +1 Technik, um die Rechen- und Speicherkosten der Inferenz zu reduzieren, indem +Gewichte und Aktivierungen mit Datentypen geringerer Genauigkeit dargestellt werden (z.B. 8-Bit Ganzzahlen anstatt der +üblichen 32-Bit Fliesskommazahlen).
+2 LLaMa-Architektur von Meta in effizientem C/C++, die eine leichtere und portable Alternative zu +den schwergewichtigen Frameworks bietet. + +[huggingFace]: https://huggingface.co +[ollama]: https://ollama.ai +[chatGPT]: https://chat.openai.com +[gemini]: https://gemini.google.com +[llamaCpp]: https://github.com/ggerganov/llama.cpp \ No newline at end of file diff --git a/radar/2024-02-29/server-side-rendering-ssr.md b/radar/2024-02-29/server-side-rendering-ssr.md new file mode 100644 index 0000000..6147431 --- /dev/null +++ b/radar/2024-02-29/server-side-rendering-ssr.md @@ -0,0 +1,6 @@ +--- +title: Server Side Rendering (SSR) +ring: assess +quadrant: concepts-and-methods +featured: false +--- diff --git a/radar/2024-02-29/solid.md b/radar/2024-02-29/solid.md new file mode 100644 index 0000000..6d56047 --- /dev/null +++ b/radar/2024-02-29/solid.md @@ -0,0 +1,5 @@ +--- +title: Solid +ring: assess +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/spring-boot.md b/radar/2024-02-29/spring-boot.md new file mode 100644 index 0000000..a54ed87 --- /dev/null +++ b/radar/2024-02-29/spring-boot.md @@ -0,0 +1,5 @@ +--- +title: Spring Boot +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/spring-modulith.md b/radar/2024-02-29/spring-modulith.md new file mode 100644 index 0000000..cb9eef2 --- /dev/null +++ b/radar/2024-02-29/spring-modulith.md @@ -0,0 +1,22 @@ +--- +title: Spring Modulith +ring: assess +quadrant: libraries-frameworks-and-languages +--- + +Microservices haben sich als eine führende architektonische Technik in modernen Cloud-basierten Systemen etabliert. Wir +empfehlen jedoch, dass Teams die Entscheidung für diese Architektur sorgfältig abwägen sollten. Die zusätzliche +operative Komplexität muss durch eine entsprechende Reduktion der Entwicklungskomplexität kompensiert werden, was bei +kleineren oder neuen Projekten oft nicht der Fall ist. + +Für Spring-basierte Systeme bietet [Spring Modulith][spring-modulith] einen möglichen Einstieg für neue Applikationen, +der eine spätere Migration zu Microservices erleichtert. Spring Modulith bietet eine modulare Architektur, die Domänen +und Pakete logisch und physisch voneinander trennt, was ein effektives Refactoring und isolierte Domänen-Tests +ermöglicht. Mit integrierten Überprüfungstools wie [ArchUnit][archunit] und [jmolecules][jmolecules] unterstützt es die +Einhaltung domänengetriebener Designregeln. Auch im Rahmen von [Domain Driven Design][ddd] (DDD) ist der Einsatz dieses +Frameworks denkbar. + +[spring-modulith]: https://spring.io/projects/spring-modulith +[archunit]: https://www.archunit.org +[jmolecules]: https://github.com/xmolecules/jmolecules +[ddd]: ../concepts-and-methods/ddd.html diff --git a/radar/2024-02-29/strong-types-in-js.md b/radar/2024-02-29/strong-types-in-js.md new file mode 100644 index 0000000..a6796b9 --- /dev/null +++ b/radar/2024-02-29/strong-types-in-js.md @@ -0,0 +1,23 @@ +--- +title: Strong Types in JavaScript +ring: assess +quadrant: concepts-and-methods +--- + +In der schnelllebigen Welt von JavaScript ist es eine Herausforderung, die Korrektheit und Wartbarkeit des Codes +sicherzustellen, insbesondere bei Projekten mit zunehmender Größe und Komplexität. Während +[TypeScript][typescript] robuste, statische Typenprüfung für JavaScript bietet, erhöht sich, je nach eingesetztem +Framework, der Entwicklungsaufwand und die Komplexität des Builds erheblich. Hier könnte [JSDoc][jsdoc] als eine Art +Mittelweg zwischen reinem JavaScript und TypeScript eine Alternative bieten. + +Insbesondere bei der Arbeit mit JavaScript-nativen Frameworks wie [React][react], oder beim Entwickeln von kleinen +Applikationen, die [komplett ohne Frontend-Build][buildless-web-development] auskommen, könnte JSDoc eine gute Wahl +sein. Anders als beim gängigen Umgang mit TypeScript, kann JSDoc gezielt für die Typdefinitionen eingesetzt werden, die +nicht automatisch von der IDE abgeleitet werden können. Durch minimalen zusätzlichen Kontext und Typinformationen +ermöglicht es der IDE, genauere Codevorschläge und Typüberprüfungen anzubieten und letztendlich die Entwicklungsarbeit +zu erleichtern. + +[typescript]: https://www.typescriptlang.org +[jsdoc]: https://jsdoc.app +[react]: https://react.dev +[buildless-web-development]: ../concepts-and-methods/buildless-web-development.html diff --git a/radar/2024-02-29/testcontainers.md b/radar/2024-02-29/testcontainers.md new file mode 100644 index 0000000..fc83df3 --- /dev/null +++ b/radar/2024-02-29/testcontainers.md @@ -0,0 +1,10 @@ +--- +title: Testcontainers +ring: adopt +quadrant: libraries-frameworks-and-languages +--- + +Wir haben im vergangenen Jahr gute Erfahrungen mit [Testcontainers][testcontainers] gemacht, sodass wir diese Bibliothek +neu im "Adopt"-Ring aufführen und vermehrt in unseren Projekten einsetzen möchten. + +[testcontainers]: https://www.testcontainers.org diff --git a/radar/2024-02-29/turbopack.md b/radar/2024-02-29/turbopack.md new file mode 100644 index 0000000..eadd225 --- /dev/null +++ b/radar/2024-02-29/turbopack.md @@ -0,0 +1,6 @@ +--- +title: Turbopack +ring: assess +quadrant: libraries-frameworks-and-languages +featured: false +--- diff --git a/radar/2024-02-29/typescript.md b/radar/2024-02-29/typescript.md new file mode 100644 index 0000000..2be62d0 --- /dev/null +++ b/radar/2024-02-29/typescript.md @@ -0,0 +1,5 @@ +--- +title: TypeScript +ring: adopt +quadrant: libraries-frameworks-and-languages +--- diff --git a/radar/2024-02-29/vite.md b/radar/2024-02-29/vite.md new file mode 100644 index 0000000..291edfb --- /dev/null +++ b/radar/2024-02-29/vite.md @@ -0,0 +1,27 @@ +--- +title: Vite +ring: trial +quadrant: tools +--- + +Die schnellen Kaltstarts und Reloads von [Vite][vite] haben uns überzeugt, diesen Dev-Server und Bundler +weiterzuverfolgen. Dank dessen Plugin-System von Vite können wir das Tool leicht auf unsere Bedürfnisse anpassen. + +Rund um dieses Plugin-System ist ein Ökosystem entstanden, aus dem unter anderem das vielversprechende Projekt [Zero +Config PWA][zero-config-pwa] hervorgekommen ist. Durch die aktive Community werden verschiedene Template-Engines und +Frameworks out-of-the-box unterstützt. Besonders gut gefallen uns die Kickstarter-Templates ([Native][native] und +[Community][community]). Damit lassen sich innerhalb kürzester Zeit komplette Entwicklungsumgebungen für Webanwendungen +erstellen. + +Ausserdem passt Vites Philosophie "[Pushing the Modern Web][pushing-the-modern-web]" zu unseren Einschätzungen zu +[Modern Web APIs][modern-web-apis] und [Buildless Web Development][buildless-web-development]. + +___ + +[vite]: https://vitejs.dev +[zero-config-pwa]: https://github.com/vite-pwa/vite-plugin-pwa +[native]: https://github.com/vitejs/vite/tree/main/packages/create-vite +[community]: https://github.com/vitejs/awesome-vite#templates +[pushing-the-modern-web]: https://vitejs.dev/guide/philosophy.html#pushing-the-modern-web +[modern-web-apis]: ../concepts-and-methods/modern-web-apis.html +[buildless-web-development]: ../concepts-and-methods/buildless-web-development.html diff --git a/radar/2024-02-29/web-assembly.md b/radar/2024-02-29/web-assembly.md new file mode 100644 index 0000000..aa7eb0e --- /dev/null +++ b/radar/2024-02-29/web-assembly.md @@ -0,0 +1,20 @@ +--- +title: WebAssembly +ring: assess +quadrant: platforms +--- + +Mit [WASI][wasi] gibt es Bestrebungen, WebAssembly als Technologie für Server-Workloads zu etablieren. Die Integration +von WebAssembly-Runtimes in Container-Technologien wie Docker und OpenShift verspricht leichtgewichtige und portable +Anwendungen, die serverless ausgeführt werden können.1,2 Wie relevant diese Technologien für Inventage +sind, bleibt abzuwarten. + +____ + +1: [Why Containers and WebAssembly Work Well Together][docker-blog]
+2: [Red Hat and WebAssembly][redhat-blog] + +[webassembly]: https://webassembly.org +[wasi]: https://github.com/WebAssembly/WASI +[docker-blog]: https://www.docker.com/blog/why-containers-and-webassembly-work-well-together +[redhat-blog]: https://www.redhat.com/en/blog/red-hat-and-webassembly diff --git a/radar/2024-02-29/web-components.md b/radar/2024-02-29/web-components.md new file mode 100644 index 0000000..e8f594e --- /dev/null +++ b/radar/2024-02-29/web-components.md @@ -0,0 +1,5 @@ +--- +title: Web Components +ring: adopt +quadrant: concepts-and-methods +--- diff --git a/radar/2024-02-29/web-dev-server.md b/radar/2024-02-29/web-dev-server.md new file mode 100644 index 0000000..ce4b7f1 --- /dev/null +++ b/radar/2024-02-29/web-dev-server.md @@ -0,0 +1,12 @@ +--- +title: Web Dev Server +ring: adopt +quadrant: tools +--- + +Der Einsatz des [Web Dev Server][web-dev-server] hat sich in vielen Projekten, insbesondere auch in Kombination mit +dem [Web Test Runner][web-test-runner], bewährt. Wir schätzen nach wie vor die Leichtgewichtigkeit sowie Robustheit +dieser Lösung. Sowohl die Entwicklung als auch die Tests laufen damit möglichst nahe an der Plattform. + +[web-dev-server]: https://modern-web.dev/docs/dev-server/overview +[web-test-runner]: https://modern-web.dev/docs/test-runner/overview diff --git a/radar/2024-02-29/zero-bug-policy.md b/radar/2024-02-29/zero-bug-policy.md new file mode 100644 index 0000000..9f8a6eb --- /dev/null +++ b/radar/2024-02-29/zero-bug-policy.md @@ -0,0 +1,6 @@ +--- +title: Zero Bug Policy +ring: assess +quadrant: concepts-and-methods +featured: false +--- diff --git a/scripts/build.sh b/scripts/build.sh index 7f3e834..f65bde5 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -9,4 +9,5 @@ set +a node ${SCRIPT_DIR}/patch-styles.js './build/' node ${SCRIPT_DIR}/patch-translate.js './build/' -node ${SCRIPT_DIR}/patch-flag.js './build/' +#node ${SCRIPT_DIR}/patch-flag.js './build/' +node ${SCRIPT_DIR}/patch-description.js './build/' diff --git a/scripts/patch-description.js b/scripts/patch-description.js new file mode 100644 index 0000000..c46c3cd --- /dev/null +++ b/scripts/patch-description.js @@ -0,0 +1,30 @@ +const replace = require('replace-in-file') + +var buildPath = './build/' +if (process.argv.length > 2) { + buildPath = process.argv[2]; +} + +const replacements = [ + { + from: 'name=\"description\" content=\"Tech-Radar\"', + to: 'name=\"description\" content=\"Welche neuen Trends gibt es in der Software Entwicklung? Welche Innovationen sind vielversprechend und welche werden bald wieder vergessen sein? Im Inventage Tech-Radar publizieren wir unsere Sicht auf Innovationen und Trends in den Bereichen Technologien, Tools, Methoden und Programmiersprachen.\"' + } +] + +for (const index in replacements) { + console.log('Replace:', replacements[index]) + + const options = { + files: buildPath + 'index.html', + from: replacements[index].from, + to: replacements[index].to, + }; + + try { + const results = replace.sync(options); + console.log('Replacement results:', results, '\n'); + } catch (error) { + console.error('Error occurred:', error); + } +}