chaining operator in climb - blog.vjeux.com · climb introduction method chaining jquery method...

42
Chaining Operator in Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions Modifiers Parallel Example Conclusion Chaining Operator in Climb Christopher Chedeau LRDE Laboratoire de Recherche et D´ eveloppement d’EPITA July 3, 2011 http://lrde.epita.fr/ 1 / 19 Christopher Chedeau

Upload: others

Post on 09-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Chaining Operator in Climb

Christopher Chedeau

LRDELaboratoire de Recherche et Developpement d’EPITA

July 3, 2011

http://lrde.epita.fr/

1 / 19 Christopher Chedeau

Page 2: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction

Method ChainingjQueryMethod ChainingExtended

ClimbImage ProcessingImplementation AttemptsDollar macro

ExtensionsModifiersParallel

Example

Conclusion

2 / 19 Christopher Chedeau

Page 3: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

jQueryI Old browsers are full of compatibility issues

jQuery1 is a [...] JavaScript Library thatsimplifies HTML document traversing

1http://jquery.com/3 / 19 Christopher Chedeau

Page 4: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Method Chaining

I Intuitive API

I Heavily rely on Method Chaining

$(”a”).addClass(”external”).attr(”target”, ” blank”).click(function () { /∗ analytics call ∗/ })

4 / 19 Christopher Chedeau

Page 5: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Method Chaining in Javascript

function Object() {}Object.prototype = {

methodA: function () {// do something

return this;

},methodB: function () {

// do something

return this;

}};

var obj = new Object();

obj.methodA().methodB();

It works in any ObjectOriented language:

I C++

I Java

I PHP

I C#

I ...

5 / 19 Christopher Chedeau

Page 6: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Extended ChainingI HTML Document Traversing

$(”li”).has(”ul”).eq(1).parent()

// li: List Item// ul: Unordered List

I SQL Query

SQL(”select”).field(”∗”).table(”users”).limit(10)

I Asynchronous Tasks

$(”<div/>”).fetch(”navigation.html”) // Asynchronous.addClass(”column”).appendTo(”#side”)

6 / 19 Christopher Chedeau

Page 7: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Extended ChainingI HTML Document Traversing

$(”li”).has(”ul”).eq(1).parent()

// li: List Item// ul: Unordered List

I SQL Query

SQL(”select”).field(”∗”).table(”users”).limit(10)

I Asynchronous Tasks

$(”<div/>”).fetch(”navigation.html”) // Asynchronous.addClass(”column”).appendTo(”#side”)

6 / 19 Christopher Chedeau

Page 8: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Extended ChainingI HTML Document Traversing

$(”li”).has(”ul”).eq(1).parent()

// li: List Item// ul: Unordered List

I SQL Query

SQL(”select”).field(”∗”).table(”users”).limit(10)

I Asynchronous Tasks

$(”<div/>”).fetch(”navigation.html”) // Asynchronous.addClass(”column”).appendTo(”#side”)

6 / 19 Christopher Chedeau

Page 9: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Image processing

I Image processing chains can be expressed throughmethod chaining

Image(”lena.jpg”).togray().otsu().opening(8 connectivity).save(”lena opening.png”)

7 / 19 Christopher Chedeau

Page 10: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Straight Common Lisp Implementation

I Common Lisp methods do not belong to classes

(let ((img (load ”lena.jpg”)))(setf img (togray img))(setf img (otsu img))(setf img (opening img (8-connectivity)))(save img ”lena opening.png”))

I The temporary variable is written 8 times

8 / 19 Christopher Chedeau

Page 11: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Straight Common Lisp Implementation

I Common Lisp methods do not belong to classes

(let ((img (load ”lena.jpg”)))(setf img (togray img))(setf img (otsu img))(setf img (opening img (8-connectivity)))(save img ”lena opening.png”))

I The temporary variable is written 8 times

8 / 19 Christopher Chedeau

Page 12: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Without Temporary Variable

(save

(opening(otsu

(togray(load ”lena.jpg”)

))

(8−connectivity))

”lena opening.png”)

I Functions executed last are written first

I Arguments are far away from function name

9 / 19 Christopher Chedeau

Page 13: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Without Temporary Variable

(save

(opening(otsu

(togray(load ”lena.jpg”)

))

(8−connectivity))

”lena opening.png”)

I Functions executed last are written first

I Arguments are far away from function name

9 / 19 Christopher Chedeau

Page 14: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Without Temporary Variable

(save

(opening(otsu

(togray(load ”lena.jpg”)

))

(8−connectivity))

”lena opening.png”)

I Functions executed last are written first

I Arguments are far away from function name

9 / 19 Christopher Chedeau

Page 15: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction of Dollar $ Macro

Dollar $ Macro

($ (load ”lena.jpg”)(togray)(otsu)(opening 8−connectivity)(save ”lena opening.png”))

Method Chaining

Image(”lena.jpg”).togray().otsu().opening(8 connectivity).save(”lena opening.png”)

I It takes a sequence of actions

I The result of each action is passed as first argumenton the next

I Rewritten either with or without temporary variable

I Can express all the method chaining features

10 / 19 Christopher Chedeau

Page 16: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction of Dollar $ Macro

Dollar $ Macro

($ (load ”lena.jpg”)(togray )(otsu)(opening 8−connectivity)(save ”lena opening.png”))

Method Chaining

Image(”lena.jpg”).togray().otsu().opening(8 connectivity).save(”lena opening.png”)

I It takes a sequence of actions

I The result of each action is passed as first argumenton the next

I Rewritten either with or without temporary variable

I Can express all the method chaining features

10 / 19 Christopher Chedeau

Page 17: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Modifiers

I Not everything fits in the chaining pattern

($ (action)’(print ”Something”)(action))

I We introduce the quote ’ modifier

11 / 19 Christopher Chedeau

Page 18: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Modifiers

I Not everything fits in the chaining pattern

($ (action)’(print ”Something”)(action))

I We introduce the quote ’ modifier

11 / 19 Christopher Chedeau

Page 19: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

ModifiersI Normal behavior

(before)(action arg)(after )

I Quote ’ Modifier

(before) $1, $2 ...’(action arg $1)(after )

I Sharp # Modifier

(before) $1, $2 ...#(action arg $1)(after )

12 / 19 Christopher Chedeau

Page 20: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

ModifiersI Normal behavior

(before)(action arg)(after )

I Quote ’ Modifier

(before) $1, $2 ...’(action arg $1)(after )

I Sharp # Modifier

(before) $1, $2 ...#(action arg $1)(after )

12 / 19 Christopher Chedeau

Page 21: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

ModifiersI Normal behavior

(before)(action arg)(after )

I Quote ’ Modifier

(before) $1, $2 ...’(action arg $1)(after )

I Sharp # Modifier

(before) $1, $2 ...#(action arg $1)(after )

12 / 19 Christopher Chedeau

Page 22: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Grouped Actions

Image(”lena.png”).preprocess()

.background().fill(red)

.foreground().fill(green)

.

I Feels more like a hack

I Hard to know which methods push to the stack

I Elements in the stack cannot be garbage collected

13 / 19 Christopher Chedeau

Page 23: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Grouped Actions

Image(”lena.png”).preprocess()

.background().fill(red)

.end()

.foreground().fill(green)

.end().

[lena][lena, proc].[lena, proc, background][lena, proc, background][lena, proc].[lena, proc, foreground][lena, proc, foreground][lena, proc]

I Feels more like a hack

I Hard to know which methods push to the stack

I Elements in the stack cannot be garbage collected

13 / 19 Christopher Chedeau

Page 24: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction of // Macro

($ (load ”lena.png”)(preprocess)

(//((background)(fill red))

((foreground)(fill green))))

I Explicit dispatch of the value

I Last value of branch can be collected

14 / 19 Christopher Chedeau

Page 25: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction of // Macro

($ (load ”lena.png”)(preprocess)

(//((background )(fill red))

((foreground )(fill green))))

I Explicit dispatch of the value

I Last value of branch can be collected

14 / 19 Christopher Chedeau

Page 26: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Introduction of // Macro

($ (load ”lena.png”)(preprocess)

(//((background)(fill red))

((foreground)(fill green)))

(combine ))

I Explicit dispatch of the value

I Last value of branch can be collected

14 / 19 Christopher Chedeau

Page 27: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

Otsu Sauvola 1 Sauvola 5

Otsu - Sauvola 1 Otsu - Sauvola 5 Sauvola 1 - 5

15 / 19 Christopher Chedeau

Page 28: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)

(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 29: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//

(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 30: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start)

(otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 31: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)

’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 32: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”)

(save ”otsu.png”)) ; $1(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 33: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 34: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 35: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 36: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2)

(save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 37: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))

(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 38: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 39: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Example

($ (load ”lenagray.png”)(//(’(timer−start) (otsu)’(timer−print ”Otsu”) (save ”otsu.png”)) ; $1

(’(timer−start) (sauvola (box2d 1))’(timer−print ”Sauvola 1”) (save ”sauvola1.png”)) ; $2

(’(timer−start) (sauvola (box2d 5))’(timer−print ”Sauvola 5”) (save ”sauvola5.png”))) ; $3

(//(#(diff $1 $2) (save ”diff1.png”))(#(diff $1 $3) (save ”diff2.png”))(#(diff $2 $3) (save ”diff3.png”))))

; Otsu: 101ms; Sauvola 1: 263ms; Sauvola 5: 3407ms

16 / 19 Christopher Chedeau

Page 40: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Conclusion

I Chaining Operator• Ease of use• Entire API has to be rethought

I Related Work• Implementation of two Component Tree

algorithms ([NC04], [BGL+07])• Overhaul of Value representation• Rationalization of Site Set interface

I Next Steps• New design patterns from dynamic languages• Explore image processing in the browser

17 / 19 Christopher Chedeau

Page 41: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Questions ?

18 / 19 Christopher Chedeau

Page 42: Chaining Operator in Climb - blog.vjeux.com · Climb Introduction Method Chaining jQuery Method Chaining Extended Climb Image Processing Implementation Attempts Dollar macro Extensions

Chaining Operator inClimb

Introduction

Method Chaining

jQuery

Method Chaining

Extended

Climb

Image Processing

ImplementationAttempts

Dollar macro

Extensions

Modifiers

Parallel

Example

Conclusion

Bibliography

Christophe Berger, Thierry Geraud, Roland Levillain,Nicolas Widynski, Anthony Baillard, and EmmanuelBertin, Effective component tree computation withapplication to pattern recognition in astronomicalimaging, Proceedings of the IEEE InternationalConference on Image Processing (ICIP) (SanAntonio, TX, USA), vol. 4, September 2007,pp. IV–41–IV–44.

L. Najman and M. Couprie, Quasi-linear algorithmfor the component tree, IS&T/SPIE Symposium onElectronic Imaging, In Vision Geometry XII, 2004,pp. 18–22.

19 / 19 Christopher Chedeau