NetBeans 6.8 RC2

Pourquoi ?

Pourquoi donc me suis-je mis à délaisser Eclipse au profit de NetBeans ? Ma motivation remonte à l’annonce d’un début d’intégration de symfony au sein de l’IDE, c’est à dire il n’y a pas trop longtemps. J’avais eu l’occasion de tester NetBeans il y a 3 ou 4 ans, pour le comparer à Eclipse qui me semblait alors plus puissant, notamment pour certains plugins que j’utilisais.

Aujourd’hui, dans un projet qui contient de très nombreux fichiers (symfony) NetBeans se montre subjectivement plus rapide pour autocompléter et documenter les appels de méthodes. Je regrette le non-support des interfaces fluent sur plusieurs lignes, mais bon… Au niveau de l’intégration du framework, je ne sais pas encore si j’arriverai à abandonner mon terminal et son ZSH, mais il y a du mieux au sein de l’IDE :

Symfony via le menu contextuel

Symfony via le menu contextuel

Fenêtre d'exécution de commandes symfony

Autre résultat de cette intégration fort intéressant, la possibilité de switcher entre une vue et son contrôleur :

Passer d'un contrôleur à la vue associée

Passer d'un contrôleur à la vue associée

Pour ne pas dérouter les utilisateurs d’Eclipse, un mapping du clavier de l’IDE rival est disponible ; on notera également un mapping Emacs redoutable ! Par défaut, les raccourcis claviers sous MacOSX sont désastreux, avec des inversions entre les touches SHIFT, CTRL et Pomme. Fort heureusement NetBeans propose une configuration extrêmement poussée du clavier, je vous laisse découvrir les différentes assignations possibles. Enfin, petit agrément appréciable au quotidien que je découvre avec NetBeans, l’affichage dans la marge des modifications effectuées depuis la dernière version. Un exemple visuel :

Une marge qui fait la diff' !

Une marge qui fait la diff' !

En passant le curseur sur cette marge, l’IDE nous indique les modifications effectuées. L’équivalent sous Eclipse est amplement moins pratique,

Le mot de la fin

Je n’ai sûrement pas encore fait le tour des avantages (et des inconvénients) de NetBeans, et voilà un bon prétexte pour continuer à pousser son utilisation plus loin. La première semaine d’utilisation me donne pleinement satisfaction après un petit moment passé dans les préférences pour personnaliser la coloration syntaxique, les raccourcis claviers et le formatage automatique.

Pour rappel, dans la première partie de cette série d’articles, vous avez pu découvrir la manière dont je testais Piwam grâce à la virtualisation. Nous allons maintenant soumettre notre application à des premiers tests… de performance.

Bien que certaines applications soient faîtes pour une utilisation mono utilisateur, la plupart sont destinées à accueillir des centaines, des milliers d’utilisateurs simultanément, utilisateurs qui eux même ont la possibilité de réaliser des milliers d’interactions différentes. Comment alors tester le comportement de son application dans les pires situations, sans attendre que le chaos ne vienne s’imposer de lui même une fois l’application mise en production ? C’est le sujet de ce billet. Ce qui est présenté ci-dessous interessera les développeurs PHP mais aussi tous ceux qui utilisent une autre technologie web.

Apache AB

Commençons par faire stresser un petit peu notre application…  AB, pour Apache HTTP server Benchmarking tool, permet de simuler des accès au serveur web, en exécutant le nombre de requêtes souhaité par le biais d’un certain nombre de connexions concourantes, elles aussi contrôlées.  AB permet sans soucis de passer des serveurs proxy, simuler les requêtes GET comme POST, gérer l’authentification HTTP… La commande que j’utilise le plus souvent est la suivante :

> ab -e output.csv -n 10000 -c 100 http://docbook:80

Quelques explications sur les options utilisées ici :

  • -e : spécifie un fichier CSV de sortie
  • -c : nombre de connexions concourantes
  • -n : nombre de requêtes à exécuter (réparties entre les différentes connexions)

Je vous invite à lire la très claire page de documentation pour découvrir toutes les options disponibles. Une fois exécutée, cette commande nous livre la sortie suivante :

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking docbook (be patient).....done

Server Software:        Apache/2.2.9
Server Hostname:        docbook
Server Port:            80

Document Path:          /
Document Length:        4427 bytes

Concurrency Level:      100
Time taken for tests:   5.569 seconds
Complete requests:      10000
Failed requests:        0
Write errors:           0
Total transferred:      472500 bytes
HTML transferred:       442700 bytes
Requests per second:    17.96 [#/sec] (mean)
Time per request:       556.946 [ms] (mean)
Time per request:       55.695 [ms] (mean, across all concurrent requests)
Transfer rate:          82.85 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.2      0       1
Processing:   246  548 110.6    539    1150
Waiting:      246  547 109.9    538    1147
Total:        247  548 110.6    539    1150

Percentage of the requests served within a certain time (ms)
  50%    539
  66%    564
  75%    578
  80%    591
  90%    633
  95%    673
  98%   1101
  99%   1150
 100%   1150 (longest request)

La ligne sur-lignée est à mon avis celle qui donne le plus de sens aux résultats. Le nombre de requêtes par secondes est en effet un bon indicateur de la santé de votre application (et de votre serveur). Quant au fichier CSV généré, dont on a un aperçu avec les pourcentages donnés à la fin de la sortie ci-dessus, vous pourrez y retrouver la répartition des timings dans lesquels ont été satisfaites les requêtes. Ajoutez à cela des taux de transferts, des erreurs détectées potentielles, et vous obtenez ici un bon outil de benchmarking.

Comment simuler l’envoi de données ?

Comme indiqué dans sa présentation, il est possible de simuler la soumission de formulaires via l’option -p POSTFILE. Une question très récurrente revient souvent : à quoi ressemble ce fichier POSTFILE ? En fonction de la version utilisée, la documentation d’Apache peut ne pas être très bavarde. Ce fichier comprend la liste des arguments de la manière suivante : nom=valeur&nom2=autrevaleur, avec l’encodage spécial utilisé pour les URL.

Pylot

Graphique généré par Pylot

Graphique généré par Pylot : temps de réponse en fonction du temps écoulé

Écrit en Python, Pylot possède a 2 plusieurs pour séduire : la capacité de générer des graphiques, la présence d’un GUI pour les allergiques au mode console, interfaçage XML-RPC… Pylot fonctionne par le biais de scénarios, des test-cases, écrits au sein de fichiers XML pas trop compliqués. Ce mode de fonctionnement permet de personnaliser assez facilement les scénarios et de passer tous ces test-cases automatiquement. Découvrez Pylot sur http://www.pylot.org/.

C’est trop long !

Ces tests vous ont permis de vous apercevoir d’une chose : votre application met systématiquement un minimum de 400 ms à répondre, et facilement jusqu’à 900 ms dès que plusieurs utilisateurs effectuent des recherches. Des temps qui rapidement risquent d’énerver vos utilisateurs. Comment alors réduire autant que possible ces timings fous ?

Premièrement, l’utilisation d’un accélérateur PHP peut être tout a fait adaptée (tout du moins, pour les développeurs PHP). APC, eAccelerator et consorts devraient vous intéresser. Laissez vous guider par les tests et comparatifs (un lien : iPerSec). Ces accélérateurs donneront un coup de boost magique à votre projet PHP.

Des « erreurs », ou lourdeurs de développement, peuvent être à l’origine de la lenteur de l’application. Ré-écrire et optimiser son code peut s’avérer extrêmement long. Avant ça, un petit tour vers une étape de profiling est indispensable. Pour ceux qui ne savent pas de quoi je parle, jetez un oeil sur mon article dédié à XDebug. Cette étape de profiling vous permettra de détecter une éventuelle partie de code particulièrement et anormalement consommatrice de temps.

Et finalement, si c’est encore possible, prenez le temps nécessaire pour analyser la source de la lenteur, la corriger, pratiquer le refactoring de code, installer des serveur proxy, refaire des tests plus précis, modifier la configuration PHP, etc. Un prochain article sera l’occasion d’aborder ces même tests dédiés à MySQL. Et si vous n’avez plus le temps pour corriger tout ça, et bien c’est le moment de prendre de bonnes résolutions et de mettre en place toutes les bonnes pratiques de ZeTechnology pour votre prochain projet !

PrestaShop

Quiconque souhaitant se lancer ou s’étant lancé dans le commerce en ligne a pu découvrir que choisir son application de vente on-line peut s’avérer être un choix crucial. Alors qu’osCommerce reste encore sans doute le plus prisé, il peut être intéressant de se pencher vers PrestaShop. Écrit en PHP, libre et gratuit, PrestaShop offre une présentation assez soignée, tant dans son back-office qu’en front-office. Pré-configuré pour fonctionner avec Paypal, disposant d’un module Google Checkout, gérant les offres spéciales, code-barres, devises multiples, les livraisons et plein d’autre choses, PrestaShop peut être essayé en ligne sur le site officiel.

La planète des bug trackers s’agrandit avec un nouveau venu : YouTrack, lancé par JetBrain. Disponible en version 1.0 estampillée « beta », YouTrack possède une interface basée assez dynamique, basée sur des champs de « commandes » auto-complétées. Après l’avoir testé – assez rapidement il est vrai – je reste pour le moment sceptique sur la véritable pusisance de l’outil dans une équipe. Je reste pour le moment fidèle à Google Code, BugZilla ou Trac, plus conventionnels mais au final plus clairs à l’utilisation. Un petit travail sur l’ergonomie et la disposition des éléments devrait pouvoir porter YouTrack au plus haut  rang…

Liens associés :

Tous les utilisateurs de Dropbox, service de stockage de fichiers en ligne qui fait partie de mes indispensable, viennent de recevoir un e-mail faisant part d’une – bonne – nouvelle.

Une nouvelle fonctionnalité vient faire son apparition, et pas des moindre. Les différentes versions de vos fichiers sont soigneusement sauvegardées. Même une fois supprimé, il subsiste une sauvegarde votre fichier, vous savez, juste au cas où… Les historiques de ces fichiers sont sauvegardés 30 jours pour les utilisateurs de la version gratuite, et pour une durée illimitée pour les abonnés.

Pour vous inscrire dès maintenant sur Dropbox et obtenir en bonus 250 Mo d’espace en +, suivez ce lien.

VideoLAN, alias VLC, est disponible dans sa version finale un point zéro point zéro. Cette version finale présente un petit lot de nouveautés intéressantes comme la prise en charge de nouveaux formats audio, la possibilité de lire « on-the-fly » les fichiers ZIP. À noter pour les (anciens) Mac users : cette version ne tournera pas sous MacOSX 10.4.x !
ChangeLog completTélécharger VLC

Sismo

Sismo est un outil d’intégration continue développé par Sensio Labs (vous savez, symfony…). L’intégration continue, c’est la possibilité de détecter tout ce qui ne va pas au fil des versions. Du vert ou du rouge, ça passe ou ça ne passe pas, Sismo présente une interface très simple permettant de contrôler le comportement de ses projets au fil des releases. Fabien Potencier a annoncé sur le groupe de discussion « symfony developers« , une éventuelle disponibilité de ce projet libre à la fin du mois de juin.

Une démonstration en ligne du produit est disponible sur http://ci.symfony-project.org. Hâte d’essayer cette alternative à Xinc et consorts.

L’outil MySQL Workbench est polyglotte. Un petit nouveau vient de rejoindre la famille des plugins. Thomas Henlich publie sur son blog un plugin permettant l’export à destination des bases de données SQLite.

Un plugin qui arrive à point pour tous ceux qui sont en train de concevoir leurs applications Android ! À télécharger sur son blog.

Après bon nombre de corrections, Piwam, le gestionnaire d’associations, est disponible en version beta, une toute petite semaine après la version alpha.

Grâce à de très bons retours de la communauté, les problèmes ont rapidement pu être identifiés. Grâce à Symfony, ils ont rapidement pu être corrigés. Pas mal de petites choses viennent améliorer l’utilisation de l’outil.

Et au cas où un problème empêcherait votre utilisation de Piwam, 2 nouveaux outils ont été mis en place en version française : un groupe de discussion et un système de suivi de bugs. N’hésitez pas en abuser ! Les changements de la version beta.

Décidément, il n’y en a que pour Piwam en ce moment… Il faut dire que le framework Symfony était – je dois dire – un bon choix, permettant de gérer les bugs et les nouvelles fonctionnalités très rapidement.

Je viens de publier une version alpha3, qui, dans la lignée de la alpha2, corrige un certain nombre de petits bugs quant à la gestion de plusieurs associations, et quelques bugs majeurs, liés à l’enregistrement de la valeur « mis a jour par », lors de l’édition des différentes données. On y retrouve une documentation de plus en plus fournie, des fichiers de configuration de plus en plus lisibles… bref, on s’approche de la beta publiable !

Merci aux lecteurs de DLFP pour l’accueil donné à ce projet et les nouvelles idées apportées. Piwam.googlecode.com.