groovy workshop à mix-it 2013
DESCRIPTION
Quelques slides de présentation lors du workshop Groovy à la conférence Mix-IT à Lyon, en 2013.TRANSCRIPT
![Page 1: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/1.jpg)
![Page 2: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/2.jpg)
Groovy, les mains dans le cambouis
Guillaume LaforgeGroovy Project ManagerSpringSource / VMware
![Page 3: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/3.jpg)
Guillaume Laforge @glaforge
http://glaforge.appspot.com http://gplus.to/glaforge
![Page 4: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/4.jpg)
GVM, Groovy enVironment Managerpour installer facilement Groovy
Grails, Gradle, Griffon, Vert.x
Installation de GVM, Groovy et Gradle
![Page 6: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/6.jpg)
Installation de GVM, Groovy et Gradle
• Installation de GVM
• Installation de Groovy
• Installtion de Gradle
curl -‐s get.gvmtool.net | bash
gvm install groovy
gvm install gradle
![Page 7: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/7.jpg)
Vérifiez votre installation$ groovy -‐-‐version
Groovy Version: 2.1.3 JVM: 1.7.0_09 Vendor: Oracle Corporation OS: Mac OS X
$ gradle -‐-‐version
-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐Gradle 1.5-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐
Gradle build time: mercredi 27 mars 2013 13 h 51 UTCGroovy: 1.8.6Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012Ivy: 2.2.0JVM: 1.7.0_09 (Oracle Corporation 23.5-‐b02)OS: Mac OS X 10.8.3 x86_64
![Page 8: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/8.jpg)
Quelques bases, pour apprendre Groovy
A la découvertede Groovy...
![Page 9: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/9.jpg)
L’artillerie Groovy-esque
Commande groovy
Compilateur groovyc
REPL groovysh
Console Swing groovyConsole
![Page 10: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/10.jpg)
« Groovy, c’est comme Java,
mais sans le costume
trois pièces »
![Page 11: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/11.jpg)
Une personne... sauce Javapublic class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String greet() { return "Hello, my name is " + name; }}
![Page 12: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/12.jpg)
Une personne... sauce Javapublic class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String greet() { return "Hello, my name is " + name; }}
Les points-virgules, c’est pour les Mickeys !
![Page 13: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/13.jpg)
Une personne... sauce Javapublic class Person { private String name public String getName() { return name } public void setName(String name) { this.name = name } public String greet() { return "Hello, my name is " + name }}
![Page 14: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/14.jpg)
Une personne... sauce Javapublic class Person { private String name public String getName() { return name } public void setName(String name) { this.name = name } public String greet() { return "Hello, my name is " + name }}
En Groovy, la visitbilité est public par défaut
![Page 15: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/15.jpg)
Une personne... sauce Java class Person { private String name String getName() { return name } void setName(String name) { this.name = name } String greet() { return "Hello, my name is " + name }}
![Page 16: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/16.jpg)
Une personne... sauce Java class Person { private String name String getName() { return name } void setName(String name) { this.name = name } String greet() { return "Hello, my name is " + name }}
Le return aussi est optionnel
![Page 17: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/17.jpg)
Une personne... sauce Java class Person { private String name String getName() { name } void setName(String name) { this.name = name } String greet() { "Hello, my name is " + name }}
![Page 18: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/18.jpg)
Une personne... sauce Java class Person { private String name String getName() { name } void setName(String name) { this.name = name } String greet() { "Hello, my name is " + name }}
Groovy a la notion de propriétés
![Page 19: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/19.jpg)
Une personne... sauce Java class Person { String name String greet() { "Hello, my name is " + name }}
![Page 20: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/20.jpg)
Une personne... sauce Java class Person { String name String greet() { "Hello, my name is " + name }}
Un langage sexy avec des GString
![Page 21: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/21.jpg)
Une personne... sauce Java class Person { String name String greet() { "Hello, my name is ${name}" }}
![Page 22: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/22.jpg)
Une personne... sauce Java class Person { String name String greet() { "Hello, my name is ${name}" }}
Reformattons tout ce beau bazar
![Page 23: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/23.jpg)
Une personne... sauce Groovy !
class Person { String name String greet() { "Hello, my name is ${name}" }}
![Page 24: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/24.jpg)
Une personne... sauce Groovy !
class Person { String name String greet() { "Hello, my name is ${name}" }}
public class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public String greet() { return "Hello, my name is " + name; }}
![Page 25: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/25.jpg)
Comment lui faire dire bonjour...
Person person = new Person();person.setName("Guillaume");
System.out.println(person.greet());
![Page 26: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/26.jpg)
Comment lui faire dire bonjour...
Person person = new Person();person.setName("Guillaume");
System.out.println(person.greet());
Sans points-virgules
![Page 27: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/27.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName("Guillaume")
System.out.println(person.greet())
![Page 28: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/28.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName("Guillaume")
System.out.println(person.greet())
println version raccourcie
![Page 29: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/29.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName("Guillaume")
println(person.greet())
![Page 30: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/30.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName("Guillaume")
println(person.greet())
sans parenthèses
![Page 31: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/31.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName "Guillaume"
println person.greet()
![Page 32: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/32.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.setName "Guillaume"
println person.greet()
notation d’accès aux propriétés
![Page 33: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/33.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.name = "Guillaume"
println person.greet()
![Page 34: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/34.jpg)
Comment lui faire dire bonjour...
Person person = new Person()person.name = "Guillaume"
println person.greet()
typage optionnel
![Page 35: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/35.jpg)
Comment lui faire dire bonjour...
def person = new Person()person.name = "Guillaume"
println person.greet()
![Page 36: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/36.jpg)
Comment lui faire dire bonjour...
def person = new Person()person.name = "Guillaume"
println person.greet()
constructeur avec paramètres nommés
![Page 37: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/37.jpg)
Comment lui faire dire bonjour...
def person = new Person(name: "Guillaume")
println person.greet()
![Page 38: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/38.jpg)
Comment lui faire dire bonjour...
def person = new Person(name: "Guillaume")
println person.greet()
un petit coup de reformat pour les yeux
![Page 39: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/39.jpg)
Comment lui faire dire bonjour...
def person = new Person(name: "Guillaume")
println person.greet()
![Page 40: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/40.jpg)
On va se faire la cloture...
![Page 41: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/41.jpg)
Closures — ou « clotures »
• Pas besoin d’attendre JDK 8 en 2014• Groovy a des closures depuis 2003 !
• C’est quoi une closure ?• bloc de code réutilisable• assignable dans une variable• qu’on peut passer en paramètre d’une méthode• pouvant prendre des arguments• y compris des valeurs par défaut
![Page 42: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/42.jpg)
Le défilé des collections
![Page 43: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/43.jpg)
Syntaxe spéciale pour les collectionsdef list = [1, 2, 4, 'a', 'b', 'c']assert list[3] == 'a'
list << 'd'assert list[6] == 'd'
def range = 1..10assert range.size() == 10
def map = [a: 1, b: 2, c: 3]assert map['b'] == 2assert map.b == 2
map['d'] = 'Mix'map.e = 'IT'assert [map.d, map['e']].join('-‐') == 'Mix-‐IT'
![Page 44: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/44.jpg)
Syntaxe spéciale pour les collectionsdef list = [1, 2, 4, 'a', 'b', 'c']assert list[3] == 'a'
list << 'd'assert list[6] == 'd'
def range = 1..10assert range.size() == 10
def map = [a: 1, b: 2, c: 3]assert map['b'] == 2assert map.b == 2
map['d'] = 'Mix'map.e = 'IT'assert [map.d, map['e']].join('-‐') == 'Mix-‐IT'
Liste
![Page 45: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/45.jpg)
Syntaxe spéciale pour les collectionsdef list = [1, 2, 4, 'a', 'b', 'c']assert list[3] == 'a'
list << 'd'assert list[6] == 'd'
def range = 1..10assert range.size() == 10
def map = [a: 1, b: 2, c: 3]assert map['b'] == 2assert map.b == 2
map['d'] = 'Mix'map.e = 'IT'assert [map.d, map['e']].join('-‐') == 'Mix-‐IT'
Liste
Range
![Page 46: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/46.jpg)
Syntaxe spéciale pour les collectionsdef list = [1, 2, 4, 'a', 'b', 'c']assert list[3] == 'a'
list << 'd'assert list[6] == 'd'
def range = 1..10assert range.size() == 10
def map = [a: 1, b: 2, c: 3]assert map['b'] == 2assert map.b == 2
map['d'] = 'Mix'map.e = 'IT'assert [map.d, map['e']].join('-‐') == 'Mix-‐IT'
Liste
Range
Map
![Page 47: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/47.jpg)
Vous avez vu le « power assert » de Groovy ?
def (e, m, c) = [123, 1, 3e9]
assert e == m * c * 2
![Page 48: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/48.jpg)
Vous avez vu le « power assert » de Groovy ?
def (e, m, c) = [123, 1, 3e9]
assert e == m * c * 2Assignation
multiple
![Page 49: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/49.jpg)
Vous avez vu le « power assert » de Groovy ?
def (e, m, c) = [123, 1, 3e9]
assert e == m * c * 2
Assertion failed:
assert e == m * c * 2 | | | | | | | | 1 | | 6E+9 | false| 3E+9 123 3E+9
Assignation multiple
![Page 50: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/50.jpg)
Vous avez vu le « power assert » de Groovy ?
def (e, m, c) = [123, 1, 3e9]
assert e == m * c * 2
Assertion failed:
assert e == m * c * 2 | | | | | | | | 1 | | 6E+9 | false| 3E+9 123 3E+9
Toutes les valeurs des
sous-expressions
Assignation multiple
![Page 51: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/51.jpg)
La magie de la méta-programmation
![Page 52: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/52.jpg)
Créer un projet GradleUtiliser le plugin Groovy
Bon, ben... c’est parti !
![Page 53: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/53.jpg)
![Page 54: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/54.jpg)
Créer un projet et appliquer le plugin Groovy
• Dans un nouveau répertoire projet, créer un fichier build.gradle, contenant :
apply plugin: 'groovy'
repositories { mavenCentral()}
dependencies { compile 'org.codehaus.groovy:groovy-‐all:2.1.3' testCompile 'org.spockframework:spock-‐core:0.7-‐groovy-‐2.0'}
![Page 55: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/55.jpg)
Créer un projet et appliquer le plugin Groovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
![Page 56: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/56.jpg)
Créer un projet et appliquer le plugin Groovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
Nos fichiers source Java & Groovy
![Page 57: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/57.jpg)
Créer un projet et appliquer le plugin Groovy
• Créer quelques répertoires :
• src/main/groovy
• src/test/groovy
Nos fichiers source Java & Groovy
Pour découvrir le framework de test Spock
![Page 58: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/58.jpg)
Créer un projet et appliquer le plugin Groovy
• Lister les tâches disponibles :
$ gradle tasks
![Page 59: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/59.jpg)
![Page 60: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/60.jpg)
Pour tester et builder notre projet
![Page 61: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/61.jpg)
Pour tester et builder notre projet
Générer la documentation
![Page 62: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/62.jpg)
Pour tester et builder notre projet
Générer la documentation
Pour lancer les tests
![Page 63: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/63.jpg)
Pour tester et builder notre projet
Générer la documentation
Pour lancer les tests
Faire un peu le ménage
![Page 64: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/64.jpg)
Spock : Enterprise test framework
![Page 65: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/65.jpg)
Questions & Réponses
![Page 66: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/66.jpg)
Merci ! @glaforge
http://glaforge.appspot.com http://gplus.to/glaforge
![Page 67: Groovy workshop à Mix-IT 2013](https://reader033.vdocument.in/reader033/viewer/2022060109/5558751bd8b42a8d018b5284/html5/thumbnails/67.jpg)
Crédits images• canon
http://uponamidnightdreary.com/wp-content/uploads/2011/12/AR22442.jpg
• costumehttp://cdn2.kebello.com/8235-thickbox/costume-3-pieces-ref-patrick.jpg
• mickeyhttp://4.bp.blogspot.com/-i9hzB7QYgq4/To9UufDo5dI/AAAAAAAAB2g/lKHHMm-KC68/s1600/f787ec3b56c3bd76_mickey-mouse.jpg
• gstringhttp://cdnb.lystit.com/photos/2012/11/23/dg-noir-gstring-product-1-5588280-166851249_large_flex.jpeg
• défiléhttp://www.lesreceptionstendances.com/wp-content/uploads/2012/07/organiser-un-d%C3%A9fil%C3%A9-de-mode-4.jpg
• fantasiahttp://images.wikia.com/disney/images/d/d8/Fantasia-disneyscreencaps.com-2363.jpg
• Spockhttp://images1.fanpop.com/images/photos/2500000/Zachary-Quinto-Spock-star-trek-2597267-2560-1921.jpg
• cloturehttp://www.lusitane.fr/Userfiles/image/cloture-beton-pedra%20(17).JPG