Environnement de développement pour le PHP

Introduction

De même que pour le C, je suis à la recherche d'un EDI pour le développement PHP. Jusqu'à maintenant, la programmation en PHP était réalisée avec Notepad++. Même si celui-ci est un bon éditeur de code, je lui reproche son absence de debugger. Pour des raisons pédagogiques, j'ai besoin régulièrement d'exécuter pas à pas une routine et de pouvoir observer les différentes valeurs que va prendre une variable.

WampServer

Il y a quelque temps, j'ai écrit un petit article sur WampServer. Nous allons donc utiliser cette installation pour le développement PHP.

Netbeans

Etant donné que l'EDI choisi pour le C est Netbeans, il me parait normal d'essayer d'utiliser Netbeans pour le PHP aussi.

Pour cet essai, nous allons télécharger et installer la version PHP de Netbeans.

Configuration

Avant de pouvoir utiliser le plugin PHP, il faut le configurer. Il s'agit de donner le chemin de l'interpréteur PHP.

Hello World

Comme d'habitude, un petit "Hello World" pour tester l'installation.

Nouveau projet

Nom et emplacement du projet

Attention! Netbeans ne crée pas automatiquement le sous-dossier "HelloWorld"

A ce stade, il est possible de faire "finish" vu que les valeurs par défaut sont utilisées pour les paramètres suivants. Malgré cela, voici la suite des paramètres.


Nous avons maintenant un projet vide. Il s'agit de mettre un peu de code. Pour ce faire, il faut ajouter un fichier "index.php".


Ensuite, il faut mettre le code

Et voici ce que donne le projet lancé à l'aide du bouton "run"

Debugging

En installant WampServer, nous avons aussi installé le debugger "XDebug". Pour l'activer sous Netbeans, il faut juste se déplacer dans le menu de WampServer (PHP/PHP Settings) et activer "(XDebug) : Remote debug".

Ensuite, il est possible d'utiliser le debugger depuis Netbeans :

Conclusion

Bonne nouvelle! Netbeans et son plugin PHP répondent aux besoins. Ils permettent d'éditer le code PHP et de le debugger convenablement.

Environnement de développement pour le C

Introduction

Depuis quelque temps, je suis à la recherche d'un environnement de développement pour enseigner le C.

Les contraintes sont les suivantes :

  • IDE (pas des produits détachés)
  • Multiplateformes (en tout cas Windows et MacOSX)
  • Debugger intégré
  • Autocomplétion

Recherches

Jusqu'à maintenant, le produit utilisé était Microsoft Visual Studio. Celui-ci n'étant pas multiplateforme, il s'agit de trouver une alternative.

Lors de ma phase de recherche, je me suis penché sur les produits suivants :

Après les avoir tous évalués, j'ai choisi Netbeans. Celui-ci présente, selon moi, les avantages suivants :

  • Utilisé par les étudiants plus tard dans leur cursus pour les cours Java
  • Open Source
  • Multiplateformes
  • Traduit en français

De plus, même si je ne l'ai pas beaucoup utilisé pour écrire du C, j'écris la quasi-totalité de mes projets Java avec. J'ai donc beaucoup d'expérience sur ce produit et je trouve qu'il est de très bonne qualité.

Dans un premier temps, je n'avais pas envisagé Netbeans car une mauvaise expérience avait eu lieu, il y a quelques années. Sous Windows, le compilateur gcc était installé à partir du projet cygwin et cela ne s'est pas toujours très bien passé avec les différentes variantes d'installations.

GCC

Les trois EDI envisagés plus haut nécessitent l'installation séparée d'un compilateur. Voici, par exemple, la liste des compilateurs supportés par Code::Blocks.

Pour débuter, je vais essayer le plus courant de ces compilateurs (gcc) et, s'il ne donne pas satisfaction, j'étudierai des variantes plus exotiques.

MacOSX

Les outils de développement regroupés dans le projet xcode de Apple contiennent le compilateur gcc. Ce qui me dérange c'est que xcode contient beaucoup plus de choses que gcc. Ayant un disque ssd, je préfère économiser un peu de place, donc je me suis mis à la recherche d'un package prêt à l'emploi qui permet de n'installer que le gcc.

Voici ce que j'ai trouvé : gcc-10.6. J'ai choisi la version préconstruite pour mon OS (Snow Leopard) : GCC-10.6.pkg

 Test

Après cette installation, je fais un petit test de gcc :

Je crée le fichier "helloworld.c" dans le dossier /tmp

#include 
 
int main(int argc, char** argv) {
 
    printf("Hello World!\n");
 
    return 0;
}

Je le compile et l'essaye :

Windows

MinGW

Pour éviter les problèmes liés à cygwin cités précédemment, je vais essayer d'utiliser MinGW.

Téléchargement

Installation

Une fois le programme d'installation démarré, je ne choisis que le strict nécessaire : "C Compiler" et "MSYS Basic System".
Voici un aperçu de la dernière page avant l'installation :

Installing:
      mingw-get
      pkginfo
      C Compiler
      MSYS Basic System
 
Using pre-packaged repository catalogues (20120426)
 
Destination location:
      C:\MinGW

L'installation démarre ensuite et télécharge les fichiers dont j'ai besoin. Une fois l'installation terminée, j'ai un dossier "C:\MinGW" de 170 Mb avec le compilateur gcc et tout ce qu'il faut pour faire du développement C sous Windows.

Test

Comme pour l'installation sous MacOSX, je crée le fichier helloworld.c dans le dossier %TEMP% de Windows.

#include 
 
int main(int argc, char** argv) {
 
    printf("Hello World!\n");
 
    return 0;
}

Netbeans

Pour ce test, j'ai choisi de télécharger et d'installer la dernière version de Netbeans (7.2) uniquement avec le plugin C.

MacOSX

Le même magnifique test que précédemment donne un résultat tout aussi concluant.

Windows

L'intégration de gcc sous Windows est un peu plus compliquée que sous MacOSX. Il nous faut la faire manuellement, car Netbeans n'arrive pas à trouver gcc automatiquement comme sous MacOSX.

Path

Selon Wikipedia : "Sous Windows, si un exécutable n'est pas à l'emplacement par défaut, la variable %PATH% indique dans quels répertoires le chercher."

Avant de démarrer Netbeans, il faut modifier la variable path pour que cet EDI trouve les outils de "make" dont il a besoin. Si cette configuration n'est pas réalisée, la compilation ne va pas fonctionner et le message d'erreur "mkdir: Command not found" sera affiché.

Chemin à ajouter dans le PATH :

C:\MinGW\msys\1.0\bin

C plugin

Il s'agit maintenant de configurer le Plugin C de Netbeans pour utiliser le gcc que nous installé avec MinGW.


Test

Une fois ces quelques efforts de configuration terminés, la compilation sous Netbeans fonctionne aussi bien que sous MacOSX.

Conclusion

Netbeans sera utilisé comme EDI pour d'autres langages de programmation (Java et PHP). Il est donc intéressant de pouvoir l'utiliser également pour le C. Cela évite de multiplier les installations et permet de se concentrer sur les langages eux-mêmes plutôt que sur les outils de développement. Je vais donc utiliser cet outil pour mon cours de C.

Maven/Netbeans : Tutoriel simple

Introduction

Prochainement, j'ai envie de présenter quelques tutoriels Java. Un prérequis à ces futurs tutoriels sera l'utilisation de Maven, c'est pourquoi je commence par présenter ce formidable projet. Même si Maven est un sujet maintes fois abordé, je vais en présenter ma propre variante. Plus d'un point de vue pragmatique que théorique.

Documentation

Quitte à passer pour un dinosaure, quand je m'intéresse à un nouveau jouet technologique, j'aime bien lire le mode d'emploi. Dans le cas de Maven, le mode d'emploi que j'ai utilisé est le livre suivant :

Titre : Apache Maven

Auteurs : Nicolas De loof et Arnaud Héritier

Amazon : Apache Maven

Ce livre est très agréable à lire. Il est rédigé dans un style "détendu" tout en fournissant les informations nécessaires à la compréhension et à l'utilisation de Maven.

Il se trouve que les différents sujets et technologies abordés à fil des pages et très proche de plusieurs projets sur lesquels j'ai travaillé ces dernières années:

  • Systèmes de gestion des versions (notamment SubVersion et Git)
  • Testing (JUnit, TestNG et Selenium)
  • Google Web Toolkit (GWT)
  • Serveurs d'application Web Java (Tomcat, Jetty)

Mise en oeuvre de Maven

L'EDI que j'utilise le plus souvent pour du développement Java est Netbeans. Cet environnement de développement peut ouvrir un projet ayant la structure de fichiers Maven et intègre tous les outils nécessaires aux tâches courantes d'un programmeur.

Netbeans 7.1

Création, sous Netbeans, d'un nouveau projet Java en utilisant Maven. Ayant pour habitude de faire des "Hello World" à tout vent, en voici un de plus, le 5ème ces derniers temps ;-)

Création du projet helloworld5


Sorties à la création du projet

cd /Users/silenus/NetBeansProjects; JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home "/Applications/NetBeans/NetBeans 7.1.2.app/Contents/Resources/NetBeans/java/maven/bin/mvn" -DarchetypeGroupId=org.apache.maven.archetypes -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.1 -DarchetypeRepository=http://repo.maven.apache.org/maven2 -DgroupId=ch.conceptforge -DartifactId=helloworld5 -Dversion=1.0-SNAPSHOT -Dpackage=ch.conceptforge.helloworld5 -Dbasedir=/Users/silenus/NetBeansProjects -Darchetype.interactive=false --batch-mode archetype:generate
Scanning for projects...
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.pom (6 KB at 12.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-plugins/22/maven-plugins-22.pom (13 KB at 108.8 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/21/maven-parent-21.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/21/maven-parent-21.pom (26 KB at 150.5 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/apache/10/apache-10.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/apache/10/apache-10.pom (15 KB at 112.9 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-deploy-plugin/2.7/maven-deploy-plugin-2.7.jar (27 KB at 149.7 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.pom (20 KB at 165.2 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.jar
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-site-plugin/3.0/maven-site-plugin-3.0.jar (112 KB at 460.4 KB/sec)
 
------------------------------------------------------------------------
Building Maven Stub Project (No POM) 1
------------------------------------------------------------------------
 
>>> maven-archetype-plugin:2.0:generate (default-cli) @ standalone-pom >>>
 
<<< maven-archetype-plugin:2.0:generate (default-cli) @ standalone-pom <<<
 
[archetype:generate]
Generating project in Batch mode
Archetype defined by properties
----------------------------------------------------------------------------
Using following parameters for creating project from Old (1.x) Archetype: maven-archetype-quickstart:1.1
----------------------------------------------------------------------------
Parameter: groupId, Value: ch.conceptforge
Parameter: packageName, Value: ch.conceptforge.helloworld5
Parameter: package, Value: ch.conceptforge.helloworld5
Parameter: artifactId, Value: helloworld5
Parameter: basedir, Value: /Users/silenus/NetBeansProjects
Parameter: version, Value: 1.0-SNAPSHOT
********************* End of debug info from resources from generated POM ***********************
project created from Old (1.x) Archetype in dir: /Users/silenus/NetBeansProjects/helloworld5
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 3.814s
Finished at: Sun Aug 26 20:41:03 CEST 2012
Final Memory: 9M/81M
------------------------------------------------------------------------


Cool, ils ont pensé à moi chez Sun Oracle. Mon "Hello World" est déjà écrit.

Un petit run

Le "run project (F6)" lance le projet comme s'il s'agissait d'un projet Java standard :

cd /Users/silenus/NetBeansProjects/helloworld5; JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home "/Applications/NetBeans/NetBeans 7.1.2.app/Contents/Resources/NetBeans/java/maven/bin/mvn" "-Dexec.args=-classpath %classpath ch.conceptforge.helloworld5.App" -Dexec.executable=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -Dexec.classpathScope=runtime process-classes org.codehaus.mojo:exec-maven-plugin:1.2:exec
Scanning for projects...
 
------------------------------------------------------------------------
Building helloworld5 1.0-SNAPSHOT
------------------------------------------------------------------------
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.pom
 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.pom (7 KB at 9.1 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.jar
 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-resources-plugin/2.5/maven-resources-plugin-2.5.jar (26 KB at 147.7 KB/sec)
 
[resources:resources]
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.pom
 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.pom (6 KB at 46.9 KB/sec)
Downloading: http://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar
 
Downloaded: http://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-filtering/1.0/maven-filtering-1.0.jar (42 KB at 94.2 KB/sec)
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
skip non existing resourceDirectory /Users/silenus/NetBeansProjects/helloworld5/src/main/resources
 
[compiler:compile]
Compiling 1 source file to /Users/silenus/NetBeansProjects/helloworld5/target/classes
 
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 3.142s
Finished at: Sun Aug 26 20:58:13 CEST 2012
Final Memory: 10M/81M
------------------------------------------------------------------------

Ajout d'une dépendance

Pour illustrer l'utilité de Maven, je vais ajouter une fonctionnalité à mon beau "helloworld5". Je vais le faire parler Xml. Et, pour ce faire, je souhaite utiliser la librairie XStream.

Habituellement, je modifie directement le pom.xml, mais il existe aussi une possibilité via l'interface utilisateur de Netbeans.


Une recherche de XStream me propose directement les librairies qui pourraient m'intéresser.

Et voilà. Un clic et la dépendance est créée et donc, la librairie utilisable.

Projet de test

Container

package ch.conceptforge.helloworld5;
 
public class Container {
 
    private String text;
 
    public Container() {
    }
 
    public Container(String text) {
        this.text = text;
    }
 
    public String getText() {
        return text;
    }
 
    public void setText(String text) {
        this.text = text;
    }    
 
}

App

package ch.conceptforge.helloworld5;
 
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
 
public class App
{
 
    private static Container c;
 
    private static void dispalyText() {
        System.out.println(c.getText());
    }
 
    private static void displayXml() {
        XStream xs = new XStream(new DomDriver());
        xs.alias("container", Container.class);
        System.out.println(xs.toXML(c));
    }
 
    public static void main( String[] args )
    {
        c = new Container("Hello World!");
        dispalyText();
        displayXml();
    }
}

Nouveau run

cd /Users/silenus/NetBeansProjects/helloworld5; JAVA_HOME=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home "/Applications/NetBeans/NetBeans 7.1.2.app/Contents/Resources/NetBeans/java/maven/bin/mvn" "-Dexec.args=-classpath %classpath ch.conceptforge.helloworld5.App" -Dexec.executable=/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bin/java -Dexec.classpathScope=runtime process-classes org.codehaus.mojo:exec-maven-plugin:1.2:exec
Scanning for projects...
 
------------------------------------------------------------------------
Building helloworld5 1.0-SNAPSHOT
------------------------------------------------------------------------
 
[resources:resources]
[debug] execute contextualize
Using 'UTF-8' encoding to copy filtered resources.
Copying 0 resource
 
[compiler:compile]
Compiling 2 source files to /Users/silenus/NetBeansProjects/helloworld5/target/classes
 
[exec:exec]
Hello World!
 
  Hello World!
 
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 1.585s
Finished at: Sun Aug 26 21:38:49 CEST 2012
Final Memory: 8M/81M
------------------------------------------------------------------------

Conclusion

Mon but, dans cet article, n'était pas de réécrire le livre sur Maven, que j'ai présenté au début de l'article. Je ne souhaite pas non plus essayer de parler de Maven dans sa globalité.
Maven est présent dans la plupart des projets Java sur lesquels je travaille. C'est un outil qui fait partie de ma vie de tous les jours et qui me rend de grands services. Dans l'immense majorité des projets Java, j'utilise Netbeans comme EDI. Il y a quelque temps, j'ai eu l'occasion d'utiliser Eclipse pour un projet. Je dois avouer que j'ai été très surpris de voir à quel point Maven à l'air d'une pièce rapportée sous Eclipse par rapport à ce que j'ai l'habitude d'utiliser avec le couple Netbeans/Maven.