[PlayFramework] Play, le framework de développement Java du future?

Play? Kézako?

Aujourd’hui, en réalisant quelque recherche sur les différents framework permettant de le développement de sites webs, je suis tombé sur un (apparemment nouveau) framework qui me paraît bien prometteur. J’ai nomé “Play“.

Ce framework est développé en Java, et pour développé… Ben c’est aussi en Java! Chose qui m’intéresse grandement, vu que c’est le langage que je connais le mieux (avec PHP)… Il a été développé en premier lieu par Guillaume Bort, un Français, et aidé, à l’heure actuelle, de 9 autres développeurs. Le framework est, comme dit précédemment, jeune, et se trouve en version 1.02. La version 1.1 se profile à l’horizon.

Déjà, pour vous donner un aperçu de la vitesse à laquelle il est possible de développer, voici la vidéo se trouvant en page d’accueil de leur site :

Au niveau des possibilités offertes par Play, tout ce qui se trouve dans Java SE, avec un ÉNORME avantage. Lorsqu’un bug se produit, par exemple un “;” manquant, il suffit de modifier le fichier, le sauvegarder, et recharger la page! Pas besoin de relancer le serveur ou autre.  Une fonctionnalité déjà très intéressante.

Ensuite, comme RoR, les URI sont du type /Control/Action, un concept que j’apprécie :)

Pour finir, je dirais qu’un autre avantage de ce framework est la façon d’écrire ses templates. Alors qu’avec, par exemple, JSP, il faut écrire un paragraphe énorme comme celui-ci :

1
2
3
4
5
6
7
8
9
10
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
  <c:choose>
    <c:when test="${emails.unread != null && fn:size(emails.unread)}">
    You have ${fn:size(emails.unread)} unread email(s)!
  </c:when>
  <c:otherwise>
    You have no unread emails!
  </c:otherwise>
</c:choose>

Qui est pas très… Propre dirons-nous, avec Play, il suffit de :

1
You have ${emails.unread ?: 'no'} ${emails.unread?.pluralize('email')} !

Prochaine étape?

Pour moi, la prochaine étape est de testé ce framework à l’occasion, et je vous ferai un petit retour sur ce que j’ai trouvé bien/moins bien :)

En attendant, pour vous donnez un peu envie d’en savoir plus, allez ici pour voir quelques exemples :) Et pour télécharger, ainsi que le guide du débutant, ça se trouve par

PHP 5.3 et PHP 5.2 en parallèle sur un serveur

Peut-être certains administrateurs serveur se sont déjà posés cette question… Comment avoir plusieurs version de PHP sur un même serveur, par exemple PHP4 et PHP5 ? Ou PHP 5.3.1 et PHP 5.2.6 comme moi aujourd’hui. Ceux qui ont peut-être déjà essayé se sont probablement tirés les cheveux, comme moi :)

Pour tous ceux qui aimeraient pouvoir le faire sur leur serveur, voici une solution :)

Pré-requis

  • Tout d’abord, il vous faut un serveur, soit en 32, soit en 64 bits c’est égal (la solution marche sur les 2). Personnellement j’avais une Debian Lenny en 64 bits, donc ce tuto sera plutôt expliqué pour Debian/Ubuntu que pour CentOS ou autres distributions linux existantes.
  • Du temps devant soi

Installation de la solution LAMP normale (PHP 5.2)

Tout d’abord, il vous faudra avoir une installation LAMP (Linux Apache MySQL PHP) qui fonctionne.
Sous Debian, nous allons utiliser la façon la plus rapide. En étant root, ou avec sudo devant :

apt-get install apache2 php5 php5-mysql mysql-server phpmyadmin


Lorsque ceci est fait, vous pouvez normalement afficher une page (“It works!”) en allant à l’adresse suivante (si en local) ou avec l’adresse ip du serveur :
http://localhost
(Pour la suite du tutorial, nous prendrons comme adresse : 192.168.1.40)

Maintenant, je vous propose de voir votre configuration PHP actuelle, grâce à un fichier “phpinfo.php”, que vous mettrez dans /var/www/ (si pas configuré plus en détail votre Apache).

Donc vous allez créer et remplir ce fichier avec la commande suivante :

echo "<?php phpinfo(); ?>" > phpinfo.php


Lorsque vous allez à l’adresse http://192.168.1.40/phpinfo.php vous verrez une page dans ce genre là (dépendra de votre version PHP et de votre système) :

screen_php_1

Nous voyons donc que chez moi, la version PHP installée est la version 5.2.6.

Le problème, c’est que moi, maintenant, j’aimerais faire de l’objet, et utiliser les Late Static Binding qui ne sont disponibles que depuis la version 5.3.

Compilation de PHP 5.3.1

Maintenant, il nous faut compiler une nouvelle version de PHP, par exemple pour la version 5.3.1 (cela peut être n’importe quelle autre version de PHP, par exemple la PHP 4)

Tout d’abord, alors récupérer PHP depuis le site php.net, par exemple pour moi, le fichier se trouve à l’adresse suivante : http://ch2.php.net/get/php-5.3.1.tar.bz2/from/this/mirror

Je vais donc le télécharger sur le serveur, et l’extraire, grâce à la commande suivante :

cd ~ && wget http://ch2.php.net/get/php-5.3.1.tar.gz/from/this/mirror && tar xvzf php-5.3.1.tar.gz && cd php-5.3.1


Lorsque ceci est fait, il va falloir installer une liste de paquet (dépendra de vous, et ce que vous voulez inclure avec php). Par exemple, moi, je voulais avoir le support MySQL et Curl, plus 2-3 petites choses. La liste des paquets dépendra de la commande suivante.

apt-get install build-essential mysql-client libmysql++-dev libxml2-dev  libcurl4-openssl-dev libpng-dev libicu-dev libmcrypt-dev libxslt-dev


Ensuite, dans le répertoire de php-5.3.1 (nous y sommes déjà normalement), lancez la commande suivante (vous pouvez personnaliser cette commande selon vos besoins. Il est pas contre important de ne pas mettre le chemin par défaut pour le “–prefix” ainsi que pour le “–with-config-file-path” :

./configure --prefix=/usr/local/php53 --with-config-file-path=/usr/local/php53/etc/php/ --disable-ipv6 --with-curl --enable-ftp --with-gd --enable-intl --enable-mbstring --with-mcrypt --with-pdo-mysql=mysqlnd --enable-soap --with-xsl --with-zlib --with-openssl --with-pear=/usr/local/php53/share/php --with-mysql


Si tout se passe bien, vous devriez arriver avec un message du genre :
+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+
Thank you for using PHP.

Dans le cas contraire, il vous manque des paquets que vous devez installer afin de pouvoir compiler PHP.

Lorsque tout est bon, on lance la compilation, et nous allons vite boire le café en attendant :)

make && make install


Maintenant, php 5.3.1 est installé, mais ne peut pas encore être utilisé, pour cela, nous allons feinter, et utilisé un module d’apache s’appelant “SUPHP”

SUPHP, et comment gérer ses versions!

Afin de gérer nos différentes version PHP, nous allons utilisé le module SUPHP, d’apache.

Pour cela, installer le paquet suivant :

apt-get install libapache2-mod-suphp


Il nous faut ensuite désactiver le module php d’apache2, pour cela :
a2dismod php5
Ensuite, il faut configurer suphp pour gérer nos version. Nous allons pour cela lui ajouter un Handler dans le fichier de configuration /etc/suphp/suphp.conf .Après la ligne application/x-httpd-php=php:/usr/bin/php-cgi, ajoutez la ligne suivante :

x-httpd-php-5-3="php:/usr/local/php53/bin/php-cgi"


Bien sûr, le chemin spécifié (/usr/local/php53/bin/php-cgi) est à modifier selon la ligne que vous avez utilisée pour la configuration de PHP au-dessus.

Ensuite, il faut modifier le fichier /etc/apache2/mods-enable/suphp.conf et rajouter les lignes suivantes après le premier suPHP_AddHandler application… :

AddType x-httpd-php-5-3 .php53
 suPHP_AddHandler x-httpd-php-5-3

Il faut aussi modifier le fichier de configuration du VirtualHost par défaut, afin d’autoriser les .htaccess
Par défaut, c’est le fichier /etc/apache2/sites-enabled/000-default/. Il faut modifier le AllowOverride None en AllowOverride All (dans le “<Directory />”), ainsi que celui dans le <Directory /var/www>

Il faut aussi ajouter la ligne suivante à /etc/apache2/apache2.conf :

AddType x-httpd-php-5-3 .php53


Et pour finir, on redémarre apache!

/etc/init.d/apache2 restart

On teste!

Maintenant, il reste plus qu’à tester si cela fonctionne correctement.

Pour cela, il nous faut créer un htaccess dans /var/www avec le contenu suivant :

AddHandler x-httpd-php-5-3 .php


Cela va indiquer à SuPHP/Apache que lorsque la page est appelée, il doit utilisé le Handler php 5.3, et pas celui par défaut.

Ensuite nous pouvons retourner sur le “phpinfo”, et nous verrons la nouvelle version de PHP :)

screen_php_2

Problème de “Internal Server error” ?

Dans le cas où une erreur interne apparaît, il est probable que cela soit pour une seule raison :

Le fichier PHP (ici phpinfo.php) NE doit PAS appartenir à root pour être exécuté.

Pour corriger ce problème, 2 solutions :

Changer dans la configuration de SuPHP les valeurs pour le min_uid et min_guid.

Changer le propriétaire du fichier, pour mettre un utilisateur normal. Je vous conseille ce choix, pour des raisons de sécurité.

Retour de vague (Google wave)

Aujourd’hui, je vais faire un petit retour sur ma courte utilisation de Google Wave, le truc à la mode du moment …
J’ai reçu vendredi matin à 3h48) la précieuse invitation pour Google Wave , de la part d’un inconu (Bobby Johnson que je remercie au passage^^)

Google Wave Home screen

Google Wave Home screen

Google Wave, Kézako?!?

Google Wave est une plateforme développée par Google, qui se trouve entre une messagerie instantanée, et une boite mail. Cette technologie est encore en mode “Preview”, sur invitation, mais est déjà bien avancée, et permet de voir à quoi cela pourrait servir.

Diagram Wave Protocole

Diagram Wave Protocole

Cette technologie utilise un nouveau protocole, développé pour l’occasion par Google, afin que n’importe qui puissent développer son propre système de vague, compatible avec Google Wave, ce qui permettra à une entreprise d’avoir son propre système, et communiqué avec une autre par exemple. Pour plus d’info concernant ce protocole, et si vous voulez développer votre Wave Software, vous pouvez retrouver la documentation et les spécifications techniques sur Google Wave Federation Architecture.

Dans Google Wave, il y a une notion de “Wave ” (Vague en français), qui pourrait plus ou moins correspondre à un suivi de mail, avec une ou plusieurs personnes qui interagissent. Chaque Wave est composée de “Wavelet” (Vaguelette en français),  ou un sujet de conversation (et qui peuvent être privée entre 2 personnes, mais au milieu de la même Wave, car ayant un rapport). Et dans chaque Wavelet, il y a des “Blips”, qui sont des réponses à une Wavelet. Lorsqu’un utilisateur écrit quelque chose, l’autre voit en direct l’autre utilisateur écrire.

Wave Entities

Wave Entities

Il est possible, dans chaque wave, de rajouter des plugins, permettant par exemple d’afficher une carte, et rajouter des points dessus, ou des robots permettant par exemple de mettre à jour notre status Twitter.

Petit exemple de carte :

Google Wave Interaction Map

Google Wave Interaction Map

Sur cette carte, toutes les personnes inscrites sur la wave, peuvent placé un point où ils habitent. Cela pourrait permettre par exemple de prévoir un itinéraire avec une autre personne grâce à Google Wave.

Beaucoup d’autres extensions existent, et sont en cours de développement. Vous pouvez aussi créer vos propres plugins pour Google Wave ! Pour plus d’information, rendez vous sur le site de l’API Google Wave

Une autre chose intéressante est de pouvoir mettre une Wave dans une page web. Cela peut donc permettre de faire un site, grâce à Google Wave, en incluant la wave comme contenu de page.

Voici un petit example :

Google Wave Embed Sample

Google Wave Embed Sample

Mon impression

Positive

Personnellement, je trouve le concept vraiment très intéressant, et pouvant servir pour beaucoup de chose, tel que :

- Discuter d’un projet en pouvant interagir directement

- Discuter avec des amis

- Prévoir une sortie/un voyage

Et tout ce que votre imagination peut avoir comme idée..

L’interface est plutôt sympathique, surtout pour une version Preview, mais pour le moment, elle n’est pas vraiment accessible à tout le monde. J’espère qu’elle sera plus “User-Friendly” pour la version finale.

Le sytème d’extension a l’air pas mal ficelé, et va permettre de rajouter énormément de choses intéressante à la version de “base”..

Négative

L’interface est par moment un peu lourde, et lague un peu. J’espère qu’un client lourd sortira, et qu’il n’y aura pas que la version de Google Wave sur un site Web (Apparemment, c’est bien parti, et une première version Mac existe).

Comme dit précédemment, l’interface est pas assez User-Friendly pour l’utilisateur lambda.

Il est aussi difficile de retrouver les endroits modifier dans la Wave, vu qu’il est possible de modifier n’importe où. Il faut donc chercher manuellement. J’espère qu’il y aura un moyen de voir que les réponses, où au moins nous renvoyer aux endroits nouveaux, sans devoir le faire à la main.

Pour le moment aucune limite à l’exécution de Javascript dans une Wave, ce qui pourrait permettre à certains utilisateurs de mettre des bouts de codes Javascript malicieux…

Conclusion

Dans l’ensemble, je pense que ça peut être quelque chose de vraiment intéressant, que ce soit pour un particulier, ou pour une entreprise.. J’attends la suite avec impatience, et surtout que certains potes aient reçu leurs invitations, afin de pouvoir réellement testé :)