Create the Future
@MarkStoetzer
& @brampatelski


Technologies

Trends






Devoxx4Kids
&
First
Evolutionary architecture
Modularity
Performance
Evil / Agile skills
Evolutionary architecture

Evolutionary
vs.
Emergent
Evolutionary architecture
Last responsible moment

Evolutionary architecture
Architect and develop for evolvability:
Evolutionary architecture
Be conservative in what you send
and liberal in what you receive

Postel's law
Evolutionary architecture
Architect for testability
Evolutionary architecture

Evolutionary architecture
Techniques
Modularity

Jigsaw:
Delayed to JDK9


Modularity
OSGi
Eclipse & BndTools for OSGi
Apache Felix OSGi impl.
Amdatu, HTML5, AngularJS, RabbitMQ, JPA
Performance is a Social activity
Performance problems

Or is it?
Performance is a Social activity
Performance tests
Performance is a Social activity
UAT is my desktop

Performance is a Social activity
Production-like data is too hard
Comparing apples with pears

Evolutionary architecture

Tuning by folklore
Performance is a Social activity
Throw over the wall mentality

Performance is a Social activity
Blame donkey

Performance is a Social activity
Guideline
Agile learning
Failing:
Who's fault is it?
-----------------------
What did we learn?
Should we change something?
Learning:
Cross-team Guilds
Workshops
Presentations
Monthly open-space day
Breakfast presentations
Lunch presentations
Code review

Evil / Agile skills
Invest


Workshops
Monthly open-space day
Lunch presentations

Evil / Agile skills
Invest
Listen

Evil / Agile skills
Invest
Listen
Empathy

Evil / Agile skills
Invest
Listen
Empathy
Adapt

Failing:
Who's fault is it?
-----------------------
What did we learn?

Should we change something?
Go fast, fail often
Evil / Agile skills
Invest
Listen
Empathy
Adapt
Coach


Code review
Evil / Agile skills
Invest
Listen
Empathy
Adapt
Coach
Assertiveness

Evil / Agile skills
Invest
Listen
Empathy
Adapt
Coach
Assertiveness
Creativity

JDK8
GS Collections
Oracle MAF
Checker framework
Groovy
Avatar.js
TypeScript
Vert.x
IDE's comparison
OWASP ZAP
CI / CD
Java PaaS
JDK8 / Streams
// applying 12% VAT on each purchase
// Without Lambda expressions:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
for (Integer cost : costBeforeTax) {
double price = cost + .12*cost;
System.out.println(price);
}// With Lambda expressions:
List costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);
costBeforeTax.stream().map((cost) -> cost + .12*cost).forEach(System.out::println);

JDK8 / Lambda

.onAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent e) {
anim.playFromStart();
}
}).onAction((ActionEvent) -> { anim.playFromStart(); }).onAction((e) -> { anim.playFromStart(); }).onAction(e -> anim.playFromStart(); )GS Collections

GS Collections
Memory efficient Set and Map
Oracle MAF


Mobile dev. dilemma:
Native vs Web?
Oracle MAF

80+ components
XML format
Visual development
Declarative data binding
Rendering HTML5 / JavaScript
Theming through CSS
Native user exp

& AMX
Oracle MAF & AMX
Drag-n-drop development

Supported by JDeveloper and Eclipse
Use native mobile features
Completely free to develop and test
www.oracle.com/maf
No other Oracle products needed
Licensing for prod-env

Checker framework


Checker framework

Checker framework
Dynamic checks
if (x != null) {
x.hashCode();
}
if (!RegexUtil.isRegex(userInput)) {
throw new RuntimeException(...);
}
Pattern p = Pattern.compile(userInput);Checker framework
Java 6 & 7 compatible
Annotations in comments
List</* @NonNull */ String> strings;Voodoo comments for arbitrary source code
/* >>> import myquals.TRecv; */
....
int foo(/*>>> @TRecv MyClass this, */
@TParam String p) { ... }Groovy / Metaprogramming
== file:///scores.dsl ==
players ‘Ben’, ‘George’, ‘Abe’
George 10
Ben 12
Abe 9
reportWinnerscores[:] // Create an empty Map
Groovy / Metaprogramming
def players(String[] names) {
names.each{ name ->
scores[name] = 0
}
}== file:///scores.dsl ==
players ‘Ben’, ‘George’, ‘Abe’
George 10
Ben 12
Abe 9
reportWinner
Groovy / Metaprogramming
def methodMissing(String name, args) {
scores[name] = args[0]
}== file:///scores.dsl ==
players ‘Ben’, ‘George’, ‘Abe’
George 10
Ben 12
Abe 9
reportWinner
Groovy / Metaprogramming
def getReportWinner() {
def max = -1
def winner = ''
scores.each { name, score ->
if (score > max) {
max = score
winner = name
}
}
"winner is $winner with score $max"
}winner is Ben with score 12== file:///scores.dsl ==
players ‘Ben’, ‘George’, ‘Abe’
George 10
Ben 12
Abe 9
reportWinner
Groovy in 2014 and beyond
Groovy 2.3
Closures ~ Lambda's
trait FlyingAbility {
String fly() {"I'm flying!"}
}
class Bird implements FlyingAbility {}
def b = new Bird()
assert b.fly() == "I'm flying!"Traits ~ interface default methods

AST
NIO2
JSON parser
Template engine
Docs / www.groovy-lang.org
Groovy in 2014 and beyond
Groovy 2.4:
Full-blown support for Android
Antlr4 support

Avatar.JS

Avatar.JS


Avatar.JS


TypeScript
M$ opensource
Type-system
Optional
100% JavaScript
Step by step adoption

Vert.x



inspired by Node.js
Vert.x

Vert.x
Vert.x
Version 3
IDE's






OWASP ZAP


OWASP ZAP
What can it give you?
OWASP ZAP
Tuning
CI / CD - The deployment factory
Deploy is scary -> Delay
Dependency mgt
Version stability
Delivery
Identical env: Chef, Vagrant, Docker
Automation
People


Java PaaS


Java PaaS

Java PaaS

Continuous delivery
Java PaaS

Shared goal: agility
Java PaaS
Configuration as code
Java PaaS
Public PaaS
Java PaaS
Private PaaS
Java PaaS
Promising
Java PaaS
Choose a PaaS
Future Smart home
Java Smart car
Current Smart home
Wearables
Java robots with ROS
FIRST
How to talk to your house







How to talk to your house



Java Smart car @keynote
Java Smart car @keynote



Warp speed !!




Smart home for masses






Smart home Standards
Wearables



Wearables
Wearables
Wearables
Wearables
Wearables
Nowadays:
Wearables





Wearables
Wearables
Wearables

Wearables

Wearables
Java Robots & ROS


Controlling Robots
Using Blender
Juggie
Java Robots & ROS
ROS
Java Robots & ROS
(cool) Open source libraries
Java Robots & ROS
Challenges:





