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
reportWinner
scores[:] // 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: