SlideShare a Scribd company logo
1 of 103
Download to read offline
@HendrikEbbers
Karakun DevHub_
dev.karakun.com
@HendrikEbbers
JavaAPIsThe missing manual
Karakun DevHub_
@HendrikEbbersdev.karakun.com
About me
• Karakun Co-Founder
• Lead of JUG Dortmund
• JSR EG member
• JavaOne Rockstar, Java Champion
• JavaLand Programm Chair
Karakun DevHub_
@HendrikEbbersdev.karakun.com
About me
@HendrikEbbers
SPI
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Based on Interfaces it's quite easy to define a
general service and several implementations in
Java
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
public interface MathOperation {
String getSign();
double calc(double valA, double valB);
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• We can provide several implementations of math
operations
•AddOperation
•SubtractOperation
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
public class Multiply implements MathOperation {
public String getSign() { return "*";}
double calc(double valA, double valB){
return valA * valB;
}
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Instances of the implementations can be accessed
by using the general interface
• All instances can simply be stored in a collection
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
List<MathOperation> operations = new ArrayList<>();
operations.add(new MultipyOperation());
operations.add(new AddOperation());
operations.add(new DivideOperation());
operations.add(new SubtractOperation());
operations.forEach(o -> {
System.out.println("Supported Operation: " + o.getSign());
});
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Let's pimp our interface ;)
• With Java 8 default methods we can even define
default logic for some parts of the service
• Use defaults only if it really makes sense!
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
public interface MathOperation {
String getSign();
double calc(double valA, double valB);
default String getHelp() {
return "No help text for sign" + getSign();
}
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Let's think about a bigger application
• Often based on several modules / jars
• Several jars contains several service
implementations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Application
Basic Math
Module
Math Def
Module
Special Math
Module
contains the interface
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Application
Basic Math
Module
Math Def
Module
Special Math
Module
contains the interface
contains implementations
contains implementations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Application
Basic Math
Module
Math Def
Module
Special Math
Module
contains the interface
contains implementations
contains implementations
use implementations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Application
Basic Math
Module
Math Def
Module
Special Math
Module
depends on
depends on
depends ondepends on
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Application
Basic Math
Module
Math Def
Module
Special Math
Module
depends on
depends on
depends ondepends on
One Million
Dollar Question
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Where should we define the following method?
public List<MathOperation> getAllImplInClasspath();
?
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• We can't define it in the "Math Def Module" since
this module has no dependency to any
implementation
• Method would return

an empty list
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• We can't define it in the "Basic Math" or the
"Special Math" since this modules don't know all
implementations.
• Method would not return 

all implementations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Only the "Application" module knows all
implementations since it's the only module that
depends on all other modules
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Only the "Application" module knows all
implementations since it's the only module that
depends on all other modules
That was easy, bro!
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Let's add some complexity
Basic Math
Module
Math Def 

Module
Special Math
Module
Algebra Math
Module
Geometry Math
Module
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Basic Math
Module
Math Def 

Module
Special Math
Module
Algebra Math
Module
Geometry Math
Module
Customer A
App
Customer B
App
Customer C
App
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Headline
• We don't want to implement the



method for each application
• We need something new that loads all
implementations dynamically
public List<MathOperation> getAllImplInClasspath();
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Basic Math
Module
Math Def 

Module
Special Math
Module
Algebra Math
Module
Geometry Math
Module
Customer A
App
Customer B
App
Customer C
App
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
Basic Math
Module
Math Def 

Module
Special Math
Module
Algebra Math
Module
Geometry Math
Module
Customer A
App
Customer B
App
Customer C
App
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Service Provider Interface (SPI) provides a simple
API to solve this issue
• Could be used to create a minimal but powerful
Plug In API
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Start by creating an interface
public interface MathOperation {
String getSign();
double calc(double valA, double valB);
}
we already have it
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Each module that provides implementations of
the interface most provide a service file
• File must be located under META-INF/services/
before
Java 9
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Name of the file must be equals to the interface
name
META-INF/services/com.canoo.math.MathOperation
File name
before
Java 9
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• File simply contains names of all implementations
com.canoo.basic.AddOperation

com.canoo.basic.MinusOperation
define one
implementation per
line
before
Java 9
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• The Service Provider Interface (SPI) will
automatically find all implementations at runtime
• Instances of the classes will automatically be
created
• Default constructor is needed
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• You can simply iterate over all implementations
Iterator<MathOperation> iterator = ServiceLoader
.load(MathOperation.class)
.iterator();


while (iterator.hasNext()) {

MathOperation operation = iterator.next();

}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• At the end we can implement the



method simple in the "Math Def Module"
• The service provider 

will automatically find

all implementations
public List<MathOperation> getAllImplInClasspath();
@HendrikEbbers
Annotations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Let's start with a quiz :)
• How many Java annotations are used in the code?
?
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
@Deprecated
annotation is defined
in the JRE
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
the @Important annotation is not defined in
the JRE but it's easy to create your own
custom annotations (like @Autowired in
Spring)
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
the @Static annotation is
configured by a boolean parameter
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
/**

* A helper class

* @see Class#getModifiers()

*

* @author Hendrik Ebbers
* @deprecated

*/
@Deprecated
public class Helper {
@Important
private Logger logger = new Logger();
/**

* Return {@code true} if the integer argument includes the {@code private} modifier, {@code false} otherwise.

*

* @param mod a set of modifiers

* @return {@code true} if {@code mod} includes the {@code private} modifier; {@code false} otherwise.

*/
@Static(false)

public static boolean isPrivate(@Param int mod) {

return (mod & 0x00000002) != 0;

}
}
the @Param annotation is another
custom annotation that is used to
annotate a method param
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Annotations can be used to add metadata to the
code
• Annotations can be added to different points of the
code
• Annotation can be parametrable
• Custom annotations can be defined
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
public @interface MyAnnotation {
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
public @interface MyAnnotation {
}
access modifier name
annotation keyword
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface MyAnnotation {
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
?
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface MyAnnotation {
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
@Documented
@Retention(RUNTIME)
@Target(ANNOTATION_TYPE)
public @interface Documented {
}
Annotations
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• If an annotation is annotated with @Documented
the usage of the annotation will be shown in
JavaDoc
• The usage of @Documented has no effect at
runtime
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• The @Target annotation defines where an
annotation can be used.
• The enum ElementType defines all supported
types
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• TYPE
• FIELD
• METHOD
• PARAMETER
• CONSTRUCTOR
• LOCAL_VARIABLE
• ANNOTATION_TYPE
• PACKAGE
• TYPE_PARAMETER
• TYPE_USE[ [
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
@Target(METHOD)
public @interface MyAnnotation {
}
@MyAnnotation
public void sqrt(int value) {
return 1;
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
@Target(METHOD)
public @interface MyAnnotation {
}
public void sqrt(@MyAnnotation int value) {
return 1;
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
@Target(PARAMETER)
public @interface MyAnnotation {
}
public void sqrt(@MyAnnotation int value) {
return 1;
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
@Target({PARAMETER, METHOD})
public @interface MyAnnotation {
}
@MyAnnotation
public void sqrt(@MyAnnotation int value) {
return 1;
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• The @Retention annotation defines how long an
annotation will be retained.
• The enum RetentionPolicy defines all
supported types
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
SOURCE CLASS RUNTIME
remove annotation at
compiletime
remove annotation at
runtime
do not remove
annotation
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
SOURCE CLASS RUNTIME
general meta
information like
@Override
for example the
annotations of findbugs
All annotations
that are used at
runtime
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• There are several ways how annotations can be
used
• Annotations like @Deprecated define useful
information for the developer (IDE support) and
compiler
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Projects like Lombok use annotations for
annotation processing at compile time
• Annotations like @Inject are used to modify
objects at runtime
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• All annotations that have a @Retention policy
that is defined as RUNTIME can be accessed by
using reflection.
• In general this is one of the tricks that make DI or
Spring work
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• How can I check for annotations in my code at
runtime
?
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Only the "Application" module knows all
implementations since it's the only module that
depends on all other modules
Reflections
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
Class cls = MyCustomClass.class;

boolean val = cls.isAnnotationPresent(MyAnnotation.class);
• We will see more samples later
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• But there is more
• Annotations can be "configured"
• Java provides some nice language features here
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Annotations can contain parameters
public @interface Column {
String name();
}
@Column(name="Description")
private String desc;
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Annotations can define multiple parameters
• The following types are allowed:
• primitive
• String
• Class
• an Enum
• another Annotation
• an array of any of the types
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• If an Annotations only needs one param it should
be named as "value"
• By doing so the name must not be specified when
using the annotation
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
public @interface Column {
String value();
}
@Column("Name")
private String name;
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Annotations can define a default value for a
parameters
public @interface Column {
String name() default "";
}
@Column
private String name;
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Access annotation parameters
final Class cls = MyCustomClass.class;


if(cls.isAnnotationPresent(MyAnnotation.class)){
final MyAnnotation a = cls.getAnnotation(MyAnnotation.class);
final String name = a.name();
System.out.println("Name: " + name);
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Annotations
• Additional topics:
•@Inherited
• Lists of annotations
• Meta annotations
• Annotation Processor
@HendrikEbbers
Stream.error
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Streams
• Classes to support functional-style operations on
streams of elements, such as map-reduce
transformations on collections.
Stream.of("A", "B", "C")
.forEach(s -> System.out.println(s));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Streams
• Sequence of elements
• Aggregate operations (filter, map, limit, reduce…)
• Pipelining − Most of the stream operations return
stream itself
Filter Map Reduce
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Streams
• Let's create a stream that converts String values
to int values
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Streams
Stream.of("1", "2", "3")
.map(s -> Integer.parseInt(s))
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Only the "Application" module knows all
implementations since it's the only module that
depends on all other modules
That was easy, bro!
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Streams
• Let's see if this is really the perfect solution…
Stream.of("1", "2", "3", "X")
.map(s -> Integer.parseInt(s))
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• Stream operations are not made to handle
exceptions
• To be more clear the functional interfaces in
java.util.function can not handle
exceptions.
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• Let's find a solution
Stream.of("1", "2", "3", "X")
.map(s -> {
try {
return Integer.parseInt(s)
} catch(Exception e) {
return -1;
}
})
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• Let's find a solution
Stream.of("1", "2", "3", "X")
.map(s -> {
try {
return Integer.parseInt(s)
} catch(Exception e) {
return -1;
}
})
.forEach(i -> System.out.println("INT " + i));
Nope! That is not
what we want…
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• Let's find a solution
Stream.of("1", "2", "3", "X")
.map(s -> {
try {
return Integer.parseInt(s)
} catch(Exception e) {
throw new RuntimeException("…",e);
}
})
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• Let's find a solution
Stream.of("1", "2", "3", "X")
.map(s -> {
try {
return Integer.parseInt(s)
} catch(Exception e) {
throw new RuntimeException("…",e);
}
})
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
public int convert(String s) {
try {
return Integer.parseInt(s)
} catch(Exception e) {
throw new RuntimeException("Can not convert to int!"e);
}
}
Stream.of("1", "2", "3", "X")
.map(s -> convert(s))
.forEach(i -> System.out.println("INT " + i));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Exceptions in Streams
• The current approach looks ok but is far away
from a general solution
• We need to be more generic
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Checked functions
• Let's create or custom functional interface
• Libraries like VAVR do exactly this
@FunctionalInterface
public interface CheckedFunction<T, R> {
R apply(T t) throws Exception;
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Checked functions
@FunctionalInterface
public interface CheckedFunction<T, R> {
R apply(T t) throws Exception;
static <T,R> Function<T,R> wrap(CheckedFunction<T,R> f) {
Objects.requireNonNull(f, "Function must not be null");
return t -> {
try {
f.apply(t);
} catch(Exception e) {
throw new RuntimeException(e);
}
};
}
}
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Checked functions
• Now we have a general solution to handle
exceptions in streams…
Stream.of("1", "2", "3", "X")
.map(s -> CheckedFunction.wrap(s -> Integer.parseInt(s)))
.forEach(i -> System.out.println("INT " + i));
@HendrikEbbers
Result
1 2 3 Error
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Service Provider Interface
• Only the "Application" module knows all
implementations since it's the only module that
depends on all other modules
That was easy, bro!
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Checked functions
• Let's just change 2 chars…
Stream.of("1", "X", "3", "4")
.map(s -> CheckedFunction.wrap(s -> Integer.parseInt(s)))
.forEach(i -> System.out.println("INT " + i));
@HendrikEbbers
Result
1
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
• The exception stops the stream
• But we can not return a default value
• We need to find a way to handle the complete
stream with exception support
• Again libraries like VAVR have some solutions
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
Stream.of("1", "2", "A", "4").map(Result.of(s ->Integer.parseInt(s)))
.forEach(r -> {
if(r.isSuccessfull()) {
System.out.println(r.getInput() + " -> " + r.getResult());
} else {
System.out.println("Error for " + r.getInput());
Integer.parseInt("");
}
});
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
public void handle(final Result<String, Integer> result) {
if(result.isSuccessfull()) {
System.out.println(result.getInput() + " -> " + result.getResult());
} else {
System.out.println("Error for " + result.getInput());
}
}
Stream.of("1", "2", "A", "4")
.map(Result.of(s ->Integer.parseInt(s)))
.forEach(r -> handle(r));
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
Result<INPUT, OUTPUT>
Sucess<INPUT, OUTPUT> Fail<INPUT, OUTPUT>
Extends Extends
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
Input Result
Karakun DevHub_
@HendrikEbbersdev.karakun.com
Additonal (functional) types
Input
Exeption
@HendrikEbbers
Karakun AG @
• Web-APIs: Das ultimative Handbuch
• Progressive Web Apps mit der Service Worker API
• Free React nighthacking in the office space of Eppleton
https://goo.gl/1wX3t3
dev.karakun.com | @HendrikEbbers

More Related Content

What's hot

Java API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateJava API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateMartin Grebac
 
WebSocket in Enterprise Applications 2015
WebSocket in Enterprise Applications 2015WebSocket in Enterprise Applications 2015
WebSocket in Enterprise Applications 2015Pavel Bucek
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemBruno Borges
 
FAST for SharePoint Deep Dive
FAST for SharePoint Deep DiveFAST for SharePoint Deep Dive
FAST for SharePoint Deep Diveneil_richards
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsC4Media
 
Supercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database PerformanceSupercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database Performancegvenzl
 
Practical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version AppPractical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version AppAtlassian
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Roberto Cortez
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemBruno Borges
 
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...jeckels
 
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic Multi-Cloud PaaS
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014Ryan Cuprak
 
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...VMware Tanzu
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudBen Wilcock
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsVMware Tanzu
 
Testing Java EE Applications Using Arquillian
Testing Java EE Applications Using ArquillianTesting Java EE Applications Using Arquillian
Testing Java EE Applications Using ArquillianReza Rahman
 
SQL in the Hybrid World
SQL in the Hybrid WorldSQL in the Hybrid World
SQL in the Hybrid WorldTanel Poder
 
JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?Edward Burns
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Martin Bergljung
 

What's hot (20)

Java API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and updateJava API for JSON Binding - Introduction and update
Java API for JSON Binding - Introduction and update
 
WebSocket in Enterprise Applications 2015
WebSocket in Enterprise Applications 2015WebSocket in Enterprise Applications 2015
WebSocket in Enterprise Applications 2015
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
 
FAST for SharePoint Deep Dive
FAST for SharePoint Deep DiveFAST for SharePoint Deep Dive
FAST for SharePoint Deep Dive
 
Understand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java ApplicationsUnderstand the Trade-offs Using Compilers for Java Applications
Understand the Trade-offs Using Compilers for Java Applications
 
Supercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database PerformanceSupercharge your Code to get optimal Database Performance
Supercharge your Code to get optimal Database Performance
 
Practical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version AppPractical Patterns for Developing a Cross-product Cross-version App
Practical Patterns for Developing a Cross-product Cross-version App
 
Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7Migration tales from java ee 5 to 7
Migration tales from java ee 5 to 7
 
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na NuvemTecnologias Oracle em Docker Containers On-premise e na Nuvem
Tecnologias Oracle em Docker Containers On-premise e na Nuvem
 
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
Oracle WebLogic Server 12c: Seamless Oracle Database Integration (with NEC, O...
 
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015Jelastic - DevOps for Java with Docker Containers - Madrid 2015
Jelastic - DevOps for Java with Docker Containers - Madrid 2015
 
JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014JavaFX Versus HTML5 - JavaOne 2014
JavaFX Versus HTML5 - JavaOne 2014
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
The Making of the Oracle R2DBC Driver and How to Take Your Code from Synchron...
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
 
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging PlatformsGame of Streams: How to Tame and Get the Most from Your Messaging Platforms
Game of Streams: How to Tame and Get the Most from Your Messaging Platforms
 
Testing Java EE Applications Using Arquillian
Testing Java EE Applications Using ArquillianTesting Java EE Applications Using Arquillian
Testing Java EE Applications Using Arquillian
 
SQL in the Hybrid World
SQL in the Hybrid WorldSQL in the Hybrid World
SQL in the Hybrid World
 
JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?JavaOne 2014 BOF4241 What's Next for JSF?
JavaOne 2014 BOF4241 What's Next for JSF?
 
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
Alfresco DevCon 2018: SDK 3 Multi Module project using Nexus 3 for releases a...
 

Similar to Java APIs - the missing manual

ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6Andy Butland
 
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Sven Ruppert
 
Eclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to javaciklum_ods
 
Functional Programming With Lambdas and Streams in JDK8
 Functional Programming With Lambdas and Streams in JDK8 Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8IndicThreads
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiRan Mizrahi
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Loiane Groner
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with RailsPaul Gallagher
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5Darren Craig
 
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovCloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovGlobalLogic Ukraine
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Sam Muhanguzi
 
Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonAEM HUB
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling RewriterJustin Edelson
 
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...mfrancis
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java DevelopersYakov Fain
 
Using Java to implement SOAP Web Services: JAX-WS
Using Java to implement SOAP Web Services: JAX-WS�Using Java to implement SOAP Web Services: JAX-WS�
Using Java to implement SOAP Web Services: JAX-WSKatrien Verbert
 

Similar to Java APIs - the missing manual (20)

ASP.Net 5 and C# 6
ASP.Net 5 and C# 6ASP.Net 5 and C# 6
ASP.Net 5 and C# 6
 
Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001Proxy deep-dive java-one_20151027_001
Proxy deep-dive java-one_20151027_001
 
Eclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 OverviewEclipse Day India 2015 - Java 8 Overview
Eclipse Day India 2015 - Java 8 Overview
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 
Functional Programming With Lambdas and Streams in JDK8
 Functional Programming With Lambdas and Streams in JDK8 Functional Programming With Lambdas and Streams in JDK8
Functional Programming With Lambdas and Streams in JDK8
 
Apache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI ToolboxApache DeltaSpike: The CDI Toolbox
Apache DeltaSpike: The CDI Toolbox
 
Apache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolboxApache DeltaSpike the CDI toolbox
Apache DeltaSpike the CDI toolbox
 
Intro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran MizrahiIntro To JavaScript Unit Testing - Ran Mizrahi
Intro To JavaScript Unit Testing - Ran Mizrahi
 
Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018Angular for Java Enterprise Developers: Oracle Code One 2018
Angular for Java Enterprise Developers: Oracle Code One 2018
 
Multi-tenancy with Rails
Multi-tenancy with RailsMulti-tenancy with Rails
Multi-tenancy with Rails
 
What's New In Laravel 5
What's New In Laravel 5What's New In Laravel 5
What's New In Laravel 5
 
Cloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan GasimovCloud Native Serverless Java — Orkhan Gasimov
Cloud Native Serverless Java — Orkhan Gasimov
 
C#Portfolio
C#PortfolioC#Portfolio
C#Portfolio
 
Gwt and rpc use 2007 1
Gwt and rpc use 2007 1Gwt and rpc use 2007 1
Gwt and rpc use 2007 1
 
Mastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin EdelsonMastering the Sling Rewriter by Justin Edelson
Mastering the Sling Rewriter by Justin Edelson
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Completable future
Completable futureCompletable future
Completable future
 
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
Automatically Managing Service Dependencies in an OSGi Environment - Marcel O...
 
Dart for Java Developers
Dart for Java DevelopersDart for Java Developers
Dart for Java Developers
 
Using Java to implement SOAP Web Services: JAX-WS
Using Java to implement SOAP Web Services: JAX-WS�Using Java to implement SOAP Web Services: JAX-WS�
Using Java to implement SOAP Web Services: JAX-WS
 

More from Hendrik Ebbers

Beauty & the Beast - Java VS TypeScript
Beauty & the Beast - Java VS TypeScriptBeauty & the Beast - Java VS TypeScript
Beauty & the Beast - Java VS TypeScriptHendrik Ebbers
 
Multidevice Controls: A Different Approach to UX
Multidevice Controls: A Different Approach to UXMultidevice Controls: A Different Approach to UX
Multidevice Controls: A Different Approach to UXHendrik Ebbers
 
Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Hendrik Ebbers
 
Java ap is you should know
Java ap is you should knowJava ap is you should know
Java ap is you should knowHendrik Ebbers
 
JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016Hendrik Ebbers
 
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ Devoxx
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ DevoxxBUILDING MODERN WEB UIS WITH WEB COMPONENTS @ Devoxx
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ DevoxxHendrik Ebbers
 
Web Components & Polymer 1.0 (Webinale Berlin)
Web Components & Polymer 1.0 (Webinale Berlin)Web Components & Polymer 1.0 (Webinale Berlin)
Web Components & Polymer 1.0 (Webinale Berlin)Hendrik Ebbers
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)Hendrik Ebbers
 
Test Driven Development with JavaFX
Test Driven Development with JavaFXTest Driven Development with JavaFX
Test Driven Development with JavaFXHendrik Ebbers
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)Hendrik Ebbers
 
DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)Hendrik Ebbers
 
Feature driven development
Feature driven developmentFeature driven development
Feature driven developmentHendrik Ebbers
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Hendrik Ebbers
 
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIDevoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIHendrik Ebbers
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundHendrik Ebbers
 
Lightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetLightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetHendrik Ebbers
 

More from Hendrik Ebbers (20)

Beauty & the Beast - Java VS TypeScript
Beauty & the Beast - Java VS TypeScriptBeauty & the Beast - Java VS TypeScript
Beauty & the Beast - Java VS TypeScript
 
Multidevice Controls: A Different Approach to UX
Multidevice Controls: A Different Approach to UXMultidevice Controls: A Different Approach to UX
Multidevice Controls: A Different Approach to UX
 
Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?Java WebStart Is Dead: What Should We Do Now?
Java WebStart Is Dead: What Should We Do Now?
 
Java ap is you should know
Java ap is you should knowJava ap is you should know
Java ap is you should know
 
JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016JavaFX JumpStart @JavaOne 2016
JavaFX JumpStart @JavaOne 2016
 
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ Devoxx
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ DevoxxBUILDING MODERN WEB UIS WITH WEB COMPONENTS @ Devoxx
BUILDING MODERN WEB UIS WITH WEB COMPONENTS @ Devoxx
 
Web Components & Polymer 1.0 (Webinale Berlin)
Web Components & Polymer 1.0 (Webinale Berlin)Web Components & Polymer 1.0 (Webinale Berlin)
Web Components & Polymer 1.0 (Webinale Berlin)
 
webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)webcomponents (Jfokus 2015)
webcomponents (Jfokus 2015)
 
Test Driven Development with JavaFX
Test Driven Development with JavaFXTest Driven Development with JavaFX
Test Driven Development with JavaFX
 
JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)JavaFX Enterprise (JavaOne 2014)
JavaFX Enterprise (JavaOne 2014)
 
DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)DataFX 8 (JavaOne 2014)
DataFX 8 (JavaOne 2014)
 
Feature driven development
Feature driven developmentFeature driven development
Feature driven development
 
Extreme Gui Makeover
Extreme Gui MakeoverExtreme Gui Makeover
Extreme Gui Makeover
 
JavaFX Enterprise
JavaFX EnterpriseJavaFX Enterprise
JavaFX Enterprise
 
Bonjour for Java
Bonjour for JavaBonjour for Java
Bonjour for Java
 
DataFX - JavaOne 2013
DataFX - JavaOne 2013DataFX - JavaOne 2013
DataFX - JavaOne 2013
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013
 
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding APIDevoxx UK 2013: Sandboxing with the Vagrant-Binding API
Devoxx UK 2013: Sandboxing with the Vagrant-Binding API
 
Vagrant-Binding JUG Dortmund
Vagrant-Binding JUG DortmundVagrant-Binding JUG Dortmund
Vagrant-Binding JUG Dortmund
 
Lightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and PuppetLightweight and reproducible environments with vagrant and Puppet
Lightweight and reproducible environments with vagrant and Puppet
 

Recently uploaded

Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr LapshynFwdays
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 

Recently uploaded (20)

Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 

Java APIs - the missing manual