Archive for March, 2007

GWT: Hibernate inside !

Friday, March 23rd, 2007

GWT peut-il survivre sans Hibernate ?
Lors de nos débats actuels (vous savez, ces longues palabres techniques et enflammées où chacun campe sur ses positions ;) ) sur la libraire Google, la gestion des proxy Hibernate a une place de choix.
Au-delà des octets se pose une question de fond : à quel point une librairie émergeante doit-elle supporter des standard de marché pour être s’imposer ?
Attardons-nous quelques instants sur la question.
Son sens n’est pas de savoir si une nouvelle librairie doit fonctionner avec les milliers de lignes de code existantes de par le monde. Il semble relativement évident que toute nouvelle technologie qui nécessiterait de faire table rase de l’existant, tant au niveau formation que code produit, serait vouée à l’échec, si géniale soit-elle. Les enjeux économiques autorisent une évolution technique, pas une révolution.

Non, l’élément important est plutôt de savoir à quel point elle devrait être compatible avec l’existant… La gestion des proxies en est une assez bonne illustration : GWT doit-elle les prendre en charge, en sérialisant les objets Hibernate en JavaScript ?
Pour ma part, j’y vois plusieurs objections :

  • Il ne me semble pas du ressort d’une librairie de présentation de gérer les artefacts de sa consœur qui gère l’accès aux données
  • Pourquoi supporter Hibernate, et pas TopLink, JDO, Spring, JackRabbit, [insérez ici votre librairie préférée], … ?
  • Le mécanisme de proxies n’est pas standardisé. Non seulement un tel développement serait donc spécifique à Hibernate, mais il serait lié à une implémentation particulière (version) de la librairie de persistance !

Inversons maintenant la question : Hibernate doit-il supporter GWT ? En fait, je trouverai assez naturel qu’Hibernate propose un mécanisme de « déproxification » des objets qu’il gère, pour répondre au besoin des Objets qui transitent entre plusieurs machines virtuelles. Cela recouvre à la fois le cas de GWT (si on considère que la librairie fonctionne sur une machine virtuelle Java écrite en JavaScript), mais aussi la sérialisation/désérialisation XML ou l’envoi sur JMS.

Au final, il est probable que GWT et Hibernate continuent à évoluer dans leurs sphères respectives. La « glue » entre l’un et l’autre reste pour l’instant une problématique à la charge de l’application. Nul doute que l’usage fera émerger rapidement de bonnes pratiques qui permettront de marier efficacement deux technologies majeures mais qui ont parfois du mal à cohabiter.

LazyKiller : le retour
Et pourtant, tout n’est pas perdu B) ! J’ai mis au point une petite librairie (en fait, plutôt une preuve de concept) permettant d’utiliser des objets du Domaine Hibernate partiellement chargé dans la couche de présentation GWT (et de les réinjecter dans le code serveur).
Pour les plus courageux d’entre vous, j’ai écrit un long article qui explique les problèmatiques rencontrées, celles résolues et les limitations actuelles. Bonne lecture !

Rich Ajax Platform

Monday, March 12th, 2007

“ou comment Eclipse valide le comportement de GWT”

A quoi reconnaît-on une bonne idée ? Au nombre de copies qu’elle génère ;)

Eclipse mets en avant sa Rich Ajax Platform, en réalité plus proche d’Echo2 que de GWT : à chaque action utilisateur, le serveur est sollicité via Ajax et renvoie au navigateur le code de présentation. En fait, l’idée maitresse semble ici d’étendre SWT au client léger.

Le gros avantage de RAP (tout comme Echo2) est l’utilisation possible de tout le JDK sans restriction. Par contre, la sollication systématique du serveur me semble le point faible de la solution…

Au delà de son succès éventuel, L’apparition (ou du moins la confirmation) de cette librairie tend en tout cas à démontrer que les jours des développements JavaScript sont comptés, et que l’encapsulation Java du code client sera bientôt la norme, avec GWT ou un autre…

Une vraie bonne nouvelle en quelque sorte !

Monter un serveur FTP sur son système de fichiers avec FUSE et CurlFTPfs

Thursday, March 8th, 2007

FUSE et CurlFTPfs, pourquoi faire ?

Je suis désormais abonné chez Free (le seul FAI à proposer l’IP fixe à un coût modéré) et après avoir installé et initialisé ma Freebox HD (boîtier qui permet de regarder/enregistrer la télé entre autres), j’ai voulu transférer des fichiers sur son disque dur afin de pouvoir les visionner sur la télé…
J’ai alors utilisé Konqueror et me suis dirigé vers :
ftp://freebox@hd1.freebox.fr/Disque dur/Video
J’ai ainsi pu transférer mes fichiers par simple copier/coller…
Mais comment faire aussi simple, voire même plus simple, pour transférer d’une machine qui n’a pas d’interface graphique (juste un shell) vers la Freebox HD ?
Tout simplement en montant la freebox comme un système de fichier en utilisant FUSE et CurlFTPfs…

Installation de FUSE et CurlFTPfs et premier montage

Sous Ubuntu installer curlsFTPfs :
#apt-get install curlftpfs
(il peut être utile à cette étape de charger le module fuse : # modprobe fuse)
Il vous installera alors curlftpfs, et fuse-utils, et créera un groupe “fuse”.
Edit : en fait, Ubuntu n’intègre pas le paquet CurlFTPFS, aussi, le meilleur moyen de l’installer est de suivre l’article dédié à CurlFTPfs sur Ubuntu-fr.org. (Merci à Cyril, et la prochaine fois poste un commentaire pour en faire profiter tout le monde !).
Connectez vous alors sous un utilisateur non privilégié et créer un répertoire pour accueillir le montage :
% mkdir freebox
Essayez alors de monter votre freebox sur ce point de montage :
curlftpfs ftp://freebox@hd1.freebox.fr freebox
fuse: failed to exec fusermount: Permission denied

Oups ! vous n’avez pas les droits …Mais souvenez vous, un groupe fuse a été créé !
Avec root, ajoutez l’utilisateur au groupe fuse, et vérifiez :
# usermod -G fuse anthony
Attention, en faisant ceci j’ai supprimé tous les rattachements de groupe de l’utilisateur (ie: il n’appartenait plus qu’au groupe “fuse” pour éviter ceci , veuillez plutôt tapez :
# usermod -a -G fuse anthony

Ceci est plus simple ….
#adduser anthony fuse
# groups anthony
anthony : anthony fuse

OK, pour prendre en compte les changements, relogguez vous de nouveau avec votre utilisateur, et ré essayez !
% curlftpfs ftp://freebox@hd1.freebox.fr freebox
(Si vous avez encore une erreur , avec root, # chmod +x /usr/bin/fusermount)
Vous pouvez alors naviguer dans le disque dur de votre Freebox HD, comme si celui était en local !
% cd freebox/Disque\ dur/Video
~/freebox/Disque dur/Video% cp /home/anthony/fichier.avi ./
~/freebox/Disque dur/Video% ls
fichier.avi

vous pouvez aussi démonter l’attachement de votre freebox :
% fusermount -u /home/anthony/freebox

Automatiser le montage curlftpfs au démarrage de la machine

Pour cela il suffit de rajouter une entrée dans /etc/fstab , comme si on rajoutait une partition de disque ou un partage nfs, avec la ligne suivante :
curlftpfs#freebox@hd1.freebox.fr /home/anthony/freebox fuse allow_other 0 1
En attendant le redémarrage un simple :
#mount /home/anthony/freebox
fera l’affaire et tous les utilisateurs du système peuvent déposer/récupérer des fichiers sur la freebox HD

Liens

Je me suis bien inspiré de cet article :
Article sur FUSE et curlftpfs sur Coagul
d’ailleurs leur article explique comment procéder avec un compte FTP nécessitant un mot de passe.
Liste des montages possibles avec FUSE
La page officielle de CurlFTPfs

Installation de CGI Proxy, solution de proxy http

Thursday, March 8th, 2007

Ce tutorial vous expliquera comment mettre en oeuvre derrière Apache 2 le script CGI Proxy qui peut vous servir aussi bien à surfer anonyme (désactivation de scripts pendant la navigation), à accéder aux serveurs web de machine situées dans un réseau local, à contrer la censure …

Installer simplement CGI Proxy (sans SSL)

Tout d’abord, vous devez avoir les logiciels suivants installés sur votre machine:
-un serveur sous Linux(çà devrait marcher sur tous les OS…)
-Apache2 (un autre serveur web devrait faire l’affaire mais je n’ai pas testé…)
-Perl
Des commandes comme :
#apt-get install perl apache2
devrait plus ou moins régler les choses sur Debian et les Debian-like…
Pour la suite de l’article, je suppose que vous utilisez une distribution Debian Sarge.

Dirigez vous vers /etc/apache2/sites-available
#cd /etc/apache2/sites-available

Créez un nouveau site web, disons que vous avez le nom de domaine test.fr, créez ainsi le sous domaine cgiproxy.test.fr :
#vim cgiproxy.test.fr

et insérez les lignes suivantes :

<VirtualHost *>
ServerAdmin admin@test.fr
DocumentRoot /var/www/cgiproxy.test.fr
ServerName cgiproxy.test.fr
ErrorLog /var/log/apache2/cgiproxy.test.fr.error.log
CustomLog /var/log/apache2/cgiproxy.test.fr.access.log common
AddHandler cgi-script .cgi
<Directory /var/www/cgiproxy.test.fr>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Order allow,deny
Allow from all
Options +ExecCGI
</Directory>
</VirtualHost>

Pour que ce nouveau site soit fonctionne, n’oubliez de faire un lien symbolique de cette configuration dans /etc/apache2/sites-enabled :
#cd /etc/apache2/sites-enabled
#ln -s /etc/apache2/sites-available/cgiproxy.test.fr

et de bien sûr créer le répertoire désigné dans votre configuration:
#mkdir /var/www/cgiproxy.test.fr

On redémarre Apache2 pour que la configuration soit prise en compte :
#/etc/init.d/apache2 restart

Petite note pour ceux qui n’ont pas de nom de domaine ou ne sachant pas comment créer un site sous Apache 2 :
Vous avez sans doute dans /etc/apache2/sites-available un site (fichier de configuration) qui s’appelle 000-default, qui pointe vers des fichiers dans /var/www : vous pouvez aussi bien l’utiliser en adaptant cet article (chemins et sites)

Rendez vous dans /var/www/cgiproxy.test.fr et téléchargez le script CGI CGI Proxy :
#wget http://www.jmarshall.com/tools/cgiproxy/releases/cgiproxy.2.1beta15.tar.gz

Pour avoir la dernière version, veuillez consulter le site officiel CGI Proxy

On décompresse l’archive ainsi récupérée :
#tar xvzf cgiproxy.2.1beta15.tar.gz

Et si tout s’est bien passé, en dirigeant son navigateur vers http://cgiproxy.test.fr/nph-proxy.cgi on doit avoir le formulaire de saisie d’URL de CGI Proxy !
Si toutefois cela ne fonctionne pas, n’hésitez pas à laisser un commentaire à cet article, mais commencez par vérifier :
-que vos chemins sont bons
-que vous n’avez pas renommé nph-proxy.cgi en quelquechose.cgi (il faut impérativement que le nom du fichier commence par nph-)
-que le script est exécutable :
#chmod +x nph-proxy.cgi

Installer CGI Proxy en mod ssl :

Un peu plus difficile cette fois-ci, cette partie de l’article s’adresse aux personnes ayant déjà mis en place des sites Apache2 en mod_ssl.(un jour j’écrirai un article pour l’expliquer !).
Pour faire simple, et rapide, inspirez vous de mon fichier de configuration :

<VirtualHost *:443>
ServerAdmin admin@cgiproxy.test.fr
DocumentRoot /var/www/cgiproxy.test.fr
ServerName cgiproxy.test.fr
ErrorLog /var/log/apache2/cgiproxy.test.fr.error.log
CustomLog /var/log/apache2/cgiproxy.test.fr.access.log common
AddHandler cgi-script .cgi
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem
SSLProxyEngine On
<Directory /var/www/cgiproxy.test.fr>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
DirectoryIndex nph-protected.cgi
AuthUserFile /var/www/cgiproxy.test.fr/.htpasswd
AuthName “Welcome to Protected Site”
AuthType Basic
Require valid-user
Options +ExecCGI
</Directory>
</VirtualHost>

Un peu d’explication !
<VirtualHost *:443>
vous permet de déclarer un serveur virtuel écoutant sur le port 443 (https par défaut)
AddHandler cgi-script .cgi
permet à Apache 2 de lancer le moteur d’interpréteur de CGI lorsque les fichiers demandés terminent par .cgi
DirectoryIndex nph-protected.cgi
indique à apache que le fichier index par défaut est : nph-protected.cgi (situé dans /var/www/cgiproxy.test.fr) lorsque qu’aucun nom de fichier est spécifié.
AuthUserFile
permet de mettre en place une sécuristation HTTP Basic (login/mot de passe demandé pour accéder à la ressource)

Liens

Le site de documentation d’Apache2
Le site officiel de CGI Proxy

Réflexions sur les DSL Tools, démonstration d’un designer MVP

Monday, March 5th, 2007

Depuis quelques temps, je tombe fréquemment sur des articles au sujet des DSL de Microsoft. Je me demande: « pourquoi un autre langage de modélisation ? UML ne remplit-il pas déjà cette fonction ? Et quand bien même, non seulement je ne crois pas en une modélisation front-end (une modélisation exhaustive en début de projet), lire la suite sur le blog de Julien Delhomme…