SlideShare a Scribd company logo
linkd.in/jbaruch
stackoverflow.com/users/402053/jbaruch
1. Two entertaining guys on stage
1. Two entertaining guys on stage
2. Funny Puzzling questions
3. You think and vote
4. Lots of T-shirts flying in the air
5. Official twitter handle!
groovypuzzlers
Cédric?!
class Conference {def name; def year}
def gr = new Conference(name: 'Greach', year: 2014)
gr.each {println it}
-3.abs()
(-3).abs()
int value = -3
value.abs()
println (-3).abs()
-3
Caught: java.lang.NullPointerException: Cannot invoke method abs() on null
object
java.lang.NullPointerException: Cannot invoke method abs() on null object
at AbsolutelyGroovy.run(AbsolutelyGroovy.groovy:7)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
println (-3).abs()
“All problems in computer science can be
solved by another pair of parentheses”
John McCarthy, the inventor of LISP
println ((-3).abs())
int value = -3
println value.abs()
'a'..'z'.each { println it }
B. NoSuchMethodError
C. z
D. Won’t run
A. a
b
c
.
.
.
z
You knew it, right?
('a'..'z').each { println it }
List<Integer> list = [56, '9', 74]
def max = list.max { item ->
(item < 50) ? item : null
}
println max
List<Integer> list = [56, '9', 74]
def max = list.max { item ->
(item < 50) ? item : null
}
println max
>groovysh (('9' as Character) as Integer)
===> 57
List<Integer> list = [56, 57, 74]
def max = list.max { item ->
(item < 50) ? item : null
}
println max
List<Integer> list = [56, '9', 74]
def max = list.max { item ->
(item < 50) ? item : null
}
println max
def random = new Random()
def randomList = []
0..10.each {randomList << random.nextInt()}
assert randomList.max{ null } == randomList[0]
def x = int
println x
if ((x = long)) {
println x
}
if (x = boolean ) {
println x
}
def x = int
println x
if ((x = long)) {
println x
}
if (x = boolean ) {
println x
}
def key = 'x'
def map = [key: 'treasure']
def value = map.get(key)
println value
def key = 'x'
def map = [key: 'treasure']
def value = map.get(key)
println value
1.def map = [(key): 'treasure']
2.map.put(key, 'treasure')
3.map."$key" = 'treasure'
4.map[key] = 'treasure'
def map = [2: 'treasure']
def key = 2
def value = map."$key"
println value
def map = [2: 'treasure']
def key = 2
def value = map."$key"
println value
def map = [2: 'treasure']
println map.keySet().first().class.name
java.lang.Integer
@groovy.transform.InheritConstructors
class TreaayeMap extends HashMap {
}
TreaayeMap a = [5]
TreaayeMap b = [6]
println "${a.getClass()} ${a.equals(b)}"
TreaayeMap a = [5]
TreaayeMap a = [5]
TreaayeMap a = [5]
TreaayeMap a = [5]
@groovy.transform.InheritConstructors
class TreaayeMap extends HashMap {
}
TreaayeMap a = [5]
@groovy.transform.InheritConstructors
class TreaayeMap extends HashMap {
}
/**
* Constructs an empty <tt>HashMap</tt> with the specified initial
* capacity and the default load factor (0.75).
*
* @param initialCapacity the initial capacity.
* @throws IllegalArgumentException if the initial capacity is negative.
*/
public HashMap(int initialCapacity)
A. def beast = '6' * Math.PI
B. def beast = '6' * '3'
C. def beast = '667' – 1
D. def beast = '6' + '6' + 0 + 6
def beast = '6' * Math.PI
def beast = '6' * 3.1415926…
/**
* Repeat a String a certain number of times.
*
* @param self a String to be repeated
* @param factor the number of times the String should be repeated
* @return a String composed of a repetition
* @throws IllegalArgumentException if the number of repetitions is &lt; 0
* @since 1.0
*/
public static String multiply(String self, Number factor) {
int size = factor.intValue();
…
}
def beast = '6' * 3.1415926…
def beast = '6' * 3
B. def beast = '6' * '3'
C. def beast = '667' – 1
D. def beast = '6' + '6' + 0 + 6
B. def beast = '6' * '3'
C. def beast = '667' – 1
D. def beast = '6' + '6' + (0 + 6)
B. def beast = '6' * '3'
C. def beast = '667' – 1
D. def beast = '6' + '6' + (0 + 6)
Yup, I am
watching you!
class THERE_CAN_BE_ONLY_ONE { }
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class clazz = THERE_CAN_BE_ONLY_ONE
return clazz.newInstance()
}
}
println new MacLeod().THERE_CAN_BE_ONLY_ONE
class THERE_CAN_BE_ONLY_ONE { }
class MacLeod {
THERE_CAN_BE_ONLY_ONE
getTHERE_CAN_BE_ONLY_ONE() {
Class clazz = THERE_CAN_BE_ONLY_ONE
return clazz.newInstance()
}
}
println new MacLeod().THERE_CAN_BE_ONLY_ONE
A. Won't start
B. No such property: THERE_CAN_BE_ONLY_ONE for class:
MacLeod
C. THERE_CAN_BE_ONLY_ONE@3d74bf60
D. Another Exception
A.MultipleCompilationErrorsException
B.StackOverflowError
C.NullPointerException
D.Yet Another Exception
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class clazz = THERE_CAN_BE_ONLY_ONE
return clazz.newInstance()
}
}
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class clazz = getTHERE_CAN_BE_ONLY_ONE()
return clazz.newInstance()
}
}
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class<THERE_CAN_BE_ONLY_ONE> clazz =
THERE_CAN_BE_ONLY_ONE.class
return clazz.newInstance()
}
}
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class<THERE_CAN_BE_ONLY_ONE> clazz =
getTHERE_CAN_BE_ONLY_ONE().class
return clazz.newInstance()
}
}
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class<THERE_CAN_BE_ONLY_ONE> clazz = (THERE_CAN_BE_ONLY_ONE as
Class)
return clazz.newInstance()
}
}
class MacLeod {
THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() {
Class<THERE_CAN_BE_ONLY_ONE> clazz = (getTHERE_CAN_BE_ONLY_ONE() as
Class)
return clazz.newInstance()
}
}
class Kitty { def fur }
def kitties = [new Kitty(fur: 'soft'),new Kitty(fur: 'warm'),new Kitty(fur: 'purr') ]
println kitties.collect { it.fur }
println kitties*.fur
println kitties.fur
class Kitty { def fur }
def kitties
println kitties.collect { it.fur }
println kitties*.fur
println kitties.fur
class Kitty { def fur }
def kitties
println kitties.fur
class Kitty { def fur }
def kitties
println kitties.fur
class Kitty { def fur }
def kitties
println kitties.collect { it.fur }
class Kitty { def fur }
def kitties
println kitties.collect { it.fur }
public static Collection asCollection(Object value) {
if (value == null) {
return Collections.EMPTY_LIST;
}
…
}
class Kitty { def fur }
def kitties
println kitties*.fur
class Kitty { def fur }
def kitties
println kitties*.fur
class Kitty { def fur }
def kitties
println kitties*.fur
[]
null
Caught: java.lang.NullPointerException:
Cannot get property 'fur' on null object
ArrayList<String> expendables = ['Arnold', 'Chuck', 'Sylvester']
def expendable = //someone from the list
for(String hero in expendables) {
if(hero == expendable){
expendables.remove(hero)
}
}
println expendables
ArrayList<String> expendables = ['Arnold', 'Chuck', 'Sylvester']
def expendable = //someone from the list
for(String hero in expendables) {
if(hero == expendable){
expendables.remove(hero)
}
}
println expendables
A.Can't avoid CME
B.Arnold
C.Chuck
D.Sylvester
Which one won’t cause a
ConcurrentModificationException?
List expendables = Arrays.asList(new String[]{"Arnold", "Chuck", "Sylvester"});
String expendable = "Chuck";
Iterator iterator = expendables.iterator();
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
expendables.remove(hero);
}
}
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
// expendables.remove(hero);
}
}
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
// expendables.remove(hero);
}
}
public E next() {
checkForComodification();
…
cursor = i + 1;
}
Modifications are only
checked in the next
cycle
Getting ready for
hasNext() check in the
next cyclepublic boolean hasNext() {
return cursor != size();
}
Exit on last element +1 ==
size()
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
// expendables.remove(hero);
}
}
public E next() {
checkForComodification();
…
cursor = i + 1;
}
public boolean hasNext() {
return cursor != size();
}
After Sylvester cursor is 3
And size is 3 as well
All good. Now let’s mess with it.
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
expendables.remove(hero);
}
}
public E next() {
checkForComodification();
…
cursor = i + 1;
}
public boolean hasNext() {
return cursor != size();
}
After Chuck the cursor is 2
And now the size now is 2!
It won’t get to the next() to run checkForComodification!
Then we remove the element
while(iterator.hasNext()) {
String hero = (String)iterator.next();
if(hero.equals(expendable)) {
expendables.remove(hero);
}
}
public E next() {
checkForComodification();
…
cursor = i + 1;
}
public boolean hasNext() {
return cursor != size();
}
After Sylvester the cursor is
3
But the size now is 2!
It will go to another loop and fail on checkForComodification!
Then we remove the element
Closure whodunit() {
{
'The butler did it.'
}
}
println whodunit()
Closure whodunit() {
{ ->
'The butler did it.'
}
}
def range = 1.0..10.0
assert range.contains(5.0)
println range.contains(5.6)
Iterator iterator = (1.0..10.0).iterator()
while (iterator.hasNext()) {
print "${iterator.next()} "
}
1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
[0..9].each { println(it - 1) }
boolean isPrime(def x) {
if (x == 2) return true
int limit = Math.sqrt(x) + 1
(2..limit).each {
if (x % it == 0) {
return false
}
}
true
}
println isPrime("4" as Double)
boolean isPrime(def x) {
if (x == 2) return true
int limit = Math.sqrt(x) + 1
(2..limit).each {
if (x % it == 0) {
return false
}
}
true
}
println isPrime("4" as Double)
boolean isPrime(def x) {
if (x == 2) return true
int limit = Math.sqrt(x) + 1
(2..limit).each {
if (x % it == 0) {
return false
}
}
true
}
println isPrime("4" as Double)
http://kousenit.wordpress.com/2014/04/
A. [[2, 3, 5], [2, 4, 8], [42, 73, 2147483647, 0]]
B. Won't run
C. [[null, null, null, 5]]
D.null
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]
*Yes, we know, it's not Elvis' song.
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
jailhouseRock?:[null]?:[] + rockAroundTheClock?:[]
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
jailhouseRock?:[null]?:[1,2,3]?:[]
def jailhouseRock
def loveMeTender
def rockAroundTheClock = [1,2,3]
[null]
(jailhouseRock?:[])+(loveMeTender?:[])+(rockAroundTheClock?:[])
Love me tender!
double value = 3
println "$value.14".isDouble()
double value = 3
println "$value.14".isDouble()
List<Long> list = [1,2,3]
def now = new Date()
list << now
println list
List<Long> list = [1,2,3]
def now = new Date()
list << now
println list
List<Long> list = [1,2,3]
def now = new Date()
list << now
list << 'foo'
println list*.class.name
[java.lang.Long, java.lang.Long,
java.lang.Long, java.util.Date,
java.lang.String]
class VanHalen {
public static jump() {
"Here are the ${lyrics()}"
}
def methodMissing(String name, def args) {
'lyrics'
}
}
println VanHalen.jump()
class VanHalen {
public static jump()
{
"Here are the
${lyrics()}"
}
def
methodMissing(String
name, def args) {
'lyrics'
}
}
class VanHalen {
public static jump() {
"Here are the ${lyrics()}"
}
static $static_methodMissing(String name, def args) {
'lyrics'
}
}
println VanHalen.jump()
class VanHalen {
public jump() {
"Here are the ${lyrics()}"
}
def methodMissing(String name, def args) {
'lyrics'
}
}
println new VanHalen().jump()
class Invite {
int attending = 1
}
def invite = new Invite()
def attendees = (invite.attending) +1
println attendees
class Invite {
int attending = 1
}
def invite = new Invite()
def attendees = (invite.attending) +1
println attendees
def attendees = (new Invite().attending) + 1
println attendees
def invite = new Invite()
println (invite.attending +1)
def back = 'back'
def quotes = ["I'll be $back",
"I'll be ${-> back}",
"I'll be ${back}",
"I'll be "+back]
println quotes
back = 'Bach'
println quotes
def back = 'back'
def quotes = ["I'll be $back",
"I'll be ${-> back}",
"I'll be ${back}",
"I'll be "+back]
def back = 'back'
def quotes = ["I'll be $back",
"I'll be ${-> back}",
"I'll be ${back}",
"I'll be "+back]
That is the only closure
String truth = 'false'
boolean groovyTruth = truth
println groovyTruth
String truth = 'false'
boolean groovyTruth = truth
println groovyTruth
assert 1L == 1
println 1L.equals(1)
PUBLIC -
PROPERTY!
trait Public {
public String property = "I am all public!"
}
class Property implements Public {}
Property publicProperty = new Property()
trait Public {
public String property = "I am all public!"
}
class Property implements Public {}
Property publicProperty = new Property()
http://beta.groovy-
lang.org/docs/groovy-
def map = [metaClass: ‘frequency']
println "What's the $map.metaClass, Frederic?"
map.metaClass
map.get('metaClass')
map.getMetaClass()
1. Write readable code
2. Comment neat tricks
3. Sometimes it is just a bug
4. Use static code analysis (intellij IDEA!)
5. Rtfm
6. Don’t code like my brother
We have just started!
(may end up in proper uniform)
Puzzlers? Gotchas? Fetal position inducing behavior?
- puzzlers jfrog.com
- Groovypuzzlers
Positive feedback?
Praise us on twitter
groovypuzzlers
- Groovypuzzlers
- ryanvanderwerf
- jbaruch
Negative feeback?
/dev/null
The Groovy Puzzlers – The Complete 01 and 02 Seasons

More Related Content

What's hot

Scala introduction
Scala introductionScala introduction
Scala introduction
Alf Kristian Støyle
 
Google guava - almost everything you need to know
Google guava - almost everything you need to knowGoogle guava - almost everything you need to know
Google guava - almost everything you need to know
Tomasz Dziurko
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
Myeongin Woo
 
Predictably
PredictablyPredictably
Predictably
ztellman
 
Transaction is a monad
Transaction is a  monadTransaction is a  monad
Transaction is a monad
Jarek Ratajski
 
Pure kotlin
Pure kotlinPure kotlin
Pure kotlin
Jarek Ratajski
 
Kotlin standard
Kotlin standardKotlin standard
Kotlin standard
Myeongin Woo
 
Why Learn Python?
Why Learn Python?Why Learn Python?
Why Learn Python?
Christine Cheung
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Fedor Lavrentyev
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
Baruch Sadogursky
 
Java.lang.object
Java.lang.objectJava.lang.object
Java.lang.object
Soham Sengupta
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
Domenic Denicola
 
Kotlin
KotlinKotlin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Fabio Collini
 
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
Leonardo Borges
 
Clean code with google guava jee conf
Clean code with google guava jee confClean code with google guava jee conf
Clean code with google guava jee conf
Igor Anishchenko
 
Google Guava
Google GuavaGoogle Guava
Google Guava
Scott Leberknight
 
Benefits of Kotlin
Benefits of KotlinBenefits of Kotlin
Benefits of Kotlin
Benjamin Waye
 
java 8 Hands on Workshop
java 8 Hands on Workshopjava 8 Hands on Workshop
java 8 Hands on Workshop
Jeanne Boyarsky
 
Kotlin class
Kotlin classKotlin class
Kotlin class
Myeongin Woo
 

What's hot (20)

Scala introduction
Scala introductionScala introduction
Scala introduction
 
Google guava - almost everything you need to know
Google guava - almost everything you need to knowGoogle guava - almost everything you need to know
Google guava - almost everything you need to know
 
Kotlin collections
Kotlin collectionsKotlin collections
Kotlin collections
 
Predictably
PredictablyPredictably
Predictably
 
Transaction is a monad
Transaction is a  monadTransaction is a  monad
Transaction is a monad
 
Pure kotlin
Pure kotlinPure kotlin
Pure kotlin
 
Kotlin standard
Kotlin standardKotlin standard
Kotlin standard
 
Why Learn Python?
Why Learn Python?Why Learn Python?
Why Learn Python?
 
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev FedorProgramming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
Programming Java - Lection 07 - Puzzlers - Lavrentyev Fedor
 
Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014Groovy puzzlers по русски с Joker 2014
Groovy puzzlers по русски с Joker 2014
 
Java.lang.object
Java.lang.objectJava.lang.object
Java.lang.object
 
ES6 in Real Life
ES6 in Real LifeES6 in Real Life
ES6 in Real Life
 
Kotlin
KotlinKotlin
Kotlin
 
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night TurinAsync code on kotlin: rx java or/and coroutines - Kotlin Night Turin
Async code on kotlin: rx java or/and coroutines - Kotlin Night Turin
 
Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012Continuation Passing Style and Macros in Clojure - Jan 2012
Continuation Passing Style and Macros in Clojure - Jan 2012
 
Clean code with google guava jee conf
Clean code with google guava jee confClean code with google guava jee conf
Clean code with google guava jee conf
 
Google Guava
Google GuavaGoogle Guava
Google Guava
 
Benefits of Kotlin
Benefits of KotlinBenefits of Kotlin
Benefits of Kotlin
 
java 8 Hands on Workshop
java 8 Hands on Workshopjava 8 Hands on Workshop
java 8 Hands on Workshop
 
Kotlin class
Kotlin classKotlin class
Kotlin class
 

Similar to The Groovy Puzzlers – The Complete 01 and 02 Seasons

Groovy puzzlers jug-moscow-part 2
Groovy puzzlers jug-moscow-part 2Groovy puzzlers jug-moscow-part 2
Groovy puzzlers jug-moscow-part 2
Evgeny Borisov
 
The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)
GroovyPuzzlers
 
Stupid Awesome Python Tricks
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python Tricks
Bryan Helmig
 
Groovy grails types, operators, objects
Groovy grails types, operators, objectsGroovy grails types, operators, objects
Groovy grails types, operators, objects
Husain Dalal
 
The groovy puzzlers (as Presented at Gr8Conf US 2014)
The groovy puzzlers (as Presented at Gr8Conf US 2014)The groovy puzzlers (as Presented at Gr8Conf US 2014)
The groovy puzzlers (as Presented at Gr8Conf US 2014)
GroovyPuzzlers
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
Arturo Herrero
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
André Faria Gomes
 
Beautiful python - PyLadies
Beautiful python - PyLadiesBeautiful python - PyLadies
Beautiful python - PyLadies
Alicia Pérez
 
Lập trình Python cơ bản
Lập trình Python cơ bảnLập trình Python cơ bản
Lập trình Python cơ bản
Nguyen Thi Lan Phuong
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
진성 오
 
Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)
Cody Engel
 
Swift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdfSwift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdf
JkPoppy
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
Christian Baranowski
 
Monadologie
MonadologieMonadologie
Monadologie
league
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
Christopher Spring
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
Scott Leberknight
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
Eugene Zharkov
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
Joe Morgan
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
Eduard Tomàs
 
Oh Composable World!
Oh Composable World!Oh Composable World!
Oh Composable World!
Brian Lonsdorf
 

Similar to The Groovy Puzzlers – The Complete 01 and 02 Seasons (20)

Groovy puzzlers jug-moscow-part 2
Groovy puzzlers jug-moscow-part 2Groovy puzzlers jug-moscow-part 2
Groovy puzzlers jug-moscow-part 2
 
The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)The groovy puzzlers (as Presented at JavaOne 2014)
The groovy puzzlers (as Presented at JavaOne 2014)
 
Stupid Awesome Python Tricks
Stupid Awesome Python TricksStupid Awesome Python Tricks
Stupid Awesome Python Tricks
 
Groovy grails types, operators, objects
Groovy grails types, operators, objectsGroovy grails types, operators, objects
Groovy grails types, operators, objects
 
The groovy puzzlers (as Presented at Gr8Conf US 2014)
The groovy puzzlers (as Presented at Gr8Conf US 2014)The groovy puzzlers (as Presented at Gr8Conf US 2014)
The groovy puzzlers (as Presented at Gr8Conf US 2014)
 
Functional Programming with Groovy
Functional Programming with GroovyFunctional Programming with Groovy
Functional Programming with Groovy
 
Introduction to Groovy
Introduction to GroovyIntroduction to Groovy
Introduction to Groovy
 
Beautiful python - PyLadies
Beautiful python - PyLadiesBeautiful python - PyLadies
Beautiful python - PyLadies
 
Lập trình Python cơ bản
Lập trình Python cơ bảnLập trình Python cơ bản
Lập trình Python cơ bản
 
Swift 함수 커링 사용하기
Swift 함수 커링 사용하기Swift 함수 커링 사용하기
Swift 함수 커링 사용하기
 
Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)Privet Kotlin (Windy City DevFest)
Privet Kotlin (Windy City DevFest)
 
Swift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdfSwift 5.1 Language Guide Notes.pdf
Swift 5.1 Language Guide Notes.pdf
 
SDC - Einführung in Scala
SDC - Einführung in ScalaSDC - Einführung in Scala
SDC - Einführung in Scala
 
Monadologie
MonadologieMonadologie
Monadologie
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Elm: give it a try
Elm: give it a tryElm: give it a try
Elm: give it a try
 
ES6 patterns in the wild
ES6 patterns in the wildES6 patterns in the wild
ES6 patterns in the wild
 
EcmaScript unchained
EcmaScript unchainedEcmaScript unchained
EcmaScript unchained
 
Oh Composable World!
Oh Composable World!Oh Composable World!
Oh Composable World!
 

More from Baruch Sadogursky

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
Baruch Sadogursky
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
Baruch Sadogursky
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018
Baruch Sadogursky
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
Baruch Sadogursky
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018
Baruch Sadogursky
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Baruch Sadogursky
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018
Baruch Sadogursky
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
Baruch Sadogursky
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Baruch Sadogursky
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
Baruch Sadogursky
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
Baruch Sadogursky
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Baruch Sadogursky
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
Baruch Sadogursky
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel Strategy
Baruch Sadogursky
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at Scale
Baruch Sadogursky
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
Baruch Sadogursky
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Baruch Sadogursky
 

More from Baruch Sadogursky (20)

DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
DevOps Patterns & Antipatterns for Continuous Software Updates @ NADOG April ...
 
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
DevOps Patterns & Antipatterns for Continuous Software Updates @ DevOps.com A...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Oracle Code NY...
 
Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018Data driven devops as presented at QCon London 2018
Data driven devops as presented at QCon London 2018
 
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
A Research Study Into DevOps Bottlenecks as presented at Oracle Code LA 2018
 
Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018Java Puzzlers NG S03 a DevNexus 2018
Java Puzzlers NG S03 a DevNexus 2018
 
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes MeetupsWhere the Helm are your binaries? as presented at Canada Kubernetes Meetups
Where the Helm are your binaries? as presented at Canada Kubernetes Meetups
 
Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018Data driven devops as presented at Codemash 2018
Data driven devops as presented at Codemash 2018
 
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018A Research Study into DevOps Bottlenecks as presented at Codemash 2018
A Research Study into DevOps Bottlenecks as presented at Codemash 2018
 
Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017Best Practices for Managing Docker Versions as presented at JavaOne 2017
Best Practices for Managing Docker Versions as presented at JavaOne 2017
 
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...Troubleshooting & Debugging Production Microservices in Kubernetes as present...
Troubleshooting & Debugging Production Microservices in Kubernetes as present...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at Devoxx 2017
 
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
Amazon Alexa Skills vs Google Home Actions, the Big Java VUI Faceoff as prese...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at DevOps Days Be...
 
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
Java Puzzlers NG S02: Down the Rabbit Hole as it was presented at The Pittsbu...
 
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
DevOps @Scale (Greek Tragedy in 3 Acts) as it was presented at The Pittsburgh...
 
Let’s Wing It: A Study in DevRel Strategy
 Let’s Wing It: A Study in DevRel Strategy Let’s Wing It: A Study in DevRel Strategy
Let’s Wing It: A Study in DevRel Strategy
 
Log Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at ScaleLog Driven First Class Customer Support at Scale
Log Driven First Class Customer Support at Scale
 
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
[Webinar] The Frog And The Butler: CI Pipelines For Modern DevOps
 
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
Patterns and antipatterns in Docker image lifecycle as was presented at DC Do...
 

Recently uploaded

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
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
SOCRadar
 
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
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
Peter Muessig
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
Rakesh Kumar R
 
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
 
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
 
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
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
Yara Milbes
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Neo4j
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
Green Software Development
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
Hironori Washizaki
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
pavan998932
 
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
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
Peter Muessig
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
Rakesh Kumar R
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
Philip Schwarz
 

Recently uploaded (20)

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
 
socradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdfsocradar-q1-2024-aviation-industry-report.pdf
socradar-q1-2024-aviation-industry-report.pdf
 
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 ⚡️
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling ExtensionsUI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
UI5con 2024 - Boost Your Development Experience with UI5 Tooling Extensions
 
How to write a program in any programming language
How to write a program in any programming languageHow to write a program in any programming language
How to write a program in any programming language
 
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
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
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
 
SMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API ServiceSMS API Integration in Saudi Arabia| Best SMS API Service
SMS API Integration in Saudi Arabia| Best SMS API Service
 
Atelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissancesAtelier - Innover avec l’IA Générative et les graphes de connaissances
Atelier - Innover avec l’IA Générative et les graphes de connaissances
 
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, FactsALGIT - Assembly Line for Green IT - Numbers, Data, Facts
ALGIT - Assembly Line for Green IT - Numbers, Data, Facts
 
SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024SWEBOK and Education at FUSE Okinawa 2024
SWEBOK and Education at FUSE Okinawa 2024
 
What is Augmented Reality Image Tracking
What is Augmented Reality Image TrackingWhat is Augmented Reality Image Tracking
What is Augmented Reality Image Tracking
 
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
 
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s EcosystemUI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
UI5con 2024 - Keynote: Latest News about UI5 and it’s Ecosystem
 
Fundamentals of Programming and Language Processors
Fundamentals of Programming and Language ProcessorsFundamentals of Programming and Language Processors
Fundamentals of Programming and Language Processors
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Hand Rolled Applicative User Validation Code Kata
Hand Rolled Applicative User ValidationCode KataHand Rolled Applicative User ValidationCode Kata
Hand Rolled Applicative User Validation Code Kata
 

The Groovy Puzzlers – The Complete 01 and 02 Seasons

  • 1.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16. 1. Two entertaining guys on stage
  • 17.
  • 18. 1. Two entertaining guys on stage 2. Funny Puzzling questions 3. You think and vote 4. Lots of T-shirts flying in the air 5. Official twitter handle! groovypuzzlers
  • 19.
  • 21.
  • 22.
  • 23.
  • 24. class Conference {def name; def year} def gr = new Conference(name: 'Greach', year: 2014) gr.each {println it}
  • 25.
  • 26.
  • 27.
  • 29.
  • 30. (-3).abs() int value = -3 value.abs()
  • 31.
  • 33.
  • 34.
  • 35. -3 Caught: java.lang.NullPointerException: Cannot invoke method abs() on null object java.lang.NullPointerException: Cannot invoke method abs() on null object at AbsolutelyGroovy.run(AbsolutelyGroovy.groovy:7) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134) println (-3).abs()
  • 36. “All problems in computer science can be solved by another pair of parentheses” John McCarthy, the inventor of LISP
  • 37. println ((-3).abs()) int value = -3 println value.abs()
  • 38.
  • 39.
  • 40. 'a'..'z'.each { println it } B. NoSuchMethodError C. z D. Won’t run A. a b c . . . z
  • 41.
  • 42. You knew it, right? ('a'..'z').each { println it }
  • 43.
  • 44.
  • 45. List<Integer> list = [56, '9', 74] def max = list.max { item -> (item < 50) ? item : null } println max
  • 46. List<Integer> list = [56, '9', 74] def max = list.max { item -> (item < 50) ? item : null } println max
  • 47. >groovysh (('9' as Character) as Integer) ===> 57
  • 48. List<Integer> list = [56, 57, 74] def max = list.max { item -> (item < 50) ? item : null } println max
  • 49.
  • 50. List<Integer> list = [56, '9', 74] def max = list.max { item -> (item < 50) ? item : null } println max
  • 51.
  • 52. def random = new Random() def randomList = [] 0..10.each {randomList << random.nextInt()} assert randomList.max{ null } == randomList[0]
  • 53.
  • 54.
  • 55. def x = int println x if ((x = long)) { println x } if (x = boolean ) { println x }
  • 56. def x = int println x if ((x = long)) { println x } if (x = boolean ) { println x }
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62. def key = 'x' def map = [key: 'treasure'] def value = map.get(key) println value
  • 63. def key = 'x' def map = [key: 'treasure'] def value = map.get(key) println value
  • 64.
  • 65.
  • 66. 1.def map = [(key): 'treasure'] 2.map.put(key, 'treasure') 3.map."$key" = 'treasure' 4.map[key] = 'treasure'
  • 67.
  • 68. def map = [2: 'treasure'] def key = 2 def value = map."$key" println value
  • 69. def map = [2: 'treasure'] def key = 2 def value = map."$key" println value
  • 70.
  • 71. def map = [2: 'treasure'] println map.keySet().first().class.name java.lang.Integer
  • 72.
  • 73.
  • 74. @groovy.transform.InheritConstructors class TreaayeMap extends HashMap { } TreaayeMap a = [5] TreaayeMap b = [6] println "${a.getClass()} ${a.equals(b)}"
  • 75.
  • 76.
  • 77.
  • 81. TreaayeMap a = [5] @groovy.transform.InheritConstructors class TreaayeMap extends HashMap { }
  • 82. TreaayeMap a = [5] @groovy.transform.InheritConstructors class TreaayeMap extends HashMap { } /** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and the default load factor (0.75). * * @param initialCapacity the initial capacity. * @throws IllegalArgumentException if the initial capacity is negative. */ public HashMap(int initialCapacity)
  • 83.
  • 84.
  • 85.
  • 86.
  • 87. A. def beast = '6' * Math.PI B. def beast = '6' * '3' C. def beast = '667' – 1 D. def beast = '6' + '6' + 0 + 6
  • 88.
  • 89. def beast = '6' * Math.PI
  • 90. def beast = '6' * 3.1415926…
  • 91.
  • 92. /** * Repeat a String a certain number of times. * * @param self a String to be repeated * @param factor the number of times the String should be repeated * @return a String composed of a repetition * @throws IllegalArgumentException if the number of repetitions is &lt; 0 * @since 1.0 */ public static String multiply(String self, Number factor) { int size = factor.intValue(); … }
  • 93. def beast = '6' * 3.1415926…
  • 94. def beast = '6' * 3
  • 95. B. def beast = '6' * '3' C. def beast = '667' – 1 D. def beast = '6' + '6' + 0 + 6
  • 96. B. def beast = '6' * '3' C. def beast = '667' – 1 D. def beast = '6' + '6' + (0 + 6)
  • 97. B. def beast = '6' * '3' C. def beast = '667' – 1 D. def beast = '6' + '6' + (0 + 6) Yup, I am watching you!
  • 98.
  • 99.
  • 100. class THERE_CAN_BE_ONLY_ONE { } class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class clazz = THERE_CAN_BE_ONLY_ONE return clazz.newInstance() } } println new MacLeod().THERE_CAN_BE_ONLY_ONE
  • 101. class THERE_CAN_BE_ONLY_ONE { } class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class clazz = THERE_CAN_BE_ONLY_ONE return clazz.newInstance() } } println new MacLeod().THERE_CAN_BE_ONLY_ONE A. Won't start B. No such property: THERE_CAN_BE_ONLY_ONE for class: MacLeod C. THERE_CAN_BE_ONLY_ONE@3d74bf60 D. Another Exception
  • 102.
  • 104.
  • 105. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class clazz = THERE_CAN_BE_ONLY_ONE return clazz.newInstance() } }
  • 106. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class clazz = getTHERE_CAN_BE_ONLY_ONE() return clazz.newInstance() } }
  • 107.
  • 108. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class<THERE_CAN_BE_ONLY_ONE> clazz = THERE_CAN_BE_ONLY_ONE.class return clazz.newInstance() } }
  • 109.
  • 110. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class<THERE_CAN_BE_ONLY_ONE> clazz = getTHERE_CAN_BE_ONLY_ONE().class return clazz.newInstance() } }
  • 111.
  • 112. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class<THERE_CAN_BE_ONLY_ONE> clazz = (THERE_CAN_BE_ONLY_ONE as Class) return clazz.newInstance() } }
  • 113.
  • 114. class MacLeod { THERE_CAN_BE_ONLY_ONE getTHERE_CAN_BE_ONLY_ONE() { Class<THERE_CAN_BE_ONLY_ONE> clazz = (getTHERE_CAN_BE_ONLY_ONE() as Class) return clazz.newInstance() } }
  • 115.
  • 116.
  • 117.
  • 118. class Kitty { def fur } def kitties = [new Kitty(fur: 'soft'),new Kitty(fur: 'warm'),new Kitty(fur: 'purr') ] println kitties.collect { it.fur } println kitties*.fur println kitties.fur
  • 119.
  • 120. class Kitty { def fur } def kitties println kitties.collect { it.fur } println kitties*.fur println kitties.fur
  • 121.
  • 122. class Kitty { def fur } def kitties println kitties.fur
  • 123. class Kitty { def fur } def kitties println kitties.fur
  • 124. class Kitty { def fur } def kitties println kitties.collect { it.fur }
  • 125. class Kitty { def fur } def kitties println kitties.collect { it.fur } public static Collection asCollection(Object value) { if (value == null) { return Collections.EMPTY_LIST; } … }
  • 126. class Kitty { def fur } def kitties println kitties*.fur
  • 127. class Kitty { def fur } def kitties println kitties*.fur
  • 128. class Kitty { def fur } def kitties println kitties*.fur
  • 130.
  • 131.
  • 132. ArrayList<String> expendables = ['Arnold', 'Chuck', 'Sylvester'] def expendable = //someone from the list for(String hero in expendables) { if(hero == expendable){ expendables.remove(hero) } } println expendables
  • 133. ArrayList<String> expendables = ['Arnold', 'Chuck', 'Sylvester'] def expendable = //someone from the list for(String hero in expendables) { if(hero == expendable){ expendables.remove(hero) } } println expendables A.Can't avoid CME B.Arnold C.Chuck D.Sylvester Which one won’t cause a ConcurrentModificationException?
  • 134.
  • 135.
  • 136.
  • 137. List expendables = Arrays.asList(new String[]{"Arnold", "Chuck", "Sylvester"}); String expendable = "Chuck"; Iterator iterator = expendables.iterator(); while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { expendables.remove(hero); } }
  • 138. while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { // expendables.remove(hero); } }
  • 139. while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { // expendables.remove(hero); } } public E next() { checkForComodification(); … cursor = i + 1; } Modifications are only checked in the next cycle Getting ready for hasNext() check in the next cyclepublic boolean hasNext() { return cursor != size(); } Exit on last element +1 == size()
  • 140. while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { // expendables.remove(hero); } } public E next() { checkForComodification(); … cursor = i + 1; } public boolean hasNext() { return cursor != size(); } After Sylvester cursor is 3 And size is 3 as well All good. Now let’s mess with it.
  • 141. while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { expendables.remove(hero); } } public E next() { checkForComodification(); … cursor = i + 1; } public boolean hasNext() { return cursor != size(); } After Chuck the cursor is 2 And now the size now is 2! It won’t get to the next() to run checkForComodification! Then we remove the element
  • 142.
  • 143. while(iterator.hasNext()) { String hero = (String)iterator.next(); if(hero.equals(expendable)) { expendables.remove(hero); } } public E next() { checkForComodification(); … cursor = i + 1; } public boolean hasNext() { return cursor != size(); } After Sylvester the cursor is 3 But the size now is 2! It will go to another loop and fail on checkForComodification! Then we remove the element
  • 144.
  • 145.
  • 146. Closure whodunit() { { 'The butler did it.' } } println whodunit()
  • 147.
  • 148. Closure whodunit() { { -> 'The butler did it.' } }
  • 149.
  • 150.
  • 151. def range = 1.0..10.0 assert range.contains(5.0) println range.contains(5.6)
  • 152.
  • 153.
  • 154.
  • 155.
  • 156. Iterator iterator = (1.0..10.0).iterator() while (iterator.hasNext()) { print "${iterator.next()} " } 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0
  • 157.
  • 158.
  • 159.
  • 160.
  • 161.
  • 163.
  • 164.
  • 165.
  • 166.
  • 167.
  • 168.
  • 169.
  • 170.
  • 171.
  • 172. boolean isPrime(def x) { if (x == 2) return true int limit = Math.sqrt(x) + 1 (2..limit).each { if (x % it == 0) { return false } } true } println isPrime("4" as Double)
  • 173.
  • 174. boolean isPrime(def x) { if (x == 2) return true int limit = Math.sqrt(x) + 1 (2..limit).each { if (x % it == 0) { return false } } true } println isPrime("4" as Double)
  • 175. boolean isPrime(def x) { if (x == 2) return true int limit = Math.sqrt(x) + 1 (2..limit).each { if (x % it == 0) { return false } } true } println isPrime("4" as Double)
  • 176.
  • 177.
  • 178.
  • 179.
  • 180.
  • 181.
  • 183.
  • 184.
  • 185.
  • 186. A. [[2, 3, 5], [2, 4, 8], [42, 73, 2147483647, 0]] B. Won't run C. [[null, null, null, 5]] D.null
  • 187.
  • 188.
  • 189.
  • 190.
  • 191.
  • 192. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[] *Yes, we know, it's not Elvis' song.
  • 193. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]
  • 194.
  • 195. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] jailhouseRock?:[] + loveMeTender?:[] + rockAroundTheClock?:[]
  • 196. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] jailhouseRock?:[null]?:[] + rockAroundTheClock?:[]
  • 197. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] jailhouseRock?:[null]?:[1,2,3]?:[]
  • 198. def jailhouseRock def loveMeTender def rockAroundTheClock = [1,2,3] [null]
  • 200.
  • 201.
  • 202. double value = 3 println "$value.14".isDouble()
  • 203.
  • 204.
  • 205.
  • 206. double value = 3 println "$value.14".isDouble()
  • 207.
  • 208.
  • 209.
  • 210.
  • 211. List<Long> list = [1,2,3] def now = new Date() list << now println list
  • 212. List<Long> list = [1,2,3] def now = new Date() list << now println list
  • 213.
  • 214.
  • 215.
  • 216.
  • 217. List<Long> list = [1,2,3] def now = new Date() list << now list << 'foo' println list*.class.name [java.lang.Long, java.lang.Long, java.lang.Long, java.util.Date, java.lang.String]
  • 218.
  • 219.
  • 220. class VanHalen { public static jump() { "Here are the ${lyrics()}" } def methodMissing(String name, def args) { 'lyrics' } } println VanHalen.jump()
  • 221. class VanHalen { public static jump() { "Here are the ${lyrics()}" } def methodMissing(String name, def args) { 'lyrics' } }
  • 222.
  • 223.
  • 224.
  • 225.
  • 226. class VanHalen { public static jump() { "Here are the ${lyrics()}" } static $static_methodMissing(String name, def args) { 'lyrics' } } println VanHalen.jump()
  • 227. class VanHalen { public jump() { "Here are the ${lyrics()}" } def methodMissing(String name, def args) { 'lyrics' } } println new VanHalen().jump()
  • 228.
  • 229. class Invite { int attending = 1 } def invite = new Invite() def attendees = (invite.attending) +1 println attendees
  • 230. class Invite { int attending = 1 } def invite = new Invite() def attendees = (invite.attending) +1 println attendees
  • 231.
  • 232.
  • 233.
  • 234.
  • 235.
  • 236. def attendees = (new Invite().attending) + 1 println attendees def invite = new Invite() println (invite.attending +1)
  • 237.
  • 238.
  • 239. def back = 'back' def quotes = ["I'll be $back", "I'll be ${-> back}", "I'll be ${back}", "I'll be "+back] println quotes back = 'Bach' println quotes
  • 240.
  • 241.
  • 242. def back = 'back' def quotes = ["I'll be $back", "I'll be ${-> back}", "I'll be ${back}", "I'll be "+back]
  • 243. def back = 'back' def quotes = ["I'll be $back", "I'll be ${-> back}", "I'll be ${back}", "I'll be "+back] That is the only closure
  • 244.
  • 245.
  • 246. String truth = 'false' boolean groovyTruth = truth println groovyTruth
  • 247. String truth = 'false' boolean groovyTruth = truth println groovyTruth
  • 248.
  • 249.
  • 250.
  • 251.
  • 252.
  • 253. assert 1L == 1 println 1L.equals(1)
  • 254.
  • 255.
  • 256.
  • 257.
  • 258.
  • 260. trait Public { public String property = "I am all public!" } class Property implements Public {} Property publicProperty = new Property()
  • 261. trait Public { public String property = "I am all public!" } class Property implements Public {} Property publicProperty = new Property()
  • 262.
  • 263.
  • 264.
  • 266.
  • 267. def map = [metaClass: ‘frequency'] println "What's the $map.metaClass, Frederic?"
  • 268.
  • 269.
  • 271.
  • 272.
  • 273.
  • 274. 1. Write readable code 2. Comment neat tricks 3. Sometimes it is just a bug 4. Use static code analysis (intellij IDEA!) 5. Rtfm 6. Don’t code like my brother
  • 275. We have just started! (may end up in proper uniform) Puzzlers? Gotchas? Fetal position inducing behavior? - puzzlers jfrog.com - Groovypuzzlers
  • 276.
  • 277. Positive feedback? Praise us on twitter groovypuzzlers - Groovypuzzlers - ryanvanderwerf - jbaruch Negative feeback? /dev/null

Editor's Notes

  1. CURRENT – JB NEXT - FRED 2001 OracleWorld: Joshua Bloch, Neal Gafter
  2. CURRENT – JB NEXT - FRED The Car Show (1977-2012) Click and Clack, the Tappet Brothers - Tom and Ray Magliozzi
  3. CURRENT – JB NEXT - FRED
  4. CURRENT – JB NEXT - FRED
  5. CURRENT – JB NEXT - FRED
  6. CURRENT – JB NEXT - FRED
  7. CURRENT – JB NEXT - FRED
  8. CURRENT – FRED NEXT - FRED
  9. CURRENT – FRED NEXT - FRED
  10. CURRENT – FRED NEXT - FRED
  11. CURRENT – FRED NEXT - FRED
  12. CURRENT – FRED NEXT - JB
  13. CURRENT – FRED NEXT - JB
  14. CURRENT – FRED NEXT - JB
  15. CURRENT – FRED NEXT - JB
  16. CURRENT – FRED NEXT - JB
  17. CURRENT – FRED NEXT - JB
  18. CURRENT – FRED NEXT - JB
  19. CURRENT – FRED NEXT - JB
  20. CURRENT – FRED NEXT - JB
  21. CURRENT – FRED NEXT - JB
  22. CURRENT – FRED NEXT - JB
  23. CURRENT – FRED NEXT - JB
  24. CURRENT – FRED NEXT - JB
  25. CURRENT – JB NEXT - FRED
  26. CURRENT – JB NEXT - FRED
  27. CURRENT – JB NEXT - FRED
  28. CURRENT – JB NEXT - FRED
  29. CURRENT – JB NEXT - FRED
  30. CURRENT – JB NEXT - FRED
  31. CURRENT – JB NEXT - FRED
  32. CURRENT – JB NEXT - FRED
  33. CURRENT – JB NEXT - FRED
  34. CURRENT – JB NEXT - FRED
  35. CURRENT – FRED NEXT - JB
  36. CURRENT – FRED NEXT - JB
  37. CURRENT – FRED NEXT - JB
  38. CURRENT – FRED NEXT - JB
  39. CURRENT – FRED NEXT - JB
  40. CURRENT – FRED NEXT - JB
  41. CURRENT – FRED NEXT - JB
  42. CURRENT – FRED NEXT - JB
  43. CURRENT – FRED NEXT - JB
  44. CURRENT – FRED NEXT - JB
  45. CURRENT – FRED NEXT - JB
  46. CURRENT – FRED NEXT - JB
  47. CURRENT – FRED NEXT - JB
  48. CURRENT – JB NEXT - FRED
  49. CURRENT – JB NEXT - FRED
  50. CURRENT – JB NEXT - FRED
  51. CURRENT – JB NEXT - FRED
  52. CURRENT – JB NEXT - FRED
  53. CURRENT – JB NEXT - FRED
  54. https://github.com/SerCeMan
  55. @tolkv
  56. @tolkv
  57. @tolkv
  58. @tolkv
  59. @tolkv
  60. @tolkv
  61. @tolkv
  62. Normal operation: exists after element 2, when cursor is already 3 and size is 3
  63. With deletion exits after 2, because cursor is on 2 and size became 2!
  64. With deletion exits after 2, because cursor is on 2 and size became 2!
  65. CURRENT – FRED NEXT - JB
  66. CURRENT – FRED NEXT - JB
  67. CURRENT – FRED NEXT - JB
  68. CURRENT – FRED NEXT - JB
  69. CURRENT – FRED NEXT - JB
  70. CURRENT – JB NEXT - FRED
  71. CURRENT – JB NEXT - FRED
  72. CURRENT – JB NEXT - FRED
  73. CURRENT – JB NEXT - FRED
  74. CURRENT – JB NEXT - FRED
  75. CURRENT – JB NEXT - FRED
  76. CURRENT – JB NEXT - FRED
  77. CURRENT – JB NEXT - FRED
  78. CURRENT – JB NEXT - FRED
  79. CURRENT – JB NEXT - FRED
  80. CURRENT – JB NEXT - FRED
  81. CURRENT – FRED NEXT - JB
  82. CURRENT – FRED NEXT - JB
  83. CURRENT – FRED NEXT - JB
  84. CURRENT – FRED NEXT - JB
  85. CURRENT – FRED NEXT - JB
  86. CURRENT – FRED NEXT - JB
  87. CURRENT – FRED NEXT - JB
  88. CURRENT – FRED NEXT - JB
  89. CURRENT – FRED NEXT - JB
  90. CURRENT – FRED NEXT - JB
  91. CURRENT – JB NEXT - FRED
  92. CURRENT – JB NEXT - FRED
  93. CURRENT – JB NEXT - FRED
  94. CURRENT – JB NEXT - FRED
  95. CURRENT – JB NEXT - FRED
  96. CURRENT – JB NEXT - FRED
  97. CURRENT – JB NEXT - FRED
  98. CURRENT – JB NEXT - FRED
  99. CURRENT – JB NEXT - FRED
  100. CURRENT – JB NEXT - FRED
  101. CURRENT – JB NEXT - FRED
  102. CURRENT – JB NEXT - FRED
  103. CURRENT – JB NEXT - FRED
  104. CURRENT – JB NEXT - FRED
  105. CURRENT – JB NEXT - FRED
  106. CURRENT – JB NEXT - FRED
  107. CURRENT – JB NEXT - FRED
  108. CURRENT – JB NEXT - FRED
  109. CURRENT – JB NEXT - FRED
  110. CURRENT – JB NEXT - FRED
  111. CURRENT – JB NEXT - FRED
  112. CURRENT – JB NEXT - FRED
  113. CURRENT – FRED NEXT - JB
  114. CURRENT – FRED NEXT - JB
  115. CURRENT – FRED NEXT - JB
  116. CURRENT – FRED NEXT - JB
  117. CURRENT – FRED NEXT - JB
  118. CURRENT – FRED NEXT - JB
  119. CURRENT – FRED NEXT - JB
  120. CURRENT – FRED NEXT - JB
  121. CURRENT – FRED NEXT - JB
  122. CURRENT – FRED NEXT - JB (1983)
  123. CURRENT – FRED NEXT - JB
  124. CURRENT – FRED NEXT - JB
  125. CURRENT – FRED NEXT - JB
  126. CURRENT – FRED NEXT - JB
  127. CURRENT – FRED NEXT - JB
  128. CURRENT – FRED NEXT - JB
  129. CURRENT – FRED NEXT - JB
  130. CURRENT – FRED NEXT - JB
  131. CURRENT – FRED
  132. CURRENT – FRED
  133. CURRENT – FRED
  134. CURRENT – FRED
  135. CURRENT – FRED
  136. CURRENT – FRED
  137. CURRENT – FRED
  138. CURRENT – FRED
  139. CURRENT – FRED
  140. CURRENT – FRED
  141. Cedric
  142. Cedric
  143. Cedric
  144. @@AndreyHihlovski
  145. @@AndreyHihlovski
  146. CURRENT – JB NEXT - JB
  147. CURRENT – JB NEXT - JB
  148. CURRENT – JB NEXT - JB
  149. CURRENT – JB NEXT - JB
  150. CURRENT – JB NEXT - JB
  151. CURRENT – JB NEXT - JB
  152. CURRENT – JB NEXT - JB
  153. CURRENT – JB NEXT - FRED 1993
  154. CURRENT – JB NEXT - FRED
  155. CURRENT – JB NEXT - FRED
  156. CURRENT – JB NEXT - FRED
  157. CURRENT – JB NEXT - FRED
  158. CURRENT – JB NEXT - FRED
  159. CURRENT – JB NEXT - FRED
  160. CURRENT – JB NEXT - FRED
  161. CURRENT – JB NEXT - FRED
  162. CURRENT – JB NEXT - FRED
  163. CURRENT – JB NEXT - FRED
  164. CURRENT – JB NEXT - FRED
  165. CURRENT – JB NEXT - FRED
  166. CURRENT – JB NEXT - FRED
  167. 1985 CURRENT – FRED NEXT - JB
  168. CURRENT – FRED NEXT - JB
  169. CURRENT – FRED NEXT - JB
  170. CURRENT – FRED NEXT - JB
  171. CURRENT – FRED NEXT - JB
  172. CURRENT – FRED NEXT - JB
  173. CURRENT – FRED NEXT - JB
  174. CURRENT – FRED NEXT - JB
  175. CURRENT – FRED NEXT - JB
  176. CURRENT – FRED NEXT - JB
  177. CURRENT – FRED NEXT - JB
  178. CURRENT – FRED NEXT - JB