[
  {
    "date": "2018-09-06T00:00:00",
    "isDefault": false,
    "rooms": [
      {
        "id": 1655,
        "name": "Humboldtsaal (1.OG)",
        "sessions": [
          {
            "id": "43484",
            "title": "REST beyond the obvious  - API design for ever evolving systems",
            "description": "Viele APIs werden heutzutage REST APIs genannt, tauschen allerdings hauptsächlich Daten via HTTP und JSON aus. Gleichzeitig agieren immer mehr Systeme nicht mehr in Isolation sondern interagieren mit anderen. In diesem Kontext ist es besonders wichtig API gut weiterentwickeln und ändern zu können und die hemdsärmelige Antwort darauf lautet üblicherweise: Versionierung. \r\n\r\nDer Vortrag macht einen Schritt zurück und schaut als erstes auf den architektonischen Kontext in dem APIs leben und skizziert die Nachteile eines Designs, der Kernbestandteile von REST vernachlässigt. Er bespricht interne und externe APIs, inwieweit diese Unterscheidung überhaupt Sinn ergibt, den Einfluss von Domain-Driven Design und wie man APIs so spezifiziert, dass sie für Erweiterbarkeit optimiert sind sodass Änderungen existierende Clients möglichst nicht brechen.",
            "startsAt": "2018-09-06T09:00:00",
            "endsAt": "2018-09-06T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "6c4698c8-1a2f-436b-a5f4-3770e0bd3e20",
                "name": "Oliver Drotbohm"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44282",
            "title": "Implementing Domain-driven Design with the Spring ecosystem",
            "description": "Domain-Driven Design is currently a very popular way of implementing and looking at Microservices. This session aims at giving you a kickstart how to work on the implementation details of DDD in the Spring Ecosystem. We will take a look at how to model your microservices with Bounded Contexts and Strategic Design, after that we will dive into a Microservice and look at how to implement Aggregates, Repositories and how to work with Domain Events. All the implementation details will leverage various Spring technologies such as Spring Boot, -Data and -Cloud. This talk consists of a bit of theroy and a lot of code.",
            "startsAt": "2018-09-06T10:20:00",
            "endsAt": "2018-09-06T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "c41a4363-aedb-42e0-8495-86be6c23107d",
                "name": "Michael Plöd"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "57a899fd-8ab1-4091-bf82-1e5b484e7b1e",
            "title": "Mittag",
            "description": null,
            "startsAt": "2018-09-06T12:40:00",
            "endsAt": "2018-09-06T13:40:00",
            "isServiceSession": true,
            "isPlenumSession": true,
            "speakers": [],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": null,
            "isInformed": false,
            "isConfirmed": false
          },
          {
            "id": "43572",
            "title": "GraalVM: Fast, Polyglot, Native",
            "description": "GraalVM challenges the status quo on the JVM. This newly-released just-in-time compiler brings substantial speed improvements and support for polyglot applications. It also allows us to translate our JVM bytecode into small self-contained native binaries. In this session we’ll explore GraalVM’s potential. We’ll focus on Clojure, but our discussion will apply to any JVM-based programming language. We’ll use GraalVM to build native binaries with simple command-line tools. We’ll discuss the method’s limitations and their impact. Finally, we’ll build complete Clojure web applications weighing a fraction of their traditional JVM incarnations.",
            "startsAt": "2018-09-06T13:40:00",
            "endsAt": "2018-09-06T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "bd2a67a7-7131-4097-99ec-4eb7abecac20",
                "name": "Jan Stępień"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43317",
            "title": "Serverless Security - Sicher ohne Server!?",
            "description": "Serverless heißt, sich nicht mehr um die darunter liegende Infrastruktur kümmern zu müssen. Doch muss ich mich auch nicht mehr um die Sicherheit meiner Anwendungen kümmern? Oder muss ich mich erst recht und noch verstärkt damit beschäftigen?\r\n\r\nBerechtigungen auf und für Ressourcen, Verschlüsselung von Daten, Netzwerk-Layern, Intrusion Detection, Thread Modeling, Meltdown & Spectre - Themen, die gerade in Cloud-Umgebungen einen besonders sensiblen Umgang erfordern.\r\n\r\nWelche Möglichkeiten uns in der Cloud zur Verfügung stehen und welche Pflichten wir haben, um uns sicher nicht um Verwaltung unserer Infrastruktur kümmern zu müssen und dennoch ruhig schlafen können, darüber diskutieren wir in diesem Talk.",
            "startsAt": "2018-09-06T15:00:00",
            "endsAt": "2018-09-06T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "ef54265f-c9ff-45d2-a495-20baff896eff",
                "name": "Niko Köbler"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43223",
            "title": "Docker Tipps und Tricks – nicht nur für Anfänger",
            "description": "Im Docker-Universum kann man sich leicht verlaufen und verzetteln. In dieser Session möchte ich euch daher einen Überblick über sinnvolle und weniger sinnvolle Praktiken im Umgang mit Docker und Werkzeugen aus dem Docker-Ökosystem, gesammelt in inzwischen mehr als vier Jahren produktivem Einsatz von Docker, geben. Dabei betrachten wir Themen wie dem Erstellen von Images, Java und Datenbanken in Containern, Logging, Sammeln von Metriken und auch das Thema Orchestrierung darf natürlich nicht fehlen.",
            "startsAt": "2018-09-06T16:20:00",
            "endsAt": "2018-09-06T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "d3d7bd6f-a505-4fd7-affe-c65ccdf7c0f1",
                "name": "Halil-Cem Gürsoy"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "8b057319-8e81-486e-84cd-de7203f9df58",
            "title": "Panel und Verlosung",
            "description": null,
            "startsAt": "2018-09-06T17:35:00",
            "endsAt": "2018-09-06T18:35:00",
            "isServiceSession": true,
            "isPlenumSession": true,
            "speakers": [],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": null,
            "isInformed": false,
            "isConfirmed": false
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1656,
        "name": "Kleistsaal (1.OG)",
        "sessions": [
          {
            "id": "42166",
            "title": "Observability in einer Microservice Welt",
            "description": "Unsere Migration bei dm-drogerie markt zu einer verteilten \r\nSystemarchitektur hat viele Herausforderungen nach sich gezogen. Dabei war der gestiegene Bedarf nach Observability ein Kernthema. Die zunehmende Verteilung der Systeme fordert eine Zentralisierung der Logs zur Auswertung von Geschäftsprozessen. Abhängigkeiten zwischen Services lassen sich anhand von request-basiertem Tracing nachvollziehen. Metrics und Monitoring sind Grundvoraussetzungen um die Zuverlässigkeit von Anwendungen zu erfassen und auf Anomalien zu reagieren. Eine DevOps-Kultur fordert, dass sich Teams diesen Herausforderungen stellen. In diesem Talk stellen wir einige geeignete Tools vor und gehen insbesondere auf die ein, welche wir basierend auf unserem Spring-Boot-Stack im Einsatz haben.",
            "startsAt": "2018-09-06T09:00:00",
            "endsAt": "2018-09-06T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "245fcedd-9e12-4e7b-8ab8-e87c7a30fef0",
                "name": "Andreas Weigel"
              },
              {
                "id": "d27ea235-27b1-45a0-8667-e084c8bd7d3b",
                "name": "Jakob Fels"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43909",
            "title": "Das Gruselkabinett des Dr. Kube",
            "description": "Die Containerisierung hat die IT Welt im Sturm erobert und mit Docker und Kubernetes mächtige Werkzeuge für Entwicklung und Betrieb von Applikationen für die breite Masse nutzbar gemacht. Aber wie bei jedem Paradigmenwechsel ergeben sich auch hier Erfahrungen aus dem Umstieg.\r\n\r\nEin populäres Sprichwort besagt, dass jeder zu etwas Nutze sein und sei es als abschreckendes Beispiel. Daher möchten ich in diesem Vortrag sieben Anti-Patterns präsentieren, welche wir bei Kunden auf ihrer Reise in Richtung Container erlebt haben.\r\n\r\nEinige wie der “God Pod” mögen einen Lächeln lassen. Aber andere wie “Viel hilft viel” sind eine ernsthafte Bedrohung für die Betriebsstabilität. Da reine Kritik immer einfach ist, wollen ebenfalls aufzeigen wie die Anti-Patterns behoben werden können um zuverlässige und resiliente Systeme zu bauen.",
            "startsAt": "2018-09-06T10:20:00",
            "endsAt": "2018-09-06T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "18314d64-b35a-45c2-96f1-67e9792133dd",
                "name": "Nicolas Byl"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "42765",
            "title": "Event Sourcing - You are doing it wrong",
            "description": "This talk is about staying sane when using eventsouring in your microservices.\r\n\r\nEventsourcing and CQRS are two very useful and popular patterns when dealing with data and microservices. We often find in our customer's projects, that both have a severe impact on your future options and the maintainability of your architecture. Presentations and articles on both topics are often superficial and do not tackle real world problems like security and compliance requirements.\r\n\r\nThis combination of half-knowledge and technical confusion leads to many projects that either refactor back to a 'non-eventsourced' architecture or reduce eventsourcing to a message queue.\r\n\r\nIn this talk, I will summarize our experience while applying eventsourcing and CQRS accros multiple large financial and insurance companies over the last 5 years. We will cover the _Good_, the _Not so Good_, and the _'oh my god...all abandon ships!'_ when doing eventsourcing in the real world...and see how we solved these issues.\r\n\r\n* Introduction to eventsourcing and CQRS - which problems does ES solve, why do we need it \r\n* Your eventstore is not a message queue - why mixing both up is bad for you \r\n* No, Kafka is not an eventsource - choosing the right tool \r\n* Read models are overrated - why you should not start with readmodels\r\n* GDPR, compliance and eventsourcing - what happens if you delete data from an immutable structure \r\n* Transactions, concurrency and your eventsource - why serial writers are bad and how to handle consistency \r\n* Versions, up-front-design and breaking things down the road - how to evolve eventsourced architectures\r\n",
            "startsAt": "2018-09-06T11:40:00",
            "endsAt": "2018-09-06T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "a48ecd86-ec08-4be3-b1c7-5d629b193d9f",
                "name": "David Schmitz"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41921",
            "title": "Herausforderungen Datenbanken in Containern zu betreiben",
            "description": "In den vergangenen Jahren haben wir unsere Anwendungen in Container verpackt um diese zu isolieren und einfach auslieferbar zu machen. Nun kämpfen wir damit Anwendungen mit Daten in Containern zu betreiben um sie fehlertolleranter und skalierbarer zu machen. Daher betreiben wir Datenbanken meistens in separaten Clustern, weil es doch relativ hart ist diese sinnvoll in Containern zu orchestrieren. Das bedeutet allerdings, dass wir unsere Cluster nicht optimal ausnutzen und Skalierungseffekte zwischen zustandslosen und zustandsbehafteten Anwendungen verschenken.\r\nAber was bedeutet es eigentlich eine Datenbank in einen Container zu stecken? Über welche Dinge sollte ich mir Gedanken machen? In dieser Session werden wir analysieren, welche Auswirkungen Container auf Plattenzugriffe, auf Netzwerke oder CPU Auslastung. Weiterhin werden wir Persistenz, Replikation, Backups oder Integration in moderne Orchestrierungs-Frameworks wie Kubernetes oder DC/OS diskutieren.",
            "startsAt": "2018-09-06T13:40:00",
            "endsAt": "2018-09-06T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "62c6bbf2-5f0b-423c-9cc4-e01e32afe2c5",
                "name": "Johannes Unterstein"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43883",
            "title": "Integration von Security-Checks in die CI-Pipeline",
            "description": "Dass eine Anwendung gegen Angriffe von Außen abgesichert werden muss, ist in der heutigen Zeit keine Frage mehr. Die OWASP Top10 sind in aller Munde. Um so verwunderlicher ist es, dass in den meisten Projekten die Suche nach Sicherheitslücken frühestens nach Fertigstellung der Software angegangen wird. Dabei gibt es ein paar Möglichkeiten, bekannte Security-Probleme bereits während der Entwicklung automatisiert zu erkennen und dem Entwickler so durch geeignetes Feedback die Möglichkeit zu geben, diese zeitnah zu beheben.\r\n \r\nIn dem Talk werden verschiedene Tools vorgestellt und gezeigt, welche Security-Probleme schon während der Entwicklung durch Continous Integration vermieden werden können. ",
            "startsAt": "2018-09-06T15:00:00",
            "endsAt": "2018-09-06T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "7b88c8f8-bcf6-42f6-b800-35dfcc74a172",
                "name": "Christian Schulz"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43956",
            "title": "Jenkins X - Continuously Driving the Kloud",
            "description": "Cloud schreibt man im Zeitalter von Kubernetes mit K! Alle Ressourcen werden dynamisch von Kubernetes verwaltet. Alle? Build und Deployment über verschiedene Stages liegt oft noch außerhalb, z.B. in einem Build-Server und verschiedenen Repositories (Artefakte, Docker-Images). \r\nMit Jenkins-X wandert alles in einen Kubernetes-Cluster und gewinnt so die nötige Dynamik:\r\n\r\n- Setup der nötigen Infrastruktur in Kubernetes (Jenkins, Nexus, Docker-Registry, ...),\r\n- Aufsetzen von Build-Pipelines für jeden Branch und jeden Pull-Request,\r\n- Deployment in verschiedene Stages (mit Helm),\r\n- Mandantenfähigkeit (Builds und Environments nach Teams unterscheiden),\r\n- Steuerung von versionierte Deployment-Konfigurationen (GitOps),\r\n- Import von bestehenden Projekten,\r\n- Setup neuer Projekte auf Basis gängiger Microservice-Frameworks (z.B. Spring Boot),\r\nu.v.a.m.\r\n\r\nJenkins-X kommt als Entwickler-freundliches Command-Line Tool und bündelt eine Vielzahl von Komponenten hinter einer einheitlichen (opinionated) Fassade. Der Vortrag erklärt die Architektur und Konzepte und führt an ein paar kleinen Beispielen typische Use-Cases vor.\r\n",
            "startsAt": "2018-09-06T16:20:00",
            "endsAt": "2018-09-06T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "f69ed925-1034-4d8a-a1cf-ae76ef16365d",
                "name": "Gerd Aschemann"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1657,
        "name": "Edison (2.OG)",
        "sessions": [
          {
            "id": "42515",
            "title": "Application Lifecycle Intelligence",
            "description": "Unseren gesamten Application Lifecycle lassen wir mittlerweile unterstützt durch verschiedenste Tools managen. Doch was passiert eigentlich mit den dort entstehenden Daten? Da in verschiedenen Stages einer CD/CI-Pipeline verschiedenste Tools eingesetzt werden, lässt sich keine gesamtheitliche Datenlage feststellen, als Beispiel möge die Turnaround-Time eines bestimmten Features dienen. Der Vortrag möchte eine grundlegende Einführung in den Bereich \"Application Lifecycle Intelligence\" geben, bis hin zu einem kleinen Exkurs in die Programmiersprache R.",
            "startsAt": "2018-09-06T09:00:00",
            "endsAt": "2018-09-06T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "fb37fe52-097c-4cc7-b765-cbd60e548ed2",
                "name": "Daniel Kocot"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41145",
            "title": "To Inject or not inject - Dependency injection on Android in a Kotlin world",
            "description": "Dependency Injection via frameworks like Dagger were present in most modern Android projects.\r\nBut then Kotlin happened. And since then a bunch of new libraries like Koin or Kodein appeared. Developers are even writing articles how to do DI without any framework.\r\nSome argue that those don’t even offer real dependency injection. Let’s look at that argument and compare the approaches.\r\nSo, is there something wrong with Dagger & co. in Kotlin? Are they obsolete? What are the alternatives? Let’s dive in.",
            "startsAt": "2018-09-06T10:20:00",
            "endsAt": "2018-09-06T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08",
                "name": "Danny Preussler"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44679",
            "title": "BDO - Behavior Driven Operations, oder: BDD jenseits von D",
            "description": "Behavior Driven Development (BDD) ist eine wirksame Methode, die vor etwa 10 Jahren als Erweiterung von Test Driven Development (TDD) entstanden ist, um User Stories in einer (fast) natürlichsprachiger Form in einem \"Specification by Example\" Ansatz in ausführbare Acceptance Tests zu übersetzen.\r\nDie Idee hinter unsere Präsentation und Demo ist, diese Spezifikationen und Tests ausserhalb des Entwicklungskontexts (also des \"D\" für Development), zum Beispiel zum Test von (Hardware) Client-Konfigurationen oder zum Monitoring von Services in der Produktion zu nutzen.\r\nWir demonstrieren einen Anwendungsfall aus einem Kundenprojekt, wie dieser Ansatz dazu benutzt wird, um den Produkt- und Service-Entwicklungszyklus und die Produktion selbst, zu unterstützen und gegen unbeabsichtigte Änderungen abzusichern.\r\nDer Vorteil an dieser Methode ist, dass so Service Entwicklung, Betrieb und auch Tests von Client Konfiguration auf einer \"Single Source of Truth\" aufbauen und damit Tests synchron über alle Stadien des Lebesnzyklus gehalten werden können, ohne dass zum Beispiel Betrieb oder Tester auf eigene Skripts zurück greifen müssen.",
            "startsAt": "2018-09-06T11:40:00",
            "endsAt": "2018-09-06T12:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "a61044d4-5690-4122-89dc-7f3bccd6c98d",
                "name": "Grzegorz Kopij"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43817",
            "title": "Resiliency als Beifahrer",
            "description": "Resiliency Patterns für verteilte Systeme sind  mittlerweile verstanden. Leider führt ihre Anwendung dazu, dass die eigentliche Fachlogik im Code oft nicht mehr einfach zu erkennen ist. Bei einer polyglotten Systemumgebung wird zudem eine Implementierung in jeder genutzten Sprache notwendig.\r\nMit dem Sidecar Pattern steht ein Werkzeug zur Verfügung, Resiliency-Maßnahmen aus dem eigentlichen Anwendungscode zu externalisieren. In diesem kurzen Vortrag möchte ich die Idee des Sidecar Proxys für Resilience vorstellen und kurz zeigen wie\r\nsich das Pattern mit Hilfe des Envoy Proxies umsetzen lässt. Abschließend werde ich einen kurzen Ausblick auf Services Meshes als nächsten Schritt geben.",
            "startsAt": "2018-09-06T12:00:00",
            "endsAt": "2018-09-06T12:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "1d74886f-0610-4617-a52f-e5b4f2fb5096",
                "name": "Florian Wallner"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43318",
            "title": "Sage mir Deinen Namen und ich sage Dir wer Du bist!",
            "description": "Benutzername und Passwort reichen längst nicht mehr aus für eine sichere und zuverlässige Authentifizierung von Anwendern. Begriffe und Methoden rund um \"Two- oder Multi-Faktor-Authentifizierung\" (2FA/MFA), Tokens, \"Passwordless“, Smartphone-Authentifizierung & Social ID-Provider geistern durch die Luft und verwirren nicht nur Anwender, sondern auch Entwickler immer wieder. Welches Verfahren ist sicher? Welches nicht? Welches sollte ich anwenden bzw. implementieren?\r\nDieses Session gibt einen Überblick über verschiedene aktuelle Authentifizierungsarten und stellt diese vor.",
            "startsAt": "2018-09-06T12:20:00",
            "endsAt": "2018-09-06T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "ef54265f-c9ff-45d2-a495-20baff896eff",
                "name": "Niko Köbler"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44677",
            "title": "Beautiful History",
            "description": "Es gibt viele erfolgreiche Softwareprojekte. Das bedeutet, dass viele EntwicklerInnen Applikationen und Bibliotheken weiterpflegen, die sie selbst nicht entwickelt haben. Beim Verstehen einer Codebasis steht eine Informationsquelle unmittelbar zur Verfügung: die Versionsgeschichte.\r\nDieser Vortrag zeigt, wie die Versionsgeschichte so gestaltet werden kann, dass sie von künftigen LeserInnen einfach zu verstehen ist. Darunter finden sich Techniken wie ausführliche Commit-Messages, lineare Versionsgeschichte und Trennung von Refactorings und Änderungen. Es wird auch gezeigt, wie sich diese Techniken Stück für Stück in den täglichen Arbeitsalltag einbetten lassen.",
            "startsAt": "2018-09-06T13:40:00",
            "endsAt": "2018-09-06T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "80c9dc27-bdd6-4b6f-b1a6-8e64b427561d",
                "name": "Stefan Birkner"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43472",
            "title": "DevOps going Enterprise – ein Erfahrungsbericht",
            "description": "Im Zuge der steigenden Popularität agiler Softwareentwicklung konnte in den letzten Jahren auch DevOps immer mehr Anhänger für sich gewinnen. Einer der Gründe dafür ist, dass mit Hilfe von DevOps die Mauer zwischen der Entwicklung und dem Betrieb eingerissen werden kann. Wie aber lassen sich DevOps-Ansätze implementieren, wenn ein agil getriebenes und dynamisches Umfeld auf klassische Softwareentwicklungs- und Unternehmensprozesse trifft? Lässt sich der Spagat zwischen Start-up und Enterprise meistern und falls ja, wie?",
            "startsAt": "2018-09-06T15:00:00",
            "endsAt": "2018-09-06T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "7bf89994-6269-4b30-9669-d3630eceefb9",
                "name": "Markus Koschier"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43447",
            "title": "Reaktive Programmierung in verständlichen Worten",
            "description": "Reaktive Programmierung, reaktive Systeme und das Reactive Manifesto rücken im Moment immer stärker in den Fokus der Java Community. Der Begriff Reaktive Programmierung wird hierbei häufig synonym mit Reaktiven Systemen verwendet, dabei ist Reaktive Programmierung eher ein gutes Werkzeug um diese zu implementieren. Reaktive Programmierung eignet sich darüber hinaus ausgezeichnet für parallele Programmierung, UI-Applikationen und das managen von Applikationszuständen. Der Vorteil liegt hierbei in dem verständlicherem Code der eine bessere Wiederverwendbarkeit aufweist. Ein häufig angenommener Nachteil ist die initial steilere Lernkurve.\r\n\r\nIn dem Vortrag geht es darum, die Grundlagen von Reaktiver Programmierung leicht verdaulich zu erklären und die Vorteile gegenüber Alternativen deutlich zu machen. Die zweite Hälfte des Vortrags besteht aus Praxisbeispielen und Tipps für den Einstieg in die Nutzung von konkreten Implementierungen, die den Reactive-Streams-Standard (JEP 266) implementieren. Hierbei verwenden wir zur Demonstration das Reactor Framework, welches auch die reaktive Kern-Komponente von Spring 5 und Spring Webflux ist.",
            "startsAt": "2018-09-06T16:20:00",
            "endsAt": "2018-09-06T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "c2df01fc-314f-48b5-9627-f7862d9421d0",
                "name": "Alex Krause"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1658,
        "name": "Voltaire (3.OG)",
        "sessions": [
          {
            "id": "43913",
            "title": "Europameister '92 - 5 Faktoren für erfolgreiche Teams",
            "description": "Vom Strandkorb zur Europameisterschaft: Die dänische Fußball-Nationalmannschaft wurde erst wenige Wochen vor der EM '92 nachnominiert. Das Team schien chancenlos; doch der klare Außenseiter gewann sensationell den EM-Titel. Wie war das möglich?\r\n\r\nEine aktuelle, interne Studie von Google benennt fünf Faktoren, die darüber entscheiden, ob Teams bei Google erfolgreich arbeiten oder nicht. In dieser Session werden die verschiedenen Faktoren vorgestellt, und es werden konkrete Tipps für Projekt-Setup und Tool-Einsatz gegeben, um agile Entwicklungsteams in diesen Bereichen zu stärken.\r\n\r\nMit der einen oder andere Anekdote zur EM '92 schauen wir, ob diese Erfolgsschlüssel für moderne IT-Teams auch damals auf dem Fußballplatz schon gültig waren.",
            "startsAt": "2018-09-06T09:00:00",
            "endsAt": "2018-09-06T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "d0fa05ab-cfcf-406e-a154-582347aa19a0",
                "name": "Felix Braun"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44279",
            "title": "Selbstorganisierte Gehaltsfindung ohne klassische Führungskräfte",
            "description": "Dieser Vortrag gibt einen detaillierten Einblick, wie wir entlang der Holacracy in einer selbstorganisierten Organisation und ohne klassische Führungskräfte Gehälter finden. Wir teilen, welche Facetten uns angetrieben haben und welchen Prinzipien wir folgen. Dabei ist der Status Quo nur ein Zwischenstop auf einer Reise, die mit klassischer disziplinarischer Führung begonnen hat. Dieser Vortrag richtet sich an jeden, der konkrete Einblicke in mögliche Schritte nach „being agile“ am Beispiel der Gehaltsfindung haben möchte und sich fragt, wo der Status Quo im eigenen Unternehmen gechallenged werden kann.",
            "startsAt": "2018-09-06T10:20:00",
            "endsAt": "2018-09-06T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "38c95a3e-7d95-4c41-add8-f64c5c610bff",
                "name": "Stefan Rudnitzki"
              },
              {
                "id": "2a97f3b8-8e95-4506-949a-4fe6a25c6779",
                "name": "Daniel Ranke"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43177",
            "title": "Task & Life management for Nerds",
            "description": "Grocery lists, notes on the fridge, calendar apps – there are infinite ways to organize yourself. Tech-affine people might prefer digital tools, but: Which of them are still useful in case of an *extreme* task overload?\r\nFrom my personal background (software developer couple with five kids and different hobbies) I will present the best approaches, mindsets, and hack-projects that helped us to really get things done. Additionally, the audience will learn the importance of emptying the mind to stay relaxed and productive at the same time.\r\n\r\n\"Without any free time at all\r\nstill feeling free all the time.\"\r\n– Peter Liske",
            "startsAt": "2018-09-06T11:40:00",
            "endsAt": "2018-09-06T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "2b7daadc-6cbb-42a5-a827-905338cd8dd3",
                "name": "Peter Liske"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "40376",
            "title": "Introduce kids to STEAM and reduce the gender gap",
            "description": "Science, Technology, Engineering, Arts and Mathematics (STEAM) is what our society needs to focus on if it wants to be competitive in the future. But in order to succeed with that, it also needs to let kids discover the best career for them without any negative influence from gender stereotypes. This session presents our journey to the first Hackdays4Girls, a one day event we organized in our company to engage girls into coding in a fun and easy way. We will guide you through several hands-on activities using Scratch and the microcontroller boards Calliope and BBC Micro:bit, as well as some other ways to encourage kids to get into technology. Our aim is to let others know how easy it is to organize such an event and bring advice for those planning it.\r\n",
            "startsAt": "2018-09-06T13:40:00",
            "endsAt": "2018-09-06T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "62460571-83d9-4ca2-8238-379913b06aee",
                "name": "Ansgar Schulze Everding"
              },
              {
                "id": "f5dd4f6c-6ddf-457a-9832-fdd386afc3c4",
                "name": "Laura Luiz"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44131",
            "title": "Datenübertragung per Funk: Wie geht das?",
            "description": "Datenübertragung per Funk ist Alltag. Smartphones können mittels LTE, W-LAN und Bluetooth mit ihrer Umwelt kommunizieren. Auch im IoT Bereich ist die Nutzung von Funkprotokollen wie LoRaWan populär, um Geräte drahtlos zu verbinden.\r\n\r\nDieser Vortrag klärt einige Grundlagen: Was tun wir eigentlich, wenn wir funken? Welche Möglichkeiten gibt es, dabei Daten zu übertragen? Wie weit reichen Funkwellen? Wieso hat man im Gebäude manchmal keine Verbindung, wenn draußen alles bestens funktioniert? Warum reichen einige Protokolle weiter als andere? Welche Kompromisse muss man eingehen, wenn man wenig Strom verbrauchen will? Welche, wenn man einen hohen Datensatz erreichen will? Geht beides gleichzeitig? Welche Kompromisse geht jemand ein, der ein Funkprotokoll entwirft (oder aussucht)? Warum brauchen manche Geräte große, sichtbare Antennen und andere nicht? Welche Eigenschaften haben verschiedene Frequenzen? Wer darf auf welchen Frequenzen funken und wer legt das fest?",
            "startsAt": "2018-09-06T15:00:00",
            "endsAt": "2018-09-06T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "ea4671e0-a8af-4a0a-8e69-0957a54e7a9e",
                "name": "Christine Koppelt"
              },
              {
                "id": "d8175547-08e7-498e-80c9-94b5829cf053",
                "name": "Andreas Krüger"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "40937",
            "title": "Offline First - kein Netz, kein Fehler, zufriedene Nutzer",
            "description": "\"High Speed Internet, permanently online, permanently connected, LTE überall, na klar geht alles nur online - der Rest ist Error Handling. Done.\"\r\n\r\nOft ist uns gar nicht mehr bewusst, dass wir damit Nutzer enttäuschen, ihre Zeit verschwenden und die Nutzung unserer Anwendungen einschränken. Leider ist Offline-Fähigkeit nachträglich oft ähnlich schlecht nachrüstbar wie die Unterstützung von Mobile Devices. Daher möchten ich Euch zeigen, wie man mit Offline First von Anfang an \"offline denken\" kann, vergleichbar mit Mobile First.\r\n\r\nIch werde Euch kurz in die Motivation für Offline-Funktionen, Nutzerwartungen, UX-Ansätze sowie Herausforderungen und Ansätze für die Anwendungsarchitektur und -sicherheit einführen und aufzeigen wie wir CAP und Eventual Consistency auf diese Problemstellung anwenden können.\r\n\r\nWir werfen einen Blick darauf, welche Technologien für Progressive Web Apps und Native Apps zur Verfügung stehen und wie Digital Business Platforms wie Salesforce oder die SAP Cloud Platform die Offlinefähigkeit unterstützen. Kann man wirklich schon „Offline as a Service“ dazukaufen?\r\n\r\nAlso: \"Kein Netz\" ist nicht zwingend ein Fehler.",
            "startsAt": "2018-09-06T16:20:00",
            "endsAt": "2018-09-06T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "4682b7ae-0351-48e0-97c4-830d9935ba7f",
                "name": "Ulrich Deiters"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1659,
        "name": "Austen (2.OG)",
        "sessions": [
          {
            "id": "44266",
            "title": "Microservices mit CQRS und ES",
            "description": "In meiner Masterarbeit mit dem Thema \"Microservices als aktuelles Architekturparadigma für Softwaresysteme am Beispiel einer Anwendung im Gesundheitswesen\" haben Paul Reichelt und ich Domain Driven Design angewendet, um ein eingekauftes, monolithisches System, auf dessen Sourcecode wir keinen Zugriff hatten, in mehrere Bounded Contexts aufzuteilen. Das haben wir nur als Einstieg gesehen, weil DDD allein noch nicht ausreicht, um ein Architekturpattern mit Microservices zu definieren. Im Rahmen der Arbeit ist ein Architekturpattern entstanden, welches Domain Driven Design mit CQRS und Event Sourcing verbindet. Dieses würden wir gerne vorstellen und zur anschließenden Diskussion bereitstellen.",
            "startsAt": "2018-09-06T10:20:00",
            "endsAt": "2018-09-06T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "be575c23-1777-4b34-a24f-5393f47a2ceb",
                "name": "Sandra Kriemann"
              },
              {
                "id": "686ef017-d392-4cf0-8b42-a4528ab50ed2",
                "name": "Paul Reichelt"
              }
            ],
            "categories": [],
            "roomId": 1659,
            "room": "Austen (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44207",
            "title": "Deploying email classifier to production for an enhanced e-commerce customer experience",
            "description": "The user experience of e-commerce customers enhance greatly if they have quick access to information related to their purchases. The interesting information could be in the form of invoices, shipping updates and many others. For idealo (https://www.idealo.de/), the source of this information is a large volume of merchant emails. In order to extract relevant information, it is necessary to classify the incoming emails automatically into the respective categories. Therefore, with the help of machine learning, an email classification model was developed and eventually integrated into production. Several technologies were utilized in this pursuit. The focus of this talk is to discuss how different technologies work with each other in the production phase of deploying a machine learning model. Some of these include:\r\n - Using container technologies such as Openshift and Kubernetes for deploying machine learning applications\r\n- Microservices based architecture\r\n- Interaction of services developed in multiple programming languages\r\n- CI/CD pipeline, API First, TDD etc.\r\n- Overview of the machine learning solution  \r\n",
            "startsAt": "2018-09-06T11:40:00",
            "endsAt": "2018-09-06T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "42bba5e8-eca2-4a6e-aac2-d9a66b8e3b52",
                "name": "Tanuj Jain"
              },
              {
                "id": "2a862536-5eaa-434f-8cf1-8404e15273c3",
                "name": "David Vinco"
              }
            ],
            "categories": [],
            "roomId": 1659,
            "room": "Austen (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44306",
            "title": "Von Clean Code zum kognitiven Editor",
            "description": "Ein wesentlicher Aspekt von Clean Code ist es, Code so zu schreiben, dass andere ihn gut verstehen können. Man kann mit den Ergebnissen der kognitiven Textverstehensforschung erklären, was Texte gut verständlich macht. In meiner Promotion übertrage ich diese Ergebnisse auf die Programmierung und entwickle einen kognitiven Editor für Java, um schneller und konsistenter zu Clean Code zu kommen. Im Vortrag zeige ich den Editor live und stelle vor, welche Erfahrungen ich mit dem Editor im Projektalltag gemacht habe.",
            "startsAt": "2018-09-06T13:40:00",
            "endsAt": "2018-09-06T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "e366b0ff-20b0-412c-ae70-a81e789db4aa",
                "name": "Sebastian Lohmeier"
              }
            ],
            "categories": [],
            "roomId": 1659,
            "room": "Austen (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      }
    ],
    "timeSlots": [
      {
        "slotStart": "09:00:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43484",
              "title": "REST beyond the obvious  - API design for ever evolving systems",
              "description": "Viele APIs werden heutzutage REST APIs genannt, tauschen allerdings hauptsächlich Daten via HTTP und JSON aus. Gleichzeitig agieren immer mehr Systeme nicht mehr in Isolation sondern interagieren mit anderen. In diesem Kontext ist es besonders wichtig API gut weiterentwickeln und ändern zu können und die hemdsärmelige Antwort darauf lautet üblicherweise: Versionierung. \r\n\r\nDer Vortrag macht einen Schritt zurück und schaut als erstes auf den architektonischen Kontext in dem APIs leben und skizziert die Nachteile eines Designs, der Kernbestandteile von REST vernachlässigt. Er bespricht interne und externe APIs, inwieweit diese Unterscheidung überhaupt Sinn ergibt, den Einfluss von Domain-Driven Design und wie man APIs so spezifiziert, dass sie für Erweiterbarkeit optimiert sind sodass Änderungen existierende Clients möglichst nicht brechen.",
              "startsAt": "2018-09-06T09:00:00",
              "endsAt": "2018-09-06T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "6c4698c8-1a2f-436b-a5f4-3770e0bd3e20",
                  "name": "Oliver Drotbohm"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "42166",
              "title": "Observability in einer Microservice Welt",
              "description": "Unsere Migration bei dm-drogerie markt zu einer verteilten \r\nSystemarchitektur hat viele Herausforderungen nach sich gezogen. Dabei war der gestiegene Bedarf nach Observability ein Kernthema. Die zunehmende Verteilung der Systeme fordert eine Zentralisierung der Logs zur Auswertung von Geschäftsprozessen. Abhängigkeiten zwischen Services lassen sich anhand von request-basiertem Tracing nachvollziehen. Metrics und Monitoring sind Grundvoraussetzungen um die Zuverlässigkeit von Anwendungen zu erfassen und auf Anomalien zu reagieren. Eine DevOps-Kultur fordert, dass sich Teams diesen Herausforderungen stellen. In diesem Talk stellen wir einige geeignete Tools vor und gehen insbesondere auf die ein, welche wir basierend auf unserem Spring-Boot-Stack im Einsatz haben.",
              "startsAt": "2018-09-06T09:00:00",
              "endsAt": "2018-09-06T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "245fcedd-9e12-4e7b-8ab8-e87c7a30fef0",
                  "name": "Andreas Weigel"
                },
                {
                  "id": "d27ea235-27b1-45a0-8667-e084c8bd7d3b",
                  "name": "Jakob Fels"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "42515",
              "title": "Application Lifecycle Intelligence",
              "description": "Unseren gesamten Application Lifecycle lassen wir mittlerweile unterstützt durch verschiedenste Tools managen. Doch was passiert eigentlich mit den dort entstehenden Daten? Da in verschiedenen Stages einer CD/CI-Pipeline verschiedenste Tools eingesetzt werden, lässt sich keine gesamtheitliche Datenlage feststellen, als Beispiel möge die Turnaround-Time eines bestimmten Features dienen. Der Vortrag möchte eine grundlegende Einführung in den Bereich \"Application Lifecycle Intelligence\" geben, bis hin zu einem kleinen Exkurs in die Programmiersprache R.",
              "startsAt": "2018-09-06T09:00:00",
              "endsAt": "2018-09-06T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "fb37fe52-097c-4cc7-b765-cbd60e548ed2",
                  "name": "Daniel Kocot"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "43913",
              "title": "Europameister '92 - 5 Faktoren für erfolgreiche Teams",
              "description": "Vom Strandkorb zur Europameisterschaft: Die dänische Fußball-Nationalmannschaft wurde erst wenige Wochen vor der EM '92 nachnominiert. Das Team schien chancenlos; doch der klare Außenseiter gewann sensationell den EM-Titel. Wie war das möglich?\r\n\r\nEine aktuelle, interne Studie von Google benennt fünf Faktoren, die darüber entscheiden, ob Teams bei Google erfolgreich arbeiten oder nicht. In dieser Session werden die verschiedenen Faktoren vorgestellt, und es werden konkrete Tipps für Projekt-Setup und Tool-Einsatz gegeben, um agile Entwicklungsteams in diesen Bereichen zu stärken.\r\n\r\nMit der einen oder andere Anekdote zur EM '92 schauen wir, ob diese Erfolgsschlüssel für moderne IT-Teams auch damals auf dem Fußballplatz schon gültig waren.",
              "startsAt": "2018-09-06T09:00:00",
              "endsAt": "2018-09-06T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "d0fa05ab-cfcf-406e-a154-582347aa19a0",
                  "name": "Felix Braun"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "10:20:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "44282",
              "title": "Implementing Domain-driven Design with the Spring ecosystem",
              "description": "Domain-Driven Design is currently a very popular way of implementing and looking at Microservices. This session aims at giving you a kickstart how to work on the implementation details of DDD in the Spring Ecosystem. We will take a look at how to model your microservices with Bounded Contexts and Strategic Design, after that we will dive into a Microservice and look at how to implement Aggregates, Repositories and how to work with Domain Events. All the implementation details will leverage various Spring technologies such as Spring Boot, -Data and -Cloud. This talk consists of a bit of theroy and a lot of code.",
              "startsAt": "2018-09-06T10:20:00",
              "endsAt": "2018-09-06T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "c41a4363-aedb-42e0-8495-86be6c23107d",
                  "name": "Michael Plöd"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "43909",
              "title": "Das Gruselkabinett des Dr. Kube",
              "description": "Die Containerisierung hat die IT Welt im Sturm erobert und mit Docker und Kubernetes mächtige Werkzeuge für Entwicklung und Betrieb von Applikationen für die breite Masse nutzbar gemacht. Aber wie bei jedem Paradigmenwechsel ergeben sich auch hier Erfahrungen aus dem Umstieg.\r\n\r\nEin populäres Sprichwort besagt, dass jeder zu etwas Nutze sein und sei es als abschreckendes Beispiel. Daher möchten ich in diesem Vortrag sieben Anti-Patterns präsentieren, welche wir bei Kunden auf ihrer Reise in Richtung Container erlebt haben.\r\n\r\nEinige wie der “God Pod” mögen einen Lächeln lassen. Aber andere wie “Viel hilft viel” sind eine ernsthafte Bedrohung für die Betriebsstabilität. Da reine Kritik immer einfach ist, wollen ebenfalls aufzeigen wie die Anti-Patterns behoben werden können um zuverlässige und resiliente Systeme zu bauen.",
              "startsAt": "2018-09-06T10:20:00",
              "endsAt": "2018-09-06T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "18314d64-b35a-45c2-96f1-67e9792133dd",
                  "name": "Nicolas Byl"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "41145",
              "title": "To Inject or not inject - Dependency injection on Android in a Kotlin world",
              "description": "Dependency Injection via frameworks like Dagger were present in most modern Android projects.\r\nBut then Kotlin happened. And since then a bunch of new libraries like Koin or Kodein appeared. Developers are even writing articles how to do DI without any framework.\r\nSome argue that those don’t even offer real dependency injection. Let’s look at that argument and compare the approaches.\r\nSo, is there something wrong with Dagger & co. in Kotlin? Are they obsolete? What are the alternatives? Let’s dive in.",
              "startsAt": "2018-09-06T10:20:00",
              "endsAt": "2018-09-06T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "4d3a31b1-61e5-4a26-9ca3-c9f30e3eaa08",
                  "name": "Danny Preussler"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "44279",
              "title": "Selbstorganisierte Gehaltsfindung ohne klassische Führungskräfte",
              "description": "Dieser Vortrag gibt einen detaillierten Einblick, wie wir entlang der Holacracy in einer selbstorganisierten Organisation und ohne klassische Führungskräfte Gehälter finden. Wir teilen, welche Facetten uns angetrieben haben und welchen Prinzipien wir folgen. Dabei ist der Status Quo nur ein Zwischenstop auf einer Reise, die mit klassischer disziplinarischer Führung begonnen hat. Dieser Vortrag richtet sich an jeden, der konkrete Einblicke in mögliche Schritte nach „being agile“ am Beispiel der Gehaltsfindung haben möchte und sich fragt, wo der Status Quo im eigenen Unternehmen gechallenged werden kann.",
              "startsAt": "2018-09-06T10:20:00",
              "endsAt": "2018-09-06T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "38c95a3e-7d95-4c41-add8-f64c5c610bff",
                  "name": "Stefan Rudnitzki"
                },
                {
                  "id": "2a97f3b8-8e95-4506-949a-4fe6a25c6779",
                  "name": "Daniel Ranke"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          },
          {
            "id": 1659,
            "name": "Austen (2.OG)",
            "session": {
              "id": "44266",
              "title": "Microservices mit CQRS und ES",
              "description": "In meiner Masterarbeit mit dem Thema \"Microservices als aktuelles Architekturparadigma für Softwaresysteme am Beispiel einer Anwendung im Gesundheitswesen\" haben Paul Reichelt und ich Domain Driven Design angewendet, um ein eingekauftes, monolithisches System, auf dessen Sourcecode wir keinen Zugriff hatten, in mehrere Bounded Contexts aufzuteilen. Das haben wir nur als Einstieg gesehen, weil DDD allein noch nicht ausreicht, um ein Architekturpattern mit Microservices zu definieren. Im Rahmen der Arbeit ist ein Architekturpattern entstanden, welches Domain Driven Design mit CQRS und Event Sourcing verbindet. Dieses würden wir gerne vorstellen und zur anschließenden Diskussion bereitstellen.",
              "startsAt": "2018-09-06T10:20:00",
              "endsAt": "2018-09-06T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "be575c23-1777-4b34-a24f-5393f47a2ceb",
                  "name": "Sandra Kriemann"
                },
                {
                  "id": "686ef017-d392-4cf0-8b42-a4528ab50ed2",
                  "name": "Paul Reichelt"
                }
              ],
              "categories": [],
              "roomId": 1659,
              "room": "Austen (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 4
          }
        ]
      },
      {
        "slotStart": "11:40:00",
        "rooms": [
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "42765",
              "title": "Event Sourcing - You are doing it wrong",
              "description": "This talk is about staying sane when using eventsouring in your microservices.\r\n\r\nEventsourcing and CQRS are two very useful and popular patterns when dealing with data and microservices. We often find in our customer's projects, that both have a severe impact on your future options and the maintainability of your architecture. Presentations and articles on both topics are often superficial and do not tackle real world problems like security and compliance requirements.\r\n\r\nThis combination of half-knowledge and technical confusion leads to many projects that either refactor back to a 'non-eventsourced' architecture or reduce eventsourcing to a message queue.\r\n\r\nIn this talk, I will summarize our experience while applying eventsourcing and CQRS accros multiple large financial and insurance companies over the last 5 years. We will cover the _Good_, the _Not so Good_, and the _'oh my god...all abandon ships!'_ when doing eventsourcing in the real world...and see how we solved these issues.\r\n\r\n* Introduction to eventsourcing and CQRS - which problems does ES solve, why do we need it \r\n* Your eventstore is not a message queue - why mixing both up is bad for you \r\n* No, Kafka is not an eventsource - choosing the right tool \r\n* Read models are overrated - why you should not start with readmodels\r\n* GDPR, compliance and eventsourcing - what happens if you delete data from an immutable structure \r\n* Transactions, concurrency and your eventsource - why serial writers are bad and how to handle consistency \r\n* Versions, up-front-design and breaking things down the road - how to evolve eventsourced architectures\r\n",
              "startsAt": "2018-09-06T11:40:00",
              "endsAt": "2018-09-06T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "a48ecd86-ec08-4be3-b1c7-5d629b193d9f",
                  "name": "David Schmitz"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "44679",
              "title": "BDO - Behavior Driven Operations, oder: BDD jenseits von D",
              "description": "Behavior Driven Development (BDD) ist eine wirksame Methode, die vor etwa 10 Jahren als Erweiterung von Test Driven Development (TDD) entstanden ist, um User Stories in einer (fast) natürlichsprachiger Form in einem \"Specification by Example\" Ansatz in ausführbare Acceptance Tests zu übersetzen.\r\nDie Idee hinter unsere Präsentation und Demo ist, diese Spezifikationen und Tests ausserhalb des Entwicklungskontexts (also des \"D\" für Development), zum Beispiel zum Test von (Hardware) Client-Konfigurationen oder zum Monitoring von Services in der Produktion zu nutzen.\r\nWir demonstrieren einen Anwendungsfall aus einem Kundenprojekt, wie dieser Ansatz dazu benutzt wird, um den Produkt- und Service-Entwicklungszyklus und die Produktion selbst, zu unterstützen und gegen unbeabsichtigte Änderungen abzusichern.\r\nDer Vorteil an dieser Methode ist, dass so Service Entwicklung, Betrieb und auch Tests von Client Konfiguration auf einer \"Single Source of Truth\" aufbauen und damit Tests synchron über alle Stadien des Lebesnzyklus gehalten werden können, ohne dass zum Beispiel Betrieb oder Tester auf eigene Skripts zurück greifen müssen.",
              "startsAt": "2018-09-06T11:40:00",
              "endsAt": "2018-09-06T12:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "a61044d4-5690-4122-89dc-7f3bccd6c98d",
                  "name": "Grzegorz Kopij"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "43177",
              "title": "Task & Life management for Nerds",
              "description": "Grocery lists, notes on the fridge, calendar apps – there are infinite ways to organize yourself. Tech-affine people might prefer digital tools, but: Which of them are still useful in case of an *extreme* task overload?\r\nFrom my personal background (software developer couple with five kids and different hobbies) I will present the best approaches, mindsets, and hack-projects that helped us to really get things done. Additionally, the audience will learn the importance of emptying the mind to stay relaxed and productive at the same time.\r\n\r\n\"Without any free time at all\r\nstill feeling free all the time.\"\r\n– Peter Liske",
              "startsAt": "2018-09-06T11:40:00",
              "endsAt": "2018-09-06T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "2b7daadc-6cbb-42a5-a827-905338cd8dd3",
                  "name": "Peter Liske"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          },
          {
            "id": 1659,
            "name": "Austen (2.OG)",
            "session": {
              "id": "44207",
              "title": "Deploying email classifier to production for an enhanced e-commerce customer experience",
              "description": "The user experience of e-commerce customers enhance greatly if they have quick access to information related to their purchases. The interesting information could be in the form of invoices, shipping updates and many others. For idealo (https://www.idealo.de/), the source of this information is a large volume of merchant emails. In order to extract relevant information, it is necessary to classify the incoming emails automatically into the respective categories. Therefore, with the help of machine learning, an email classification model was developed and eventually integrated into production. Several technologies were utilized in this pursuit. The focus of this talk is to discuss how different technologies work with each other in the production phase of deploying a machine learning model. Some of these include:\r\n - Using container technologies such as Openshift and Kubernetes for deploying machine learning applications\r\n- Microservices based architecture\r\n- Interaction of services developed in multiple programming languages\r\n- CI/CD pipeline, API First, TDD etc.\r\n- Overview of the machine learning solution  \r\n",
              "startsAt": "2018-09-06T11:40:00",
              "endsAt": "2018-09-06T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "42bba5e8-eca2-4a6e-aac2-d9a66b8e3b52",
                  "name": "Tanuj Jain"
                },
                {
                  "id": "2a862536-5eaa-434f-8cf1-8404e15273c3",
                  "name": "David Vinco"
                }
              ],
              "categories": [],
              "roomId": 1659,
              "room": "Austen (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 4
          }
        ]
      },
      {
        "slotStart": "12:00:00",
        "rooms": [
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43817",
              "title": "Resiliency als Beifahrer",
              "description": "Resiliency Patterns für verteilte Systeme sind  mittlerweile verstanden. Leider führt ihre Anwendung dazu, dass die eigentliche Fachlogik im Code oft nicht mehr einfach zu erkennen ist. Bei einer polyglotten Systemumgebung wird zudem eine Implementierung in jeder genutzten Sprache notwendig.\r\nMit dem Sidecar Pattern steht ein Werkzeug zur Verfügung, Resiliency-Maßnahmen aus dem eigentlichen Anwendungscode zu externalisieren. In diesem kurzen Vortrag möchte ich die Idee des Sidecar Proxys für Resilience vorstellen und kurz zeigen wie\r\nsich das Pattern mit Hilfe des Envoy Proxies umsetzen lässt. Abschließend werde ich einen kurzen Ausblick auf Services Meshes als nächsten Schritt geben.",
              "startsAt": "2018-09-06T12:00:00",
              "endsAt": "2018-09-06T12:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "1d74886f-0610-4617-a52f-e5b4f2fb5096",
                  "name": "Florian Wallner"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          }
        ]
      },
      {
        "slotStart": "12:20:00",
        "rooms": [
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43318",
              "title": "Sage mir Deinen Namen und ich sage Dir wer Du bist!",
              "description": "Benutzername und Passwort reichen längst nicht mehr aus für eine sichere und zuverlässige Authentifizierung von Anwendern. Begriffe und Methoden rund um \"Two- oder Multi-Faktor-Authentifizierung\" (2FA/MFA), Tokens, \"Passwordless“, Smartphone-Authentifizierung & Social ID-Provider geistern durch die Luft und verwirren nicht nur Anwender, sondern auch Entwickler immer wieder. Welches Verfahren ist sicher? Welches nicht? Welches sollte ich anwenden bzw. implementieren?\r\nDieses Session gibt einen Überblick über verschiedene aktuelle Authentifizierungsarten und stellt diese vor.",
              "startsAt": "2018-09-06T12:20:00",
              "endsAt": "2018-09-06T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "ef54265f-c9ff-45d2-a495-20baff896eff",
                  "name": "Niko Köbler"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          }
        ]
      },
      {
        "slotStart": "12:40:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "57a899fd-8ab1-4091-bf82-1e5b484e7b1e",
              "title": "Mittag",
              "description": null,
              "startsAt": "2018-09-06T12:40:00",
              "endsAt": "2018-09-06T13:40:00",
              "isServiceSession": true,
              "isPlenumSession": true,
              "speakers": [],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": null,
              "isInformed": false,
              "isConfirmed": false
            },
            "index": 0
          }
        ]
      },
      {
        "slotStart": "13:40:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43572",
              "title": "GraalVM: Fast, Polyglot, Native",
              "description": "GraalVM challenges the status quo on the JVM. This newly-released just-in-time compiler brings substantial speed improvements and support for polyglot applications. It also allows us to translate our JVM bytecode into small self-contained native binaries. In this session we’ll explore GraalVM’s potential. We’ll focus on Clojure, but our discussion will apply to any JVM-based programming language. We’ll use GraalVM to build native binaries with simple command-line tools. We’ll discuss the method’s limitations and their impact. Finally, we’ll build complete Clojure web applications weighing a fraction of their traditional JVM incarnations.",
              "startsAt": "2018-09-06T13:40:00",
              "endsAt": "2018-09-06T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "bd2a67a7-7131-4097-99ec-4eb7abecac20",
                  "name": "Jan Stępień"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "41921",
              "title": "Herausforderungen Datenbanken in Containern zu betreiben",
              "description": "In den vergangenen Jahren haben wir unsere Anwendungen in Container verpackt um diese zu isolieren und einfach auslieferbar zu machen. Nun kämpfen wir damit Anwendungen mit Daten in Containern zu betreiben um sie fehlertolleranter und skalierbarer zu machen. Daher betreiben wir Datenbanken meistens in separaten Clustern, weil es doch relativ hart ist diese sinnvoll in Containern zu orchestrieren. Das bedeutet allerdings, dass wir unsere Cluster nicht optimal ausnutzen und Skalierungseffekte zwischen zustandslosen und zustandsbehafteten Anwendungen verschenken.\r\nAber was bedeutet es eigentlich eine Datenbank in einen Container zu stecken? Über welche Dinge sollte ich mir Gedanken machen? In dieser Session werden wir analysieren, welche Auswirkungen Container auf Plattenzugriffe, auf Netzwerke oder CPU Auslastung. Weiterhin werden wir Persistenz, Replikation, Backups oder Integration in moderne Orchestrierungs-Frameworks wie Kubernetes oder DC/OS diskutieren.",
              "startsAt": "2018-09-06T13:40:00",
              "endsAt": "2018-09-06T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "62c6bbf2-5f0b-423c-9cc4-e01e32afe2c5",
                  "name": "Johannes Unterstein"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "44677",
              "title": "Beautiful History",
              "description": "Es gibt viele erfolgreiche Softwareprojekte. Das bedeutet, dass viele EntwicklerInnen Applikationen und Bibliotheken weiterpflegen, die sie selbst nicht entwickelt haben. Beim Verstehen einer Codebasis steht eine Informationsquelle unmittelbar zur Verfügung: die Versionsgeschichte.\r\nDieser Vortrag zeigt, wie die Versionsgeschichte so gestaltet werden kann, dass sie von künftigen LeserInnen einfach zu verstehen ist. Darunter finden sich Techniken wie ausführliche Commit-Messages, lineare Versionsgeschichte und Trennung von Refactorings und Änderungen. Es wird auch gezeigt, wie sich diese Techniken Stück für Stück in den täglichen Arbeitsalltag einbetten lassen.",
              "startsAt": "2018-09-06T13:40:00",
              "endsAt": "2018-09-06T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "80c9dc27-bdd6-4b6f-b1a6-8e64b427561d",
                  "name": "Stefan Birkner"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "40376",
              "title": "Introduce kids to STEAM and reduce the gender gap",
              "description": "Science, Technology, Engineering, Arts and Mathematics (STEAM) is what our society needs to focus on if it wants to be competitive in the future. But in order to succeed with that, it also needs to let kids discover the best career for them without any negative influence from gender stereotypes. This session presents our journey to the first Hackdays4Girls, a one day event we organized in our company to engage girls into coding in a fun and easy way. We will guide you through several hands-on activities using Scratch and the microcontroller boards Calliope and BBC Micro:bit, as well as some other ways to encourage kids to get into technology. Our aim is to let others know how easy it is to organize such an event and bring advice for those planning it.\r\n",
              "startsAt": "2018-09-06T13:40:00",
              "endsAt": "2018-09-06T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "62460571-83d9-4ca2-8238-379913b06aee",
                  "name": "Ansgar Schulze Everding"
                },
                {
                  "id": "f5dd4f6c-6ddf-457a-9832-fdd386afc3c4",
                  "name": "Laura Luiz"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          },
          {
            "id": 1659,
            "name": "Austen (2.OG)",
            "session": {
              "id": "44306",
              "title": "Von Clean Code zum kognitiven Editor",
              "description": "Ein wesentlicher Aspekt von Clean Code ist es, Code so zu schreiben, dass andere ihn gut verstehen können. Man kann mit den Ergebnissen der kognitiven Textverstehensforschung erklären, was Texte gut verständlich macht. In meiner Promotion übertrage ich diese Ergebnisse auf die Programmierung und entwickle einen kognitiven Editor für Java, um schneller und konsistenter zu Clean Code zu kommen. Im Vortrag zeige ich den Editor live und stelle vor, welche Erfahrungen ich mit dem Editor im Projektalltag gemacht habe.",
              "startsAt": "2018-09-06T13:40:00",
              "endsAt": "2018-09-06T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "e366b0ff-20b0-412c-ae70-a81e789db4aa",
                  "name": "Sebastian Lohmeier"
                }
              ],
              "categories": [],
              "roomId": 1659,
              "room": "Austen (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 4
          }
        ]
      },
      {
        "slotStart": "15:00:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43317",
              "title": "Serverless Security - Sicher ohne Server!?",
              "description": "Serverless heißt, sich nicht mehr um die darunter liegende Infrastruktur kümmern zu müssen. Doch muss ich mich auch nicht mehr um die Sicherheit meiner Anwendungen kümmern? Oder muss ich mich erst recht und noch verstärkt damit beschäftigen?\r\n\r\nBerechtigungen auf und für Ressourcen, Verschlüsselung von Daten, Netzwerk-Layern, Intrusion Detection, Thread Modeling, Meltdown & Spectre - Themen, die gerade in Cloud-Umgebungen einen besonders sensiblen Umgang erfordern.\r\n\r\nWelche Möglichkeiten uns in der Cloud zur Verfügung stehen und welche Pflichten wir haben, um uns sicher nicht um Verwaltung unserer Infrastruktur kümmern zu müssen und dennoch ruhig schlafen können, darüber diskutieren wir in diesem Talk.",
              "startsAt": "2018-09-06T15:00:00",
              "endsAt": "2018-09-06T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "ef54265f-c9ff-45d2-a495-20baff896eff",
                  "name": "Niko Köbler"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "43883",
              "title": "Integration von Security-Checks in die CI-Pipeline",
              "description": "Dass eine Anwendung gegen Angriffe von Außen abgesichert werden muss, ist in der heutigen Zeit keine Frage mehr. Die OWASP Top10 sind in aller Munde. Um so verwunderlicher ist es, dass in den meisten Projekten die Suche nach Sicherheitslücken frühestens nach Fertigstellung der Software angegangen wird. Dabei gibt es ein paar Möglichkeiten, bekannte Security-Probleme bereits während der Entwicklung automatisiert zu erkennen und dem Entwickler so durch geeignetes Feedback die Möglichkeit zu geben, diese zeitnah zu beheben.\r\n \r\nIn dem Talk werden verschiedene Tools vorgestellt und gezeigt, welche Security-Probleme schon während der Entwicklung durch Continous Integration vermieden werden können. ",
              "startsAt": "2018-09-06T15:00:00",
              "endsAt": "2018-09-06T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "7b88c8f8-bcf6-42f6-b800-35dfcc74a172",
                  "name": "Christian Schulz"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43472",
              "title": "DevOps going Enterprise – ein Erfahrungsbericht",
              "description": "Im Zuge der steigenden Popularität agiler Softwareentwicklung konnte in den letzten Jahren auch DevOps immer mehr Anhänger für sich gewinnen. Einer der Gründe dafür ist, dass mit Hilfe von DevOps die Mauer zwischen der Entwicklung und dem Betrieb eingerissen werden kann. Wie aber lassen sich DevOps-Ansätze implementieren, wenn ein agil getriebenes und dynamisches Umfeld auf klassische Softwareentwicklungs- und Unternehmensprozesse trifft? Lässt sich der Spagat zwischen Start-up und Enterprise meistern und falls ja, wie?",
              "startsAt": "2018-09-06T15:00:00",
              "endsAt": "2018-09-06T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "7bf89994-6269-4b30-9669-d3630eceefb9",
                  "name": "Markus Koschier"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "44131",
              "title": "Datenübertragung per Funk: Wie geht das?",
              "description": "Datenübertragung per Funk ist Alltag. Smartphones können mittels LTE, W-LAN und Bluetooth mit ihrer Umwelt kommunizieren. Auch im IoT Bereich ist die Nutzung von Funkprotokollen wie LoRaWan populär, um Geräte drahtlos zu verbinden.\r\n\r\nDieser Vortrag klärt einige Grundlagen: Was tun wir eigentlich, wenn wir funken? Welche Möglichkeiten gibt es, dabei Daten zu übertragen? Wie weit reichen Funkwellen? Wieso hat man im Gebäude manchmal keine Verbindung, wenn draußen alles bestens funktioniert? Warum reichen einige Protokolle weiter als andere? Welche Kompromisse muss man eingehen, wenn man wenig Strom verbrauchen will? Welche, wenn man einen hohen Datensatz erreichen will? Geht beides gleichzeitig? Welche Kompromisse geht jemand ein, der ein Funkprotokoll entwirft (oder aussucht)? Warum brauchen manche Geräte große, sichtbare Antennen und andere nicht? Welche Eigenschaften haben verschiedene Frequenzen? Wer darf auf welchen Frequenzen funken und wer legt das fest?",
              "startsAt": "2018-09-06T15:00:00",
              "endsAt": "2018-09-06T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "ea4671e0-a8af-4a0a-8e69-0957a54e7a9e",
                  "name": "Christine Koppelt"
                },
                {
                  "id": "d8175547-08e7-498e-80c9-94b5829cf053",
                  "name": "Andreas Krüger"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "16:20:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43223",
              "title": "Docker Tipps und Tricks – nicht nur für Anfänger",
              "description": "Im Docker-Universum kann man sich leicht verlaufen und verzetteln. In dieser Session möchte ich euch daher einen Überblick über sinnvolle und weniger sinnvolle Praktiken im Umgang mit Docker und Werkzeugen aus dem Docker-Ökosystem, gesammelt in inzwischen mehr als vier Jahren produktivem Einsatz von Docker, geben. Dabei betrachten wir Themen wie dem Erstellen von Images, Java und Datenbanken in Containern, Logging, Sammeln von Metriken und auch das Thema Orchestrierung darf natürlich nicht fehlen.",
              "startsAt": "2018-09-06T16:20:00",
              "endsAt": "2018-09-06T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "d3d7bd6f-a505-4fd7-affe-c65ccdf7c0f1",
                  "name": "Halil-Cem Gürsoy"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "43956",
              "title": "Jenkins X - Continuously Driving the Kloud",
              "description": "Cloud schreibt man im Zeitalter von Kubernetes mit K! Alle Ressourcen werden dynamisch von Kubernetes verwaltet. Alle? Build und Deployment über verschiedene Stages liegt oft noch außerhalb, z.B. in einem Build-Server und verschiedenen Repositories (Artefakte, Docker-Images). \r\nMit Jenkins-X wandert alles in einen Kubernetes-Cluster und gewinnt so die nötige Dynamik:\r\n\r\n- Setup der nötigen Infrastruktur in Kubernetes (Jenkins, Nexus, Docker-Registry, ...),\r\n- Aufsetzen von Build-Pipelines für jeden Branch und jeden Pull-Request,\r\n- Deployment in verschiedene Stages (mit Helm),\r\n- Mandantenfähigkeit (Builds und Environments nach Teams unterscheiden),\r\n- Steuerung von versionierte Deployment-Konfigurationen (GitOps),\r\n- Import von bestehenden Projekten,\r\n- Setup neuer Projekte auf Basis gängiger Microservice-Frameworks (z.B. Spring Boot),\r\nu.v.a.m.\r\n\r\nJenkins-X kommt als Entwickler-freundliches Command-Line Tool und bündelt eine Vielzahl von Komponenten hinter einer einheitlichen (opinionated) Fassade. Der Vortrag erklärt die Architektur und Konzepte und führt an ein paar kleinen Beispielen typische Use-Cases vor.\r\n",
              "startsAt": "2018-09-06T16:20:00",
              "endsAt": "2018-09-06T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "f69ed925-1034-4d8a-a1cf-ae76ef16365d",
                  "name": "Gerd Aschemann"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43447",
              "title": "Reaktive Programmierung in verständlichen Worten",
              "description": "Reaktive Programmierung, reaktive Systeme und das Reactive Manifesto rücken im Moment immer stärker in den Fokus der Java Community. Der Begriff Reaktive Programmierung wird hierbei häufig synonym mit Reaktiven Systemen verwendet, dabei ist Reaktive Programmierung eher ein gutes Werkzeug um diese zu implementieren. Reaktive Programmierung eignet sich darüber hinaus ausgezeichnet für parallele Programmierung, UI-Applikationen und das managen von Applikationszuständen. Der Vorteil liegt hierbei in dem verständlicherem Code der eine bessere Wiederverwendbarkeit aufweist. Ein häufig angenommener Nachteil ist die initial steilere Lernkurve.\r\n\r\nIn dem Vortrag geht es darum, die Grundlagen von Reaktiver Programmierung leicht verdaulich zu erklären und die Vorteile gegenüber Alternativen deutlich zu machen. Die zweite Hälfte des Vortrags besteht aus Praxisbeispielen und Tipps für den Einstieg in die Nutzung von konkreten Implementierungen, die den Reactive-Streams-Standard (JEP 266) implementieren. Hierbei verwenden wir zur Demonstration das Reactor Framework, welches auch die reaktive Kern-Komponente von Spring 5 und Spring Webflux ist.",
              "startsAt": "2018-09-06T16:20:00",
              "endsAt": "2018-09-06T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "c2df01fc-314f-48b5-9627-f7862d9421d0",
                  "name": "Alex Krause"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "40937",
              "title": "Offline First - kein Netz, kein Fehler, zufriedene Nutzer",
              "description": "\"High Speed Internet, permanently online, permanently connected, LTE überall, na klar geht alles nur online - der Rest ist Error Handling. Done.\"\r\n\r\nOft ist uns gar nicht mehr bewusst, dass wir damit Nutzer enttäuschen, ihre Zeit verschwenden und die Nutzung unserer Anwendungen einschränken. Leider ist Offline-Fähigkeit nachträglich oft ähnlich schlecht nachrüstbar wie die Unterstützung von Mobile Devices. Daher möchten ich Euch zeigen, wie man mit Offline First von Anfang an \"offline denken\" kann, vergleichbar mit Mobile First.\r\n\r\nIch werde Euch kurz in die Motivation für Offline-Funktionen, Nutzerwartungen, UX-Ansätze sowie Herausforderungen und Ansätze für die Anwendungsarchitektur und -sicherheit einführen und aufzeigen wie wir CAP und Eventual Consistency auf diese Problemstellung anwenden können.\r\n\r\nWir werfen einen Blick darauf, welche Technologien für Progressive Web Apps und Native Apps zur Verfügung stehen und wie Digital Business Platforms wie Salesforce oder die SAP Cloud Platform die Offlinefähigkeit unterstützen. Kann man wirklich schon „Offline as a Service“ dazukaufen?\r\n\r\nAlso: \"Kein Netz\" ist nicht zwingend ein Fehler.",
              "startsAt": "2018-09-06T16:20:00",
              "endsAt": "2018-09-06T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "4682b7ae-0351-48e0-97c4-830d9935ba7f",
                  "name": "Ulrich Deiters"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "17:35:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "8b057319-8e81-486e-84cd-de7203f9df58",
              "title": "Panel und Verlosung",
              "description": null,
              "startsAt": "2018-09-06T17:35:00",
              "endsAt": "2018-09-06T18:35:00",
              "isServiceSession": true,
              "isPlenumSession": true,
              "speakers": [],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": null,
              "isInformed": false,
              "isConfirmed": false
            },
            "index": 0
          }
        ]
      }
    ]
  },
  {
    "date": "2018-09-07T00:00:00",
    "isDefault": false,
    "rooms": [
      {
        "id": 1655,
        "name": "Humboldtsaal (1.OG)",
        "sessions": [
          {
            "id": "43164",
            "title": "Warum Microservices scheitern",
            "description": "Auch Microservices sind nicht die Lösung aller Probleme, sondern bieten einige Herausforderungen. Dieser Vortrag zeigt, warum Microservice-Projekte scheitern. Dabei geht es nicht nur um technische Gesichtspunkte sondern ebenso um Aspekte wie Organisation oder Architektur. Natürlich zeigt der Vortrag auch, wie man mit diese Klippen erfolgreich umschiffen kann, um so Microservices gewinnbringend einzusetzen und den größtmöglichen Gewinn aus diesem Ansatz zu ziehen.",
            "startsAt": "2018-09-07T09:00:00",
            "endsAt": "2018-09-07T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "4750ed21-fcda-4dc5-9fe5-1a6fca25cd8c",
                "name": "Eberhard Wolff"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "39892",
            "title": "Java Next - New Releases, Valhalla, Amber, and More Goodies",
            "description": "With Java's switch to a six-month release schedule, the community needs to step up its game to stay up to date. Instead of having a year or more to prepare for a new release, it's a mere three months - we need to be better informed about what's going on to see changes coming before they're out.\r\n\r\nThis talk:\r\n\r\n* explains the details behind the new schedule and how to stay up to date\r\n* shows the future of Java, brought by projects like Valhalla, Amber, and others\r\n* presents at Java 9 and 10 language features like `var`\r\n* looks at features of upcoming releases like pattern matching and value types\r\n\r\nAfterwards, you will not only know about the immediate future but also how to stay up to date without much effort.\r\n",
            "startsAt": "2018-09-07T10:20:00",
            "endsAt": "2018-09-07T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "d5ed39ab-db82-43fb-bdb1-95194e0bde4e",
                "name": "Nicolai Parlog"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43802",
            "title": "Starting on Ethereum, a developer approach",
            "description": "The blockchain is not only restricted to Bitcoin and crypto-currencies. It’s a distributed ledger technology, meaning you can write different things on it, depending on the technology involved. Ethereum is such a blockchain implementation that allows to write code.\r\n\r\nIn this talk, I’ll show you how to start coding on Ethereum, how to deploy your code, how to test it and how to call your code from the world outside the blockchain, all based on live demo.\r\n\r\nAfter the talk, you’ll be able to start your own journey on the blockchain.",
            "startsAt": "2018-09-07T11:40:00",
            "endsAt": "2018-09-07T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "9c904945-768e-4597-b942-6be90cf4d731",
                "name": "Nicolas Fränkel"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "db465f34-b1c4-4e69-80b7-7cd82973d798",
            "title": "Mittag",
            "description": null,
            "startsAt": "2018-09-07T12:40:00",
            "endsAt": "2018-09-07T13:40:00",
            "isServiceSession": true,
            "isPlenumSession": true,
            "speakers": [],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": null,
            "isInformed": false,
            "isConfirmed": false
          },
          {
            "id": "43154",
            "title": "Wie werde ich ein erfolgreicher Software-Architekt?",
            "description": "Software-Architektur ist ganz einfach: Eigentlich muss man nur ein System aufteilen und moderne Ansätze wie DDD oder Microservices nutzen. Diese Präsentation zeigt völlig andere Voraussetzungen, die ein guter Software-Architekt mitbringen muss. Im Mittelpunkt stehen die technischen Entscheidungen, die ein Architekt treffen muss, wie man am besten mit solchen Entscheidungen umgeht und wie man herausfindet, auf welcher Basis man die Entscheidungen treffen kann. Und weil Software-Projekte immer im Team stattfinden, geht es natürlich auch um Soft Skills und den Umgang mit den Teams.",
            "startsAt": "2018-09-07T13:40:00",
            "endsAt": "2018-09-07T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "4750ed21-fcda-4dc5-9fe5-1a6fca25cd8c",
                "name": "Eberhard Wolff"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44333",
            "title": "Echt funktionale Maps",
            "description": "Wer echt funktionale, „persistente“ Datenstrukturen implementieren muss oder sich einfach nur dafür interessiert, der wird mit unterschiedlichen Problemen konfrontiert, wenn – wie so oft – die Performanz eine Rolle spielt. Mit einer Liste tut man sich in dem Zusammenhang noch leicht; ein Baum dahingegen verlangt einem schon etwas mehr ab, insbesondere, wenn er immer balanciert sein soll. Ein unveränderliches Array mit ausreichender Performanz zu implementieren ist schon nicht mehr ganz so trivial. Und für eine Map muss man schon tief in die Trickkiste greifen.\r\n\r\nDieser Vortrag stellt eine mögliche Implementierung für eine persistente Map vor. Währenddessen wird gezeigt wie man ein sehr effizientes, persistentes Array implementiert und auf dieser Basis eine Map aufbauen kann. Zusätzlich wird das Array mit Hilfe von Bit-Manipualtionen (sic!) derart optimiert, dass die Map nicht nur extrem schnell sondern auch noch speichereffizient ist. Damit ist der Vortrag ein Muss für alle diejenigen, die die schönen Dinge des Lebens zu schätzen wissen.",
            "startsAt": "2018-09-07T15:00:00",
            "endsAt": "2018-09-07T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "4c29abb8-0a90-4063-a815-b376a2f2a951",
                "name": "Michael Wiedeking"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43771",
            "title": "Von An- und Umbauten - Integration von mehreren Webanwendungen zu EINER",
            "description": "Microservices haben sich in den letzten Jahren auch deshalb durchgesetzt, weil sie der Erkenntnis Rechnung tragen, dass ein Team ab einer gewissen Größe nicht mehr gut funktioniert und die Entwicklung eines Systems mit mehreren Teams recht hohe Verluste erzeugt.\r\nAuf das UI wurde dieser Ansatz bisher selten ausgerollt, auch wenn die Probleme die gleichen sind. Der Anwender des Gesamtsystems möchte ja ein UI aus einem Guss! Dabei kann der Ansatz nicht nur bei der Neuentwicklung helfen, sondern eine Migration des Backends erst ermöglichen, indem sich Teile - Schritt für Schritt - aus einen bestehenden Monolithen herauslösen lassen, ohne dass das Nutzererlebnis leiden muss.\r\nArchitektonisch bieten sich viele Optionen: von alten Bekannten wie Links und iframes, über ROCA, ESI, bis hin zu Web-Components. Der Vortrag gibt einen Überblick über die Vor- und Nachteile der wichtigsten Vertreter und gibt Hilfestellungen bei der Auswahl.",
            "startsAt": "2018-09-07T16:20:00",
            "endsAt": "2018-09-07T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "1f344651-89bb-4766-af2e-1a049693d57f",
                "name": "Stefan Hildebrandt"
              }
            ],
            "categories": [],
            "roomId": 1655,
            "room": "Humboldtsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1656,
        "name": "Kleistsaal (1.OG)",
        "sessions": [
          {
            "id": "40374",
            "title": "Eventing mit Apache Kafka - haben ist besser als brauchen",
            "description": "Bei dem Aufbau unserer Microservice-Architektur stellten wir uns bald die Frage wie Services an die benötigten Daten kommen ohne mit unendlich vielen API Calls das Tor zur Abhängigkeitshölle zu öffnen. Fakt ist: Daten zu haben ist besser als sie zu benötigen. \r\nAlso entschieden wir uns dazu die Daten redundant vorzuhalten. Um 40 Teams maximale Autonomie zu ermöglichen, setzen wir auf “Eventing” und Apache Kafka um Abhängigkeiten zur Anfragezeit zu minimieren. In diesem Talk wollen wir die Prinzipien und Grundbegriffe erklären und anhand von Sourcecode Beispielen vorführen wie unsere Teams Apache Kafka zur asynchronen Kommunikation einsetzen. Wir zeigen anhand einfacher Producer und Consumer wie Domain-Events publiziert und konsumiert werden, auf welche Dinge Entwickler dabei achten sollten und wo wir die Grenzen dieses Ansatzes sehen. \r\n",
            "startsAt": "2018-09-07T09:00:00",
            "endsAt": "2018-09-07T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "62460571-83d9-4ca2-8238-379913b06aee",
                "name": "Ansgar Schulze Everding"
              },
              {
                "id": "ad2ea701-7ccb-4f04-bdcf-997ac3b04db7",
                "name": "Sebastian Gauder"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44175",
            "title": "Umfassendes Monitoring mit Logs, Metriken, Pings und Traces",
            "description": "\"Mit Microservices wird jedes Problem zum Krimi,\" ist ein gängiges Vorurteil gegen diesen Entwicklungsansatz. Das muss es aber gar nicht sein! Der Vortrag zeigt, wie man eine Spring Boot Applikation einfach und rundum überwachen kann. Dazu sehen wir uns an:\r\n* Systemmetriken: Netzwerkverkehr und Systemlast im Auge behalten.\r\n* Applikations-Logs: Strukturiert loggen und die Daten zentral speichern.\r\n* Uptime-Monitoring: Dienste aktiv auf Verfügbarkeit und Antwortzeiten überwachen.\r\n* Applikations-Metriken: Spring Boot Metriken per REST oder JMX regelmäßig abfragen und speichern.\r\n* Request-Tracing: Requests durch das ganze System nachverfolgen mit Hilfe von Sleuth und den zeitlichen Ablauf mit Zipkin darstellen.\r\n\r\nUnd wir probieren das alles auch gleich live aus, da es so einfach und auch wesentlich interaktiver ist.",
            "startsAt": "2018-09-07T10:20:00",
            "endsAt": "2018-09-07T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "48bba77e-6187-42e9-bfd3-10c9ae781b89",
                "name": "Philipp Krenn"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41494",
            "title": "Einführung in GraphQL",
            "description": "GraphQL ist eine Sprache zur Abfrage von Daten, die häufig als \"Alternative zu REST\" bezeichnet wird, und die unter anderem von Facebook, GitHub und Twitter verwendet wird. Gegenüber REST verspricht GraphQL eine höhere Flexibilität, weil der Client per Query präzise bestimmen kann, welche Daten er vom Server laden oder schreiben will. Hinzu kommt, dass GraphQL über ein Typsystem verfügt, mit dem die API beschrieben wird. Dadurch sind beispielsweise Überprüfungen hinsichtlich der Korrektheit einer Abfrage zur Laufzeit oder auch Code-Completion bereits zur Entwicklungszeit möglich. \r\nIn dieser Session stelle ich Euch die Ideen und Konzepte von GraphQL  mit Code-Beispielen vor und gehe dabei auch auf Fragen ein wie: Welche Arten von Queries gibt es? Wie bindet man GraphQL in eigene Anwendungen ein?  Gibt es fertige GraphQL-Implementierungen für den Server? So könnt ihr nach dem Talk entscheiden, ob auch für Eure Projekte GraphQL eine Alternative zu REST sein kann.",
            "startsAt": "2018-09-07T11:40:00",
            "endsAt": "2018-09-07T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "b90317c9-5fd7-4f10-b20a-30e216b29fd1",
                "name": "Nils Hartmann"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44204",
            "title": "MEAN SCS in der Cloud",
            "description": "Das Interesse an Microservice Architekturen scheint ungebrochen. Eine Sonderform sind die sogenannten Self Contained Systems (SCS), als vollumfängliche Microservice Variante (Microservice mit UI).\r\nIm Zuge eines Kundenprojektes hatten wir die Chance eine Portallösung zu entwickeln mit deren Hilfe Self Contained Systems auf einfache Art und Weise integriert werden sollen.\r\nSpannende Aspekte waren dabei der MEAN Stack (MongoDB, Express, Angular, NodeJS) und Microsoft Azure als Cloudplattform.\r\nDieser Talk zeigt, wie sich diese Aspekte zu einem großen Ganzen zusammengefügt haben und welche Erfahrungen wir auf dem Weg dorthin machen durften.",
            "startsAt": "2018-09-07T13:40:00",
            "endsAt": "2018-09-07T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "cb1558b3-399d-4bc3-9438-d88c21734d87",
                "name": "Daniel Bremer-Tonn"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41001",
            "title": "Replication Distilled: Hazelcast Deep Dive",
            "description": "Distributed data stores cope with the challenges of managing replicated data. Building a distributed data store is hard, and clarifying its high level properties is even harder. Hazelcast makes use of several replication techniques to offer choices for the trade-offs between consistency, availability, and latency properties. In this talk, we take a closer look at these techniques from the perspective of the CAP and PACELC principles. We first break apart the main replication technique and challenge the rationale behind it. Then, we discuss what has gone wrong with it, and how we gradually extended and replaced it with other techniques to fix the issues.",
            "startsAt": "2018-09-07T15:00:00",
            "endsAt": "2018-09-07T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "436563a5-b742-46f9-9bd5-d4909dcacbb0",
                "name": "Ensar Basri Kahveci"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44058",
            "title": "Maven Plugins Testen Hm...Aber wie?",
            "description": "Im Rahmen der Continious Integration geht es darum die Anwendung mit Tests abzudecken (Unit-, Integrations-, Ende-Zu-Endetests etc.). Ist doch selbverständlich oder?\r\n\r\nJetzt gibt es aber durchaus Situationen in denen man spezielle Anforderungen an einen Maven Build hat die man nicht mit den vorhandenen Plugins/Konfigurationen umsetzen kann. Da sollte man durchaus den Weg gehen und ein entsprechendes Maven Plugin oder eine Maven Extension schreiben. So weit so gut.\r\n\r\nFür eine Maven Plugin gilt selbstverständlich das gleiche wie für den produktiven Code. Es sollte mit entsprechenden Unit- und Integrationstests getestet werden.\r\n\r\nJetzt ist nur die Frage wie sehen solche Tests aus? Wie kann man ein Maven Plugin im Bezug auf unterschiedliche/spezielle Abhängigkeiten testen?\r\nWie behandelt man unterschiedliche Nutzungsszenarien (Kommandozeilenaufruf / Innerhalb der POM Datei)?\r\nWelche Möglichkeiten gibt es, um unterschiedliche Maven Versionen / JDK versionen zu testen?\r\nWie debugged man denn ein Maven Plugin im Rahmen der Entwicklung?\r\n\r\nZiele:\r\n  Erlangung einer Übersicht über die unterschiedlichen Test Möglichkeiten und\r\n  welche Art von Tests für bestimmte Szenarien nützlich ist.\r\n",
            "startsAt": "2018-09-07T16:20:00",
            "endsAt": "2018-09-07T17:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "0df22e94-fe87-4516-b783-e35d0f0587de",
                "name": "Karl Heinz Marbaise"
              }
            ],
            "categories": [],
            "roomId": 1656,
            "room": "Kleistsaal (1.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1657,
        "name": "Edison (2.OG)",
        "sessions": [
          {
            "id": "44174",
            "title": "Entwicklung einer weltweit eingesetzten Industriesoftware – Reality Check für Anpassbarkeit, DevOps",
            "description": "In diesem Talk beschreiben wir Entwicklung eines Software-Produktes für eine hochspezialisierte Industrie, und die besonderen Anforderungen die daraus entstehen (lange Lebensdauer, Services können nicht einfach neu geschrieben werden, Upgrade-Fähigkeit während 24/7-Betrieb, hohe Anpassbarkeit eines Standardproduktes). \r\nWeiterhin berichten wir von unseren Erfahrungen, wie sich aktuelle Entwicklungen wie Microservices, DevOps, Continous Delivery, Agile in diesem Umfeld gewinnbringend einsetzen lassen und präsentieren unsere Konzepte für evolutionäre Weiterentwicklung von Industriesoftware.",
            "startsAt": "2018-09-07T09:00:00",
            "endsAt": "2018-09-07T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "730d20f1-2b52-4174-adee-44f7194de741",
                "name": "Heiko Wolf"
              },
              {
                "id": "75fa8229-77f0-454b-ae1a-1ccd22740518",
                "name": "Johannes Schäfer"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41762",
            "title": "Mixed Realities for Web",
            "description": "Sind wir mal ehrlich: VR in einem Browser ist nichts neues. Seit 2017 hat Firefox den Support für jeden ausgerollt. HTC Vive, Oculus Rift und andere Hardware werden unterstützt. Jeder kann VR-Anwendungen mittels Javascript und entsprechenden APIs im Browser erstellen. Aber was ist mit AR? Oder Mixed Reality (MR)? In meiner Session lernst du wie AR, oder besser gesagt MR im Browser möglich ist. Lerne wie und was bereits heute angeboten wird und was wir von der Zukunft noch erwarten können.",
            "startsAt": "2018-09-07T10:20:00",
            "endsAt": "2018-09-07T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "0209954e-3575-4b71-8959-b4991beeb27e",
                "name": "Carsten Sandtner"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44308",
            "title": "Wir wollen es genau wissen: Benchmarks mit JMH",
            "description": "\"Ich glaube nicht, dass das sehr performant ist\", \"Willst du nicht lieber [Lösung von der ich mal einen Tweet gelesen haben, sie soll schneller sein] nehmen?\" \r\n\r\nSolche Diskussionen habt ihr vielleicht auch schon mal mit euren Kollegen geführt. Schnell artet die Unterhaltung aus, da die Argumente auf Hörensagen oder selbst geschriebenen Lasttests \r\n zweifelhafter Qualität basieren. Zeit es ordentlich zu machen!\r\n\r\nIn diesem Talk zeige ich euch das Benchmark Tool JMH für seriöse Lasttests, wie ihr solche Lasttests Teil eurer CI-Umgebung macht und wie ihr mit Flight Recorder noch mehr aus den Ergebnissen rausholt.",
            "startsAt": "2018-09-07T11:40:00",
            "endsAt": "2018-09-07T12:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "2da67d24-8e09-4a1f-a8d4-e78e074a38e7",
                "name": "Dennis Rippinger"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43293",
            "title": "Von Nix-Dorf zur Cloud-City in 20 Folien",
            "description": "Früher (1980) war alles besser: IT hieß noch EDV, für's Backup reichte ein Bandlaufwerk und die Fachabteilung begnügte sich noch mit einer einfachen Textmaske zur Eingabe. Seitdem steigen die Anforderungen und Erwartungen an die IT.\r\n\r\nWie schafft man jetzt den Sprung in die digitale Transformation mit der Technik von damals? Gar nicht - heute sind moderne (Cloud-)Architekturen gefragt, um für die Zukunft gewappnet zu sein.",
            "startsAt": "2018-09-07T12:00:00",
            "endsAt": "2018-09-07T12:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "24288bdd-e717-40b4-9360-353989993c04",
                "name": "Oliver L. Böhm"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "42340",
            "title": "Schöne neue reaktive Welt",
            "description": "Bei idealo haben wir in einem Zeitraum von über 15 Jahren eine Preisvergleichsplattform geschaffen. Aus dem Startup wurde ein schnell wachsendes Unternehmen, mehr Teams, mehr Entwickler, mehr Fachlichkeit. Die monolitischen Systeme, die im Hintergrund ihre Arbeit verrichteten, waren nicht mehr in der Lage, den äusseren Faktoren gerecht zu werden: Es musste etwas passieren.\r\n\r\nNach einer Reorganisation der Entwicklungs- und Produktabteilung standen wir als neues Entwicklerteam Anfang 2017 vor der Herausforderung, unsere Fachlichkeit aus den Monolithen herauszulösen.\r\n\r\nDer Vortrag beleuchtet unseren bisherigen Weg und wie wir mit den Technologien Spring Framework, RxJava, MongoDB, Vert.x und Hazelcast eine stabiles und skalierbares System entwickelt haben.\r\n\r\nUnd wir wagen einen Blick in die Zukunft einer schönen neuen reaktiven Welt.",
            "startsAt": "2018-09-07T13:40:00",
            "endsAt": "2018-09-07T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "a746610d-513a-4216-8ce9-4bb5cda50ef4",
                "name": "Daniel Hübner"
              },
              {
                "id": "2cd0e0cb-405f-470f-a7c8-e8127087adc0",
                "name": "Jan Guntowski"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43470",
            "title": "Ohne Passwörter geht es auch",
            "description": "Passwörter sind unsicher und für den Benutzer unpraktisch. Phishing und gestohlene Passwortdatenbanken sind allgegenwärtig. Passwörter werden zudem häufig vergessen, die Eingabe starker Passwörter dauert lange und ist fehleranfällig. Eine Registrierung ist im E-Commerce eines der größten Hindernisse für Conversion-Rate.\r\n\r\nEs geht besser: Passwortlose Authentifizierungsverfahren verzichten auf die Vergabe eines Passworts. Sie setzen auf One-Time-Token, biometrische Eigenschaften oder den Besitz eines bestimmten Geräts.\r\n\r\nIm Vortrag werden die Verfahren Magic Email-Link, Social Logins mit OAuth2 und Authentication-Apps beschrieben, wie sie in Webseiten und mobilen Apps eingesetzt werden können und welche Herausforderungen dabei gelöst werden müssen.",
            "startsAt": "2018-09-07T15:00:00",
            "endsAt": "2018-09-07T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "37824af4-91f5-4a5a-847d-6d88241db461",
                "name": "Jochen Christ"
              }
            ],
            "categories": [],
            "roomId": 1657,
            "room": "Edison (2.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      },
      {
        "id": 1658,
        "name": "Voltaire (3.OG)",
        "sessions": [
          {
            "id": "43929",
            "title": "Self-Contained Integrationstests mit Docker und Testcontainers",
            "description": "Neben Unit-Tests, bei denen sich Abhängigkeiten wegmocken lassen, überprüfen Integrationstests z.B., dass der Datenlayer mit einer richtigen Datenbank funktioniert. In der Vergangenheit wurden hierzu zumeist dedizierte Testsysteme oder eine lokale In-Memory-Datenbank verwendet. Beide Lösungen haben jedoch Nachteile. Dieser Talk zeigt, wie sich diese Nachteile mit Docker und Testcontainers umgehen lassen.  Dabei entstehen Integrationstests mit einer vollständigen Test-Umgebung, die vollkommen ohne manuelle Eingriffe auskommen und komplett in Code beschrieben sind. Neben dem Testen von Code mit Datenbank-Abhängigkeiten betrachtet der Talk auch Selenium-basierte Tests mit Containern.",
            "startsAt": "2018-09-07T09:00:00",
            "endsAt": "2018-09-07T10:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "bcb3221c-6a1c-46b0-a56c-25608382fc0d",
                "name": "Michael Vitz"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "44304",
            "title": "Test the Architecture",
            "description": "Am Anfang eines Projektes war doch alles so klar: Wir hatten ein tolles Diagramm unserer Architektur. Wir alle glaubten die gleiche Vorstellung vom Ziel zu haben und die Regeln waren leicht aufzählbar. Doch im Laufe der Zeit kamen mehr Regeln und mehr Entwickler dazu. Je länger das Projekt ging und je größer es wurde, desto mehr wich unsere ursprüngliche Zuversicht der Einstellung, dass die Tests uns schon retten werden. Beim nächsten Refactoring stellten wir fest, dass von der ursprünglichen Überlegung wenig übrig geblieben ist. Gibt es nicht auch so was wie Tests für Architekturregeln?\r\n\r\nGibt es! Solche Tools erlauben es Architekturregeln in Form von (Unit)-Tests zu beschreiben. Solche Regeln gehen über die Namenskonvention von Klassen, Zugriffsregeln von Layern oder die Abwesenheit von Schleifen. Je nach Tool können die Regeln sehr mächtig werden und uns helfen unsere Architektur zu bewahren.\r\n\r\nIn diesem Talk möchte ich auf jQAssistant, Degraph und Archunit eingehen. Es wird auf die jeweiligen Stärken und Schwächen der einzelnen Tools eingegangen und anhand praktischer Beispiele miteinander verglichen.",
            "startsAt": "2018-09-07T10:20:00",
            "endsAt": "2018-09-07T11:20:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "2da67d24-8e09-4a1f-a8d4-e78e074a38e7",
                "name": "Dennis Rippinger"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43489",
            "title": "Funktionale reaktive Programmierung mit Sodium",
            "description": "Reaktive Programmierung hat sich über RxJS in der Web-Entwicklung als Standardentwicklungsmuster etabliert. RxJS selber ist zwar sehr mächtig aber gleichzeitig auch sehr komplex und damit anfällig für Fehler, die aus Unverständnis entstehen. Alleine die Unterscheidung zwischen heißen, kalten und lauwarmen Strömen können einen Entwickler bei dem ersten Kontakt mit dem Framework nachhaltig verwirren.\r\n\r\nDie funktionale reaktive Programmierung (FRP) stellt eine Variante reaktiver Programmierung dar. Sie basiert auf einem vergleichsweise kleinen und stringentem Satz an Basisoperationen und Kombinatoren. Diese ermöglichen es, komplexe GUI-Logik modular zu implementieren und dabei typische Fehlerklassen bei der GUI-Entwicklung auszuschließen.\r\n\r\nIn diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.",
            "startsAt": "2018-09-07T11:40:00",
            "endsAt": "2018-09-07T12:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "488ad55f-48f1-4beb-ac26-3654b254c35a",
                "name": "Torsten Fink"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "43988",
            "title": "Starke Typen sind faul oder warum Haskell auf der JVM eine gute Idee ist.",
            "description": "Mit eta existier eine wirklich gelungene Portierung von Haskell auf der JVM. Ziel des Vortrages ist es zum einen die Grundlagen von Haskell zu vermitteln als auch eine Übersicht über die Besonderheiten von eta zu geben. Dabei steht auch immer wieder die Frage im Zentrum: Was bring mir das alles als Java Entwickler oder Entwicklerin?",
            "startsAt": "2018-09-07T13:40:00",
            "endsAt": "2018-09-07T14:40:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "3edfe266-06d0-4fc0-b359-22dd73d7d752",
                "name": "Roger Gilliar"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          },
          {
            "id": "41036",
            "title": "Embracing Change in a Legacy Environment",
            "description": "“Having legacy software is (…) a sign of success.” - We at eBay are successful. And we are successful long enough for our software to become legacy. But being successful in the past doesn’t help to face future challenges. Therefore, the question is: how can we shape our platform to embrace change?",
            "startsAt": "2018-09-07T15:00:00",
            "endsAt": "2018-09-07T16:00:00",
            "isServiceSession": false,
            "isPlenumSession": false,
            "speakers": [
              {
                "id": "75eacca9-7a61-4cf8-9479-636ca904983f",
                "name": "Florian Stefan"
              }
            ],
            "categories": [],
            "roomId": 1658,
            "room": "Voltaire (3.OG)",
            "liveUrl": null,
            "recordingUrl": null,
            "status": "Accepted",
            "isInformed": true,
            "isConfirmed": true
          }
        ],
        "hasOnlyPlenumSessions": false
      }
    ],
    "timeSlots": [
      {
        "slotStart": "09:00:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43164",
              "title": "Warum Microservices scheitern",
              "description": "Auch Microservices sind nicht die Lösung aller Probleme, sondern bieten einige Herausforderungen. Dieser Vortrag zeigt, warum Microservice-Projekte scheitern. Dabei geht es nicht nur um technische Gesichtspunkte sondern ebenso um Aspekte wie Organisation oder Architektur. Natürlich zeigt der Vortrag auch, wie man mit diese Klippen erfolgreich umschiffen kann, um so Microservices gewinnbringend einzusetzen und den größtmöglichen Gewinn aus diesem Ansatz zu ziehen.",
              "startsAt": "2018-09-07T09:00:00",
              "endsAt": "2018-09-07T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "4750ed21-fcda-4dc5-9fe5-1a6fca25cd8c",
                  "name": "Eberhard Wolff"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "40374",
              "title": "Eventing mit Apache Kafka - haben ist besser als brauchen",
              "description": "Bei dem Aufbau unserer Microservice-Architektur stellten wir uns bald die Frage wie Services an die benötigten Daten kommen ohne mit unendlich vielen API Calls das Tor zur Abhängigkeitshölle zu öffnen. Fakt ist: Daten zu haben ist besser als sie zu benötigen. \r\nAlso entschieden wir uns dazu die Daten redundant vorzuhalten. Um 40 Teams maximale Autonomie zu ermöglichen, setzen wir auf “Eventing” und Apache Kafka um Abhängigkeiten zur Anfragezeit zu minimieren. In diesem Talk wollen wir die Prinzipien und Grundbegriffe erklären und anhand von Sourcecode Beispielen vorführen wie unsere Teams Apache Kafka zur asynchronen Kommunikation einsetzen. Wir zeigen anhand einfacher Producer und Consumer wie Domain-Events publiziert und konsumiert werden, auf welche Dinge Entwickler dabei achten sollten und wo wir die Grenzen dieses Ansatzes sehen. \r\n",
              "startsAt": "2018-09-07T09:00:00",
              "endsAt": "2018-09-07T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "62460571-83d9-4ca2-8238-379913b06aee",
                  "name": "Ansgar Schulze Everding"
                },
                {
                  "id": "ad2ea701-7ccb-4f04-bdcf-997ac3b04db7",
                  "name": "Sebastian Gauder"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "44174",
              "title": "Entwicklung einer weltweit eingesetzten Industriesoftware – Reality Check für Anpassbarkeit, DevOps",
              "description": "In diesem Talk beschreiben wir Entwicklung eines Software-Produktes für eine hochspezialisierte Industrie, und die besonderen Anforderungen die daraus entstehen (lange Lebensdauer, Services können nicht einfach neu geschrieben werden, Upgrade-Fähigkeit während 24/7-Betrieb, hohe Anpassbarkeit eines Standardproduktes). \r\nWeiterhin berichten wir von unseren Erfahrungen, wie sich aktuelle Entwicklungen wie Microservices, DevOps, Continous Delivery, Agile in diesem Umfeld gewinnbringend einsetzen lassen und präsentieren unsere Konzepte für evolutionäre Weiterentwicklung von Industriesoftware.",
              "startsAt": "2018-09-07T09:00:00",
              "endsAt": "2018-09-07T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "730d20f1-2b52-4174-adee-44f7194de741",
                  "name": "Heiko Wolf"
                },
                {
                  "id": "75fa8229-77f0-454b-ae1a-1ccd22740518",
                  "name": "Johannes Schäfer"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "43929",
              "title": "Self-Contained Integrationstests mit Docker und Testcontainers",
              "description": "Neben Unit-Tests, bei denen sich Abhängigkeiten wegmocken lassen, überprüfen Integrationstests z.B., dass der Datenlayer mit einer richtigen Datenbank funktioniert. In der Vergangenheit wurden hierzu zumeist dedizierte Testsysteme oder eine lokale In-Memory-Datenbank verwendet. Beide Lösungen haben jedoch Nachteile. Dieser Talk zeigt, wie sich diese Nachteile mit Docker und Testcontainers umgehen lassen.  Dabei entstehen Integrationstests mit einer vollständigen Test-Umgebung, die vollkommen ohne manuelle Eingriffe auskommen und komplett in Code beschrieben sind. Neben dem Testen von Code mit Datenbank-Abhängigkeiten betrachtet der Talk auch Selenium-basierte Tests mit Containern.",
              "startsAt": "2018-09-07T09:00:00",
              "endsAt": "2018-09-07T10:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "bcb3221c-6a1c-46b0-a56c-25608382fc0d",
                  "name": "Michael Vitz"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "10:20:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "39892",
              "title": "Java Next - New Releases, Valhalla, Amber, and More Goodies",
              "description": "With Java's switch to a six-month release schedule, the community needs to step up its game to stay up to date. Instead of having a year or more to prepare for a new release, it's a mere three months - we need to be better informed about what's going on to see changes coming before they're out.\r\n\r\nThis talk:\r\n\r\n* explains the details behind the new schedule and how to stay up to date\r\n* shows the future of Java, brought by projects like Valhalla, Amber, and others\r\n* presents at Java 9 and 10 language features like `var`\r\n* looks at features of upcoming releases like pattern matching and value types\r\n\r\nAfterwards, you will not only know about the immediate future but also how to stay up to date without much effort.\r\n",
              "startsAt": "2018-09-07T10:20:00",
              "endsAt": "2018-09-07T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "d5ed39ab-db82-43fb-bdb1-95194e0bde4e",
                  "name": "Nicolai Parlog"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "44175",
              "title": "Umfassendes Monitoring mit Logs, Metriken, Pings und Traces",
              "description": "\"Mit Microservices wird jedes Problem zum Krimi,\" ist ein gängiges Vorurteil gegen diesen Entwicklungsansatz. Das muss es aber gar nicht sein! Der Vortrag zeigt, wie man eine Spring Boot Applikation einfach und rundum überwachen kann. Dazu sehen wir uns an:\r\n* Systemmetriken: Netzwerkverkehr und Systemlast im Auge behalten.\r\n* Applikations-Logs: Strukturiert loggen und die Daten zentral speichern.\r\n* Uptime-Monitoring: Dienste aktiv auf Verfügbarkeit und Antwortzeiten überwachen.\r\n* Applikations-Metriken: Spring Boot Metriken per REST oder JMX regelmäßig abfragen und speichern.\r\n* Request-Tracing: Requests durch das ganze System nachverfolgen mit Hilfe von Sleuth und den zeitlichen Ablauf mit Zipkin darstellen.\r\n\r\nUnd wir probieren das alles auch gleich live aus, da es so einfach und auch wesentlich interaktiver ist.",
              "startsAt": "2018-09-07T10:20:00",
              "endsAt": "2018-09-07T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "48bba77e-6187-42e9-bfd3-10c9ae781b89",
                  "name": "Philipp Krenn"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "41762",
              "title": "Mixed Realities for Web",
              "description": "Sind wir mal ehrlich: VR in einem Browser ist nichts neues. Seit 2017 hat Firefox den Support für jeden ausgerollt. HTC Vive, Oculus Rift und andere Hardware werden unterstützt. Jeder kann VR-Anwendungen mittels Javascript und entsprechenden APIs im Browser erstellen. Aber was ist mit AR? Oder Mixed Reality (MR)? In meiner Session lernst du wie AR, oder besser gesagt MR im Browser möglich ist. Lerne wie und was bereits heute angeboten wird und was wir von der Zukunft noch erwarten können.",
              "startsAt": "2018-09-07T10:20:00",
              "endsAt": "2018-09-07T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "0209954e-3575-4b71-8959-b4991beeb27e",
                  "name": "Carsten Sandtner"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "44304",
              "title": "Test the Architecture",
              "description": "Am Anfang eines Projektes war doch alles so klar: Wir hatten ein tolles Diagramm unserer Architektur. Wir alle glaubten die gleiche Vorstellung vom Ziel zu haben und die Regeln waren leicht aufzählbar. Doch im Laufe der Zeit kamen mehr Regeln und mehr Entwickler dazu. Je länger das Projekt ging und je größer es wurde, desto mehr wich unsere ursprüngliche Zuversicht der Einstellung, dass die Tests uns schon retten werden. Beim nächsten Refactoring stellten wir fest, dass von der ursprünglichen Überlegung wenig übrig geblieben ist. Gibt es nicht auch so was wie Tests für Architekturregeln?\r\n\r\nGibt es! Solche Tools erlauben es Architekturregeln in Form von (Unit)-Tests zu beschreiben. Solche Regeln gehen über die Namenskonvention von Klassen, Zugriffsregeln von Layern oder die Abwesenheit von Schleifen. Je nach Tool können die Regeln sehr mächtig werden und uns helfen unsere Architektur zu bewahren.\r\n\r\nIn diesem Talk möchte ich auf jQAssistant, Degraph und Archunit eingehen. Es wird auf die jeweiligen Stärken und Schwächen der einzelnen Tools eingegangen und anhand praktischer Beispiele miteinander verglichen.",
              "startsAt": "2018-09-07T10:20:00",
              "endsAt": "2018-09-07T11:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "2da67d24-8e09-4a1f-a8d4-e78e074a38e7",
                  "name": "Dennis Rippinger"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "11:40:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43802",
              "title": "Starting on Ethereum, a developer approach",
              "description": "The blockchain is not only restricted to Bitcoin and crypto-currencies. It’s a distributed ledger technology, meaning you can write different things on it, depending on the technology involved. Ethereum is such a blockchain implementation that allows to write code.\r\n\r\nIn this talk, I’ll show you how to start coding on Ethereum, how to deploy your code, how to test it and how to call your code from the world outside the blockchain, all based on live demo.\r\n\r\nAfter the talk, you’ll be able to start your own journey on the blockchain.",
              "startsAt": "2018-09-07T11:40:00",
              "endsAt": "2018-09-07T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "9c904945-768e-4597-b942-6be90cf4d731",
                  "name": "Nicolas Fränkel"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "41494",
              "title": "Einführung in GraphQL",
              "description": "GraphQL ist eine Sprache zur Abfrage von Daten, die häufig als \"Alternative zu REST\" bezeichnet wird, und die unter anderem von Facebook, GitHub und Twitter verwendet wird. Gegenüber REST verspricht GraphQL eine höhere Flexibilität, weil der Client per Query präzise bestimmen kann, welche Daten er vom Server laden oder schreiben will. Hinzu kommt, dass GraphQL über ein Typsystem verfügt, mit dem die API beschrieben wird. Dadurch sind beispielsweise Überprüfungen hinsichtlich der Korrektheit einer Abfrage zur Laufzeit oder auch Code-Completion bereits zur Entwicklungszeit möglich. \r\nIn dieser Session stelle ich Euch die Ideen und Konzepte von GraphQL  mit Code-Beispielen vor und gehe dabei auch auf Fragen ein wie: Welche Arten von Queries gibt es? Wie bindet man GraphQL in eigene Anwendungen ein?  Gibt es fertige GraphQL-Implementierungen für den Server? So könnt ihr nach dem Talk entscheiden, ob auch für Eure Projekte GraphQL eine Alternative zu REST sein kann.",
              "startsAt": "2018-09-07T11:40:00",
              "endsAt": "2018-09-07T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "b90317c9-5fd7-4f10-b20a-30e216b29fd1",
                  "name": "Nils Hartmann"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "44308",
              "title": "Wir wollen es genau wissen: Benchmarks mit JMH",
              "description": "\"Ich glaube nicht, dass das sehr performant ist\", \"Willst du nicht lieber [Lösung von der ich mal einen Tweet gelesen haben, sie soll schneller sein] nehmen?\" \r\n\r\nSolche Diskussionen habt ihr vielleicht auch schon mal mit euren Kollegen geführt. Schnell artet die Unterhaltung aus, da die Argumente auf Hörensagen oder selbst geschriebenen Lasttests \r\n zweifelhafter Qualität basieren. Zeit es ordentlich zu machen!\r\n\r\nIn diesem Talk zeige ich euch das Benchmark Tool JMH für seriöse Lasttests, wie ihr solche Lasttests Teil eurer CI-Umgebung macht und wie ihr mit Flight Recorder noch mehr aus den Ergebnissen rausholt.",
              "startsAt": "2018-09-07T11:40:00",
              "endsAt": "2018-09-07T12:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "2da67d24-8e09-4a1f-a8d4-e78e074a38e7",
                  "name": "Dennis Rippinger"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "43489",
              "title": "Funktionale reaktive Programmierung mit Sodium",
              "description": "Reaktive Programmierung hat sich über RxJS in der Web-Entwicklung als Standardentwicklungsmuster etabliert. RxJS selber ist zwar sehr mächtig aber gleichzeitig auch sehr komplex und damit anfällig für Fehler, die aus Unverständnis entstehen. Alleine die Unterscheidung zwischen heißen, kalten und lauwarmen Strömen können einen Entwickler bei dem ersten Kontakt mit dem Framework nachhaltig verwirren.\r\n\r\nDie funktionale reaktive Programmierung (FRP) stellt eine Variante reaktiver Programmierung dar. Sie basiert auf einem vergleichsweise kleinen und stringentem Satz an Basisoperationen und Kombinatoren. Diese ermöglichen es, komplexe GUI-Logik modular zu implementieren und dabei typische Fehlerklassen bei der GUI-Entwicklung auszuschließen.\r\n\r\nIn diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.",
              "startsAt": "2018-09-07T11:40:00",
              "endsAt": "2018-09-07T12:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "488ad55f-48f1-4beb-ac26-3654b254c35a",
                  "name": "Torsten Fink"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "12:00:00",
        "rooms": [
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43293",
              "title": "Von Nix-Dorf zur Cloud-City in 20 Folien",
              "description": "Früher (1980) war alles besser: IT hieß noch EDV, für's Backup reichte ein Bandlaufwerk und die Fachabteilung begnügte sich noch mit einer einfachen Textmaske zur Eingabe. Seitdem steigen die Anforderungen und Erwartungen an die IT.\r\n\r\nWie schafft man jetzt den Sprung in die digitale Transformation mit der Technik von damals? Gar nicht - heute sind moderne (Cloud-)Architekturen gefragt, um für die Zukunft gewappnet zu sein.",
              "startsAt": "2018-09-07T12:00:00",
              "endsAt": "2018-09-07T12:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "24288bdd-e717-40b4-9360-353989993c04",
                  "name": "Oliver L. Böhm"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          }
        ]
      },
      {
        "slotStart": "12:40:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "db465f34-b1c4-4e69-80b7-7cd82973d798",
              "title": "Mittag",
              "description": null,
              "startsAt": "2018-09-07T12:40:00",
              "endsAt": "2018-09-07T13:40:00",
              "isServiceSession": true,
              "isPlenumSession": true,
              "speakers": [],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": null,
              "isInformed": false,
              "isConfirmed": false
            },
            "index": 0
          }
        ]
      },
      {
        "slotStart": "13:40:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43154",
              "title": "Wie werde ich ein erfolgreicher Software-Architekt?",
              "description": "Software-Architektur ist ganz einfach: Eigentlich muss man nur ein System aufteilen und moderne Ansätze wie DDD oder Microservices nutzen. Diese Präsentation zeigt völlig andere Voraussetzungen, die ein guter Software-Architekt mitbringen muss. Im Mittelpunkt stehen die technischen Entscheidungen, die ein Architekt treffen muss, wie man am besten mit solchen Entscheidungen umgeht und wie man herausfindet, auf welcher Basis man die Entscheidungen treffen kann. Und weil Software-Projekte immer im Team stattfinden, geht es natürlich auch um Soft Skills und den Umgang mit den Teams.",
              "startsAt": "2018-09-07T13:40:00",
              "endsAt": "2018-09-07T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "4750ed21-fcda-4dc5-9fe5-1a6fca25cd8c",
                  "name": "Eberhard Wolff"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "44204",
              "title": "MEAN SCS in der Cloud",
              "description": "Das Interesse an Microservice Architekturen scheint ungebrochen. Eine Sonderform sind die sogenannten Self Contained Systems (SCS), als vollumfängliche Microservice Variante (Microservice mit UI).\r\nIm Zuge eines Kundenprojektes hatten wir die Chance eine Portallösung zu entwickeln mit deren Hilfe Self Contained Systems auf einfache Art und Weise integriert werden sollen.\r\nSpannende Aspekte waren dabei der MEAN Stack (MongoDB, Express, Angular, NodeJS) und Microsoft Azure als Cloudplattform.\r\nDieser Talk zeigt, wie sich diese Aspekte zu einem großen Ganzen zusammengefügt haben und welche Erfahrungen wir auf dem Weg dorthin machen durften.",
              "startsAt": "2018-09-07T13:40:00",
              "endsAt": "2018-09-07T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "cb1558b3-399d-4bc3-9438-d88c21734d87",
                  "name": "Daniel Bremer-Tonn"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "42340",
              "title": "Schöne neue reaktive Welt",
              "description": "Bei idealo haben wir in einem Zeitraum von über 15 Jahren eine Preisvergleichsplattform geschaffen. Aus dem Startup wurde ein schnell wachsendes Unternehmen, mehr Teams, mehr Entwickler, mehr Fachlichkeit. Die monolitischen Systeme, die im Hintergrund ihre Arbeit verrichteten, waren nicht mehr in der Lage, den äusseren Faktoren gerecht zu werden: Es musste etwas passieren.\r\n\r\nNach einer Reorganisation der Entwicklungs- und Produktabteilung standen wir als neues Entwicklerteam Anfang 2017 vor der Herausforderung, unsere Fachlichkeit aus den Monolithen herauszulösen.\r\n\r\nDer Vortrag beleuchtet unseren bisherigen Weg und wie wir mit den Technologien Spring Framework, RxJava, MongoDB, Vert.x und Hazelcast eine stabiles und skalierbares System entwickelt haben.\r\n\r\nUnd wir wagen einen Blick in die Zukunft einer schönen neuen reaktiven Welt.",
              "startsAt": "2018-09-07T13:40:00",
              "endsAt": "2018-09-07T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "a746610d-513a-4216-8ce9-4bb5cda50ef4",
                  "name": "Daniel Hübner"
                },
                {
                  "id": "2cd0e0cb-405f-470f-a7c8-e8127087adc0",
                  "name": "Jan Guntowski"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "43988",
              "title": "Starke Typen sind faul oder warum Haskell auf der JVM eine gute Idee ist.",
              "description": "Mit eta existier eine wirklich gelungene Portierung von Haskell auf der JVM. Ziel des Vortrages ist es zum einen die Grundlagen von Haskell zu vermitteln als auch eine Übersicht über die Besonderheiten von eta zu geben. Dabei steht auch immer wieder die Frage im Zentrum: Was bring mir das alles als Java Entwickler oder Entwicklerin?",
              "startsAt": "2018-09-07T13:40:00",
              "endsAt": "2018-09-07T14:40:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "3edfe266-06d0-4fc0-b359-22dd73d7d752",
                  "name": "Roger Gilliar"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "15:00:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "44333",
              "title": "Echt funktionale Maps",
              "description": "Wer echt funktionale, „persistente“ Datenstrukturen implementieren muss oder sich einfach nur dafür interessiert, der wird mit unterschiedlichen Problemen konfrontiert, wenn – wie so oft – die Performanz eine Rolle spielt. Mit einer Liste tut man sich in dem Zusammenhang noch leicht; ein Baum dahingegen verlangt einem schon etwas mehr ab, insbesondere, wenn er immer balanciert sein soll. Ein unveränderliches Array mit ausreichender Performanz zu implementieren ist schon nicht mehr ganz so trivial. Und für eine Map muss man schon tief in die Trickkiste greifen.\r\n\r\nDieser Vortrag stellt eine mögliche Implementierung für eine persistente Map vor. Währenddessen wird gezeigt wie man ein sehr effizientes, persistentes Array implementiert und auf dieser Basis eine Map aufbauen kann. Zusätzlich wird das Array mit Hilfe von Bit-Manipualtionen (sic!) derart optimiert, dass die Map nicht nur extrem schnell sondern auch noch speichereffizient ist. Damit ist der Vortrag ein Muss für alle diejenigen, die die schönen Dinge des Lebens zu schätzen wissen.",
              "startsAt": "2018-09-07T15:00:00",
              "endsAt": "2018-09-07T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "4c29abb8-0a90-4063-a815-b376a2f2a951",
                  "name": "Michael Wiedeking"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "41001",
              "title": "Replication Distilled: Hazelcast Deep Dive",
              "description": "Distributed data stores cope with the challenges of managing replicated data. Building a distributed data store is hard, and clarifying its high level properties is even harder. Hazelcast makes use of several replication techniques to offer choices for the trade-offs between consistency, availability, and latency properties. In this talk, we take a closer look at these techniques from the perspective of the CAP and PACELC principles. We first break apart the main replication technique and challenge the rationale behind it. Then, we discuss what has gone wrong with it, and how we gradually extended and replaced it with other techniques to fix the issues.",
              "startsAt": "2018-09-07T15:00:00",
              "endsAt": "2018-09-07T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "436563a5-b742-46f9-9bd5-d4909dcacbb0",
                  "name": "Ensar Basri Kahveci"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          },
          {
            "id": 1657,
            "name": "Edison (2.OG)",
            "session": {
              "id": "43470",
              "title": "Ohne Passwörter geht es auch",
              "description": "Passwörter sind unsicher und für den Benutzer unpraktisch. Phishing und gestohlene Passwortdatenbanken sind allgegenwärtig. Passwörter werden zudem häufig vergessen, die Eingabe starker Passwörter dauert lange und ist fehleranfällig. Eine Registrierung ist im E-Commerce eines der größten Hindernisse für Conversion-Rate.\r\n\r\nEs geht besser: Passwortlose Authentifizierungsverfahren verzichten auf die Vergabe eines Passworts. Sie setzen auf One-Time-Token, biometrische Eigenschaften oder den Besitz eines bestimmten Geräts.\r\n\r\nIm Vortrag werden die Verfahren Magic Email-Link, Social Logins mit OAuth2 und Authentication-Apps beschrieben, wie sie in Webseiten und mobilen Apps eingesetzt werden können und welche Herausforderungen dabei gelöst werden müssen.",
              "startsAt": "2018-09-07T15:00:00",
              "endsAt": "2018-09-07T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "37824af4-91f5-4a5a-847d-6d88241db461",
                  "name": "Jochen Christ"
                }
              ],
              "categories": [],
              "roomId": 1657,
              "room": "Edison (2.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 2
          },
          {
            "id": 1658,
            "name": "Voltaire (3.OG)",
            "session": {
              "id": "41036",
              "title": "Embracing Change in a Legacy Environment",
              "description": "“Having legacy software is (…) a sign of success.” - We at eBay are successful. And we are successful long enough for our software to become legacy. But being successful in the past doesn’t help to face future challenges. Therefore, the question is: how can we shape our platform to embrace change?",
              "startsAt": "2018-09-07T15:00:00",
              "endsAt": "2018-09-07T16:00:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "75eacca9-7a61-4cf8-9479-636ca904983f",
                  "name": "Florian Stefan"
                }
              ],
              "categories": [],
              "roomId": 1658,
              "room": "Voltaire (3.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 3
          }
        ]
      },
      {
        "slotStart": "16:20:00",
        "rooms": [
          {
            "id": 1655,
            "name": "Humboldtsaal (1.OG)",
            "session": {
              "id": "43771",
              "title": "Von An- und Umbauten - Integration von mehreren Webanwendungen zu EINER",
              "description": "Microservices haben sich in den letzten Jahren auch deshalb durchgesetzt, weil sie der Erkenntnis Rechnung tragen, dass ein Team ab einer gewissen Größe nicht mehr gut funktioniert und die Entwicklung eines Systems mit mehreren Teams recht hohe Verluste erzeugt.\r\nAuf das UI wurde dieser Ansatz bisher selten ausgerollt, auch wenn die Probleme die gleichen sind. Der Anwender des Gesamtsystems möchte ja ein UI aus einem Guss! Dabei kann der Ansatz nicht nur bei der Neuentwicklung helfen, sondern eine Migration des Backends erst ermöglichen, indem sich Teile - Schritt für Schritt - aus einen bestehenden Monolithen herauslösen lassen, ohne dass das Nutzererlebnis leiden muss.\r\nArchitektonisch bieten sich viele Optionen: von alten Bekannten wie Links und iframes, über ROCA, ESI, bis hin zu Web-Components. Der Vortrag gibt einen Überblick über die Vor- und Nachteile der wichtigsten Vertreter und gibt Hilfestellungen bei der Auswahl.",
              "startsAt": "2018-09-07T16:20:00",
              "endsAt": "2018-09-07T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "1f344651-89bb-4766-af2e-1a049693d57f",
                  "name": "Stefan Hildebrandt"
                }
              ],
              "categories": [],
              "roomId": 1655,
              "room": "Humboldtsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 0
          },
          {
            "id": 1656,
            "name": "Kleistsaal (1.OG)",
            "session": {
              "id": "44058",
              "title": "Maven Plugins Testen Hm...Aber wie?",
              "description": "Im Rahmen der Continious Integration geht es darum die Anwendung mit Tests abzudecken (Unit-, Integrations-, Ende-Zu-Endetests etc.). Ist doch selbverständlich oder?\r\n\r\nJetzt gibt es aber durchaus Situationen in denen man spezielle Anforderungen an einen Maven Build hat die man nicht mit den vorhandenen Plugins/Konfigurationen umsetzen kann. Da sollte man durchaus den Weg gehen und ein entsprechendes Maven Plugin oder eine Maven Extension schreiben. So weit so gut.\r\n\r\nFür eine Maven Plugin gilt selbstverständlich das gleiche wie für den produktiven Code. Es sollte mit entsprechenden Unit- und Integrationstests getestet werden.\r\n\r\nJetzt ist nur die Frage wie sehen solche Tests aus? Wie kann man ein Maven Plugin im Bezug auf unterschiedliche/spezielle Abhängigkeiten testen?\r\nWie behandelt man unterschiedliche Nutzungsszenarien (Kommandozeilenaufruf / Innerhalb der POM Datei)?\r\nWelche Möglichkeiten gibt es, um unterschiedliche Maven Versionen / JDK versionen zu testen?\r\nWie debugged man denn ein Maven Plugin im Rahmen der Entwicklung?\r\n\r\nZiele:\r\n  Erlangung einer Übersicht über die unterschiedlichen Test Möglichkeiten und\r\n  welche Art von Tests für bestimmte Szenarien nützlich ist.\r\n",
              "startsAt": "2018-09-07T16:20:00",
              "endsAt": "2018-09-07T17:20:00",
              "isServiceSession": false,
              "isPlenumSession": false,
              "speakers": [
                {
                  "id": "0df22e94-fe87-4516-b783-e35d0f0587de",
                  "name": "Karl Heinz Marbaise"
                }
              ],
              "categories": [],
              "roomId": 1656,
              "room": "Kleistsaal (1.OG)",
              "liveUrl": null,
              "recordingUrl": null,
              "status": "Accepted",
              "isInformed": true,
              "isConfirmed": true
            },
            "index": 1
          }
        ]
      }
    ]
  }
]