SlideShare a Scribd company logo
Everything-as-code.
Eine vielsprachige Reise.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 1
#whoami
Mario-Leander Reimer
Cheftechnologe, QAware GmbH
4 Vollblut Entwickler && Architekt
4 #CloudNativeNerd
4 Open Source Enthusiast
mario-leander.reimer@qaware.de
http://github.com/lreimer
http://speakerdeck.com/lreimer
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 2
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 3
Welche Sprache verwenden
echte Programmierer?
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 4
Meine #FirstSevenLanguages
4 Pascal
4 Basic
4 C / C++
4 Assembler
4 PHP
4 Java
4 C#
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 5
Meine #LastSevenLanguages
4 Java
4 Groovy
4 TypeScript
4 Ruby
4 Kotlin
4 Scala
4 Go
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 6
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 7
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 8
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 9
Es gibt keine einstimmige Meinung ...
4 http://spectrum.ieee.org/computing/software/
the-2016-top-programming-languages
4 https://www.sitepoint.com/whats-best-
programming-language-learn-2015/
4 https://jaxenter.de/programmiersprachen-rankings-
q1-2017-54308
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 10
Die beste Programmiersprache gibt es nicht!
Auf den Kontext kommt es an.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 11
Die IDE ist unsere Werkbank.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 12
Unsere Definition von Software Industrialisierung
4 Hat nichts mit billiger Arbeitskraft zu tun!
4 Hoher Automatisiersgrad von arbeitsintensiven und
wiederkehrenden Arbeitsschritten
4 Höhere Software-Qualität durch abgestimmte Tool-Chain
4 Mehr Produktivität und Zufriedenheit der Teams
4 Bessere Kosten-Effizienz und Wettbewerbsfähigkeit
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 13
Wäre es nicht cool wenn ...
open fun everythingAsCode() : Boolean {
everytingIsMadeFromCode() && everythingIsMadeByCode()
}
val softwareIndustrialization = everythingAsCode()
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 14
The Quest for an ideal Polyglot Project Archetype
4 Welche Sprachen werden in unseren Projekten verwendet?
4 Welche Tools verwenden wir für Setup, Build, Code, Test,
CI, Infrastructure und Dokumentation?
4 Was davon hat sich bewährt und was eher nicht?
4 Gibt es bereits Best Practices für den Einsatz in der Praxis?
+ Wishful GreenfieldThinking!
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 15
SEU-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 16
Lightweight Developer Provisioning mit Gradle
4 [ SEU ] -> Software Entwicklungs Umgebung
4 Nutzung von Gradle als Build-Tool für das Setup und die
Aktualisierung unserer Entwicklungsumgebungen
4 Software-Pakete werden als Dependencies ausgedrückt
4 Gradle Tasks and Groovy Skripte statt Shell-Scripting
4 Versionskontrolle der SEU Definition und Skripte
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 17
plugins { id 'de.qaware.seu.as.code.base' version '2.4.0' }
import static de.qaware.seu.as.code.plugins.base.Platform.isMac
seuAsCode {
seuHome = { if (isMac()) '/Volumes/Everything-as-code' else 'Y:' }
projectName = 'Everything-as-code'
}
dependencies {
// list of software dependencies ...
software 'org.groovy-lang:groovy:2.4.7'
software 'org.scala-lang:scala:2.11.8'
software 'org.jruby:jruby:9.1.4.0'
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 18
Build-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 19
Maven ist gut. Gradle ist besser.
4 Sehr flexibel und vielseitig einsetzbar.
4 Einfache Unterstützung für Polyglotte Projekte.
4 Build Skripte sind maximal kurz und prägnant.
4 Drastisch reduzierte Build-Zeiten durch Incremental Builds.
4 Zahlreiche neue Features: Composite Builds, Kotlin-basierte
Build-Skripte, Performance Verbesserungen, ...
4 Regelmäßige Releases. Stabil und ausgereift.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 20
apply plugin: 'application'
apply plugin: 'war'
apply plugin: 'kotlin'
apply plugin: 'groovy'
repositories { jcenter() }
dependencies {
providedCompile 'fish.payara.extras:payara-micro:4.1.1.163'
// and many more ...
}
task everythingAsCode() << {
println 'Everything-as-code @ OOP 2017.'
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 21
Main-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 22
Java ist nach wie vor die primäre Implementierungssprache!
Und das ist gut so!
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 23
Für die Mutigen: Kotlin als ernsthafte
Alternative zu Java.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 24
Warum Kotlin? Und nicht Scala, Clojure, ...
4 Für Java Entwickler sehr schnell zu erlernen.
4 Sehr ausgewogene Universalsprache.
4 Null Safety + jede Menge andere nützliche Features.
4 JDK6 kompatibel. Kleine Library-Größe.
4 Sehr guter IDE Support.
4 Wishful GreenfieldThinking.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 25
@JsonIgnoreProperties(ignoreUnknown = true)
data class Book(val title: String, val isbn: String, val author: String) { }
@ApplicationScoped
open class Bookshelf {
private val books = listOf(Book("The Hitchhiker's Guide to the Galaxy", "0345391802"))
open fun byIsbn(isbn: String): Book? = books.find { it.isbn == isbn }
}
@Path("books")
@Produces(MediaType.APPLICATION_JSON)
open class BookResource @Inject constructor(private val bookshelf: Bookshelf) {
@GET @Path("/{isbn}")
open fun byIsbn(@PathParam("isbn") isbn: String): Response {
val book = bookshelf.byIsbn(isbn)
return if (book != null) Response.ok(book).build() else Response.status(Status.NOT_FOUND).build()
}
}
@ApplicationPath("api")
class BookstoreAPI : Application() {
override fun getClasses() = hashSetOf(JacksonFeature::class.java, BookResource::class.java)
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 26
Frontend-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 27
Willkommen in der JavaScript Wunderwelt.
4 Ein Universum für sich!
4 Klarer Trend: Single Page Webapplikationen.
4 HTML5 + CSS3 + ?
4 ? = TypeScript oder
4 ? = ECMAScript2015 + Babel
4 Rückgrat des Builds: node + npm + webpack
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 28
Test-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 29
Groovy und Spock für Unit & Integration Tests
class BookshelfSpec extends Specification {
@Subject
def bookshelf = new Bookshelf()
@Unroll
def "Find book #title by ISBN #isbn"() {
when: 'we search a book by ISBN'
def book = bookshelf.byIsbn(isbn)
then: 'the title and author are correct'
book?.title == title
book?.author == author
where:
isbn || title | author
"0345391802" || "The Hitchhiker's Guide to the Galaxy" | "Douglas Adams"
"0345391829" || "Life, the Universe and Everything" | "Douglas Adams"
}
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 30
Scala und Gatling für Last-Tests
class BooksPerformanceTest extends Simulation {
val conf = http.baseURL("http://localhost:18080").acceptHeader("application/json")
val feeder = csv("books.csv").random
val scn = scenario("Book Search")
.exec(http("Get all books").get("/api/books"))
.during(30 seconds) {
feed(feeder)
.exec(http("Get book by title ${Title}").get("/api/books?title=${Title}"))
.pause(1 second)
.exec(http("Get book with ISBN ${ISBN}").get("/api/books/${ISBN}"))
}
setUp(scn.inject(atOnceUsers(10), rampUsers(50) over (30 seconds)))
.assertions(global.responseTime.max.lessThan(5000))
.protocols(conf)
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 31
Pipeline-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 32
Definition der Build-Pipeline per Jenkinsfile
#!/usr/bin/env groovy
node {
stage 'Checkout SCM'
checkout scm
stage 'Build/Analyse/Test'
sh './gradlew clean build'
archiveUnitTestResults()
archiveDistributions()
stage 'Dockerize'
sh './gradlew buildDockerImage'
stage 'Generate Documentation'
sh './gradlew asciidoctor'
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 33
Infrastructure-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 34
Docker, Docker, Docker, ...
FROM qaware-oss-docker-registry.bintray.io/base/debian8-jre8
MAINTAINER M.-Leander Reimer <mario-leander.reimer@qaware.de>
RUN mkdir -p /app
ADD build/distributions/everything-as-code-1.2.0.tar /app
WORKDIR /app/everything-as-code-1.2.0
RUN chmod 755 bin/everything-as-code
EXPOSE 18080
CMD ./bin/everything-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 35
Vagrant und Ruby zum Setup lokaler VMs
require 'yaml'
$setup = <<SCRIPT
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install -y ansible sshpass
SCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/trusty32"
settings = YAML.load_file 'src/vagrant/vagrant.yml'
config.vm.provider "virtualbox" do |vb|
vb.name = settings['vm']['name']
vb.gui = false
vb.memory = "512"
end
config.vm.provision "shell", inline: $setup
end
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 36
Provisionierung mit Ansible (und Python)
---
# file: jenkinsci.yml
- hosts: jenkinsci
remote_user: root
tasks:
- debug: msg="Creating a Jenkins pipeline job on {{ inventory_hostname }}"
- jenkins_job:
name: Everything-as-code Pipeline
config: "{{ lookup('file', 'templates/pipeline-job.xml') }}"
url: "http://{{ inventory_hostname }}"
user: admin
password: admin
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 37
Cluster Orchestration mit Kubernetes
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: everything-as-code
spec:
replicas: 3
template:
metadata:
labels:
tier: backend
spec:
containers:
- name: everything-as-code
image: "qaware-oss-docker-registry.bintray.io/lreimer/everything-as-code:1.2.0"
ports:
- containerPort: 18080
env:
- name: PORT
value: 18080
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 38
Documentation-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 39
Ja, wir brauchen Dokumentation!
4 Und nein. Der Quellcode ist nicht genug!
4 Technische Dokumente mit Word sind ! " #
4 Dokumentation sollte neben dem Quellcode liegen:
change code, change docs.
4 Schnell und einfach zu schreiben.
4 Unterstützung für Code, Bilder, Diagramme
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 40
// Beispiel Architektur-Dokumentation mit arc42 (https://arc42.github.io)
:imagesdir: ./images
= image:qaware-logo.png[QAware GmbH,2016] Everything-as-code
:toc-title: Table of Contents
:toc:
[[section-introduction-and-goals]]
== Introduction and Goals
The introduction to the architecture documentation should list the driving forces
that software architects must consider in their decisions.
=== Requirements Overview
=== Quality Goals
=== Stakeholders
<<<<
include::02_architecture_constraints.adoc[]
// further includes for the remaining sections
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 41
AsciidoctorJ und Gradle to the Rescue
plugins { id "org.asciidoctor.convert" version "1.5.3" }
asciidoctorj { version = '1.5.4.1' }
asciidoctor {
sourceDir 'src/docs/architecture'
resources {
from('src/docs/architecture') {
include 'images/**/*.png'
include 'images/**/*.jpg'
}
}
backends 'html5'
options doctype: 'article'
attributes 'source-highlighter': 'coderay'
}
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 42
Presentation-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 43
These slides were written in Markdown.
---
## [fit] These slides were written in Markdown.
- This is for real programmers! :smiley:
- Several open source projects available
- Use HTML and JavaScript alternatively.
---
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 44
Heutige Projekte sind
vielsprachig.
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 45
Zeitgemäße Entwickler
müssen
vielsprachig sein!
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 46
Wir alle müssen unsere Hausaufgaben machen.
4 Entwickler: Be polyglot, keep learning!
4 Architekten: Die richtige Sprache ist stark abhängig
vom jeweiligen Projekt-Kontext. Choose wisely!
4 Project Managers: Give your techies freedom!
4 Universities: Unterrichtet vielsprachig!
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 47
Fork me on GitHub.
https://github.com/lreimer/everything-as-code
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 48
We are hiring.
http://www.qaware.de/karriere/#jobs
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 49
Thanks! Questions?
// JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 50

More Related Content

What's hot

Plack at OSCON 2010
Plack at OSCON 2010Plack at OSCON 2010
Plack at OSCON 2010
Tatsuhiko Miyagawa
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011
leo lapworth
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!
Corneil du Plessis
 
How to make a Ruby Gem - Austin on Rails, January 2014
How to make a Ruby Gem - Austin on Rails, January 2014How to make a Ruby Gem - Austin on Rails, January 2014
How to make a Ruby Gem - Austin on Rails, January 2014
Clare Glinka
 
Serverless 프레임워크로 Nuxt 앱 배포하기
Serverless 프레임워크로 Nuxt 앱 배포하기Serverless 프레임워크로 Nuxt 앱 배포하기
Serverless 프레임워크로 Nuxt 앱 배포하기
Changwan Jun
 
Nodejs Event Driven Concurrency for Web Applications
Nodejs Event Driven Concurrency for Web ApplicationsNodejs Event Driven Concurrency for Web Applications
Nodejs Event Driven Concurrency for Web Applications
Ganesh Iyer
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
Harsha Vashisht
 
I can't believe it's not a queue: Kafka and Spring
I can't believe it's not a queue: Kafka and SpringI can't believe it's not a queue: Kafka and Spring
I can't believe it's not a queue: Kafka and Spring
Joe Kutner
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Codemotion
 
Nashorn
NashornNashorn
Nashorn
Everett Toews
 
Lisp in the Cloud
Lisp in the CloudLisp in the Cloud
Lisp in the Cloud
Mike Travers
 
Infrastructure as Code 삽질기
Infrastructure as Code 삽질기Infrastructure as Code 삽질기
Infrastructure as Code 삽질기
Changwan Jun
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014
Claus Ibsen
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
Ramnivas Laddad
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
Dinesh U
 
Developing Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containersDeveloping Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containers
Claus Ibsen
 
Nashorn: JavaScript that doesn’t suck (ILJUG)
Nashorn: JavaScript that doesn’t suck (ILJUG)Nashorn: JavaScript that doesn’t suck (ILJUG)
Nashorn: JavaScript that doesn’t suck (ILJUG)
Tomer Gabel
 
Scala Matsuri 2017
Scala Matsuri 2017Scala Matsuri 2017
Scala Matsuri 2017
Yoshitaka Fujii
 
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Codemotion
 

What's hot (19)

Plack at OSCON 2010
Plack at OSCON 2010Plack at OSCON 2010
Plack at OSCON 2010
 
Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011Plack basics for Perl websites - YAPC::EU 2011
Plack basics for Perl websites - YAPC::EU 2011
 
Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!Gradle: The Build System you have been waiting for!
Gradle: The Build System you have been waiting for!
 
How to make a Ruby Gem - Austin on Rails, January 2014
How to make a Ruby Gem - Austin on Rails, January 2014How to make a Ruby Gem - Austin on Rails, January 2014
How to make a Ruby Gem - Austin on Rails, January 2014
 
Serverless 프레임워크로 Nuxt 앱 배포하기
Serverless 프레임워크로 Nuxt 앱 배포하기Serverless 프레임워크로 Nuxt 앱 배포하기
Serverless 프레임워크로 Nuxt 앱 배포하기
 
Nodejs Event Driven Concurrency for Web Applications
Nodejs Event Driven Concurrency for Web ApplicationsNodejs Event Driven Concurrency for Web Applications
Nodejs Event Driven Concurrency for Web Applications
 
hacking with node.JS
hacking with node.JShacking with node.JS
hacking with node.JS
 
I can't believe it's not a queue: Kafka and Spring
I can't believe it's not a queue: Kafka and SpringI can't believe it's not a queue: Kafka and Spring
I can't believe it's not a queue: Kafka and Spring
 
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
Alberto Maria Angelo Paro - Isomorphic programming in Scala and WebDevelopmen...
 
Nashorn
NashornNashorn
Nashorn
 
Lisp in the Cloud
Lisp in the CloudLisp in the Cloud
Lisp in the Cloud
 
Infrastructure as Code 삽질기
Infrastructure as Code 삽질기Infrastructure as Code 삽질기
Infrastructure as Code 삽질기
 
Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014Getting Started with Apache Camel at DevNation 2014
Getting Started with Apache Camel at DevNation 2014
 
Full Stack Scala
Full Stack ScalaFull Stack Scala
Full Stack Scala
 
Introduction to node.js
Introduction to node.jsIntroduction to node.js
Introduction to node.js
 
Developing Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containersDeveloping Java based microservices ready for the world of containers
Developing Java based microservices ready for the world of containers
 
Nashorn: JavaScript that doesn’t suck (ILJUG)
Nashorn: JavaScript that doesn’t suck (ILJUG)Nashorn: JavaScript that doesn’t suck (ILJUG)
Nashorn: JavaScript that doesn’t suck (ILJUG)
 
Scala Matsuri 2017
Scala Matsuri 2017Scala Matsuri 2017
Scala Matsuri 2017
 
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
Dan Persa, Maximilian Fellner - The recipe for scalable frontends - Codemotio...
 

Similar to Everything-as-code. Eine vielsprachige Reise. #javaland

Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
Mario-Leander Reimer
 
Everything-as-code. Ein polyglottes Abenteuer. #jax2017
Everything-as-code. Ein polyglottes Abenteuer. #jax2017Everything-as-code. Ein polyglottes Abenteuer. #jax2017
Everything-as-code. Ein polyglottes Abenteuer. #jax2017
Mario-Leander Reimer
 
Polyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java DeveloperPolyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java Developer
QAware GmbH
 
Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017
Mario-Leander Reimer
 
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
Mario-Leander Reimer
 
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
QAware GmbH
 
Everything-as-code - a polyglot journey.
Everything-as-code - a polyglot journey.Everything-as-code - a polyglot journey.
Everything-as-code - a polyglot journey.
QAware GmbH
 
Everything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPLEverything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPL
Mario-Leander Reimer
 
Everything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventureEverything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventure
QAware GmbH
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson
GWTcon
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in Swift
Wan Muzaffar Wan Hashim
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
Brian Sam-Bodden
 
Getting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle pluginGetting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle plugin
tobiaspreuss
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
Rutenis Turcinas
 
A few good JavaScript development tools
A few good JavaScript development toolsA few good JavaScript development tools
A few good JavaScript development tools
Simon Kim
 
DSLs in JavaScript
DSLs in JavaScriptDSLs in JavaScript
DSLs in JavaScript
elliando dias
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
David Padbury
 
Webpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San FranciscoWebpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San Francisco
Ryan Weaver
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
Marcel Bruch
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practices
Vitali Pekelis
 

Similar to Everything-as-code. Eine vielsprachige Reise. #javaland (20)

Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
Everything as-code. Polyglotte Entwicklung in der Praxis. #oop2017
 
Everything-as-code. Ein polyglottes Abenteuer. #jax2017
Everything-as-code. Ein polyglottes Abenteuer. #jax2017Everything-as-code. Ein polyglottes Abenteuer. #jax2017
Everything-as-code. Ein polyglottes Abenteuer. #jax2017
 
Polyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java DeveloperPolyglot Adventures for the Modern Java Developer
Polyglot Adventures for the Modern Java Developer
 
Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017Polyglot Adventures for the Modern Java Developer #javaone2017
Polyglot Adventures for the Modern Java Developer #javaone2017
 
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers....
 
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
Everything-as-code: DevOps und Continuous Delivery aus Sicht des Entwicklers.
 
Everything-as-code - a polyglot journey.
Everything-as-code - a polyglot journey.Everything-as-code - a polyglot journey.
Everything-as-code - a polyglot journey.
 
Everything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPLEverything-as-code. A polyglot adventure. #DevoxxPL
Everything-as-code. A polyglot adventure. #DevoxxPL
 
Everything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventureEverything-as-code - A polyglot adventure
Everything-as-code - A polyglot adventure
 
"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson"Xapi-lang For declarative code generation" By James Nelson
"Xapi-lang For declarative code generation" By James Nelson
 
Cocoapods and Most common used library in Swift
Cocoapods and Most common used library in SwiftCocoapods and Most common used library in Swift
Cocoapods and Most common used library in Swift
 
Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013Rspec and Capybara Intro Tutorial at RailsConf 2013
Rspec and Capybara Intro Tutorial at RailsConf 2013
 
Getting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle pluginGetting started with building your own standalone Gradle plugin
Getting started with building your own standalone Gradle plugin
 
TypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack DevelopersTypeScript - Silver Bullet for the Full-stack Developers
TypeScript - Silver Bullet for the Full-stack Developers
 
A few good JavaScript development tools
A few good JavaScript development toolsA few good JavaScript development tools
A few good JavaScript development tools
 
DSLs in JavaScript
DSLs in JavaScriptDSLs in JavaScript
DSLs in JavaScript
 
HTML5 for the Silverlight Guy
HTML5 for the Silverlight GuyHTML5 for the Silverlight Guy
HTML5 for the Silverlight Guy
 
Webpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San FranciscoWebpack Encore Symfony Live 2017 San Francisco
Webpack Encore Symfony Live 2017 San Francisco
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
 
How to build Sdk? Best practices
How to build Sdk? Best practicesHow to build Sdk? Best practices
How to build Sdk? Best practices
 

More from Mario-Leander Reimer

Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
Mario-Leander Reimer
 
A Hitchhiker's Guide to Cloud Native Java EE
A Hitchhiker's Guide to Cloud Native Java EEA Hitchhiker's Guide to Cloud Native Java EE
A Hitchhiker's Guide to Cloud Native Java EE
Mario-Leander Reimer
 
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen EvolutionSteinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
Mario-Leander Reimer
 
Das kleine Einmaleins der sicheren Architektur @heise_devSec
Das kleine Einmaleins der sicheren Architektur @heise_devSecDas kleine Einmaleins der sicheren Architektur @heise_devSec
Das kleine Einmaleins der sicheren Architektur @heise_devSec
Mario-Leander Reimer
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Mario-Leander Reimer
 
Cloud-native .NET-Microservices mit Kubernetes @BASTAcon
Cloud-native .NET-Microservices mit Kubernetes @BASTAconCloud-native .NET-Microservices mit Kubernetes @BASTAcon
Cloud-native .NET-Microservices mit Kubernetes @BASTAcon
Mario-Leander Reimer
 
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPLA Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
Mario-Leander Reimer
 
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
Mario-Leander Reimer
 
Per Anhalter durch den Cloud Native Stack. #SEACONHH
Per Anhalter durch den Cloud Native Stack. #SEACONHHPer Anhalter durch den Cloud Native Stack. #SEACONHH
Per Anhalter durch den Cloud Native Stack. #SEACONHH
Mario-Leander Reimer
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Mario-Leander Reimer
 
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEuropeDer Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
Mario-Leander Reimer
 
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConfA Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
Mario-Leander Reimer
 
Secure Architecture and Programming 101
Secure Architecture and Programming 101Secure Architecture and Programming 101
Secure Architecture and Programming 101
Mario-Leander Reimer
 
Automotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache SolrAutomotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache Solr
Mario-Leander Reimer
 
Automotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache SolrAutomotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache Solr
Mario-Leander Reimer
 
Kubernetes 101 and Fun
Kubernetes 101 and FunKubernetes 101 and Fun
Kubernetes 101 and Fun
Mario-Leander Reimer
 
Lightweight Developer Provisioning with Gradle
Lightweight Developer Provisioning with GradleLightweight Developer Provisioning with Gradle
Lightweight Developer Provisioning with Gradle
Mario-Leander Reimer
 
Lightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-codeLightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-code
Mario-Leander Reimer
 
Secure JEE Architecture and Programming 101
Secure JEE Architecture and Programming 101Secure JEE Architecture and Programming 101
Secure JEE Architecture and Programming 101
Mario-Leander Reimer
 
Search-based business intelligence and reverse data engineering with Apache Solr
Search-based business intelligence and reverse data engineering with Apache SolrSearch-based business intelligence and reverse data engineering with Apache Solr
Search-based business intelligence and reverse data engineering with Apache Solr
Mario-Leander Reimer
 

More from Mario-Leander Reimer (20)

Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
Steinzeit war gestern! Vielfältige Wege der Cloud-nativen Evolution.
 
A Hitchhiker's Guide to Cloud Native Java EE
A Hitchhiker's Guide to Cloud Native Java EEA Hitchhiker's Guide to Cloud Native Java EE
A Hitchhiker's Guide to Cloud Native Java EE
 
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen EvolutionSteinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
Steinzeit war gestern! Die vielfältigen Wege der Cloud-nativen Evolution
 
Das kleine Einmaleins der sicheren Architektur @heise_devSec
Das kleine Einmaleins der sicheren Architektur @heise_devSecDas kleine Einmaleins der sicheren Architektur @heise_devSec
Das kleine Einmaleins der sicheren Architektur @heise_devSec
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
 
Cloud-native .NET-Microservices mit Kubernetes @BASTAcon
Cloud-native .NET-Microservices mit Kubernetes @BASTAconCloud-native .NET-Microservices mit Kubernetes @BASTAcon
Cloud-native .NET-Microservices mit Kubernetes @BASTAcon
 
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPLA Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
A Hitchhiker’s Guide to the Cloud Native Stack. #DevoxxPL
 
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
A Hitchhiker’s Guide to the Cloud Native Stack. #CDS17
 
Per Anhalter durch den Cloud Native Stack. #SEACONHH
Per Anhalter durch den Cloud Native Stack. #SEACONHHPer Anhalter durch den Cloud Native Stack. #SEACONHH
Per Anhalter durch den Cloud Native Stack. #SEACONHH
 
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
Per Anhalter durch den Cloud Native Stack (Extended Edition) #oop2017
 
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEuropeDer Cloud Native Stack in a Nutshell. #CloudExpoEurope
Der Cloud Native Stack in a Nutshell. #CloudExpoEurope
 
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConfA Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
A Hitchhiker’s Guide to the Cloud Native Stack. #ContainerConf
 
Secure Architecture and Programming 101
Secure Architecture and Programming 101Secure Architecture and Programming 101
Secure Architecture and Programming 101
 
Automotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache SolrAutomotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache Solr
 
Automotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache SolrAutomotive Information Research driven by Apache Solr
Automotive Information Research driven by Apache Solr
 
Kubernetes 101 and Fun
Kubernetes 101 and FunKubernetes 101 and Fun
Kubernetes 101 and Fun
 
Lightweight Developer Provisioning with Gradle
Lightweight Developer Provisioning with GradleLightweight Developer Provisioning with Gradle
Lightweight Developer Provisioning with Gradle
 
Lightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-codeLightweight Developer Provisioning with Gradle and SEU-as-code
Lightweight Developer Provisioning with Gradle and SEU-as-code
 
Secure JEE Architecture and Programming 101
Secure JEE Architecture and Programming 101Secure JEE Architecture and Programming 101
Secure JEE Architecture and Programming 101
 
Search-based business intelligence and reverse data engineering with Apache Solr
Search-based business intelligence and reverse data engineering with Apache SolrSearch-based business intelligence and reverse data engineering with Apache Solr
Search-based business intelligence and reverse data engineering with Apache Solr
 

Recently uploaded

ACE - Team 24 Wrapup event at ahmedabad.
ACE - Team 24 Wrapup event at ahmedabad.ACE - Team 24 Wrapup event at ahmedabad.
ACE - Team 24 Wrapup event at ahmedabad.
Maitrey Patel
 
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
OnePlan Solutions
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
kalichargn70th171
 
How GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdfHow GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdf
Zycus
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
dakas1
 
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdfThe Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
kalichargn70th171
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
Tier1 app
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
Pedro J. Molina
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
kalichargn70th171
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
campbellclarkson
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
Drona Infotech
 
Penify - Let AI do the Documentation, you write the Code.
Penify - Let AI do the Documentation, you write the Code.Penify - Let AI do the Documentation, you write the Code.
Penify - Let AI do the Documentation, you write the Code.
KrishnaveniMohan1
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
kalichargn70th171
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
gapen1
 
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
Luigi Fugaro
 
Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...
Paul Brebner
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
Reetu63
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 

Recently uploaded (20)

ACE - Team 24 Wrapup event at ahmedabad.
ACE - Team 24 Wrapup event at ahmedabad.ACE - Team 24 Wrapup event at ahmedabad.
ACE - Team 24 Wrapup event at ahmedabad.
 
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...Transforming Product Development using OnePlan To Boost Efficiency and Innova...
Transforming Product Development using OnePlan To Boost Efficiency and Innova...
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
 
How GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdfHow GenAI Can Improve Supplier Performance Management.pdf
How GenAI Can Improve Supplier Performance Management.pdf
 
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
一比一原版(UMN毕业证)明尼苏达大学毕业证如何办理
 
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdfThe Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
 
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSISDECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
DECODING JAVA THREAD DUMPS: MASTER THE ART OF ANALYSIS
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
 
Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
bgiolcb
bgiolcbbgiolcb
bgiolcb
 
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
A Comprehensive Guide on Implementing Real-World Mobile Testing Strategies fo...
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
 
Mobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona InfotechMobile App Development Company In Noida | Drona Infotech
Mobile App Development Company In Noida | Drona Infotech
 
Penify - Let AI do the Documentation, you write the Code.
Penify - Let AI do the Documentation, you write the Code.Penify - Let AI do the Documentation, you write the Code.
Penify - Let AI do the Documentation, you write the Code.
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
 
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
如何办理(hull学位证书)英国赫尔大学毕业证硕士文凭原版一模一样
 
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
WMF 2024 - Unlocking the Future of Data Powering Next-Gen AI with Vector Data...
 
Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...Superpower Your Apache Kafka Applications Development with Complementary Open...
Superpower Your Apache Kafka Applications Development with Complementary Open...
 
ppt on the brain chip neuralink.pptx
ppt  on   the brain  chip neuralink.pptxppt  on   the brain  chip neuralink.pptx
ppt on the brain chip neuralink.pptx
 
一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 

Everything-as-code. Eine vielsprachige Reise. #javaland

  • 1. Everything-as-code. Eine vielsprachige Reise. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 1
  • 2. #whoami Mario-Leander Reimer Cheftechnologe, QAware GmbH 4 Vollblut Entwickler && Architekt 4 #CloudNativeNerd 4 Open Source Enthusiast mario-leander.reimer@qaware.de http://github.com/lreimer http://speakerdeck.com/lreimer // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 2
  • 3. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 3
  • 4. Welche Sprache verwenden echte Programmierer? // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 4
  • 5. Meine #FirstSevenLanguages 4 Pascal 4 Basic 4 C / C++ 4 Assembler 4 PHP 4 Java 4 C# // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 5
  • 6. Meine #LastSevenLanguages 4 Java 4 Groovy 4 TypeScript 4 Ruby 4 Kotlin 4 Scala 4 Go // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 6
  • 7. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 7
  • 8. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 8
  • 9. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 9
  • 10. Es gibt keine einstimmige Meinung ... 4 http://spectrum.ieee.org/computing/software/ the-2016-top-programming-languages 4 https://www.sitepoint.com/whats-best- programming-language-learn-2015/ 4 https://jaxenter.de/programmiersprachen-rankings- q1-2017-54308 // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 10
  • 11. Die beste Programmiersprache gibt es nicht! Auf den Kontext kommt es an. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 11
  • 12. Die IDE ist unsere Werkbank. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 12
  • 13. Unsere Definition von Software Industrialisierung 4 Hat nichts mit billiger Arbeitskraft zu tun! 4 Hoher Automatisiersgrad von arbeitsintensiven und wiederkehrenden Arbeitsschritten 4 Höhere Software-Qualität durch abgestimmte Tool-Chain 4 Mehr Produktivität und Zufriedenheit der Teams 4 Bessere Kosten-Effizienz und Wettbewerbsfähigkeit // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 13
  • 14. Wäre es nicht cool wenn ... open fun everythingAsCode() : Boolean { everytingIsMadeFromCode() && everythingIsMadeByCode() } val softwareIndustrialization = everythingAsCode() // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 14
  • 15. The Quest for an ideal Polyglot Project Archetype 4 Welche Sprachen werden in unseren Projekten verwendet? 4 Welche Tools verwenden wir für Setup, Build, Code, Test, CI, Infrastructure und Dokumentation? 4 Was davon hat sich bewährt und was eher nicht? 4 Gibt es bereits Best Practices für den Einsatz in der Praxis? + Wishful GreenfieldThinking! // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 15
  • 16. SEU-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 16
  • 17. Lightweight Developer Provisioning mit Gradle 4 [ SEU ] -> Software Entwicklungs Umgebung 4 Nutzung von Gradle als Build-Tool für das Setup und die Aktualisierung unserer Entwicklungsumgebungen 4 Software-Pakete werden als Dependencies ausgedrückt 4 Gradle Tasks and Groovy Skripte statt Shell-Scripting 4 Versionskontrolle der SEU Definition und Skripte // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 17
  • 18. plugins { id 'de.qaware.seu.as.code.base' version '2.4.0' } import static de.qaware.seu.as.code.plugins.base.Platform.isMac seuAsCode { seuHome = { if (isMac()) '/Volumes/Everything-as-code' else 'Y:' } projectName = 'Everything-as-code' } dependencies { // list of software dependencies ... software 'org.groovy-lang:groovy:2.4.7' software 'org.scala-lang:scala:2.11.8' software 'org.jruby:jruby:9.1.4.0' } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 18
  • 19. Build-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 19
  • 20. Maven ist gut. Gradle ist besser. 4 Sehr flexibel und vielseitig einsetzbar. 4 Einfache Unterstützung für Polyglotte Projekte. 4 Build Skripte sind maximal kurz und prägnant. 4 Drastisch reduzierte Build-Zeiten durch Incremental Builds. 4 Zahlreiche neue Features: Composite Builds, Kotlin-basierte Build-Skripte, Performance Verbesserungen, ... 4 Regelmäßige Releases. Stabil und ausgereift. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 20
  • 21. apply plugin: 'application' apply plugin: 'war' apply plugin: 'kotlin' apply plugin: 'groovy' repositories { jcenter() } dependencies { providedCompile 'fish.payara.extras:payara-micro:4.1.1.163' // and many more ... } task everythingAsCode() << { println 'Everything-as-code @ OOP 2017.' } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 21
  • 22. Main-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 22
  • 23. Java ist nach wie vor die primäre Implementierungssprache! Und das ist gut so! // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 23
  • 24. Für die Mutigen: Kotlin als ernsthafte Alternative zu Java. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 24
  • 25. Warum Kotlin? Und nicht Scala, Clojure, ... 4 Für Java Entwickler sehr schnell zu erlernen. 4 Sehr ausgewogene Universalsprache. 4 Null Safety + jede Menge andere nützliche Features. 4 JDK6 kompatibel. Kleine Library-Größe. 4 Sehr guter IDE Support. 4 Wishful GreenfieldThinking. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 25
  • 26. @JsonIgnoreProperties(ignoreUnknown = true) data class Book(val title: String, val isbn: String, val author: String) { } @ApplicationScoped open class Bookshelf { private val books = listOf(Book("The Hitchhiker's Guide to the Galaxy", "0345391802")) open fun byIsbn(isbn: String): Book? = books.find { it.isbn == isbn } } @Path("books") @Produces(MediaType.APPLICATION_JSON) open class BookResource @Inject constructor(private val bookshelf: Bookshelf) { @GET @Path("/{isbn}") open fun byIsbn(@PathParam("isbn") isbn: String): Response { val book = bookshelf.byIsbn(isbn) return if (book != null) Response.ok(book).build() else Response.status(Status.NOT_FOUND).build() } } @ApplicationPath("api") class BookstoreAPI : Application() { override fun getClasses() = hashSetOf(JacksonFeature::class.java, BookResource::class.java) } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 26
  • 27. Frontend-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 27
  • 28. Willkommen in der JavaScript Wunderwelt. 4 Ein Universum für sich! 4 Klarer Trend: Single Page Webapplikationen. 4 HTML5 + CSS3 + ? 4 ? = TypeScript oder 4 ? = ECMAScript2015 + Babel 4 Rückgrat des Builds: node + npm + webpack // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 28
  • 29. Test-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 29
  • 30. Groovy und Spock für Unit & Integration Tests class BookshelfSpec extends Specification { @Subject def bookshelf = new Bookshelf() @Unroll def "Find book #title by ISBN #isbn"() { when: 'we search a book by ISBN' def book = bookshelf.byIsbn(isbn) then: 'the title and author are correct' book?.title == title book?.author == author where: isbn || title | author "0345391802" || "The Hitchhiker's Guide to the Galaxy" | "Douglas Adams" "0345391829" || "Life, the Universe and Everything" | "Douglas Adams" } } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 30
  • 31. Scala und Gatling für Last-Tests class BooksPerformanceTest extends Simulation { val conf = http.baseURL("http://localhost:18080").acceptHeader("application/json") val feeder = csv("books.csv").random val scn = scenario("Book Search") .exec(http("Get all books").get("/api/books")) .during(30 seconds) { feed(feeder) .exec(http("Get book by title ${Title}").get("/api/books?title=${Title}")) .pause(1 second) .exec(http("Get book with ISBN ${ISBN}").get("/api/books/${ISBN}")) } setUp(scn.inject(atOnceUsers(10), rampUsers(50) over (30 seconds))) .assertions(global.responseTime.max.lessThan(5000)) .protocols(conf) } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 31
  • 32. Pipeline-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 32
  • 33. Definition der Build-Pipeline per Jenkinsfile #!/usr/bin/env groovy node { stage 'Checkout SCM' checkout scm stage 'Build/Analyse/Test' sh './gradlew clean build' archiveUnitTestResults() archiveDistributions() stage 'Dockerize' sh './gradlew buildDockerImage' stage 'Generate Documentation' sh './gradlew asciidoctor' } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 33
  • 34. Infrastructure-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 34
  • 35. Docker, Docker, Docker, ... FROM qaware-oss-docker-registry.bintray.io/base/debian8-jre8 MAINTAINER M.-Leander Reimer <mario-leander.reimer@qaware.de> RUN mkdir -p /app ADD build/distributions/everything-as-code-1.2.0.tar /app WORKDIR /app/everything-as-code-1.2.0 RUN chmod 755 bin/everything-as-code EXPOSE 18080 CMD ./bin/everything-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 35
  • 36. Vagrant und Ruby zum Setup lokaler VMs require 'yaml' $setup = <<SCRIPT sudo apt-add-repository ppa:ansible/ansible sudo apt-get update sudo apt-get install -y ansible sshpass SCRIPT Vagrant.configure("2") do |config| config.vm.box = "ubuntu/trusty32" settings = YAML.load_file 'src/vagrant/vagrant.yml' config.vm.provider "virtualbox" do |vb| vb.name = settings['vm']['name'] vb.gui = false vb.memory = "512" end config.vm.provision "shell", inline: $setup end // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 36
  • 37. Provisionierung mit Ansible (und Python) --- # file: jenkinsci.yml - hosts: jenkinsci remote_user: root tasks: - debug: msg="Creating a Jenkins pipeline job on {{ inventory_hostname }}" - jenkins_job: name: Everything-as-code Pipeline config: "{{ lookup('file', 'templates/pipeline-job.xml') }}" url: "http://{{ inventory_hostname }}" user: admin password: admin // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 37
  • 38. Cluster Orchestration mit Kubernetes --- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: everything-as-code spec: replicas: 3 template: metadata: labels: tier: backend spec: containers: - name: everything-as-code image: "qaware-oss-docker-registry.bintray.io/lreimer/everything-as-code:1.2.0" ports: - containerPort: 18080 env: - name: PORT value: 18080 // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 38
  • 39. Documentation-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 39
  • 40. Ja, wir brauchen Dokumentation! 4 Und nein. Der Quellcode ist nicht genug! 4 Technische Dokumente mit Word sind ! " # 4 Dokumentation sollte neben dem Quellcode liegen: change code, change docs. 4 Schnell und einfach zu schreiben. 4 Unterstützung für Code, Bilder, Diagramme // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 40
  • 41. // Beispiel Architektur-Dokumentation mit arc42 (https://arc42.github.io) :imagesdir: ./images = image:qaware-logo.png[QAware GmbH,2016] Everything-as-code :toc-title: Table of Contents :toc: [[section-introduction-and-goals]] == Introduction and Goals The introduction to the architecture documentation should list the driving forces that software architects must consider in their decisions. === Requirements Overview === Quality Goals === Stakeholders <<<< include::02_architecture_constraints.adoc[] // further includes for the remaining sections // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 41
  • 42. AsciidoctorJ und Gradle to the Rescue plugins { id "org.asciidoctor.convert" version "1.5.3" } asciidoctorj { version = '1.5.4.1' } asciidoctor { sourceDir 'src/docs/architecture' resources { from('src/docs/architecture') { include 'images/**/*.png' include 'images/**/*.jpg' } } backends 'html5' options doctype: 'article' attributes 'source-highlighter': 'coderay' } // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 42
  • 43. Presentation-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 43
  • 44. These slides were written in Markdown. --- ## [fit] These slides were written in Markdown. - This is for real programmers! :smiley: - Several open source projects available - Use HTML and JavaScript alternatively. --- // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 44
  • 45. Heutige Projekte sind vielsprachig. // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 45
  • 46. Zeitgemäße Entwickler müssen vielsprachig sein! // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 46
  • 47. Wir alle müssen unsere Hausaufgaben machen. 4 Entwickler: Be polyglot, keep learning! 4 Architekten: Die richtige Sprache ist stark abhängig vom jeweiligen Projekt-Kontext. Choose wisely! 4 Project Managers: Give your techies freedom! 4 Universities: Unterrichtet vielsprachig! // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 47
  • 48. Fork me on GitHub. https://github.com/lreimer/everything-as-code // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 48
  • 49. We are hiring. http://www.qaware.de/karriere/#jobs // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 49
  • 50. Thanks! Questions? // JavaLand 2017 // Everything-as-code -> { created with ❤ and ☕ by @LeanderReimer @qaware } 50