Professional Documents
Culture Documents
Le Mag
Edition de Juin Juillet 2010.
Numro 28.
Magazine en ligne gratuit.
Diffusion de copies conformes loriginal autorise.
Ralisation : Alexandre P ottiez
Rdaction : la rdaction de Developpez
Contact : magazine@redaction-developpez.com
Sommaire
Article C/C++/GTK
Editorial
Interview de James Reinders
Ce sont les grandes vacances et
tout le monde prend du repos bien
mrit mais attention ne pas
perdre les bonnes habitudes ! Dans cette interview, James Reinders, le gourou d'Intel sur le
Ne vous inquitez pas, dveloppement orient dveloppement parallle et auteur d'un
Developpez.com ne les perd pas et
vous propose un nouveau numro livre sur les Thread Building Blocks, fait le point sur les outils
de son magazine pour que vous ne prvus en 2010.
perdiez pas la main pendant vos
vacances.
par Loc Joly
La rdaction Page 30
Java/Eclipse
Les derniers tutoriels et articles
Gradle, le nouvel outil de build incontournable
Gradle, le nouvel outil de build incontournable
Le systme de build propose une approche flexible pour la construction de projets Java, Groovy et Scala, et Java
EE. Vritable alternative Ant et Maven, il est aussi capable de s'intgrer ses deux concurrents.
1. Introduction projets par rpertoires de sources ou encore de gnrer
autant d'artefacts que ncessaire pour votre projet.
La ralisation d'une application est constitue de
nombreuses tapes. Parmi celles-ci, l'tape de
3. Gradle permet de rsoudre les problmes rencontrs
construction, aussi appele tape de build, est la plus
avec Ant ou Maven
importante. Elle permet de transformer un code source,
issu d'une reprsentation humaine, dans un ensemble de Au-del d'tre un comptiteur face aux outils de build
codes excutables constituant une reprsentation machine. existants, Gradle fait office de fdrateur. En effet, l'outil
Il n'est pas rare que cette tape soit complexe, tant par sa peut s'insrer aisment dans des infrastructures utilisant
mise en uvre, que son adquation aux besoins Ant ou Maven, ceci afin d'enrichir les fonctionnalits
changeants du projet. Il est alors ncessaire d'outiller cette existantes, et offre une panoplie de stratgies pour
construction afin de rpondre au plus prs aux besoins du rsoudre les problmes rencontrs avec Ant ou Maven.
projet. Dans le cadre d'Ant, Gradle possde un module d'import
permettant de convertir toutes les cibles d'un script Ant en
De nombreux outils de build existent pour rpondre cette tches Gradle. Celui-ci peut ensuite rajouter du
problmatique. Certains de ces outils, implants depuis des comportement avant ou aprs l'excution de la cible Ant.
annes, dominent le march comme Ant et Maven. Cette fusion native entre Ant et Gradle permet galement
Nanmoins, malgr leur omniprsence, nombreux sont les de faire rfrence une tche Gradle depuis un script Ant
dveloppeurs qui restent bloqus et souffrent d'un manque import. Cette mutualisation donne la possibilit ainsi
de fonctionnalits. Gradle, n de l'exprience des d'utiliser Gradle comme outil complmentaire votre
utilisateurs acquise au cours ces diffrentes annes, tente infrastructure Ant sans un besoin de migration.
de rpondre aux besoins particuliers de build des
applications d'une entreprise. Dans le cadre de Maven, Gradle est capable de collecter
des artefacts dans des dpts Maven travers la librairie
2. Un systme de build de troisime gnration Ivy et d'crire dans des dpts Maven via l'utilisation
native du module Maven inclut dans la distribution Gradle.
Gradle est un systme de build de troisime gnration
Cette fonctionnalit permet d'utiliser Gradle pour ses
proposant une approche flexible pour la construction de
chanes de build et d'utiliser des dpts d'entreprise de type
projets Java, Groovy et Scala et Java EE. Il utilise les
Maven en standard dans la majorit des organisations. Ces
meilleures fonctionnalits de chacun des outils existants
dpts, grs par des outils gestionnaires comme JFrog
comme une structure de dveloppement cadre, une
Artifactory, rendent possible une centralisation du
ossature pour la construction de son projet, des
stockage des librairies utilitaires publiques issues de
conventions de noms, tout en proposant en permanence
dpts Internet avec les artefacts issus des projets, le tout
une personnalisation selon ses besoins. En termes
avec des mtadonnes de type uniforme.
d'architecture technique, Gradle est un toolkit fond sur les
Gradle augmente galement les aspects de fiabilit et de
meilleures librairies du march de l'intgration continue,
performance d'une chane de compilation en fournissant un
comme le gestionnaire de dpendances Ivy, l'utilisation
support extrmement puissant, pour un projet multi
native de taches Ant et le langage Groovy pour dcrire le
module, travers des fonctionnalits de build
build d'un projet.
incrmentales que ses comptiteurs ne possdent pas.
A l'image de ses concurrents, Gradle apporte une approche
dclarative dans la dfinition de la chane de build. Mais
Aprs deux ans d'existence, Gradle atteint un niveau de
Gradle fournit un langage de spcification du domaine
maturit lui permettant d'tre adopt en masse et sans
(DSL) en langage Groovy pour crire un script Gradle.
risques par les grands comptes. A ce jour, les entreprises
Cette DSL orchestre une API Gradle et permet de fournir
ayant utilis Gradle ont constat une plus value immdiate
l'criture du build une grande richesse des lments.
et l'ont implant comme leur principal outil de build.
Chaque script Gradle configure de manire sous-jacente
un objet Gradle Projet sr lequel le script utilise un
4. Liens
ensemble de proprits et de mthodes exposes par l'API.
Comparatif des outils de build pour Java (Lien2).
Ce vritable langage de build vous offre une flexibilit Le forum d'entraide sur Gradle (Lien4).
d'expression rpondant aux besoins de votre entreprise, Le forum d'entraide sur les outils d'intgration
comme la possibilit de pouvoir dclarer plusieurs continue (Lien5).
rpertoires de sources par projet, de configurer les
dpendances trs finement, de mettre en place plusieurs Retrouvez l'article de Grgory Boissinot en ligne : Lien6
David et Jevgueni, de la socit ZeroTurnaround, diteur de l'outil de productivit JRebel pour le dveloppement
Java, ont accept de rpondre nos questions sur leur socit et leur produit phare.
2. ZeroTurnaround
6.2. Liens
Esprez vous voir se dvelopper une communaut
autour de votre systme de plugin, o tout un Version originale de l'interview : Lien13.
chacun hbergerait, peut tre chez vous, ses ZeroTurnaround : Lien14.
propres plugins destination du public ? Tlchargez la dernire version de JRebel :
Jevgueni : Oui, c'est l'objectif. :) Nous envisageons Lien15.
quelque chose de ce genre, mais nous avons constat que Partagez vos retours sur JRebel : Lien16.
sans notre attention, les pages communautaires tendent Vos questions sur les outils pour Java : Lien17.
rapidement stagner. Maintenant que l'adoption de JRebel
progresse de manire exponentielle, nous avons vraiment Retrouvez l'interview d'Eric Siber et David Delbecq en
besoin de relancer cette communaut de plugins ligne : Lien18
Cet article est une introduction la manipulation des listes sous Android via le composant ListView. Il permet de
comprendre les bases de l'affichage des items.
1. Prsentation
Sous Android, le composant principal pour afficher et
grer une liste de donnes est le composant ListView. Par
dfaut ce composant affiche une liste de chanes de
caractres. Selon les besoins, il peut tre ncessaire
d'afficher plus d'informations sur chaque ligne de la liste,
ou mme de venir effectuer des oprations particulires
suite des actions sur les lignes.
setListAdapter(adapter);
}
devient :
//Cration de l'adapter
ArrayAdapter<String> adapter = new
ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, mStrings);
/**
* Initialise une liste de personnes
* @return une liste de "Personne"
*/
public static ArrayList<Personne>
getAListOfPersonne() {
ArrayList<Personne> listPers =
new ArrayList<Personne>();
listPers.add(new Personne("Nom1",
"Prenom1", FEMININ));
listPers.add(new Personne("Nom2",
"Prenom2", MASCULIN));
listPers.add(new Personne("Nom3",
"Prenom3", MASCULIN));
listPers.add(new Personne("Nom4",
"Prenom4", FEMININ));
listPers.add(new Personne("Nom5",
"Prenom5", FEMININ)); Dans ce nouveau layout, nous allons donc ajouter deux
listPers.add(new Personne("Nom6", TextView pour dcrire les nom et prnom de chaque
"Prenom6", MASCULIN)); personne. Le genre de la personne sera dcrit par la
listPers.add(new Personne("Nom7",
"Prenom7", FEMININ));
couleur de fond de notre item : bleu pour les garons, rose
listPers.add(new Personne("Nom8",
pour les filles :). Le XML de notre item doit donc
"Prenom8", MASCULIN)); ressembler a :
listPers.add(new Personne("Nom9",
"Prenom9", MASCULIN)); <?xml version="1.0" encoding="utf-8"?>
listPers.add(new <LinearLayout
Personne("Nom10", "Prenom10", FEMININ)); xmlns:android="http://schemas.android.com/apk/res
listPers.add(new /android"
Personne("Nom11", "Prenom11", MASCULIN)); android:layout_width="wrap_content"
listPers.add(new android:layout_height="wrap_content"
Personne("Nom12", "Prenom12", MASCULIN)); android:id="@+id/LL_Fond">
listPers.add(new
Personne("Nom13", "Prenom13", FEMININ)); <TextView android:text="Nom"
listPers.add(new android:id="@+id/TV_Nom"
Personne("Nom14", "Prenom14", MASCULIN)); android:layout_width="wrap_content"
android:layout_height="wrap_content">
return listPers; </TextView>
}
} <TextView android:text="Prnom"
android:id="@+id/TV_Prenom"
Maintenant, dans le layout XML (main.xml), rajoutez le android:layout_width="wrap_content"
composant ListView. Le code XML du layout doit android:layout_height="wrap_content">
</TextView>
correspondre ceci :
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?> Il ne nous reste plus qu' afficher la liste des personnes en
L'Adapter va grer une liste de personnes et va s'occuper //(2) : Rcupration des TextView de notre
galement de l'affichage. On va donc lui ajouter trois layout
proprits TextView tv_Nom =
(TextView)layoutItem.findViewById(R.id.TV_Nom);
TextView tv_Prenom =
// Une liste de personnes (TextView)layoutItem.findViewById(R.id.TV_Prenom)
private List<Personne> mListP; ;
//Le contexte dans lequel est prsent notre //(3) : Renseignement des valeurs
adapter tv_Nom.setText(mListP.get(position).nom);
private Context mContext; tv_Prenom.setText(mListP.get(position).prenom);
//Un mcanisme pour grer l'affichage graphique //(4) Changement de la couleur du fond de notre
depuis un layout XML item
private LayoutInflater mInflater; if (mListP.get(position).genre ==
Personne.MASCULIN) {
Le constructeur va alors ressembler ceci : layoutItem.setBackgroundColor(Color.BLUE);
} else {
public PersonneAdapter(Context context, layoutItem.setBackgroundColor(Color.MAGEN
List<Personne> aListP) { TA);
mContext = context; }
mListP = aListP;
mInflater = LayoutInflater.from(mContext); //On retourne l'item cr.
} return layoutItem;
}
if (mListP.get(position).genre ==
Personne.MASCULIN) {
layoutItem.setBackgroundColor(Color.BLUE);
} else {
layoutItem.setBackgroundColor(Color.MAGENTA);
}
@Override
public void onCreate(Bundle savedInstanceState) {
protected void onListItemClick(ListView l, View
super.onCreate(savedInstanceState);
v, int position, long id) {
setContentView(R.layout.main);
super.onListItemClick(l, v, position, id);
ArrayList<Personne> listP =
Builder builder = new
Personne.getAListOfPersonne();
AlertDialog.Builder(this);
PersonneAdapter adapter = new
builder.setTitle("Item");
PersonneAdapter(this, listP);
list.setAdapter(adapter); 5. Conclusion
}
Pour conclure, l'utilisation des composants pour lister les
donnes sous Android peut dans un premier temps paratre
Maintenant, si vous excutez votre programme, vous trs simple pour une utilisation basique, mais offre
devriez obtenir ceci : galement de puissants moyens de personnalisation ds
que l'on souhaite enrichir un peu plus notre interface. Ce
tutoriel vous aura permis de dcouvrir les bases de ces
personnalisations, il y en a encore bien d'autres,
notamment les optimisations d'affichage (en plus de celle
que l'on a dcouvert dans le paragraphe III).
6. Liens
Site du dveloppeur : Lien24
FAQ Android : Lien25
Installation de l'environnement : Lien26
PHP est crit en C et, ce titre, il est compilable en langage machine. Nous allons dtailler comment fonctionne ce
processus sous Linux, ainsi qu'une partie de l'cosystme de PHP : ses extensions, les bibliothques utilises, son
moteur... Pour suivre cet article, vous devez connatre le langage PHP et avoir quelques notions d'UNIX, c'est tout.
Nous effleurerons galement quelques concepts relatifs au langage C, sans rentrer dans les dtails. La version de
PHP considre est 5.3.x.
1. Premier pas avec la compilation de PHP nombreuses pas forcment disponibles sans passer par la
case compilation manuelle), ou encore activer des options
Avant tout, compiler c'est quoi ? C'est trs simple : c'est
trs spciales dont nous reparlerons plus tard.
transformer un langage informatique en un autre. Le
Enfin, cela vous permettra sans aucun doute de mieux
moteur du langage PHP est crit en C, pour obtenir
matriser le langage : la compilation peut tre assimile
l'environnement PHP il faut donc le compiler, c'est--dire
la fabrication et la naissance d'un PHP faites par vos soins,
transformer son code source C en un code binaire
de vos propres mains.
excutable par le processeur de la machine cible. Ce code
sera encapsul dans un binaire que vous pourrez excuter :
Pourquoi faire cela sous Linux ? PHP a t conu pour
ce sera PHP !
Unix, puis a t port sous Windows et autres systmes
PHP est open source, vous pouvez donc tlcharger son
non Unix. Quoi qu'on en dise, PHP est plus performant
code source, l'tudier, le modifier et le transformer (le
sous Linux et beaucoup plus facile compiler sous ce
compiler).
systme (au sein duquel il est n il y a maintenant 15 ans)
que sous un autre, particulirement Windows. Lorsque
1.1. Quelques questions pour un bon dpart
PHP est sous Linux, considrez cela comme un poisson
Je peux dj rcuprer PHP sur le site officiel, sans dans l'eau : il est dans son milieu, dispose de tout ce dont il
tlcharger ses sources ? Oui, vous pouvez tlcharger ce a besoin nativement et se sent en pleine forme.
que l'on appelle "les binaires". En fait, il s'agit d'un PHP
compil par les dveloppeurs du langage. Compiler PHP sous Linux, c'est difficile ? J'espre que ce
Il a t compil "basiquement", pour rpondre une trs tutoriel saura vous dmontrer que NON : absolument pas,
large palette de besoins, mais pas forcment aux vtres. c'est un jeu d'enfant. Vous devez simplement tre familier
de Linux (sans pour autant tre un pro), c'est tout.
Je peux aussi trouver PHP dans des packages comme
WampServer, Xamp ou ZendServer, des prcisions ? Oui ; 1.2. Prparation du systme
ces logiciels sont l'oppos du "pourquoi compiler moi-
Nous allons utiliser un systme Ubuntu Server (Lien28).
mme ?", ils encapsulent un PHP sur lequel vous n'avez la
Historiquement, le systme le moins "galre" pour
plupart du temps aucun pouvoir de dcision. Il est aussi
compiler PHP et l'utiliser est Debian.
possible qu'ils aient eux-mmes compil le PHP qu'ils
Ubuntu est une branche trs proche de Debian, les
embarquent avec des options qui en restreignent l'usage
manipulations notes ici seront quasi identiques sous
(par exemple, il n'est pas possible de charger telle
Debian. Concernant les autres systmes Linux, a ne
extension donne). Ce sont des solutions convenables si
change pas beaucoup, c'est vraiment trs ressemblant.
vous ne souhaitez vraiment pas vous embter, mais soyez
Idem pour les systmes Unix, il existe quelques
conscients que vous laissez des personnes tierces
diffrences avec Linux selon les distributions, mais
configurer PHP du cur l'piderme, sans que vous ayez
vraiment rien de trs mchant.
la main sur quoi que ce soit.
Utilisez une machine virtuelle ! Pour installer un systme
Pourquoi compiler PHP moi-mme alors ? Il y a beaucoup
Ubuntu Server sans toucher votre machine, utilisez une
d'avantages cela : dj vous pourrez utiliser des options
machine virtuelle. Si votre systme hte est Windows,
de compilation propres votre plateforme. Vous
vous vous retrouverez avec un poste de dveloppement
obtiendrez ainsi un PHP prt tre excut sur votre
PHP sous Windows, mais pouvant excuter un PHP
machine, pour son processeur, avec toutes les
totalement personnalis et cr par vos soins sous Linux,
optimisations qui le concernent. Par rapport aux binaires
ce qui offre des avantages considrables.
PHP que vous pouvez tlcharger pour votre systme,
Je vous conseille l'utilisation de VirtualBox (Lien29)
vous gagnerez en performance et vous pourrez atteindre
comme hyperviseur, si vous ne savez pas vers quoi vous
(avec des connaissances et de l'exprience) un gain
tourner.
pouvant aller jusqu' 10 ou 15 % dans certains cas.
Ensuite, compiler soi-mme PHP c'est pouvoir le
A partir de maintenant, nous supposons que vous disposez
personnaliser la source : inclure ou exclure des
d'un systme Ubuntu Server, classiquement install sans
extensions au langage (et vous savez qu'il en possde des
Charger tidy.so dans PHP ncessitera bien la libtidy sur le Vrification des couches basses du rseau pour PHP
systme, nous l'avions installe avant de compiler. ~/monphp/bin> ./php -r
Le fichier .a est une archive contenant les fichiers .o qui 'var_dump(stream_get_meta_data(fopen("http://www.
reprsentent du code liable (relocatable) mais non google.fr", "r")));'
array(10) {
chargeable. Ces fichiers ne vous serviront pas pour utiliser
## tronqu ##
PHP, vous pouvez tranquillement les effacer. Pour plus
["wrapper_type"]=>
d'informations leur sujet, renseignez-vous sur le format string(4) "cURL"
des excutables Linux ELF. ["stream_type"]=>
string(4) "cURL"
5.4. Quelques options de compilation ## tronqu ##
L encore votre connaissance de Linux, des bibliothques
open source C que l'on peut trouver et de leur utilit vous --with-mysqli=mysqlnd | --with-pdo-mysql=mysqlnd :
feront gagner un temps prcieux. depuis PHP5.3, les fonctionnalits MySQL de PHP
Par exemple --with-libedit ou --with-readline permettent peuvent utiliser MySQLnd (NativeDriver). NativeDriver
de bnficier d'un mode interactif (php -a) beaucoup plus est une couche basse de dialogue avec MySQL dveloppe
complet : historique des commandes, compltions des par le PHPGroup, et permettant notamment une licence
fonctions PHP... Bash ou encore ssh utilisent ces d'utilisation identique celle de PHP, ainsi que des
bibliothques, par exemple : optimisations sur les structures mmoires sous-jacentes. Si
vous ne prcisez pas mysqlnd, l'extension sera lie avec la
PHP interactif aid de la libedit libmysql, vous devrez donc tlcharger son paquet.
~/monphp/bin> ./php -a MySQLnd est pratique en ce sens que PHP n'est plus du
Interactive shell tout dpendant de MySQL pour tre compil.
php > str_ [pression sur tab] --with-zend-vm=switch|goto|call : pour les puristes, elle
str_getcsv str_ireplace str_pad change le modle d'excution de la machine virtuelle PHP.
str_repeat str_replace str_rot13
str_shuffle str_split str_word_count
Cela affecte le moteur d'excution de la machine virtuelle.
Les plus tmraires pourront se renseigner dans la source
directement (Lien37) ou lire quelques benchmarks ici
--enable-debug active le mode de dbogage. (Lien38).
Principalement, cela active le switch -g de GCC qui va
alors laisser les symboles de dbogage dans le binaire
6. Installation personnalise d'extensions
ELF. Il sera donc utilisable au travers d'un dbogueur
comme gdb. Cela est indispensable dans le cas du Bien, nous allons voir ici comment installer des extensions
dveloppement de PHP lui-mme ou d'une de ses dynamiques pour PHP une fois celui-ci compil et install.
extensions. Nous allons aussi voir comment lier celles-ci de manire
Le rsultat de php -v indiquera (DEBUG) et certaines statique PHP, il faudra pour cela entirement le
extensions devront tre recompiles avec ce mode pour recompiler.
tre utilisables (les dbogueurs PHP notamment comme
Xdebug). 6.1. Dynamiquement
Le mode debug dsactive aussi toutes les optimisations du
Imaginons que nous souhaitions installer l'extension
compilateur avec un switch -O0 automatiquement.
Memcache, qui n'est pas livre avec PHP. Nous
Pour dboguer la mmoire, dmalloc peut tre utilis avec
procderons en trois temps.
l'option --enable-dmalloc
1. Tlcharger et dpaqueter la source de l'extension
(dans le dossier monphp/src afin de ranger les
--enable-embed permet de construire la SAPI embed, qui
choses).
permet de lier PHP dans son code C grce libphp5.so qui
2. Importer l'environnement de prparation des
sera construit lors de la compilation.
sources qui permettra de lier le code de
l'extension au code source de PHP.
Exemple minimal simplifi d'inclusion de PHP dans du
3. Configurer, compiler, installer et activer le .so
code C
#include <php_embed.h>
obtenu dans php.ini.
int main(int argc, char *argv[]) Toutes ces tapes peuvent tre excutes en une seule
Traduction de l'article How to Easily Create a JavaScript Framework, Part 3 (Lien71) de Teylor Feliz paru sur
AdmixWeb.
1. Introduction
// Vrification du chargement du DOM
Dans " Comment crer facilement un framework // Callback est une fonction anonyme qui
JavaScript - Partie 2 " (Lien72), j'ai parl de quelques s'excute ds que le DOM est prt
mthodes de navigation DOM, comme les techniques domReady:function(callback){
"getByName", "getByTag" et "getByClass". J'ai aussi var done = false; // Cration d'une variable
expliqu comment crer d'autres mthodes appele done initialise false
supplmentaires juste pour le fun, telles que les fonctions // Vrifie toutes les 10 millisecondes si le
document.body et le document.getElementById sont
"even" (pair), "odd" (impair) et "SetOpacity". Dans le chargs
tutoriel de cette semaine, je vais continuer cette srie // S'ils sont disponibles, alors on change la
d'articles sur le framework JavaScript "VOZ" et continuer valeur de done en true
ajouter de nouvelles mthodes au code de la partie 2. Je var checkLoaded = setInterval(function()
vais donc complter un peu le framework en ajoutant des { if(document.body && document.getElementById)
{done = true;}},10);
mthodes pour utiliser le JavaScript avant qu'une page ne
// Vrifie toutes les 10 millisecondes si done
soit charge et d'autres techniques toutes aussi utiles. == true
Continuez lire la suite pour suivre l'volution du // Si c'est le cas, alors on excute la
framework ! N'hsitez pas laisser vos commentaires et fonction callback
amusez-vous ! var checkInter = setInterval(function()
{if(done)
{clearInterval(checkLoaded);clearInterval(checkIn
2. Attendre jusqu'au chargement du DOM ter);callback();}},10);
Avant de continuer avec notre framework, nous devons },
parler du chargement des pages Web. L'un des plus gros
problmes auquel un dveloppeur peut tre confront est Utilisez donc cette mthode pour excuter une partie du
l'utilisation du JavaScript avant que la page ne soit code aussitt que le DOM est disponible. Exemple :
compltement charge. Dans de nombreuses applications
web, le JavaScript entre en action aprs le chargement $$.domReady(function(){
d'une page. C'est un gros problme car l'application ne fait alert('Hello World');
rien jusqu' ce que toutes les images et fichiers rattachs });
soient entirement chargs. Pour expliquer ce phnomne,
je vais utiliser un exemple. 3. Modification de la fonction "setStyle()"
Imaginons que nous ayons une page avec 20 images en
Maintenant, modifions la mthode setStyle() pour utiliser
miniatures pour prsenter les produits d'une socit.
un objet en paramtre. Il est souvent difficile de se
Imaginons que l'on utilise le JavaScript pour crer une
souvenir de l'ordre des paramtres d'une fonction. Utiliser
popup sur chaque miniature pour que, lorsque l'on clique
un objet est trs pratique, car nous n'avons plus nous
sur l'une d'elles, l'image apparaisse en taille relle. Le
proccuper de l'ordre des paramtres. De plus, ce sera plus
problme est que l'application ne marchera pas tant que
simple pour organiser ce que nous faisons.
tous les lments ne seront pas chargs. Notre page peut
Exemple d'une fonction qui insre des donnes en AJAX.
ressembler a :
// Utilisation de paramtres littraux
function popUpImagen(imagen){
function
... ici le code ... insertCustomer(prenom,nom,adresse,anniversaire,ge
} nre,telephone){
window.onload = popUpImagen; ... ici le code ...
}
Ce script attend que la page soit entirement charge pour
commencer lier les images en taille relle aux Cela pourrait devenir pnible d'appeler cette fonction si
miniatures. Si l'utilisateur une connexion Internet lente, nous ne nous souvenons pas de l'ordre des paramtres. Par
le script ne fonctionnera pas, tant que les tous les lments exemple, nous pourrions utiliser la fonction comme a :
de la page ne seront pas chargs.
Pour rsoudre ce problme nous pouvons crer une petite insertCustomer('Teylor','Feliz','Mon
mthode pour vrifier la disponibilit du DOM. Ds que adresse','Male','09/15/1978','555-555-5555');
celui-ci est charg, nous pouvons travailler avec.
Nous recevons immdiatement une erreur, car nous
Intel propose des outils de dveloppement orients dveloppement parallle pouvant tirer parti des architectures
matrielles actuelles. Dans cette interview, James Reinders, le gourou d'Intel sur le sujet et auteur d'un livre sur les
Thread Building Blocks, fait le point sur les outils prvus en 2010.
J'avais dj ralis une interview de James l'anne dernire (Lien76), laquelle il peut tre intressant de se rfrer
pour des questions plus gnrales. En outre, j'ai rdig un compte rendu de la confrence en elle-mme (Lien77).
Nous nous changeons des plans, et parfois des Cette notation, semblable celle de Matlab, pourra
technologies ou des revues avec Apple. J'ai assist une automatiquement bnficier d'une paralllisation, de SSE,
prsentation chez Intel il y a environ deux ans prsentant d'AVX. Nous travaillons avec d'autres constructeurs de
comment ils s'loignaient de GCC et prsentant la compilateurs, pour se mettre d'accord sur une syntaxe, et
technologie LLVM (sur laquelle est construit Clang). Mais peut tre au final, bas sur l'exprience apporte par une
nous n'investissons pas de manire massive dans leur implmentation dans plusieurs compilateurs, en tirer une
technologie de compilateur. proposition pour les comits de normalisation C et C++.
Pourquoi CILK est prsent l'utilisateur, et non pas Intel Parallel Advisor a t en phase d'incubation cette
simplement utilis en interne par des bibliothques anne, mais deviendra un produit part entire dans cette
comme TBB. version. Il permet d'acclrer une tape critique de
dveloppement parallle. Quand on se lance dans la
L'objectif de CILK est de prendre un programme paralllisation, la premire tape est d'essayer de voir o
fonctionnel et de le rendre parallle avec le minimum de l'on souhaite parallliser, la seconde est d'crire le code
modifications, comme changer un for en cilk_for, un appel correspondant et d'effectuer des mesures.
de fonction par un cilk_spawn. Son extrme simplicit
devrait en faire un point d'accs ais au monde du Mais cette seconde tape peut tre longue, des semaines ou
paralllisme. Sa syntaxe est faite de telle faon, qu'en des mois pour trouver les bugs, les race conditions, les
ignorant les mots clefs spciaux, on se retrouve avec le deadlocks... pour parfois au final se rendre compte que a
code initial, ce qui rend la comprhension facile. ne marche pas aussi bien qu'on l'avait espr. Nous
essayons d'acclrer cette tape les dveloppeurs ajoutent
2. Parallel Studio dans leur code des annotations indiquant leur souhait d'en
parallliser une portion, sans vraiment coder cette
Quand la prochaine version de Parallel Studio,
paralllisation. Un outil prend alors le relais pour analyser
compatible avec Visual Studio 2010, est-elle prvue ?
ce code et indiquer : si vous faites a, vous allez avoir des
race conditions, ou bien votre code ne sera pas scalable.
Le programme de bta officiel devrait commencer vers mi-
mai. La sortie est prvue pour la fin du troisime trimestre,
Ces notations permettent ainsi de prototyper rapidement le
nous esprons pouvoir le sortir pour l'IDF (Intel
code, il n'est mme pas ncessaire de l'excuter sur une
Developper Forum (Lien78)), la mi-septembre, San
machine multi-curs. Ce produit est conu pour aider les
Francisco.
architectes choisir entre diffrentes manires de
parallliser du code, avant d'investir dans la paralllisation
Quelles seront les nouvelles fonctionnalits ?
elle-mme.
Tout d'abord, comme indiqu, le support pour Visual
Dans Visual Studio 2010, Microsoft a introduit la
Studio 2010. Nous avons d attendre que ce produit soit
Les utilisateurs veulent pouvoir utiliser un outil unique Ce que les utilisateurs de TBB apprcient beaucoup, c'est
dans tous les cas. Nous avons dj crit des extensions qu'elle est suffisamment mature pour tre mise en uvre,
leur dbogueur qui amliorent son comportement avec et rsoudre de vrais problmes dans de vrais programmes.
OpenMP, ils ont ajout des extensions trs agrables pour
les tches, nous regardons si on peut communiquer avec 4. Ct
leur dbogueur afin d'en tirer les mme bnfices avec
Est-ce que Ct sera distribu en open source ?
TBB.
Pour l'instant, on ne sait pas vraiment quelle est la bonne
Une partie de Parallel Studio devrait tre disponible
faon de faire. Si TBB a t place en open source, c'est
sous Linux. Quand ? Quel ordre de grandeur de prix ?
parce que c'tait la bonne manire de la rendre disponible
sur de nombreuses plateformes. OpenMP prsente un autre
Novembre. Le programme bta devrait commencer en
modle, une API standardise que plusieurs personnes
juin/juillet, pour une sortie du produit en novembre.
peuvent implmenter.
En terme de prix, on devrait tre dans la mme gamme que
Nous voulons que Ct soit disponible sur de nombreuses
nos autres outils de dveloppement (compilateur, VTune),
plateformes, et nous sommes en discussions avec des
et donc un peu plus cher que Parallel Studio. Le
compagnies qui pourraient en raliser un portage. Nous ne
compilateur Fortran sera en option, ce qui pourrait
savons pas encore ce qui serait le mieux, entre une
augmenter le prix. Mais nous n'avons pas encore annonc
solution open source et une solution base sur une API
de tarif actuellement.
ouverte et des implmentations propritaires tirant parti
des bnfices de chaque plateforme. Il est en tout cas
3. TBB
probable que Ct ne soit pas uniquement une technologie
Les styles de programmation entre TBB et PPL sont propritaire.
trs proches, pensez-vous qu'il est possible, en se
restreignant un sous-ensemble de ces bibliothques, Nous voulons aussi avoir une API ouverte au niveau du
d'avoir un code source qui serait compatible avec ces front-end, afin de permettre l'interface avec d'autres
deux bibliothques ? langages, comme par exemple Python ou Perl.
Il est vrai que ces bibliothques sont trs semblables dans Quels compilateurs seront supports pour la premire
leur interface. On pourrait imaginer un programme qui version ?
juste avec un peu de macros permettrait de basculer de l'un
l'autre. Ce qui est important, c'est que la smantique est Au minimum, Intel Compiler, Microsoft Visual C++ et
la mme. Par exemple, il se passe la mme chose quand on gcc. Mais la technologie n'est pas trs dpendante du
utilise le parallel_for de TBB et celui de PPL. La syntaxe compilateur et devrait marcher avec n'importe quel
peut lgrement varier, puisque par exemple ils grent les compilateur C++. On avait eu des problmes avec TBB, en
indices lgrement diffremment de nous. particulier sur la gestion des exceptions, qui nous avait
forcs faire des modifications, par exemple pour le
Pour les structures de donnes (concurrent_queue, compilateur Solaris. C'tait il y a longtemps, mais c'est
concurrent_vector...), c'est encore plus vrai, puisqu'il s'agit pourquoi je ne m'avance pas plus pour Ct.
du mme code, Microsoft ayant repris le code d'Intel. Il n'y
avait en effet aucune raison de ne pas avoir les mmes Quels sont les concepts techniques derrire Ct. Est-ce
structures de donnes. plus qu'une bibliothque de matrice grant la
paralllisation ?
Quelles sont les nouveauts de la version 3 de TBB ?
Ct cre le concept d'un environnement protg, avec des
La version 3 va tre officiellement annonce la semaine variables sur lesquelles on ne peut pas tout faire (par
prochaine. Tout d'abord, sous Windows, il y a l'utilisation exemple, prendre des pointeur dessus). a nous donne un
du concurrency runtime, que Microsoft vient juste de contrle complet sur ces variables, et on peut donc prendre
sortir. Il y a aussi plein de modifications que je qualifierais en compte des processeurs spcialiss, de la mmoire
d'entretien. Par exemple, on a effectu un certain nombre distribue... Le problme des variables en C et C++ est
Avec Ct, tant qu'on ne prend pas de pointeur sur une Remarque : James doit m'envoyer des papiers entrant
variable, on a donc une latitude d'optimisation un peu plus dans les dtails. Peut-tre un prochain
supplmentaire, qui nous permet d'utiliser du GPGPU, article ? Une prsentation plus dtaille est aussi
l'architecture Larrabee, ou le CPU. Pouvoir bouger la prvue pendant le salon SuperComputing aux US en
donne est donc l'un des concepts principaux de Ct. novembre.
La prise en compte de toutes ces architectures aura-t- Qu'est-ce qui va changer dans Ct suite l'acquisition
elle lieu la compilation ou l'excution ? de RapidMind ?
A l'excution. Nous avons une technologie de JIT. Par Principalement deux points :
exemple, quand on excute le code, si l'on dtecte la
prsence d'un GPU, on peut dcider de lui dlguer tout un Tout d'abord, ils avaient de trs bonnes technologies pour
problme mathmatique, ou encore de partager cette tche cibler la GPU, nous allons en bnficier. Ils nous
entre un CPU et le GPU. permettent aussi de rendre plus prvisible notre technique
de JIT.
C'est un aspect important du design, ce n'est pas une
simple bibliothque de templates gnrant directement du Ensuite, ils ont de nombreux retours utilisateurs sur leur
code, elle gnre des oprations, qui seront ensuite technologie et ont pu proposer des modifications de
envoyes vers un systme grant leur excution. Ce syntaxe, comment la rendre plus en phase avec le C++ et
systme pourra dcider de bouger les donnes, d'agrger plus simple. Par exemple, dans certains cas, du code crit
ou pas des oprations, de les distribuer sur diverses units avec la syntaxe actuelle prend trois ou quatre fois plus de
de calcul... place que du code crit avec la prochaine version.
Ce qui est intressant, c'est que le code source reste Retrouvez l'article de Loc Joly en ligne : Lien79
simple, alors que tant de choses complexes sont utilises
Visual C++ 2010 premires impressions
Visual C++ 2010 premires impressions
Depuis quelques mois je travaille avec Visual Studio 2010 dans un premier temps avec les bta 1 et 2 et maintenant
avec la RC disponible depuis les TechDays 2010.
Mon environnement de travail est un PC sous Seven 64 bits avec deux crans, 2 Go de mmoire et un processeur
Core Duo 6600 2,40 GHz.
L'installation n'a pas caus de problme particulier et cela fait presque deux mois que je travaille sur des projets
migrs de Visual Studio 2008.
1. Comment se comporte cette version en termes de Par dfaut l'IDE utilise le rpertoire de votre solution pour
rapidit ? stocker les fichiers .sdf.
En indiquant un rpertoire dans la rubrique " Emplacement
Je n'ai pas constat de problmes de lenteur, cette version
de secours " l'IDE utilisera cet emplacement pour crer ces
se comporte normalement.
fichiers.
N'oubliez pas de paramtrer votre anti-virus pour exclure
2. Vraiment finie la galre du fichier .ncb et de la perte
ce fichier de l'analyse.
de l'IntelliSense ?
IntelliSense a aussi volu puisqu'il donne maintenant des
Comme vous l'avez peut tre appris, cette nouvelle version informations sur la validit ou la cohrence du code crit,
ne travaille plus avec le fichier .ncb mais utilise une base Exemples :
SQL (locale) pour tenir jour les informations relatives
aux classes (classview) et d'IntelliSense.
En cas de problme nous tions habitus supprimer le
.ncb, dornavant une nouvelle commande "Relancer
l'analyse de la solution", apparat dans le menu projet pour
scanner la solution. Ou encore :
Le fichier .ncb porte l'extension .sdf et est exploit par
SQL Server Compact database.
Un onglet de paramtrage de l'IntelliSense a t rajout
dans les options l'emplacement : Menu
Outils/Options/Editeur de texte/ C/C++ /Avanc.
Les fichiers modifier sont situs l'emplacement 5. Gestion des chemins de recherche
d'installation de Visual Studio 2010, ce qui donne sur ma
Avant vous dfinissiez vos diffrents chemins de recherche
machine :
pour les sources, bibliothques etc dans le menu options de
D:\Program Files (x86)\Microsoft Visual Studio
Visual Studio.
10.0\Common7\IDE\StartPages\en
Eh bien, c'est fini.
Il y a un fichier par type d'environnement, dans mon cas
Ce paramtrage a migr dans votre projet !
j'ai modifi le fichier Links.Ultimate.VC.xml.
Rajouter une nouvelle section est un jeu d'enfant. Je me
Vous pouvez exporter le paramtrage des chemins de
suis concoct une nouvelle section pour rester connect
recherche dfinis globalement dans Visual studio 2008
avec ma tribu :
pour les rintgrer dans Visual Studio 2010.
Au final, dans chaque nouveau projet ou projet migr, on
J'ai commenc par capturer la page d'accueil de
retrouve l'ensemble des chemins de recherche dans les
developpez.com que j'ai enregistre dans un fichier au
diffrentes sections.
format .png
Pour dfinir globalement vos chemins de recherche, il
J'ai ensuite rajout la section suivante juste en dessous de
existe plusieurs solutions : pour les dfinir par l'IDE, il
celle de " Community and Learning Resources "
faut appeler partir d'un projet l'option affichage /
<item>
Gestionnaire de proprits.
<title id="welcome_developpez_title">Communaut
developpez.com</title> L'item Microsoft.Cpp.Win32.user.props contient la
}
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build"
ToolsVersion="4.0" C'est une traduction directe de l'exemple que l'on peut
xmlns="http://schemas.microsoft.com/developer/msb trouver sur le blog de l'quipe Visual US.
uild/2003">
<PropertyGroup>
- Redmarrage de l'application aprs un crash :
<ExecutablePath>$
(ExecutablePath)</ExecutablePath> Ce systme que vous avez peut tre dj expriment dans
<IncludePath>;$(IncludePath)</IncludePath> Office 2007 ou Visual Studio permet de relancer
<ReferencePath>$ l'application avec une restauration de l'environnement de
(ReferencePath)</ReferencePath> travail, qui est rgulirement sauvegard par l'application.
<LibraryPath> $(LibraryPath)</LibraryPath> La bibliothque MFC implmente donc maintenant ce
<SourcePath>$(SourcePath)</SourcePath> mcanisme qui devient une option de l'assistant la
<ExcludePath>$(ExcludePath)</ExcludePath> gnration du programme.
</PropertyGroup>
</Project>
- DPI Awareness :
Il vous faudra donc rajouter toutes vos dfinitions globales Cette option permet d'adapter le texte et les contrles de
dans ce fichier en sparant les chemins par des " ; ", ou en nos applications MFC en fonction du rglage des fontes
passant par l'interface de l'IDE. Windows : la petite fonte correspondant 96 dpi, la
moyenne 120 dpi et la grande 144 dpi.
Bien qu'on arrive au mme fonctionnement qu'avec Visual Cette option est activable dans les options du projet
Studio 2008, la diffrence tient dans le paramtrage, qui a l'emplacement : Outil Manifeste/Prise en charge DPI.
migr dans un fichier stock par l'utilisateur. - Gestion des transactions sur les oprations fichier et
sur les fonctions associes la Base de registre:
6. Quelles sont les nouveauts sur les MFC ? Une nouvelle classe ATL CAtlTransactionManager
- La classe CTaskDialog : permettant de grer les transactions des fichiers a t
rajoute.
Cette nouvelle classe permet de dfinir rapidement des Les diffrentes classes MFC de manipulation de fichiers
botes messages plus volues que la classique bote de ou de rpertoires ont t modifies pour supporter cette
dialogue obtenue par la fonction MessageBox. fonctionnalit.
Elle ne sera disponible qu'avec Windows Vista et Seven, et
CFile(CAtlTransactionManager *);
est une encapsulation directe de l'API Win32.
CStdioFile(CAtlTransactionManager *);
La mthode DoModal appelle directement dans
CAtlFile(CAtlTransactionManager *);
COMCTL32.DLL la fonction TaskDialogIndirect.
CFileFind(CAtlTransactionManager *);
Un petit exemple ?
J'ai rajout ces quelques lignes dans mon projet de tests Les API : AfxRegCreateKey, AfxRegOpenKey,
sur un bouton d'une FormView : AfxRegDeleteKey disposent dsormais d'un paramtre
TransactionManager.
void Ctestvc2010View::OnBnClickedButtontaskdlg()
{ Exemple avec AfxRegCreateKey :
// TODO: Add your control notification handler
code here LONG AFXAPI AfxRegCreateKey(HKEY hKey, LPCTSTR
CTaskDialog dlg(_T("Une CTaskDialog prsente des lpSubKey, PHKEY phkResult,
informations d'une manire claire et cohrente"), CAtlTransactionManager* pTM = NULL);
_T("Que pensez-vous de CTaskDialog?"),
_T("Exemple CTaskDialog"), 0,
Cet exemple issu du blog US de Visual Studio illustre
TDF_ENABLE_HYPERLINKS |
TDF_USE_COMMAND_LINKS , _T("J'espre que vous l'utilisation de la transaction (commit) et du retour arrire
l'aimez!")); (rollback) :
Et ce n'est qu'un petit rsum ! Elles sont disponibles sur la page Qt Solutions (Lien107)
ainsi que dans la version bta du SDK de Qt (Lien108).
Si vous avez des questions, des remarques, des
propositions, n'hsitez pas nous les proposer sur ce Pour bien commencer, n'hsitez pas parcourir le guide
thread. Si vous utilisez d'ores et dj QExtend, nous vous d'utilisation (Lien109).
proposons d'ajouter un tag [QExtend] au titre de votre
message. Et pour Symbian ?
De plus, une fois connect sur le gestionnaire de projets, Cette release pour Maemo supporte uniquement Maemo
vous pourrez aussi nous remonter les bogues rencontrs ou PR 1.2 qui n'est pas encore paru.
proposer des amliorations. Il y aura dans les semaines venir un patch pour
l'utilisation de Qt Mobility avec la plateforme Symbian.
Si vous souhaitez participer au projet, manifestez-vous ici,
nous vous recontacterons. Voir aussi
Et vous ?
Le framework Graphics de Qt apporte diffrents outils permettant d'amliorer l'interface utilisateur de vos
applications en modifiant l'apparence des objets graphiques et en les animant.
Cet article est une traduction autorise de Building Next Generation UIs Across Platforms with Qt (Lien112), par
Johan Thelin.
1. L'article original anime. Avant de pouvoir utiliser ces outils, nous avons
besoin de donner l'application une apparence correcte.
Qt Quarterly est une revue trimestrielle lectronique
propose par Qt destination des dveloppeurs et
3. L'apparence de l'application
utilisateurs de Qt. Vous pouvez trouver les versions
originales (Lien113). Traditionnellement, les applications de bureau sont
fabriques partir de widgets rectangulaires. Les widgets
Nokia, Qt, Qt Quarterly et leurs logos sont des marques grent leur propre contenu ainsi que le contenu de leurs
dposes de Nokia Corporation en Finlande et/ou dans les enfants dans un rectangle qui leur est allou. Ils sont
autres pays. Les autres marques dposes sont dtenues galement conus pour tre positionns les uns par rapport
par leurs propritaires respectifs. aux autres et pour rester peu prs la mme place la
plupart du temps. Le rsultat est une interface plus ou
Cet article est la traduction de l'article Building Next moins rigide construite sur des rectangles. Les
Generation UIs Across Platforms with Qt (Lien112) de environnements de bureau jouent parfois avec les coins
Johan Thelin paru dans la Qt Quarterly Issue 32. arrondis des boutons et ajoutent un peu de couleur.
Aujourd'hui, les utilisateurs veulent plus.
Cet article est une traduction d'un des tutoriels crits par
Nokia Corporation and/or its subsidiary(-ies) incluse
dans la documentation de Qt, en anglais. Les ventuels
problmes rsultant d'une mauvaise traduction ne sont pas
imputables Nokia.
2. Introduction
Classique Moderne
Avec Qt 4.6, une multitude de nouvelles classes ont t
ajoutes. Toutes ces classes vont dans la mme direction : Pour contourner les limitations des widgets, il est possible
des interfaces modernes, animes et ractives. d'utiliser le framework Graphics View (Lien114) comme
base de votre interface utilisateur. Ce framework a
En regardant les interfaces utilisateur d'un point de vue remplac l'ancienne API mais l'a aussi tendu. Avec
utilisateur, les appareils mobiles actuels ont commenc Graphics View, il est possible de faire pivoter, de modifier
employer des interfaces utilisateur imitant le monde rel. l'chelle, de dtacher et de dplacer des lments, mais
Cela a permis d'ajouter des effets graphiques avancs tels galement d'appliquer des pseudo-transformations
que les transformations en trois dimensions, le flou, tridimensionnelles comme la rotation d'un objet autour de
l'opacit, mais aussi les transitions fluides et la simulation l'axe x ou y.
physique. Dans ce type d'application, utiliser des blocs de
construction de l'interface utilisateur standard n'est pas Au cours de l'volution de Qt, de plus en plus de
toujours dsir. Au contraire, l'interface utilisateur doit fonctionnalits ont t ajoutes, y compris la capacit
s'intgrer dans l'appareil physique qui a sa propre intgrer des widgets dans des scnes graphiques. Parmi les
interface. apports de Qt 4.6, on trouve un framework de classes pour
l'animation, des effets graphiques, les tats et des
Qt permet d'aborder cette situation selon deux approches transitions pour l'interface utilisateur. En tant capable de
complmentaires. La premire est constitue des mthodes mlanger des lments graphiques avec des widgets et des
d'interaction avec l'utilisateur. Qt supporte le multi-touch animations, le rsultat permet de crer des interfaces
et la gestuelle en complment du clavier et de la souris. utilisateur modernes.
L'autre approche correspond aux graphiques, aux
transitions et aux effets. Nous allons nous concentrer sur Lors de la cration d'une interface utilisateur moderne, le
cette partie dans cet article. travail des designers est d'obtenir la bonne combinaison
d'effets. Le dveloppeur qui implmente l'interface doit
Les nouvelles classes de graphiques et d'animations de Qt dcider quel outil utiliser pour chaque partie du design.
4.6 peuvent tre divises en trois groupes : les effets L'outil tout prt est le framework Animation (Lien115).
graphiques, les animations de proprits et le framework Ces classes dfinissent, regroupent et ordonnent les
de machine tats. Ces trois composants forment animations. En plus des animations, un ensemble d'effets,
ensemble la base d'une interface utilisateur moderne et tels que le flou et l'ombrage, sont galement disponibles.
QState *greenState = new QState(); Avant de pouvoir dmarrer l'application et profiter des
greenState->assignProperty(greenOpacity, transitions amusantes, il reste une tape finale : dmarrer
"opacity", 1); la machine tats.
greenState->assignProperty(greenBlur,
"blurRadius", 0); machine->start();
greenState->assignProperty(yellowOpacity,
"opacity", 0.5);
greenState->assignProperty(yellowBlur, 4. Qu'en est-il des widgets ?
"blurRadius", 5);
Jusqu' prsent, nous nous sommes concentrs sur les vues
graphiques et les lments, mais presque tout le monde
Pour chaque tat, une srie de transitions doit tre ajoute. utilise une interface utilisateur base sur les widgets. La
Ces transitions permettent de passer de l'tat actuel vers un perspective de devoir remplacer tout le travail dj
autre tat. Comme nous n'avons que deux tats, a nous accompli semble tre une tche assez lourde. La bonne
laisse avec une transition par tat. nouvelle est que presque tous les effets peuvent aussi bien
tre utiliss dans un environnement bas sur les widgets.
Avant de regarder le code, nous allons discuter des
transitions. Toutes les transitions hritent de la classe Commenons par un exemple. Regardons les deux tats de
QabstractTransition (Lien140). ce niveau, les tats dialogue ci-dessous. Ici, les widgets inutiliss sont placs
d'origine et de fin peuvent tre spcifis. Il y a donc des en dehors du widget contenant. Une autre option aurait t
spcialisations de cette classe abstraite reprsentant une de modifier la visibilit des lments.
transition en fonction de la faon dont la transition est
dclenche. Par exemple, il y a des transitions dclenches
par un vnement (QeventTransition (Lien141)) qui peut
intercepter diffrents vnements : l'appui sur une touche
spcifique du clavier (QkeyEventTransition (Lien142)) ou
une action de la souris (QmouseEventTransition
(Lien143)). Il y a galement la classe QsignalTransition
(Lien144) qui implmente une transition dclenche par
un signal spcifique. C'est la classe que nous utilisons dans
le code ci-dessous. Ces tats sont traduits dans le code ci-dessous par le biais
des variables viewState et editState. Les tats spcifiques
QSignalTransition *t = new chaque tat sont dfinis par des appels assignProperty()
QSignalTransition(this, SIGNAL(yellowClicked()));
(Lien146). Comme vous pouvez le voir, pour rendre
t->setTargetState(yellowState);
greenState->addTransition(t);
possible l'utilisation de ces effets, vous devez sacrifier les
layouts. C'est malheureux, mais en explorant les
diffrentes possibilits, vous trouverez le bon mlange
Maintenant que tous les tats sont crs, ils doivent tre entre le bricolage et la flexibilit des layouts. (NDLT : il
ajouts l'objet QstateMachine (Lien145) qui gre est maintenant possible d'utiliser des layouts avec la
l'ensemble. Comme vous pouvez le voir, nous ajoutons machines tats en masquant ou affichant les objets
tous les tats dans la machine tats mais un seul comme l'aide de la proprit visible des Qwidget (Lien147)).
tant l'tat initial. Cela est ncessaire pour donner la
machine tats un point de dpart (n'oubliez pas que QState *viewState = new QState();
toutes les transitions ont un tat d'origine). viewState->assignProperty(editButton, "geometry",
QRect(180, 5, 70, 30));
QStateMachine *machine = new QStateMachine(this);
viewState->addTransition(editButton,
5. Divers
SIGNAL(clicked()), editState); Le code source de l'exemple prsent dans cet article est
editState->addTransition(okButton,
SIGNAL(clicked()), viewState);
disponible au tlchargement l'adresse suivante : qq32-
editState->addTransition(cancelButton,
blurstates.zip (Lien150).
SIGNAL(clicked()), viewState);
Johan Thelin est l'auteur du livre Foundations of Qt
Nous ajoutons ensuite les tats au gestionnaire avant Development de chez Apress et a un faible pour les
d'ajouter les animations par dfaut. Les widgets systmes embarqus. Il est galement impliqu sur le site
m_textLabel et m_textEdit sont dplacs l'aide de la QtCentre ainsi que dans le dveloppement de logiciels et
courbe standard tandis que les boutons se dplacent selon la rdaction technique.
un chemin plus "dynamique" en utilisant la courbe
QeasingCurve::InOutBack (Lien148). Retrouvez l'article de Johan Thelin traduit par Guillaume
Belz en ligne : Lien151
Mac OS X Snow Leopard Prcis et C'est donc au format PDF que j'ai reu l'exemplaire de ce
livre. PDF qui ne contient aucune protection de type
Concis DRM. Ce qui signifie que vous pouvez installer ce PDF o
Snow Leopard, la nouvelle version du dsormais clbre vous voulez. Que ce soit sur votre Mac, votre iPhone,
Mac OS X n'abonde pas, cette fois, en nouveauts. Cette votre iPad, votre PC, liseuse lectronique.
nouvelle version est une amlioration notable du sytme
Leopard, tant du point de vue des technologies employes Par contre, pour viter tout de mme que le PDF se
(comme Grand Central Dispatch) que des applications qui retrouve un peu partout dans la nature, l'adresse email de
ont t revisites et offrent une plus grande souplesse la personne qui a achet le livre apparat au pied de chaque
d'utilisation au quotidien. page.
Le systme s'est fait plus lger et rapide. Le Mac prend en Cela n'est aucunement drangeant puisque la mise en page
charge Microsoft Exchange, le Finder a t largement du livre tient compte du fait que l'adresse email sera
amlior, les applications comme Aperu, iChat, rajoute au bas de chaque page.
QuickTime, Automator ont galement t revisites. Le
menu Services propose plus de fonctionnalits, etc. En 310 pages, Nicoletis Nathalie nous fait passer en revue
ce nouveau systme d'exploitation qu'est Mac OS X Snow
Cette sixime dition est une visite guide du systme. Leopard.
Ouvrage de rfrence conu dans le but de vous aider
matriser et optimiser votre Mac, vous y apprendrez Les sujets abords sont vastes, les nouveauts de Mac OS
d'abord installer votre systme et migrer vos donnes. X Snow Leopard bien traites, et la mise en page rend ce
livre agrable lire l'cran.
Le troisime chapitre est une prise en main : vous y
dcouvrirez le Finder, le compte utilisateur, les diverses Le fait que ce livre soit au format PDF permet d'utiliser le
fonctionnalits de scurit. moteur de recherche pour y retrouver facilement ce qu'on
cherche. Et on profite de plus des copies d'cran en
Le quatrime chapitre est consacr l'interface : du Dock couleur, ce qui n'aurait certainement pas t le cas si le
au Finder, aux Services ou Expos et Dashboard, tout est livre avait t disponible au format imprim.
pass en revue.
Je voulais galement partager avec vous. combien j'ai
Le chapitre 5 vous permettra d'apprhender les Prfrences t agrablement surpris de la ractivit de Digitbooks !
Systme, partir desquelles vous aurez le loisir de En effet, une fois que j'ai eu fini la lecture du livre, j'ai
personnaliser votre Mac. envoy DigitBooks quelques petites remarques.
Les applications et utilitaires prsents sur votre Mac sont Eh bien, figurez-vous que peu de temps aprs je recevais
ensuite dtaills un par un. une rponse de DigitBooks disant que certaines remarques
avait t prises en compte et m'envoyait une nouvelle
L'auteure termine sur un chapitre de questions/rponses version du PDF o la majorit de mes remarques (et
qui fournit la fois des astuces et des solutions en cas de d'autres) avaient t prises en compte.
soucis.
Et l, je dis bravo.
Ce Prcis et concis est un condens de ce qu'il faut savoir
sur Snow Leopard. Il en dessine la cartographie l'aide Si vous n'avez pas encore de livre consacr Mac OS X
d'explications synthtiques et rpond aux besoins Snow Leopard votre disposition, n'hsitez pas une
immdiats des utilisateurs. seconde vous procurer ce livre qui vous permettra de
dcouvrir les nouveauts apparues avec Snow Leopard (et
Critique du livre par Marcos Ickx elles sont plus nombreuses que ce que l'on pourrait croire).
Contrairement Mac OS X Leopard, Prcis et concis o Le prix de 11 n'est vraiment pas exagr. De plus, il faut
Nicoletis Nathalie avait traduit le livre crit par Chuck savoir que pour ce prix vous avez non seulement le livre
Toporek, il s'agit ici d'une version originale et non d'une au format PDF, mais galement au format MobiPocket, et
traduction du livre Mac OS X Snow Leopard Pocket au format epubs (format reconnu par la plupart des
Guide crit cette fois-ci par Chris Seibold. lecteurs de livres lectroniques, par le Kindle, par l'iPad,
l'iPhone...).
Les livres qui sont publis aux ditions Digit Books ne le
sont, comme le laisse supposer le nom de la maison Pour 1 de plus, vous pouvez galement feuilleter le livre
d'dition, qu'au format numrique. en ligne depuis la liseuse en ligne du site immateriel.
Rien voir avec les livres qui expliquent pendant des Toutes les applications principales d'Apple et les utilitaires
chapitres comment paramtrer son client de messagerie ou sont dtaills avec une simple description sans rentrer dans
configurer son Time Machine. les dtails de chaque application.
Il n'est pas fait pour expliquer la naissance de Mac OS X Vous trouverez une trs bonne partie de questions/rponses
avec son histoire et l'historique de son entreprise qui l'a avec une srie de questions toutes simples pour certains
cr, mais vraiment pour expliquer tous les petits dtails utilisateurs de Mac OS X, mais qui peuvent tre trs
de Mac OS X. pratiques pour les nouveaux utilisateurs de Mac.
Certes il explique les nouveauts et volutions de Mac OS Puis l'ouvrage se termine avec une partie "Ressources" qui
X, comme le support de Microsoft Exchange, l'adressage rfrence une liste de logiciels pouvant complter votre
64 bits, Grand Central Dispatch, etc. ventail d'applications ou le manque de certains logiciels
Tous les dtails sont passs au peigne fin, voire mme des pouvant tre utiliss sous Windows ou Linux, comme des
fois un peu trop. traitements de texte, des clients FTP et bien d'autres.
Les prfrences systme sont trs bien dtailles : elles En rsum, cet ouvrage serait plus orient vers les
sont dcrites une par une, du fond d'cran au FireWall. dbutants ou les futurs utilisateurs de Mac OS X.
Elles y passent toutes.
Retrouvez cette critique de livre sur la page livres Mac :
Pratique pour savoir exactement o aller pour modifier un Lien152
paramtre systme.
Cet article va vous prsenter l'utilisation de Easymock et de JUnit 4 pour effectuer des tests unitaires avec des
simulacres de tests.
Et voici notre classe tester : Ces deux mthodes renvoient un objet IExpectationSetters
qui permet de configurer ce que l'on attend de la mthode
public class SimpleService { mocke, comme par exemple, le nombre de fois qu'elle
private ISimpleDao dao;
doit tre appele.
public void setDao(ISimpleDao dao){
2. Vrifier un comportement
this.dao = dao;
} Voici la structure de base pour notre classe de test :
@Test simpleService.debug();
public void save(){}
verify(simpleDaoMock);
@Test }
public void removeWithoutException() throws
NotExistingException {}
La mthode replay() permet de sauvegarder
@Test
l'enregistrement et la mthode verify() permet de vrifier
public void removeWithException() throws que ce qui est fait aprs replay() est bien conforme
NotExistingException {} l'enregistrement. Si vous lancez le test, il va tre valid.
Maintenant, si on commente dao.debug() dans
@Test SimpleService, le test ne va pas se drouler correctement :
public void size(){}
java.lang.AssertionError:
@Test Expectation failure on verify:
public void debug(){} debug(): expected: 1, actual: 0
} at
org.easymock.internal.MocksControl.verify(MocksCo
ntrol.java:111)
Premirement, nous allons commencer par crer un objet at
simulacre (un mock). Pour cela, il nous faut utiliser la org.easymock.EasyMock.verify(EasyMock.java:1608)
classe EasyMock et sa mthode createMock() qui prend en at
paramtre l'interface que doit implmenter le mock. Pour com.dvp.wichtounet.easymock.SimpleServiceTest.deb
ug(SimpleServiceTest.java:45)
amliorer la clart du code, on va utiliser un import
at
statique comme pour JUnit. sun.reflect.NativeMethodAccessorImpl.invoke0(Nati
ve Method)
import org.junit.Before; at
import org.junit.Test; sun.reflect.NativeMethodAccessorImpl.invoke(Nativ
eMethodAccessorImpl.java:57)
import static org.junit.Assert.*; at
import static org.easymock.EasyMock.*; sun.reflect.DelegatingMethodAccessorImpl.invoke(D
elegatingMethodAccessorImpl.java:43)
at
public class SimpleServiceTest { org.junit.runners.model.FrameworkMethod$1.runRefl
private SimpleService simpleService; ectiveCall(FrameworkMethod.java:44)
private ISimpleDao simpleDaoMock; at
org.junit.internal.runners.model.ReflectiveCallab
@Before le.run(ReflectiveCallable.java:15)
public void setUp(){ at
org.junit.runners.model.FrameworkMethod.invokeExp
simpleDaoMock =
losively(FrameworkMethod.java:41)
createMock(ISimpleDao.class);
at
org.junit.internal.runners.statements.InvokeMetho
simpleService = new SimpleService(); d.evaluate(InvokeMethod.java:20)
simpleService.setDao(simpleDaoMock); at
} org.junit.internal.runners.statements.RunBefores.
} evaluate(RunBefores.java:28)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild
Cela va simplement crer un objet mock implmentant (BlockJUnit4ClassRunner.java:76)
l'interface ISimpleDao. La premire action que nous at
pouvons entreprendre avec EasyMock est de vrifier org.junit.runners.BlockJUnit4ClassRunner.runChild
qu'une mthode a bien t appele. Avec EasyMock, cela (BlockJUnit4ClassRunner.java:50)
fonctionne comme un enregistrement : at
org.junit.runners.ParentRunner$3.run(ParentRunner
on joue la squence dsire sur l'objet mock ; .java:193)
on enregistre la squence joue ; at
on teste l'objet ; org.junit.runners.ParentRunner$1.schedule(ParentR
unner.java:52)
on vrifie si la squence a t correctement at
rejoue. org.junit.runners.ParentRunner.runChildren(Parent
Runner.java:191)
On va donc simplement tester pour commencer si la at
mthode debug() de SimpleService appelle bien la org.junit.runners.ParentRunner.access$000(ParentR
unner.java:42)
mthode debug() de notre classe DAO (Data Access
at
Object) :
@Test @Test
public void size(){ public void save(){
expect(simpleDaoMock.count()).andReturn(32); simpleDaoMock.save("xyzzy");
simpleDaoMock.save("xyzzy");
replay(simpleDaoMock); simpleDaoMock.save("xyzzy");
simpleDaoMock.save("xyzzy");
assertEquals(32, simpleService.size()); simpleDaoMock.save("xyzzy");
verify(simpleDaoMock); replay(simpleDaoMock);
}
simpleService.save("xyzzy", "xyzzy", "xyzzy",
"xyzzy", "xyzzy");
Par ces quelques lignes de code, on fait deux tests. On
vrifie si la mthode count() a bien t appele et si size() verify(simpleDaoMock);
retourne la mme valeur que count(). Ce qui est bien le cas }
si on lance le test. On vient donc voir qu'il est trs simple
de spcifier une valeur de retour pour une mthode sur un Ce genre de code devient vite trs lourd crire en
objet mock. fonction du nombre d'appels. On a deux solutions : soit on
fait une boucle pour appeler les mthodes du mock, soit on
4. Traiter les exceptions utilise les fonctionnalits d'EasyMock qui permettent de
EasyMock permet galement de traiter les exceptions. Il spcifier le nombre de fois qu'une mthode doit tre
nous faudra nouveau utiliser la mthode expect(), mais appele grce la mthode times() :
cette fois, au lieu de spcifier une valeur de retour, on va
simpleDaoMock.insert("Arthur"); 6. Conclusion
Voil, nous avons maintenant pass en revue les
replay(simpleDaoMock);
principales fonctionnalits que nous offre EasyMock pour
la cration d'objets mocks pour les tests unitaires. Comme
simpleService.insert("Arthur");
vous avez pu le constater, c'est un moyen simple mais trs
verify(simpleDaoMock);
puissant de vrifier le comportement d'un objet en fonction
} du comportement d'un objet dont il dpend. Il existe
d'autres librairies qu'EasyMock pour faire cela comme
@Test JMock, JMockit ou encore Mockito. Personnellement, je
public void insertNotValid(){ trouve qu'EasyMock est la plus agrable utiliser et
expect(simpleDaoMock.isValid("Arthur")).andRe fournit toutes les fonctions dont j'ai besoin pour faire mes
turn(false); tests, c'est pourquoi j'ai choisi de prsenter cette librairie.
Amliorer la testabilit
Cet article donne quelques pistes de rflexion pour faciliter les tests dans le cadre d'une mthode de dveloppement
"cycle en V".