SlideShare a Scribd company logo
Type driven development
Maciek Próchniak
Whoami?
Maciek Próchniak
Algebraic topology
hocolim
Group cohomology
Monads
GWT
TouK
Camel
OSGi
CQRS
Scala
How to prevent bugs?
● Tests
● Defensive programming
● Tests
● Contracts
● Tests
Guerilla defensive programming
How to prevent bugs?
In the end, having static types is all about
preventing bugs
by allowing the über-smart compiler
to humiliate you on a regular basis,
making sure you’re doing the right thing
before it’s too late.
(http://danielwestheide.com)
What bugs?
“Only 1% of issues in Python system are
TypeErrors, AttributeErrors, NameErrors”
What about
● NullPointerException
● (uncaught) IOException
● ArrayOutOfBoundsException
● ItemNotFoundException
Typesafe stronghold
... strings and nulls shall not overcome
http://en.wikipedia.org/wiki/File:Cit%C3%A9_de_Carcassonne,
_woman_on_wall.jpg
Security layers
main/servlet
parsing
validation
business “logic”
collections, utils
io
Scalaz
If you are thinking about using
Scalaz, stop now while you still have
your sanity!
And don’t get into arguments with the
people who suggest that you use it – it is
pointless.
Equal?
long userId = 14
User user = getUser(...)
userId.equals(user)
Equal?
val userId : Long = 14
val user : User = getUser(...)
import scalaz.syntax.equal._
userId === user
Names are important
BigDecimal balance;
BigDecimal price;
balance.compareTo(price) > 0
Names are important
double log(double a)
double log(positiveDouble)
double log(double positive)
double log(PositiveDouble a)
Tagged types
@Nullable
@Email
@Valid
@Notempty
private String mail
Oh, really?
@PUT
@Path("/fulfilment/address")
@ApiOperation(value = "Set shipping method for cart", response =
CartDTO.class)
@ApiResponses(value = {
@ApiResponse(code = 400, message = "Method cannot be used due to
bussines rules"),
@ApiResponse(code = 404, message = "Unknown fulfilment option"),
@ApiResponse(response = CartDTO.class, code = 200, message =
"Customer cart after selecting fulfilment")})
public CartDTO setFulfillmentAddress(
@ApiParam(value = "New shipping method", required = true) @Valid
AddressDTO addressDTO
) throws PricingException, FulfillmentPriceException {
Tagged types
Double @@ Meter
sealed trait Meter
sealed trait Liter
Tagged types
val length = Tag[Double,Meter](10)
val capacity = Tag[Double,Liter](10)
length : Double @@ Meter
capacity : Double @@ Liter
length + 15 : Double
Value classes
Java??
public class LengthInMeters(int value) {
private final int length;
public LengthInMeters(int value) {
this.length = value;
}
public int getValue() {
return length;
}
@Override
public int hashCode() {
return 31 * length;;
}
@Override public boolean equals(Object o) {
if (o == this)
return true;
if (!(o instanceof LengthInMeters))
return false;
LengthInMeters c = (LengthInMeters) o;
return Integer.compare(c.length, length) == 0;
}
}
Value classes
case class CustomerId(id:String)
extends AnyVal {
def load:Customer
}
def loadFriends
(cid:CustomerId, bid:BranchId)
val cid:CustomerId = parseId(cidString)
Value classes
implicit class CustomerId(
val id:String) extends AnyVal {
def load:Customer
}
“12345”.load : Customer
What about
● NullPointerException
● (uncaught) IOException
● ArrayOutOfBoundsException
● ItemNotFoundException
Option[A]
val maybeResult : Option[Result]
= Option(unsafeResult)
maybeResult.map(_.name):Option[String]
maybeResult
.getOrElse(defaultResult) : Result
maybeResult.get
Option[String]
val str = Option(“str”)
val none = Option(null)
val none2 = Option.empty[String]
val fake = Some(null)
Syntax sugar IS important
val maybe = Option.empty[String]
maybe.map(_.toUpperCase)
Syntax sugar IS important
Optional<String> maybeName =
Optional.absent();
maybeName.transform(
new Function<String, Object>() {
@Override
public Object apply(String s) {
return s.toUpperCase();
}
});
Syntax sugar IS important
String maybe = null;
if (maybe != null) {
maybe = maybe.toUpperCase();
}
What about
● NullPointerException
● (uncaught) IOException
● ArrayOutOfBoundsException
● ItemNotFoundException
IO...
https://www.flickr.com/photos/oddsock/100761143/
Why not exceptions?
● They are invisible in the source code.
● They create too many possible exit points
A better alternative is to have your functions
return error values (...), no matter how verbose
it might be
Joel Spolsky
IO[Result]
val fileNameIO : IO[String] =
IO { System.getProperty("file.config") }
val config : IO[String] = for {
fileName <- fileNameIO
fileReader = new BufferedReader(
new FileReader(fileName))
line <-safeReadLn(fileReader)
} yield line
val data : String = config.unsafePerformIO
Security layers
main/servlet
parsing
validation
business “logic”
collections, utils
io
Mixing stuff
IO[State[Map, String]]
State[Map, IO[String,]]
Mixing stuff
https://www.flickr.com/photos/oddsock/100761143/
What about
● NullPointerException
● (uncaught) IOException
● ArrayOutOfBoundsException
● ItemNotFoundException
Empty list?
val list : List[String]
= Nil
list.head
import scalaz.NonEmptyList
val nel : NonEmptyList[String]
= NonEmptyList(“a”,List(“b”))
nel.head
Dependent types?
val list : List[String]
val listOfSize5 : List[String,2+3]
def sum[A,L1:Nat,L2:Nat]
(l1 : List[A,L1], l2:List[A,L2])
: List[A,L1+L2]
Is it a dream?
Path dependent types
class Family {
case class Child(name : String)
def quarell(child1 : Child,
child2 : Child) {
//blaaah
}
}
Path dependent types
val kowalscy = new Family()
val nowakowie = new Family()
val pawelK = kowalscy.Child("Pawel")
val pawelN = nowakowie.Child("Pawel")
kowalscy.quarell(pawelK, pawelN)
Path dependent types
def hide(family:Family)
(child:family.Child) {
}
Shapeless
"maybe it's bug in compiler, but we'll use it and
assume it won't be fixed"
https://github.com/milessabin/shapeless
shapeless is an exploration of generic
(aka polytypic) programming in Scala
Sized[Seq[A],N]
trait Sized[T, N] {
???
}
N = ???
Part I - numbers as types
trait Nat
class _0 extends Nat
case class Succ[P<:Nat]() extends Nat
val _2 : Succ[Succ[_0]] =
Succ(Succ(_0))
Sized[Seq[A],N]
type SSeq[A,M<:Nat] = Sized[Seq[A],M]
Sized("maciek","prochniak")
: SSeq[String,_2]
def sizedZip[A,B,M<:Nat]
(l1:SSeq[A,M],l2:SSeq[B,M])
: SSeq[(A,B),M] = ???
Part II - witness
def myFun[N<:Nat](a:SIter[String,N])
(implicit b:All[N]) {}
trait All[N<:Nat] {}
implicit object AllZero
extends All[_0]
implicit def allSucc[N<:Nat]
(implicit a:All[N])
= new All[Succ[N]] {}
Part II - witness
trait Even[K<:Nat] {}
implicit object Even0 extends Even[0_]
implicit def succ[K<:Nat]
(implicit n:Even[K])
:Even[Succ[Succ[K]] =
new Even[Succ[Succ[K]]{}
Part II - witness
def evenFun[N<:Nat]
(a:Sized[Iterable[String],N])
(implicit n:Even[N]) {}
evenFun(Sized[Seq](“a”,”b”))
//evenFun(Sized[Seq](“a”,”b”,”c))
Ultimate challenge...
isSum(_8 :: _4 :: HNil, _12)
//isSum(_8 :: _4 :: HNil, _10)
trait Summed[H <:HList, S<:Nat]
def isSum[L<:HList,S<:Nat](l:L,s:S)
(implicit sumProof: Summed[L,S]) {}
Ultimate code...
implicit object NilSummed
extends Summed[HNil, _0]
implicit def pSum
[H<:Nat,T<:HList,PS<:Nat,S<:Nat]
(implicit partial: Summed[T, PS],
sum: Sum.Aux[H, PS, S])
= new Summed[H :: T, S] {}
Security layers
main/servlet
parsing
validation
business “logic”
collections, utils
io
What about
● NullPointerException
● (uncaught) IOException
● ArrayOutOfBoundsException
● ItemNotFoundException
● (uncaught) ConstraintViolationException
Diagram chasing
https://www.flickr.
com/photos/intvgene/370973576/in/photolist-yMkw9-
7DzC2S-cFnmdQ-4zTfBU-4wuofP-5jGxP9-2auo-
Types as documentation
https://www.flickr.
com/photos/videolux/2389320345/in/photolist-4D8TGn-
41Hk4j-f5j58F-58cFd2-6jtGaU-8M9Rct-dKjTu-bFuM9p-
Are we there yet?
Do you do all this?
https://www.flickr.
com/photos/drgaz/277221424/in/photolist-quQgJ-
5KKwCZ
Do you do all this?
● IDE support
● library maturity
● verbosity
● is it worth it?
Generic vs concrete code
https://www.flickr.com/photos/oddsock/100761143/
Generic vs concrete code
Object
Collection
Controller
Domain
https://www.flickr.com/photos/oddsock/100761143/
Is your business logic logical?
k4j-f5j58F-58cFd2-6jtGaU-8M9Rct-dKjTu-bFuM9p-
288vk7-6MDA6U-9rpM2p-7uFTQX-by46VA-jtP7tW-
d1yszw-4BxoMU-4Bt4Q8-4Bt8Eg-9qdvDe-9uQehi-
Value classes
Option
Dependent types
IOMonad
Validation
Scala Scalaz
Shapeless
Dzięki
http://mproch.blogspot.com
mpr@touk.pl
http://github.com/mproch

More Related Content

What's hot

Core java Basics
Core java BasicsCore java Basics
Core java Basics
RAMU KOLLI
 
Scalax
ScalaxScalax
scala
scalascala
scala
Pranav E K
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
pramode_ce
 
Scala eXchange opening
Scala eXchange openingScala eXchange opening
Scala eXchange opening
Martin Odersky
 
Oscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simpleOscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simple
Martin Odersky
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
Bert Van Vreckem
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to Scala
Derek Chen-Becker
 
The Evolution of Scala
The Evolution of ScalaThe Evolution of Scala
The Evolution of Scala
Martin Odersky
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
Xebia IT Architects
 
Scala
ScalaScala
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scala
scalaconfjp
 
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practicePHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
Sebastian Marek
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
Alfonso Ruzafa
 
JavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонкеJavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонке
FestGroup
 
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
Martin Odersky
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009
Martin Odersky
 
Lecture38
Lecture38Lecture38
Lecture38
David Evans
 
Java, what's next?
Java, what's next?Java, what's next?
Java, what's next?
Stephan Janssen
 

What's hot (19)

Core java Basics
Core java BasicsCore java Basics
Core java Basics
 
Scalax
ScalaxScalax
Scalax
 
scala
scalascala
scala
 
Introduction to Functional Programming with Scala
Introduction to Functional Programming with ScalaIntroduction to Functional Programming with Scala
Introduction to Functional Programming with Scala
 
Scala eXchange opening
Scala eXchange openingScala eXchange opening
Scala eXchange opening
 
Oscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simpleOscon keynote: Working hard to keep it simple
Oscon keynote: Working hard to keep it simple
 
Workshop Scala
Workshop ScalaWorkshop Scala
Workshop Scala
 
Stepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to ScalaStepping Up : A Brief Intro to Scala
Stepping Up : A Brief Intro to Scala
 
The Evolution of Scala
The Evolution of ScalaThe Evolution of Scala
The Evolution of Scala
 
Getting Started With Scala
Getting Started With ScalaGetting Started With Scala
Getting Started With Scala
 
Scala
ScalaScala
Scala
 
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scala
 
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practicePHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
PHP Forum Paris 2012: Magic behind the numbers. Software metrics in practice
 
Scala fundamentals
Scala fundamentalsScala fundamentals
Scala fundamentals
 
JavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонкеJavaFest. Виктор Полищук. Legacy: как победить в гонке
JavaFest. Виктор Полищук. Legacy: как победить в гонке
 
flatMap Oslo presentation slides
flatMap Oslo presentation slidesflatMap Oslo presentation slides
flatMap Oslo presentation slides
 
Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009Scala Talk at FOSDEM 2009
Scala Talk at FOSDEM 2009
 
Lecture38
Lecture38Lecture38
Lecture38
 
Java, what's next?
Java, what's next?Java, what's next?
Java, what's next?
 

Similar to Type Driven Development @ Confitura 2014

Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
Andrés Viedma Peláez
 
A well-typed program never goes wrong
A well-typed program never goes wrongA well-typed program never goes wrong
A well-typed program never goes wrong
Julien Wetterwald
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java DevelopersMiles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
Skills Matter
 
A Brief Introduction to Scala for Java Developers
A Brief Introduction to Scala for Java DevelopersA Brief Introduction to Scala for Java Developers
A Brief Introduction to Scala for Java Developers
Miles Sabin
 
BCS SPA 2010 - An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java DevelopersBCS SPA 2010 - An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java Developers
Miles Sabin
 
Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»
e-Legion
 
The Kotlin Programming Language, Svetlana Isakova
The Kotlin Programming Language, Svetlana IsakovaThe Kotlin Programming Language, Svetlana Isakova
The Kotlin Programming Language, Svetlana Isakova
Vasil Remeniuk
 
Qcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaQcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scala
Michael Stal
 
Scala introduction
Scala introductionScala introduction
Scala introduction
Yardena Meymann
 
Kotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrainsKotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrains
Jigar Gosar
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
Andrew Phillips
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Andrew Phillips
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
league
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
Garth Gilmour
 
обзор Python
обзор Pythonобзор Python
обзор Python
Yehor Nazarkin
 
Java tut1
Java tut1Java tut1
Java tut1
Ajmal Khan
 
Java Tutorial
Java TutorialJava Tutorial
Java Tutorial
Vijay A Raj
 
Tutorial java
Tutorial javaTutorial java
Tutorial java
Abdul Aziz
 
Java Tut1
Java Tut1Java Tut1
Java Tut1
guest5c8bd1
 
Introductiontoprogramminginscala
IntroductiontoprogramminginscalaIntroductiontoprogramminginscala
Introductiontoprogramminginscala
Amuhinda Hungai
 

Similar to Type Driven Development @ Confitura 2014 (20)

Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
Poniendo Kotlin en producción a palos (Kotlin in production, the hard way)
 
A well-typed program never goes wrong
A well-typed program never goes wrongA well-typed program never goes wrong
A well-typed program never goes wrong
 
Miles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java DevelopersMiles Sabin Introduction To Scala For Java Developers
Miles Sabin Introduction To Scala For Java Developers
 
A Brief Introduction to Scala for Java Developers
A Brief Introduction to Scala for Java DevelopersA Brief Introduction to Scala for Java Developers
A Brief Introduction to Scala for Java Developers
 
BCS SPA 2010 - An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java DevelopersBCS SPA 2010 - An Introduction to Scala for Java Developers
BCS SPA 2010 - An Introduction to Scala for Java Developers
 
Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»Светлана Исакова «Язык Kotlin»
Светлана Исакова «Язык Kotlin»
 
The Kotlin Programming Language, Svetlana Isakova
The Kotlin Programming Language, Svetlana IsakovaThe Kotlin Programming Language, Svetlana Isakova
The Kotlin Programming Language, Svetlana Isakova
 
Qcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scalaQcon2011 functions rockpresentation_scala
Qcon2011 functions rockpresentation_scala
 
Scala introduction
Scala introductionScala introduction
Scala introduction
 
Kotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrainsKotlin: A pragmatic language by JetBrains
Kotlin: A pragmatic language by JetBrains
 
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
BASE Meetup: "Analysing Scala Puzzlers: Essential and Accidental Complexity i...
 
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
Scala Up North: "Analysing Scala Puzzlers: Essential and Accidental Complexit...
 
The Scala Programming Language
The Scala Programming LanguageThe Scala Programming Language
The Scala Programming Language
 
A Sceptical Guide to Functional Programming
A Sceptical Guide to Functional ProgrammingA Sceptical Guide to Functional Programming
A Sceptical Guide to Functional Programming
 
обзор Python
обзор Pythonобзор Python
обзор Python
 
Java tut1
Java tut1Java tut1
Java tut1
 
Java Tutorial
Java TutorialJava Tutorial
Java Tutorial
 
Tutorial java
Tutorial javaTutorial java
Tutorial java
 
Java Tut1
Java Tut1Java Tut1
Java Tut1
 
Introductiontoprogramminginscala
IntroductiontoprogramminginscalaIntroductiontoprogramminginscala
Introductiontoprogramminginscala
 

More from Maciek Próchniak

Jee conf 2015
Jee conf 2015Jee conf 2015
Jee conf 2015
Maciek Próchniak
 
Slick @ Confitura 2013
Slick @ Confitura 2013Slick @ Confitura 2013
Slick @ Confitura 2013
Maciek Próchniak
 
Type Driven Development @ BoosterConf 2013
Type Driven Development @ BoosterConf 2013Type Driven Development @ BoosterConf 2013
Type Driven Development @ BoosterConf 2013
Maciek Próchniak
 
CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012
Maciek Próchniak
 
TypeSafe NoSQL @ TopConf 2012
TypeSafe NoSQL @ TopConf 2012TypeSafe NoSQL @ TopConf 2012
TypeSafe NoSQL @ TopConf 2012
Maciek Próchniak
 
Scalable database, Scalable language @ JDC 2013
Scalable database, Scalable language @ JDC 2013Scalable database, Scalable language @ JDC 2013
Scalable database, Scalable language @ JDC 2013
Maciek Próchniak
 
DSL - DYI
DSL - DYIDSL - DYI
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010
Maciek Próchniak
 
Activiti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziActiviti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodzi
Maciek Próchniak
 
Smx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakSmx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakMaciek Próchniak
 

More from Maciek Próchniak (10)

Jee conf 2015
Jee conf 2015Jee conf 2015
Jee conf 2015
 
Slick @ Confitura 2013
Slick @ Confitura 2013Slick @ Confitura 2013
Slick @ Confitura 2013
 
Type Driven Development @ BoosterConf 2013
Type Driven Development @ BoosterConf 2013Type Driven Development @ BoosterConf 2013
Type Driven Development @ BoosterConf 2013
 
CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012
 
TypeSafe NoSQL @ TopConf 2012
TypeSafe NoSQL @ TopConf 2012TypeSafe NoSQL @ TopConf 2012
TypeSafe NoSQL @ TopConf 2012
 
Scalable database, Scalable language @ JDC 2013
Scalable database, Scalable language @ JDC 2013Scalable database, Scalable language @ JDC 2013
Scalable database, Scalable language @ JDC 2013
 
DSL - DYI
DSL - DYIDSL - DYI
DSL - DYI
 
Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010Camel-Drools - Javarsovia 2010
Camel-Drools - Javarsovia 2010
 
Activiti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodziActiviti - BPMN 2.0 nadchodzi
Activiti - BPMN 2.0 nadchodzi
 
Smx + Camel - Maciek Próchniak
Smx + Camel - Maciek PróchniakSmx + Camel - Maciek Próchniak
Smx + Camel - Maciek Próchniak
 

Recently uploaded

Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
Neo4j
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Łukasz Chruściel
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
lorraineandreiamcidl
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
Deuglo Infosystem Pvt Ltd
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
Gerardo Pardo-Castellote
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
timtebeek1
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
kalichargn70th171
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
Aftab Hussain
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
Hornet Dynamics
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
Aftab Hussain
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
TheSMSPoint
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
Sven Peters
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Envertis Software Solutions
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
Remote DBA Services
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Crescat
 

Recently uploaded (20)

Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
GraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph TechnologyGraphSummit Paris - The art of the possible with Graph Technology
GraphSummit Paris - The art of the possible with Graph Technology
 
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️Need for Speed: Removing speed bumps from your Symfony projects ⚡️
Need for Speed: Removing speed bumps from your Symfony projects ⚡️
 
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOMLORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
LORRAINE ANDREI_LEQUIGAN_HOW TO USE ZOOM
 
Empowering Growth with Best Software Development Company in Noida - Deuglo
Empowering Growth with Best Software  Development Company in Noida - DeugloEmpowering Growth with Best Software  Development Company in Noida - Deuglo
Empowering Growth with Best Software Development Company in Noida - Deuglo
 
DDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systemsDDS-Security 1.2 - What's New? Stronger security for long-running systems
DDS-Security 1.2 - What's New? Stronger security for long-running systems
 
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdfAutomated software refactoring with OpenRewrite and Generative AI.pptx.pdf
Automated software refactoring with OpenRewrite and Generative AI.pptx.pdf
 
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf8 Best Automated Android App Testing Tool and Framework in 2024.pdf
8 Best Automated Android App Testing Tool and Framework in 2024.pdf
 
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of CodeA Study of Variable-Role-based Feature Enrichment in Neural Models of Code
A Study of Variable-Role-based Feature Enrichment in Neural Models of Code
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
E-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet DynamicsE-commerce Development Services- Hornet Dynamics
E-commerce Development Services- Hornet Dynamics
 
Graspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code AnalysisGraspan: A Big Data System for Big Code Analysis
Graspan: A Big Data System for Big Code Analysis
 
Transform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR SolutionsTransform Your Communication with Cloud-Based IVR Solutions
Transform Your Communication with Cloud-Based IVR Solutions
 
Microservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we workMicroservice Teams - How the cloud changes the way we work
Microservice Teams - How the cloud changes the way we work
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise EditionWhy Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
Why Choose Odoo 17 Community & How it differs from Odoo 17 Enterprise Edition
 
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit ParisNeo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
Neo4j - Product Vision and Knowledge Graphs - GraphSummit Paris
 
Oracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptxOracle Database 19c New Features for DBAs and Developers.pptx
Oracle Database 19c New Features for DBAs and Developers.pptx
 
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
Introducing Crescat - Event Management Software for Venues, Festivals and Eve...
 

Type Driven Development @ Confitura 2014