Diese Präsentation ist im Rahmen eines Treffens der Java User Group Bielefeld entstanden.
Ich habe eine Einführung in die funktionale Programmierung an Hand des Lambda Kalküls gegeben. Anschließend haben wir uns die Programmiersprache Clojure angeschaut und einige Beispiele durchgesprochen.
Anschließend hat Daniel Rosowski noch funktionale Programmierung mit Guava und Java 8 vorgestellt: http://de.slideshare.net/DanielRosowski/real-lifefp
Talk zum Thema Nebenläufigkeit auf der OOP 2016 in München. Neben einer prinzipiellen Einführung und Motivation werden die Sprachen Erlang/OTP, Google Go und Pony vorgestellt. Weiter sind einige typische Designmuster sowie Fallstricke enthalten. Der Vortrag hatte die Dauer von 90 Minuten.
Überblick über die Entwicklung mit Clojure bei HEROLABS.
* Warum haben wir uns für Clojure entschieden? (Simplicity, Erweiterbarkeit, Java-Interop)
* Was heißt Funktionale Programmierung?
=> Man braucht ein anderes Mindset
* Was uns stört.
* Und wie entwickelt man mit Clojure (Ecosystem)?
Anlass war ein Talk bei mgm-tp.
Talk zum Thema Nebenläufigkeit auf der OOP 2016 in München. Neben einer prinzipiellen Einführung und Motivation werden die Sprachen Erlang/OTP, Google Go und Pony vorgestellt. Weiter sind einige typische Designmuster sowie Fallstricke enthalten. Der Vortrag hatte die Dauer von 90 Minuten.
Überblick über die Entwicklung mit Clojure bei HEROLABS.
* Warum haben wir uns für Clojure entschieden? (Simplicity, Erweiterbarkeit, Java-Interop)
* Was heißt Funktionale Programmierung?
=> Man braucht ein anderes Mindset
* Was uns stört.
* Und wie entwickelt man mit Clojure (Ecosystem)?
Anlass war ein Talk bei mgm-tp.
Auch nach mehr als 20 Jahren ist Jakarta EE (ehemals Java EE) DER Standard, wenn es um die Entwicklung Java-basierter Enterprise-Computing-Lösungen geht. Das gilt zumindest immer dann, wenn die Anwendung als Monolith in einem Application-Server deployt werden soll. Wie aber steht es mit einer Anwendung, die aus einer Vielzahl autark laufender Microservices besteht? Und wie gut schlägt sich Jakarta EE in der Cloud, in der geringer Speicherbedarf und schnelle Startzeiten gefragt sind? Die Session zeigt, wie es Jakarta EE geschafft hat, mit der Zeit zu gehen und so mit Hilfe von Nebenprojekten wie Eclipse MicroProfile den Anforderungen moderner Cloud-Native-Anwendungen gerecht zu werden. Ein Ausblick das Zusammenspiel mit GraalVM und Quarkus zeigt, das Jakarta EE dabei auch in extrem verteilten Cloud-Szenarien, aka Serverless, eine gute Figur macht.
Was hat sich in den letzten Jahren in dem Ökösystem von Perl 5 getan? In dieser Präsentation stelle ich einige Themen vor.
Diese Präsention habe ich anlässlich der Wiederbelebung von Hamburg.pm am 5. September 2017 gehalten.
Ob ASP.net MVC, NuGet oder die codebasierten Migrationen bei EF – immer mehr Konzepte und Ideen schwappen von Ruby in die .Net Welt. Wieso aber gerade von Ruby? Und was macht Rails so beliebt bei Webentwicklern?
Ruby ist wie C# eine objektorientierte Programmiersprache. Damit enden die Gemeinsamkeiten aber schon fast. Die vielen fremden Konzepte und Ansätze machen einen Einstieg in Ruby und Rails nicht gerade einfach. Aber genau in diesen Unterschieden liegen die Stärken und machen Ruby so interessant.
Dieser Vortrag gibt einen Überblick über Ruby und Rails und hilft einem sich in dieser ungewohnten Umgebung zu Recht zu finden.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
Um Bilder und Grafiken "bereinigte" Version des Vortrags bei der JUG Ostfalen.
Nahezu jede große Website – egal ob das Backend in Java, PHP, Ruby oder Python programmiert wurde – verwendet im Browser JavaScript als Sprache. Software-Artefakte, die in JavaScript erstellt wurden, werde zunehmend wichtiger, da Logik in letzter Zeit tendenziell wieder vom Server zurück in den Browser wandert. JavaScript-Entwicklung ist im Alltag des Enterprise-Entwicklers angekommen. Teils muss er als Backend-Entwickler JavaScript-Code überarbeiten, der z.B. von einer Webagentur erstellt wurde, teils muss er auch selbst JavaScript-Artefakte erzeugen oder ein ganzes Framework oder eine Library in JavaScript schreiben oder pflegen.Der erste Teil des Vortrags richtet sich an Enterprise-Enwickler (meist mit einem Java-EE-Hintergrund), die sich für JavaScript interessieren, sich schnell darin einarbeiten wollen und Tipps suchen, dieses Ziel zu erreichen. Dabei werden einige Grundlagen der Sprache vorgestellt. Dieser Teil des Vortrags soll eher Lust auf Mehr machen als fundamentales Wissen in aller Tiefe zu vermitteln.Enterprise-Entwicklung ist in der Regel Teamarbeit. Eine große Codebasis mus wartbar bleiben. Im zweiten Teil des Vortrags werden Techniken und Tools vorgestellt, die dabei helfen können, eine geeignete Codequalität zu erreichen und zu wahren
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
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.
Die 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.
In diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.
Auch nach mehr als 20 Jahren ist Jakarta EE (ehemals Java EE) DER Standard, wenn es um die Entwicklung Java-basierter Enterprise-Computing-Lösungen geht. Das gilt zumindest immer dann, wenn die Anwendung als Monolith in einem Application-Server deployt werden soll. Wie aber steht es mit einer Anwendung, die aus einer Vielzahl autark laufender Microservices besteht? Und wie gut schlägt sich Jakarta EE in der Cloud, in der geringer Speicherbedarf und schnelle Startzeiten gefragt sind? Die Session zeigt, wie es Jakarta EE geschafft hat, mit der Zeit zu gehen und so mit Hilfe von Nebenprojekten wie Eclipse MicroProfile den Anforderungen moderner Cloud-Native-Anwendungen gerecht zu werden. Ein Ausblick das Zusammenspiel mit GraalVM und Quarkus zeigt, das Jakarta EE dabei auch in extrem verteilten Cloud-Szenarien, aka Serverless, eine gute Figur macht.
Was hat sich in den letzten Jahren in dem Ökösystem von Perl 5 getan? In dieser Präsentation stelle ich einige Themen vor.
Diese Präsention habe ich anlässlich der Wiederbelebung von Hamburg.pm am 5. September 2017 gehalten.
Ob ASP.net MVC, NuGet oder die codebasierten Migrationen bei EF – immer mehr Konzepte und Ideen schwappen von Ruby in die .Net Welt. Wieso aber gerade von Ruby? Und was macht Rails so beliebt bei Webentwicklern?
Ruby ist wie C# eine objektorientierte Programmiersprache. Damit enden die Gemeinsamkeiten aber schon fast. Die vielen fremden Konzepte und Ansätze machen einen Einstieg in Ruby und Rails nicht gerade einfach. Aber genau in diesen Unterschieden liegen die Stärken und machen Ruby so interessant.
Dieser Vortrag gibt einen Überblick über Ruby und Rails und hilft einem sich in dieser ungewohnten Umgebung zu Recht zu finden.
Code Days 2019, München: Vortrag von Johannes Weigend (@JohannesWeigend, Technischer Geschäftsführer bei QAware)
=== Dokument bitte herunterladen, falls unscharf! Please download slides if blurred! ===
Abstract:
Programmiersprachen für die Cloud - Java und Go im Vergleich
Java ist nach dem Tiobe Index 2018 unangefochten Platz 1 bei den weltweit eingesetzten Programmiersprachen. Java ist ausgereift, stabil und verfügt über ein immenses Open Source Ökosystem. Was will man mehr? Obwohl Java gerade für die Backend Entwicklung attraktiv ist, hat Google 2008 eine eigene Programmiersprache Open Source gestellt: Golang oder kurz Go. Der Vortrag beleuchtet die Stärken und Schwächen von Go gegenüber Java, gibt Hinweise für welche Projekte Go eine gute Alternative ist, und wie ein Best of Breed Ansatz aussehen kann. Interessant an Go ist, dass die Grundbausteine von Cloud Plattformen wie OpenShift oder die Google Container Plattform mit Go erstellt wurden. Docker, Kubernetes, Helm, Grafana oder Prometheus ‒ alles ist mit Go programmiert. Die Fragen aus der Sicht von Java-Experten sind: Was macht Go für die Cloud so interessant? Gibt es Funktionen, die Java Programmierer kennen sollten, und wenn ja, welche?
Um Bilder und Grafiken "bereinigte" Version des Vortrags bei der JUG Ostfalen.
Nahezu jede große Website – egal ob das Backend in Java, PHP, Ruby oder Python programmiert wurde – verwendet im Browser JavaScript als Sprache. Software-Artefakte, die in JavaScript erstellt wurden, werde zunehmend wichtiger, da Logik in letzter Zeit tendenziell wieder vom Server zurück in den Browser wandert. JavaScript-Entwicklung ist im Alltag des Enterprise-Entwicklers angekommen. Teils muss er als Backend-Entwickler JavaScript-Code überarbeiten, der z.B. von einer Webagentur erstellt wurde, teils muss er auch selbst JavaScript-Artefakte erzeugen oder ein ganzes Framework oder eine Library in JavaScript schreiben oder pflegen.Der erste Teil des Vortrags richtet sich an Enterprise-Enwickler (meist mit einem Java-EE-Hintergrund), die sich für JavaScript interessieren, sich schnell darin einarbeiten wollen und Tipps suchen, dieses Ziel zu erreichen. Dabei werden einige Grundlagen der Sprache vorgestellt. Dieser Teil des Vortrags soll eher Lust auf Mehr machen als fundamentales Wissen in aller Tiefe zu vermitteln.Enterprise-Entwicklung ist in der Regel Teamarbeit. Eine große Codebasis mus wartbar bleiben. Im zweiten Teil des Vortrags werden Techniken und Tools vorgestellt, die dabei helfen können, eine geeignete Codequalität zu erreichen und zu wahren
Funktionale Reaktive Programmierung mit SodiumTorsten Fink
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.
Die 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.
In diesem Vortrag wird FRP anhand des Open-Source Frameworks Sodiums vorgestellt.
Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene...André Krämer
Wenn Sie sich Beispielcode im MSDN ansehen, dann wird Eines ganz schnell klar: Wer einen O/R-Mapper wie das Entity Framework oder NHibernate einsetzt, der sollte ihn mit dem Repository Pattern paaren. Idealerweise sogar mit generischen Repositories. Schließlich können Sie nur so den O/R-Mapper Ihrer Wahl vor den darüber liegenden Schichten verbergen. Aber ist dieses Versteckspiel vorteilhaft? Wie sinnvoll ist es wirklich, höhere Schichten bewusst dumm zu halten? Und gewinnen Sie auch Flexibilität durch diese Herangehensweise? Genau um diese Fragen geht es in diesem Vortrag. Anhand einiger Praxisbeispiele werden wir uns im Vergleich zu den typischen MSDN-Anwendungen ansehen, ob das Repository Pattern tatsächlich seine Berechtigung hat.
Kubernetes und Docker sind trotz des hohen Verbreitungsgrads noch relativ junge Technologien. Viele Menschen machen gerade gute und teilweise auch schmerzliche Erfahrungen mit beiden. Der Vortrag bietet einen Katalog an Patterns und Antipatterns bei der Entwicklung von Anwendungen auf Basis Kubernetes und Docker. Der Katalog repräsentiert dabei die Erfahrung aus mehreren Industrieprojekten, die es bis in Produktion geschafft haben.
Es geht darum, was man bei Docker-Files und Kubernetes-Deskriptoren richtig und falsch machen kann; welche Architekturbausteine man einsetzen sollte; wie die Continuous Delivery Pipeline gestaltet werden sollte und wie Anwendungen auf Cloud-Native-Plattformen gut betreibbar und diagnostizierbar gemacht werden können.
Docker und Kubernetes Patterns & Anti-PatternsQAware GmbH
JavaLand 2018, Brühl: Vortrag von Josef Adersberger (@adersberger, CTO bei QAware).
Abstract:
Kubernetes und Docker sind trotz des hohen Verbreitungsgrads noch relativ junge Technologien. Viele Menschen machen gerade gute und teilweise auch schmerzliche Erfahrungen mit beiden. Der Vortrag bietet einen Katalog an Patterns und Antipatterns bei der Entwicklung von Anwendungen auf Basis Kubernetes und Docker. Der Katalog repräsentiert dabei die Erfahrung aus mehreren Industrieprojekten, die es bis in Produktion geschafft haben.
Es geht darum, was man bei Docker-Files und Kubernetes-Deskriptoren richtig und falsch machen kann; welche Architekturbausteine man einsetzen sollte; wie die Continuous Delivery Pipeline gestaltet werden sollte und wie Anwendungen auf Cloud-Native-Plattformen gut betreibbar und diagnostizierbar gemacht werden können.
Nebenlaeufigkeit mit Koroutinen strukturierenJörn Dinkla
Slides of the talk at the KKON Warmup 2021. See https://rheinwerk-kkon.de/recap-2021/programm-2021/dinkla-nebenlaeufigkeit-mit-koroutinen-strukturieren/
Funktionale Programmierung hat zu guter Letzt auch in Java Einzug gehalten. Es ist jetzt ganz normal, überall mit Lambdas oder mit map() und filter() zu arbeiten. Aber ist das wirklich funktionale Programmierung?
Wie sieht es aus, wenn man Java 8 mit einer althergebrachten funktionalen Programmiersprache vergleicht? Und was kann der Java-Programmierer, der aus der objektorientierten (OO) Entwicklung kommt, von funktionalen Sprachen lernen und in seinen Java-Alltag integrieren?
Auf diese Fragen ging Nicole Rauch in ihrem Referat ein. Ebenso stellte sie die grundlegenden Aspekte er funktionalen Programmierung vor und zeigte auf, was die funktionale Programmierung so besonders macht.
Gerne stellen wir Ihnen die Slides des Referats zur Verfügung.
2. Agenda
• Einführung
in
die
funktionale
Programmierung
• Reine
FP
in
der
JVM
an
Hand
von
Clojure
• Semi
/
Practical
FP
an
Hand
von
Guava
• Closures
in
Java
8
• Ausblick
14. Unterschiede
zu
imperativen
Sprachen
Funktionale
Sprachen
Imperative
Sprachen
Building
Blocks
Funktionen
Instruktionen
Zustand
unveränderlich
wird
modifiziert
Variablen
An
Ausdruck
gebunden
Speicheradresse
Programmablauf
Ausdrücke
werden
ausgewertet
Führt
eine
Menge
von
Instruktionen
aus
15. Zusammenfassung
• Lambda
Kalkül
• Formales
System
zur
Definition
von
Funktionen
• Turing-‐vollständig
• Wie
die
Turing-‐Maschine
nur
ein
abstraktes
Modell
• Grundlage
für
funktionale
Programmiersprachen
• Alles
sind
Funktionen
• Kombinatoren
sind
Lambda-‐Ausdrücke
ohne
freie
Variablen
• Lambda-‐Kalkül
+
Typisierung
+
syntaktischer
Zucker
à
FP
16. Agenda
• Einführung
in
die
funktionale
Programmierung
✔
• (Reine)
FP
in
der
JVM
an
Hand
von
Clojure
• Semi
/
Practical
FP
an
Hand
von
Guava
• Closures
in
Java
8
• Ausblick
23. Syntax
• Clojure
ist
homoikonisch
• Datenstrukturen
sind
der
Code
• Keine
weitere
text-‐basierte
Syntax
• Syntax
ist
die
Interpretation
der
Datenstruktur
24. Ausdrücke
und
Operationen
• Alles
ist
ein
Ausdruck
expression
• Die
Datenliterale
repräsentieren
sich
selbst
• Außer
bei
Listen
und
Symbolen
(dann
passiert
etwas)
• Symbole
–
Binding
zu
einem
Wert
gesucht
(lokal
let,
global
def)
• Liste
–
führt
eine
bestimmte
Operation
aus
(op)
• (op
...)
• op
kann
folgendes
sein:
• Spezielle
Op
(siehe
clojure.lang.Compiler.java)
à
MAGIE
• Makro
• Funktion
(Ausdruck
welcher
eine
Funktion
ergibt)
25. Funktionen
• First
class
values
(def
five
5)
(def
sqr
(fn
[x]
(*
x
x)))
(sqr
five)
25
• Makro
defn
(defn
sqr
„This
method
calculates
the
square
root
of
n“
[x]
(*
x
x))
26. Makros
• defmacro
• macroexpand
• Beispiel
„first“
oder
„ifnot“
• (defn
ff
[a
b]
a)
(defmacro
mf
[a
b]
a)
• (defn
fifnot
[i
t
e]
(if
(not
i)
t
e))
(defmacro
mifnot
[i
t
e]
`(if
(not
~i)
~t
~e))
• Weitere
Informationen:
http://clojure.org/macros
31. Java
in
Clojure
• Sehr
einfach:
(def
cal
(java.util.Calendar/getInstance))
#‘user/cal
(.getTimeInMillis
cal)
1415399321833
(System/currentTimeMillis)
1415703691973
32. Clojure
in
Java
• Generate
classes
for
Java
(ns
de.coruco.binomial
(:gen-‐class))
(defn
binomial
...)
33. Clojure
in
Java
• As
of
Clojure
1.6.0:
import
clojure.java.api.Clojure;
import
clojure.lang.Ifn;
...
Ifn
require
=
Clojure.var(
„clojure.core“,
„require“
);
require.invoke(
Clojure.read(
„de.coruco.binomial“
)
);
Ifn
binomi
=
Clojure.var(
„de.coruco.binomial“,
„binomial“
);
Object
result
=
binomi.invoke(
7,
6
);
34. Sechs
Regeln
der
Clojure
Programmierung
1. Vermeide
direkte
Rekursion
2. Benutze
recur
um
Skalare
oder
kurze
Sequenzen
zu
verarbeiten
3. Verwende
lazy
Sequenzen
um
lange
Sequenzen
zu
verarbeiten
4. Erzeuge
nicht
unnötige
Teile
einer
lazy
Sequenz
5. Lernen
Du
musst
die
Funktionen
von
Sequenzen
6. Zerteile
selbst
einfache
Probleme
in
triviale
Probleme
und
Du
wirst
eine
Lösung
in
der
Standard-‐Bibliothek
finden
(Teile
und
Herrsche)
36. Agenda
• Einführung
in
die
funktionale
Programmierung
✔
• Reine
FP
in
der
JVM
an
Hand
von
Clojure
✔
• Semi
/
Practical
FP
an
Hand
von
Guava
• Closures
in
Java
8
• Ausblick