version PDF - Flash informatique

publicité
9
22.11.2011
FlashInformatique.epfl.ch
Concours étudiants
La solution
p/a EPFL - Domaine IT - Station 8 - CH 1015 Lausanne - tél. +41 21 69 322 11
Analyse
page 12
Feelin’ Groovy
Actualités
DIT-info
6
Maciej.Macowicz@epfl.ch, EPFL – Domaine IT - KIS, développeur Groovy
z Nouveau stagiaire à la Téléinformatique
z Nouvelles têtes au groupe Exploitation
VMWorld Copenhagen Fabien Figueras
& Eric Krejci
7
FlashiPhone: MobileIT François Roulet
10
Gutenberg, Helvetica et Steve Jobs
Laurent Kling
14
Eunis 2011 à Dublin en Irlande, en plein
dans les nuages ! Christian Zufferey
18
Analyse
Feelin’ Groovy
Maciej Macowicz
1
Petite introduction à la gestion
électronique de documents
Patricia Plaza Gruber
9
Mot-croisé: HÉBERGEMENT Julia Paolini,
Frédéric Rauss & Esteban Rosales
20
Comment faire?
Solution du concours ou Ada, Alan
et la pomme Appoline Raposo
12
Prochaines parutions
Yet another programming language for the JVM (Java Virtual
Machine), allows for agile programming on the Java platform.
In this article we first introduce
the context of the JVM languages, then we present Groovy
as it can be seen by Java developers. We conclude by sketching the libraries and frameworks
available within the Groovy ecosystem.
Groovy, un langage de programmation pour la JVM (machine
virtuelle Java), permet la programmation agile sur la plateforme Java. Dans l’article, nous
introduisons le contexte des
langages de la JVM, puis nous
présentons le langage Groovy du
point de vue d’un développeur
Java et énumérons les bibliothèques/frameworks disponibles
dans l’écosystème Groovy.
No Délai de rédaction Parution
10
01.12.11
20.12.11
1 12.01.12
31.01.12
2
09.02.12
28.02.12
tout public
public averti
expert
Le langage Java fut conçu par la société
Sun Microsystems dans les années 1990
en tant que langage de programmation
par objets moderne offrant la robustesse,
la gestion dynamique de la mémoire (ra-
masse-miettes) ainsi que les mécanismes
internes de programmation concurrente
(multi-threading).
Java est très portable (compiler une fois,
exécuter partout = Compile Once, Run
Everywhere) car il s'appuie sur la machine
virtuelle Java (JVM=Java Virtual Machine),
implémentée sur la plupart des architectures et systèmes d’exploitation. La première implémentation de Java (1.0) est
apparue chez Sun Microsystems en janvier 1996, nous en sommes actuellement à
la version 1.7.
Conçu dès le départ comme une plateforme de programmation universelle plutôt
qu’un simple langage de programmation,
doté de riches bibliothèques standard de
composants logiciels, Java a rapidement
gagné du terrain. Il s’est décliné en plusieurs
versions (profils), ciblant une vaste gamme
de matériels allant des dispositifs mobiles
(téléphones, smartphones) aux applications
Web critiques.
Au fil du temps, le langage a subi plusieurs
améliorations (généricité, annotations…)
et les bibliothèques standard se sont
considérablement enrichies en passant de
211 classes en version 1.0 de la plate-forme
Java à 3777 classes en version 1.6. En 2011
la plate-forme Java accompagnée d’innombrables bibliothèques de composants logiciels s’avère très complète.
Au début des années 2000, Java était largement enseigné et utilisé; il occupait la pre-
Feelin’ Groovy
mière place dans l’index TIOBE 1 avec 30 % de popularité; certains
parlaient alors de la fin de l’histoire des langages de programmation.
Langages de programmation agile
Les années 2000 ont amené la programmation agile, très attirante
pour les développeurs, ainsi que l’avènement de langages agiles
Python ou Ruby, plus dynamiques que Java. Les langages agiles
permettent de programmer naturellement et rapidement ce qu’on
a dans la tête au lieu de réfléchir comment transposer ce qu’on
a dans la tête pour que le compilateur comprenne enfin. Une
telle facilité de programmation repose sur un système de types
dynamique (on parle alors de duck typing, où toutes les propriétés
d’un objet sont déterminées au moment de son utilisation... par
analogie: si je vois un oiseau qui vole comme un canard, cancane
comme un canard, et nage comme un canard, alors j’appelle cet
oiseau un canard). À cela s’ajoutent les mécanismes de programmation fonctionnelle, permettant les manipulations de fonctions
par les programmes (contrairement à la programmation impérative ou objet, où la fonction peut seulement être appelée). Notons
que les langages de programmation agile sont souvent moins
performants à l’exécution que les langages statiques, la dynamique et la liberté laissée au développeur nécessitent de multiples
vérifications pendant l’exécution du programme; dans le cas de
langages statiques, la plupart des vérifications sont effectuées à
la compilation.
Langages pour la plate-forme Java
La plate-forme Java présente un grand intérêt (on y trouve tout ce
dont on peut avoir besoin), on a donc vu fleurir une panoplie de
langages de la JVM, de plus haut niveau que Java, permettant les
styles de programmation variés, et offrant l’accès aux composants
logiciels de la plate-forme.
Parmi ces langages, citons:
Jython et JRuby, portages de Python et Ruby,
Scala, langage statique, mixte objet-fonctionnel et doté d’un système de types très puissant,
3
4
5
1
2
Groovy, extension dynamique et fonctionnelle de Java, et
finalement
Clojure, un dialecte de Lisp.
À titre d’anecdote, mentionnons les implémentations d’Ada, de
Cobol, et même de Pascal pour la JVM 2.
Groovy 3 et Scala 4 représentent des objectifs de conception très
différents, nous en détaillerons quelques points. Scala est un langage académique (conçu à l’EPFL par l’équipe du Prof. Odersky),
mais très pragmatique. Conçu en tant que langage extensible
(scalable), Scala est censé couvrir un maximum de domaines
d’application et garantir de hautes performances à l’exécution.
Scala permet la programmation objet et fonctionnelle; statiquement typé, il est doté d’un système de types très évolué, permettant de réduire et simplifier le code source (moteur d’inférence
sur les types) et permet la surcharge des opérateurs. Sa syntaxe
est très épurée et élégante, mais très différente de Java; Scala
est interopérable avec Java, on peut aisément utiliser les classes
Java depuis Scala, mais l’utilisation dans l’autre sens est parfois
plus délicate. La bibliothèque standard de Scala étend la bibliothèque standard de Java et fournit les abstractions d’acteurs pour
la programmation concurrente. Finalement, Scala peut être utilisé
en tant que langage de programmation ou en tant que script, et
depuis quelques années gagne en popularité, dans l’index TIOBE il
arrive à la 50e place parmi tous les langages utilisés 5.
Groovy
Groovy est un langage créé par les développeurs pour les développeurs en tant que langage agile et dynamique pour la plateforme Java, doté de fonctionnalités inspirées par Python, Ruby
et Smalltalk, destiné aux développeurs Java avec la syntaxe très
proche de Java. Groovy, langage dynamiquement typé (duck typing), offre des mécanismes de programmation fonctionnelle à
travers les fermetures (closures) et permet la surcharge des opérateurs. L’interopérabilité avec Java est parfaite dans les deux sens
(Java > Groovy et Groovy > Java). Tout comme Scala, Groovy peut
être utilisé en tant que langage de programmation ou en tant
que script. La popularité de Groovy est pour le moment similaire à
Scala (dans l’index TIOBE il est placé entre la 51e et la 100e place);
dans la catégorie de langages agiles, Groovy est devancé de loin
par Python (8e) et Ruby (11e).
www.tiobe.com/index.php/content/paperinfo/tpci/index.html
en.wikipedia.org/wiki/List_of_JVM_languages
groovy.codehaus.org
DUBOCHET, Gilles. Scala. Flash Informatique 9/2010. EPFL 2010. flashinformatique.epfl.ch/spip.php?article2221
en octobre 2011 Java occupe toujours la première place dans l’index TIOBE, mais son taux d’utilisation est tombé à 18%
Impressum
Revue consacrée aux technologies de
l’information, éditée par le Domaine IT de
l’EPFL (DIT). Les articles n’engagent que
leurs auteurs, sauf ceux qui concernent de
façon évidente des prestations officielles
(sous la responsabilité du DIT ou d’autres
entités). Toute reproduction, même partielle, n’est autorisée qu’avec l’accord de la
rédaction et des auteurs.
2 flash informatique
Rédacteur en chef:
Jacqueline Dousson, fi@epfl.ch
Mise en page & graphisme:
Appoline Raposo de Barbosa
Comité de rédaction:
Jean-Daniel Bonjour, Patrice Fumasoli,
Florence Hagen, Laurent Kling, Julia
Paolini, François Roulet, Christophe
Salzmann, Richard Timsit & Predrag Viceić
Impression: Atelier de Reprographie EPFL
Tirage: 4000 exemplaires
Adresse Web: flashInformatique.epfl.ch
Adresse: Domaine IT EPFL
Station 8, CH-1015 Lausanne
Téléphone: +41 21 69 32246 & 32247
Abonnement au FI par e-mail à:
fi[email protected]fl.ch
Feelin’ Groovy
Groovy est apparu pour la première fois en 2004, en tant langage
dynamique pour la JVM, défini par la spécification JSR-241. Son
développement n’a vraiment commencé qu’en 2006, la version
1.0 du compilateur est sortie en 2007; actuellement (automne
2011) le système Groovy est arrivé à la version 1.8.2 et bénéficie
toujours de l’enthousiasme de son équipe de développeurs et du
soutien de l’entreprise VMWare. Notons enfin que, afin de palier
aux problèmes de performances de Groovy, une version plus statiquement typée du langage est en cours de développement chez
Google sous le nom de Groovy++ 6.
Dans la suite de l’article, nous nous intéresserons aux avantages
de Groovy pour un programmeur Java (j’ai derrière moi plus de
treize ans de développement Java). Les observations présentées cidessous sont tirées d’un exemple grandeur nature concret: je suis
actuellement en train de préparer une nouvelle version du moteur
de recherche de l’EPFL. Search.epfl.ch d’aujourd’hui est une application Java/J2EE utilisant plusieurs frameworks Java (dont Struts).
Avant de commencer le développement de la nouvelle version du
moteur de recherche, j’ai voulu vérifier si une technologie plus
moderne pourrait convenir pour le développement. Je me suis fixé
les critères suivants:
z support du langage par l’IDE Intellij IDEA. J’utilise cet IDE
depuis 2003 et je trouve qu’il mérite pleinement son slogan:
développer avec plaisir;
z interfaçage bidirectionnel avec le code Java, permettant l’intégration des frameworks Java (Struts2, Sitemesh);
z rapidité de compilation et d’exécution;
z possibilité de prototypage rapide et de programmation exploratoire;
z traitement de XML rapide et flexible;
z accès aux bases de données SQL rapide et flexible.
Mon choix s’est initialement porté sur Scala et Groovy, Scala fut
rapidement écarté, car:
1 le support par l’IDE est très moyen et parfois instable,
2 la compilation est lente,
3 l’intégration avec Java est unidirectionnelle (Java depuis Scala); l’intégration dans l’autre sens (Scala depuis Java) est plus
délicate et nécessite des conversions explicites.
J’ai donc choisi Groovy pour le développement. Par rapport aux
critères ci-dessus: le support de Groovy par l’IDE est très bon pour
développer dans un langage dynamique (surtout accompagné
d’analyseur CodeNarc 7); Groovy s’interface avec Java dans les
deux sens, il est donc possible d’utiliser les frameworks Java et
d’y ajouter des classes Groovy et/ou Java sans aucune difficulté.
Rien à signaler non plus pour la rapidité de compilation, quant
aux performances du code généré dans Groovy: pour le moment
je n’ai trouvé aucun problème, les premiers tests de charge ont
démontré la tenue à la charge de 200 requêtes/s alors que la
charge réelle ne dépassera pas 50 requêtes/s, Groovy reste donc
suffisamment performant et satisfait aux besoins.
Les possibilités de prototypage rapide et de programmation exploratoire méritent plus d’attention, la première impression générale
que donne Groovy est qu’on peut programmer et arriver très vite
aux résultats concrets; de plus, le passage depuis Java est agréable,
on peut commencer par coder pratiquement en Java, ensuite on
utilise dans le code de plus en plus de fonctionnalités spécifiques
à Groovy. Afin de donner un avant-goût de Groovy, voici le code
de tri rapide (code 1), très proche de l’algorithme original8.
Nous allons maintenant présenter quelques fonctionnalités représentatives de Groovy.
GroovyBeans
Les composants JavaBeans largement utilisés dans Java sont inutilement compliqués: on impose l’implémentation de méthodes
getX et setX pour chaque attribut exposé. En Groovy ces méthodes
sont implicites, il est néanmoins possible de les redéfinir si on veut
effectuer un traitement avant l’accès à l’attribut. Les constructeurs sont optionnels, on peut instancier un objet en passant une
map de paramètres d’instance nommés (code 2).
Opérateurs
Groovy fournit une panoplie d’opérateurs, dont ?., qui permet la
navigation dans la hiérarchie d’objets sans avoir à vérifier si l’objet
est nul, et ?: (elvis), qui simplifie l’expression conditionnelle (code 3).
def quickSort(list) {
if (list.size() < 2) return list
def pivot = list[list.size().intdiv(2)]
return (quickSort( list.findAll{ it < pivot}) +list.findAll { it == pivot } +quickSort(list.findAll { it > pivot }))
}
assert quickSort([’paul’, ’henri’, ’jacques’]) == [’henri’, ’jacques’, ’paul’]
code 1 – tri rapide en Groovy
class Personne {
String nom
String prenom
int age
}
Personne papet= new Personne (nom: ’Soubeyran’, prenom: ’César’, age: 59)
assert papet.name == ’Soubeyran’
assert papet.getName() == ’Soubeyran’
code 2 – GroovyBean
6
code.google.com/p/groovypptest/
7
codenarc.sourceforge.net
8
Groovy définit plusieurs conventions, par exemple la variable it représente la valeur courante de l’itération courante
22 NOVEMBRE 2011 - N° 9
3
Feelin’ Groovy
Personne p
... nom= (p != null) ? p.getNom(): null;
... nom= p?.nom
... nom = (p.getNom()!= null) ? p.getNom() : "unknown";
... nom = p.nom?: ’unknown’
... nom = (p!= null && p.getNom()!= null) ? p.getNom() : "unknown";
... nom = p?.nom?: ’unknown’
//
//
//
//
//
//
Java
Groovy
Java
Groovy
Java
Groovy
code 3 – opérateurs
Chaînes de caractères
Fermetures
Groovy propose trois types de chaînes: les chaînes à la Java, les
chaînes évaluées (GString), qui peuvent comporter les expressions
et les chaînes multiligne (code 4).
Une fermeture (closure) est une fonction anonyme qui peut être
appelée, stockée dans une variable, passée en paramètre ou bien
composée avec d’autres fermetures. Voici quelques exemples
(code 6).
String p=’Ugolin’
String n=’Soubeyran’
Collections
/* chaîne évaluée */
Groovy fournit trois types de collections: les intervalles (ranges),
listes et maps. Les manipulations de collections sont simples grâce
aux nombreuses méthodes et opérateurs (code 7).
String u= "$p - $n"
assert u == ’Ugolin - Soubeyran’
/* chaîne multiligne */
String sql= """
SELECT * FROM annuaire
WHERE age < 35
"""
Traitement d’exceptions
code 4 – chaînes de caractères
Expressions régulières
Les expressions régulières en Java sont lourdes à utiliser, l’essentiel est noyé dans la syntaxe trop complexe (échappement pour
plusieurs caractères, la classe Matcher à sémantique compliquée).
En Groovy, les expressions régulières sont plus simples à utiliser, le
résultat est assez convaincant (sans toutefois égaler Perl) (code 5).
Java impose le traitement d’exceptions (blocs try ... catch) pour
tous les fragments de code censés lever une exception et en effectue les contrôles à la compilation. Dans la pratique cela résulte en
plusieurs blocs catch vides, à moins d’utiliser les astuces (sousclasses des exceptions non traitées comme par exemple RunTimeException 9). Groovy lève ces contraintes, les exceptions non
traitées sont simplement passées à l’appelant.
def text = ’Groovy est bien’
def pattern= ~/(G|g)roovy/
assert ’Groovy est bien’ =~ /(G|g)roovy/
// =~
assert !(’Groovy est bien’ ==~ /(G|g)roovy/)
assert text ==~ /(G|g)roovy.*$/
assert "a b c".split(/\s/) == [’a’, ’b’, ’c’]
assert ("a b c" =~ /\S/).collect { it } == [’a’, ’b’, ’c’]
new File("pagnol.txt").eachLine{
line-> if (line =~ /[Jj]ean|[Ff]lorette/) println line
}
// syntaxe spéciale pour les e.r., chaînes entre ~/ et /
vrai si la chaîne contient un fragment conforme à l’e.r.
// ==~ vrai si toute la chaîne est conforme à l’e.r.
//
// chaine -> liste via split + e.r.
// chaine -> liste via e.r.
// imprimer toutes les lignes contenant ’jean’ ou ’florette’
/* on sélectionne seulement le premier et le troisième mot dans une séquence de trois mots */
assert "eau des collines".replaceAll(~/(\w+) (\w+) (\w+)/, ’$1 - $3’) == ’eau - collines’
code 5 – expressions régulières
for (int i=0; i< 10; i++) { System.out.println(i); } // boucle Java
/* boucles Groovy avec fermetures prédéfinies */
times(10) { println it }
0.upto(9) { println it }
(0..<10).each { println it }
// { println it } : fermeture, paramètre de times
/* juste nombres impairs */
(0..10).findAll{ it%2 }.each { println it }
// fermeture {it%2}= prédicat passé à findAll, {println it} = param. de each
/* fermeture définie par le développeur */
def benchmark(Closure c) {
long elapsed= System.currentTimeMillis()
c.call()
return System.currentTimeMillis()-elapsed
}
long elapsed= benchmark { sleep(1000) }
code 6 - fermetures
download.oracle.com/javase/tutorial/essential/exceptions/runtime.html
9
4 flash informatique
//
//
//
//
c = fermeture (code!) passée en paramètre à la fonction
on récupère la valeur de l’horloge
on appelle le code passé en paramètre (le code peut être long)
à la fin on calcule le temps d’exécution et on le retourne
// sleep (...) est le bloc de code passé en paramètre.
Feelin’ Groovy
/* Listes */
def l=[’jean’, ’paul’, ’jacques’]
assert l.class.name == ’java.util.ArrayList’
assert l.findAll{ it.startsWith(’j’) } == [’jean’, ’jacques’]
assert l.any { it.startsWith(’p’)}
assert l.findAll{ it.startsWith(’j’) }.every { it.startsWith(’j’)}
assert l*.toUpperCase() == [’JEAN’, ’PAUL’, ’JACQUES’]
assert l[0] == 'jean'
assert l[-1] == 'jacques'
l+= ’henri’
l-= ’paul’
assert l == [’jean’, ’jacques’, ’henri’]
l.each { println it }
l.eachWithIndex { it, idx -> printf "%3d: %s\n", idx, it }
assert l.sort () == [’henri’,’jacques’,’jean’]
assert l.sort {a,b-> b.compareTo(a)} == [’jean’,’jacques’,’henri’]
assert l.sort {it.size()} == [’jean’, ’henri’, ’jacques’]
assert l.sort {-it.size()} == [’jacques’, ’henri’, ’jean’]
//
//
//
//
//
//
//
//
//
liste de Groovy est une liste Java
sélection
prédicat: au moins un élément
prédicat: tous les éléments
application à tous les éléments
premier élément de la liste
dernier élément de la liste
ajout d’un élément
suppression d’un élément
//
//
//
//
//
//
itération simple
iteration avec index
tri ascendant, ordre lexicographique
tri descendant, ordre lexicographique
tri ascendant par longueur
tri descendant par longueur
/* Maps */
def age=[jean:28, paul:30, jacques:32]
assert age.jean== 28
code 7 – collections
Traitement de XML
Accès aux bases de données SQL
Le traitement des données XML est très fréquent dans les applications Web. L’analyse et la transformation de XML en objets du
domaine d’application (la désérialisation) est très lourde en Java;
au fait, même si le développeur a le choix entre plusieurs parsers
XML (DOM, SAX et JDOM), voire des bibliothèques de plus haut
niveau (Apache Digester), il ne peut que rarement échapper à la
création d’une hiérarchie de classes correspondante à la structure
du document XML.
En Groovy la situation est différente, les parsers XML créent
un objet qui permet de manipuler l’information en utilisant les
mêmes noms dans le code et dans les balises XML. Le développeur
n’a pas à connaître les détails, l’objet en question est pourvu de
tous les mécanismes nécessaires. Regardons de près la désérialisation de XML sur un document XML (code 8 et 9). La sérialisation de XML est également très concise grâce aux builders, par
exemple le document XML peut être généré par le code 10.
Groovy fournit les mécanismes de haut niveau également pour
accéder aux bases de données SQL, dans l’esprit similaire au traitement de XML; pas besoin de créer les hiérarchies de classes dans la
couche de persistance. Les fermetures permettent l’accès aisé aux
résultats, et les composants de la bibliothèque standard de Groovy
prennent soin de la bonne gestion de connexions, d’instructions et
d’ensembles de résultats (code 11).
Ecosystème Groovy
Groovy est un langage de programmation qui suscite un grand
intérêt de développeurs, par conséquent on a vu apparaître plusieurs frameworks et bibliothèques Groovy:
Grails: développement d’applications Web inspiré de Rails
Griffon: développement de clients riches
Gaelyk: environnement de programmation d’applications Web
sur le Google App Engine
<annuaire>
<personne prenom="Ugolin" nom="Soubeyran">
<age>30</age>
<adresse rue="rue des Romarins" numero="12" localite="Bastides Blanches"/>
</personne>
<personne prenom="César" nom="Soubeyran"> ... </personne>
<personne prenom="Florette" nom="Cadoret"> ... </personne>
<personne prenom="Jean" nom="Cadoret"> ... </personne>
</annuaire>
code 8 – exemple de données XML
def xml= new XmlSlurper().parse("data/eau_des_colinnes.xml")
// lecture et analyse du fichier
xml.personne.each {
// afficher toutes les personnes
println "${[email protected]()}, ${[email protected]()}, ${it.age} ans"
}
def comparerPersonnes = { a, b ->
// comparer deux personnes, ordre décroissant
[email protected]().compareTo([email protected]())?: [email protected]().compareTo([email protected]())
}
xml.personne.findAll().sort { a,b -> comparerPersonnes(a,b) }.each { // trier la liste de personnes et l’afficher
print "${[email protected]()}, ${[email protected]()}, ${it.age}"
println " -- ${it.adresse.@numero}, ${it.adresse.@rue}, ${it.adresse.@localite}"
}
println (xml.personne.collect{Integer.valueOf(it.age.text())}.sum()/xml.personne.size()) // calculer la moyenne d’âge
code 9 – lecture de données XML
22 NOVEMBRE 2011 - N° 9
5
Feelin’ Groovy
def bastides= [’César’: ’Soubeyran’,’Ugolin’: ’Soubeyran’, ’Manon’, ’Cadoret’ ]
def builder =new groovy.xml.MarkupBuilder()
builder.annuaire {
bastides.each { prenom, nom -> personne( prenom: prenom, nom: nom ) }
}
code 10 – génération de XML
def sql = groovy.sql.Sql.newInstance(’jdbc:mysql://localhost:3306/annuaire’, userid, password, ’com.
mysql.jdbc.Driver’)
sql.eachRow("SELECT nom,prenom FROM annuaire") {
// imprimer les entrées de l’annuaire
println "${it.prenom}, ${it.nom} "
}
def builder =new groovy.xml.MarkupBuilder()
// transformer tous les entrées en XML
builder.annuaire {
sql.eachRow(’SELECT * from annuaire’) {
personne(nom: it.nom, prenom: it.prenom )
}
code 11 – accès à la base de données
Easyb, Spock et Geb: environnements de tests
Gradle: outil de construction des logiciels (considéré comme successeur de maven).
tiques, critiques, ou tout simplement écrites il y a longtemps qui
fonctionnent bien et qui n’ont pas besoin d’être réécrites. Quant
à Groovy, il sera utilisé pour les parties nécessitant plus d’agilité.
Conclusion
Références sur Groovy
Nous avons présenté le langage de programmation agile Groovy
que nous utilisons pour le développement depuis plusieurs mois.
Force est de constater que Groovy tient la plupart des promesses
et permet de passer très rapidement des idées au code, et cela
malgré quelques particularités, parfois difficiles à comprendre.
Il est important de dire que, dans notre contexte d’utilisation,
Groovy ne remplace pas Java, c’est son complément de valeur;
dans une application Java restera valable pour les parties sta-
Il existe une multitude de ressources traitant de Groovy, un bon
point de départ est le livre de Venkat Subramaniam, intitulé Programming Groovy édité dans la série Pragmatic Programmer
en 2008 (ISBN 1-934356-09-3). Le livre de référence sur Groovy
c’est Groovy in Action de Dierk König, édité chez Manning en
2007 (ISBN 1-932394-84-2, deuxième édition revue et corrigée
prévue pour 2012). Finalement le compilateur de Groovy peut être
téléchargé sur le site Web groovy.codehaus.org; on y trouve également la documentation et de nombreux exemples. n
Actualités
DIT-info
Nouveau stagiaire au groupe Téléinformatique
Nous souhaitons une très cordiale bienvenue à
Philippe Gagnon qui a commencé son stage le
1er novembre. Changeant d’orientation, ce stage
lui permettra de compléter sa formation, à côté de
son brevet fédéral en informatique de gestion. En travaillant avec
l’équipe de techniciens DIT-TI pendant ces douze prochains mois,
il aura l’occasion de découvrir la cuisine du réseau. Nous espérons
qu’il profite au maximum des opportunités de ce stage pour sa
future carrière dans le domaine informatique.
Jacques.Virchaux@epfl.ch, Domaine IT
Nouvelles têtes au groupe Exploitation
Le groupe Exploitation accueille deux nouveaux collaborateurs.
Nils Schätti. Arrivé le 1er octobre dans l’équipe
HPC pour succéder à Pascal Jermini qui nous
a quitté début mai. Nils participera à l’administration du grid et des clusters de calcul.
Funda Cubuk. Arrivée le 1er novembre au sein de
l’équipe stockage pour y effectuer un stage
d’un an; elle succèdera à Fabien Borloz qui
nous quittera fin novembre. Funda reprendra
les développements du site Web de gestion des
salles serveurs.
Nous souhaitons à tous les deux la bienvenue et un plein succès
dans leur nouvelles fonctions.
Fabien.Figueras@epfl.ch, Domaine IT
6 flash informatique
Téléchargement