Benchmarking PHP – Partie 3

Voici la suite du premier et du deuxième article de cette série sur les performances de PHP.

PHP est un langage particulièrement permissif et tolérant, qui continue notamment de fonctionner correctement même si une variable n’a pas été définie (à l’exception des propriétés d’objet).
En effet, PHP n’émet qu’un simple avertissement (de type E_NOTICE) dans ces cas-là et continue son exécution normalement.

Le code suivant :

$b = 1 + $a;

produira simplement le message :

Notice: Undefined variable: a in test.php on line 2

La grande tolérance à ce genre d’erreurs de PHP et de mauvaises habitudes de programmation ont entraîné la banalisation de ces messages et il est généralement admis de ne pas en tenir compte. PHP propose en effet de filtrer les messages d’erreur par type. Ainsi, la commande suivante est préconisée par de nombreuses distributions de PHP :

error_reporting(E_ALL ^ E_NOTICE);

Comme son nom l’indique vaguement, cette commande indique à PHP de rapporter toutes les erreurs, à l’exception du type E_NOTICE.

Mais le fait de ne pas rapporter ces erreurs n’a-t-il aucune autre conséquence sur l’exécution de PHP elle-même ?

Etat des lieux

Lorsqu’une erreur est déclenchée dans le code PHP, quel que soit son niveau (et donc y compris pour les erreurs de type E_NOTICE), un appel à la fonction native trigger_error() est exécuté.
Il est de notoriété publique que l’exécution de cette fonction soit lente.

Ne pas rapporter les erreurs concernées entraîne-t-il un gain de temps au niveau de l’exécution ?

Le protocole de test

Pour ce test, j’ai choisi d’exécuter les cas suivants :

  1. ajouter 10 millions de fois la valeur d’une variable non définie,
  2. exécuter la même addition sans rapporter les erreurs au journal global des erreurs de PHP,
  3. exécuter la même addition mais en testant à chaque itération l’existence de la variable,
  4. exécuter l’addition avec une variable définie

Tous les cas ont été exécutés avec la commande :

error_reporting(E_ALL ^ E_NOTICE);

Résultats

Les résultats sont édifiants :

Variable non définie + log des erreurs : 7.55 s
Variable non définie + pas de log des erreurs : 7.29 s
Variable non définie mais testée : 1.08 s
Variable définie : 1.09 s

La conclusion est simple. Les déclenchements de la fonction trigger_error() dans les cas de variables non définies prennent beaucoup de temps. Le code source s’exécute ici 7 fois plus lentement qu’avec une variable dument définie.

PHP incite-t-il au laxisme ?

Mon avis sur la question est tranché : Oui.

En effet, l’autre inconvénient de ne pas rapporter les erreurs de type E_NOTICE est de laisser passer des erreurs parfois dommageables.

L’exemple ci-dessous ne crée aucune erreur « visible » et pourtant n’apporte pas la solution attendue :

error_reporting(E_ALL ^ E_NOTICE);

function valide_si_conforme($txt) {
    return (empty($texte) || preg_match('/^[a-z]+$/', $txt));
}
echo valide_si_conforme('123456789');

En effet, la fonction valide_si_conforme() devrait renvoyer un résultat positif uniquement si le paramètre $txt est vide ou ne contient que des lettres minuscules.

L’appel :

valide_si_conforme('123456789')

devrait renvoyer 0 ou false.

Il n’en est rien et le script renvoie 1 ou true. L’erreur qui inscrit le paramètre $texte en lieu et place de $txt dans l’appel à empty() déclenche une erreur fonctionnelle mais PHP n’en tient pas compte et la détection de ce problème est alors laissée à l’appréciation du développeur. Et si celui-ci n’a pas la discipline ou l’expérience suffisante pour savoir où il faut et où il ne faut pas tester une valeur, de nombreuses erreurs sont susceptibles d’apparaître.

Mais alors que faire ?

La logique voudrait que toutes les erreurs soient rapportées et que les variables soient testées, tant sur leur valeur que sur leur existence.
Cette démarche m’a personnellement évité beaucoup de problèmes par le passé ou permis de corriger bon nombre de bugs dans des codes sources tiers.

Code du test

<?php
    error_reporting(E_ALL ^ E_NOTICE);
    header("Content-Type: text/plain; charset=UTF-8");

    printf("Variable non définie + log des erreurs : ");
    $start = microtime(true);
    $b = 0;
    for ($i = 0; $i < 10000000; $i++)
        $b += $a;
    $elapsed = microtime(true) - $start;
    printf("%0.2f s\n", $elapsed);

    printf("Variable non définie + pas de log des erreurs : ");
    ini_set('log_errors', 0);
    $start = microtime(true);
    $b = 0;
    for ($i = 0; $i < 10000000; $i++)
        $b += $a;
    $elapsed = microtime(true) - $start;
    printf("%0.2f s\n", $elapsed);

    printf("Variable non définie mais testée : ");
    $start = microtime(true);
    $b = 0;
    for ($i = 0; $i < 10000000; $i++) {
        if (isset($a))
            $b += $a;
    }
    $elapsed = microtime(true) - $start;
    printf("%0.2f s\n", $elapsed);

    printf("Variable définie : ");
    $start = microtime(true);
    $b = 0;
    $a = 1;
    for ($i = 0; $i < 10000000; $i++)
        $b += $a;
    $elapsed = microtime(true) - $start;
    printf("%0.2f s\n", $elapsed);
?>

Firefox 13 & SPDY : Quelques Problèmes

La fondation Mozilla a mis en ligne hier, mardi 5 juin 2012, la version 13 de Firefox. Au rang des nouveautés, la prise en charge du protocole SPDY, chargé d’accélérer le chargement des pages.

Malheureusement, sur mon ordinateur, avec certains sites comme la version américaine du moteur de recherche Google (pourtant à l’origine du protocole), le chargement des pages est considérablement ralentie, voire impossible. Bien évidemment, avec la prise en charge du protocole désactivée, la navigation revient à la normale.

Ci-dessous, retrouvez la procédure pour désactiver le protocole SPDY :

  • Rendez-vous dans Firefox, dans une nouvelle fenêtre ou un nouvel onglet, à l’adresse about:config
  • Si un avertissement de sécurité s’affiche, prenez en connaissance et validez
  • Recherchez la clé network.http.spdy.enabled
  • Si sa valeur est à true, double-cliquez dessus pour la faire passer à false

Voilà, votre navigation devrait être à nouveau fluide comme à son habitude.

AirPrint sans imprimante compatible

Lors de la publication d’iOS 4.2, Apple a ajouté à son système d’exploitation mobile la fonctionnalité AirPrint permettant d’imprimer des documents directement depuis son iPhone, son iPod ou son iPad.

Malheureusement, l’écosystème Apple étant ce qu’il est, cette fonctionnalité fut bridée à la dernière minute à une poignée d’imprimantes compatibles, initialement chez HP, puis désormais chez Epson, Canon, Lexmark et Brother (voir liste des imprimantes compatibles). Il était donc initialement impossible d’imprimer sur sa basique petite imprimante, bien que partagée sur le réseau au travers d’un Mac.

Jusqu’à ce que de gentils développeurs mettent en place des méthodes de contournement et activent AirPlay non pas sur les imprimantes mais directement sur nos Mac, qui permettent donc désormais d’utiliser les imprimantes qui leur sont connectées.

J’utilise pour ma part AirPrint Activator 2 qui fonctionne très bien sous OS X Lion, bien qu’en bêta.

Mac OS X Lion

« Un bond en avant phénoménal pour le Mac. » Voilà comment Mac OS X Lion est présenté sur le site français d’Apple. Mais est-ce véritablement le cas ? Ou est-ce que cette nouvelle version 10.7 de Mac OS X n’est pas une simple évolution du système d’exploitation d’Apple. Plutôt que de me précipiter dans une critique à chaud quelques jours après sa sortie le 20 juillet 2011, j’ai préféré attendre quelques mois pour avoir un retour concret sur son utilisation en « conditions réelles ». Cet article va reprendre une par une les 10 avancées soi-disant majeures mises en avant par Apple et je vous ferai part de mon expérience personnelle dans chacun des cas.

1. Les Gestes Multi-Touch

Apple l’aura assez répété pendant la longue campagne de promotion de OS X Lion (à partir de cette version, Mac OS X perd sa dénomination « Mac »), ce système a été conçu pour rapproché le système des ordinateurs portables et de bureau de la marque d’iOS qui équipe les iPod Touch, iPhone et iPad. Les gestes multi-touch (comprendre à plusieurs doigts) avaient déjà été introduits depuis Mac OS X Leopard, puis améliorés dans Mac OS X Snow Leopard, mais n’étaient que peu utilisés au sein même du système (à moins de posséder une Magic Mouse ou un Magic Trackpad). Cela restait donc assez marginal.

Avec OS X Lion, les gestes multi-touch sont véritablement mis en avant et les ordinateurs portables donc les trackpads autorisent le multi-touch permettent de s’en servir. Si vous utilisez régulièrement un portable en déplacement, ces nouveaux gestes se révèleront relativement pratiques, notamment pour passer d’un espace de travail à un autre. Cependant, si, comme moi, vous utilisez votre ordinateur avec un clavier « classique » et une souris, les gestes multi-touch ne vous seront pas d’une grande utilité. Basculer d’un espace de travail à un autre peut se faire grâce aux touches directionnelles associées à la touche Contrôle et l’accès à Exposé et disponible très simplement depuis une touche du clavier depuis déjà 3 versions du système.

2. Des Apps Plein Ecran

Autre fonctionnalité martelée pendant les keynotes de présentation, la fonction Plein Ecran. Son concept est assez intéressant puisque, lorsque les applications le permettent, une fenêtre passée en « Plein écran » (en cliquant sur la double flèche en haut à droite des applications qui supportent la fonctionnalité) permet de retirer le dock et la barre de menu de la surface de l’écran et place l’application dans un espace de travail spécifique. En créant un espace de travail par application, plus de problèmes de fenêtres qui se chevauchent il suffit d’un simple geste à la souris pour passer d’une application à une autre.

Sur un écran d’ordinateur portable où l’espace est réduit ou sur un ordinateur ne disposant que d’un seul écran, cette fonctionnalité se révèle très utile en retirant tout parasite de notre vue. Mais sur un ordinateur avec plusieurs écrans (comme un ordinateur portable avec un moniteur auxiliaire), cette fonctionnalité est tout bonnement inutile. En effet, une application « Plein écran » crée un espace de travail spécifique où seule sa fenêtre principale peut apparaître sur l’écran principal. Impossible de placer la fenêtre de l’application sur l’écran auxiliaire, souvent bien plus grand. De même, impossible de travailler sur un écran avec une application en plein écran et ses fenêtes « normales » sur son autre écran. Dommage, cela perd en efficacité.

3. Mission Control

Les habitués de Mac OS X connaissent certainement Exposé (apparu dans Mac OS X 10.3 Panther) et Spaces (apparu dans Mac OS X 10.5 Leopard). Le premier permet d’afficher de manière réduite l’ensemble des fenêtres affichées à l’écran pour sélectionner celle qui vous intéresse. Le deuxième permet de créer plusieurs espaces de travail distincts et ainsi mieux répartir vos applications selon votre convenance. Depuis Mac OS X Panther, Exposé a subi plusieurs améliorations. Spaces, plus récent, n’avait pas changé d’un pouce dans Mac OS X 10.6 Snow Leopard. OS X Lion propose de fusionner ces deux concepts en un seul : Mission Control.

Voilà pour moi la plus grande réussite d’OS X Lion à ce jour. Mission Control prend le meilleur des deux outils précédents et crée un véritable tableau de bord de l’activité du système. Très ergonomique, il affiche en haut de l’écran tous les espaces de travail (qui désormais ne peuvent plus être organisés qu’horizontalement) en incluant les applications en plein écran et sur le reste de l’écran toutes les fenêtres visibles de l’espace de travail courant réparties par application et par écran. C’est alors un jeu d’enfant d’aller activer la fenêtre ou l’application qui nous intéresse. Mission Control conserve également tout ce qui avait fait le succès d’Exposé en permettant d’afficher uniquement les fenêtres de l’application en cours ou de dégager les fenêtres de l’écran pour laisser apparaître le bureau.

Malgré quelques défauts de jeunesse (notamment une répartition parfois étrange sur plusieurs écrans), Mission Control est une vraie nouveauté à l’ergonomie parfaite qui crée un gain d’efficacité énorme.

4. Mac App Store

Inauguré avec la mise à jour 10.6.6 de Mac OS X Snow Leopard, le Mac App Store est l’équivalent en bureautique de l’App Store présent sur les iPod Touch, iPhone et iPad : un kiosque de téléchargement d’applications gratuites ou payantes. Plate-forme de diffusion privilégiée pour le Mac, le Mac App Store n’est pas exempt de défauts, mais il présente deux fonctionnalités intéressantes depuis OS X Lion.

La première, c’est que le système permet de rechercher directement dans le Mac App Store une application susceptible d’ouvrir un fichier dont le type ne serait pas connu. Sympathique pour s’éviter d’éventuelles longues heures de galère.

La deuxième, c’est son intégration directe dans le dock qui permet en un clin d’œil de voir si une ou plusieurs de ses applications a bénéficié d’une mise à jour, et le cas échéant de pouvoir l’actualiser en presque un seul clic.

Chose importante pour les personnes comme moi qui possèdent plusieurs Mac, les application achetées via le Mac App Store peuvent être installées sur n’importe quel Mac, autant de fois que vous le souhaitez (à partir du moment où vous utilisez votre Apple ID pour les télécharger).

5. Launchpad

Launchpad est le nom de l’écran d’accueil d’iOS, là où se trouvent toutes les icônes des applications sur les iPod Touch, iPhone et iPad. OS X Lion a directement récupéré cet outil pour le transposer dans le monde de la bureautique.

Autant le dire tout de suite, Launchpad ne sert à rien. Lorsque Mac OS X 10.5 Leopard a inauguré les Piles (Stacks) dans le dock, on a pu intégrer la pile des applications, des téléchargements, etc… au dock et tous restent accessibles en permanence et sans couper notre flux de travail. Et tout était très bien comme ça. Je me suis personnellement posé la question du pourquoi de Launchpad. Je n’ai toujours pas trouvé la réponse. Effectivement, Launchpad propose de retrouver toutes les applications disponibles sur le système, et pas seulement celles du dossier Applications. Mais, c’est peut-être sa seule qualité.

Launchpad a hérité des mêmes qualités que son grand frère du monde mobile : lisibilité, esthétique, ergonomie, possibilité d’organiser les icônes à sa guise. Mais sa filiation ne s’est pas faite sans mal. Lorsque sur un appareil nomade, il apparaît relativement normal de ne pas avoir des centaines d’applications, cela n’est plus vrai sur un ordinateur professionnel. Sur iOS, il est possible des créer des groupes d’applications. Chaque groupe prenant la forme d’une icône d’application composée des icônes des applications du groupe. Sur iOS encore, la taille de l’écran n’autorise pas d’imbriquer des groupes dans des groupes. Mais cela aurait été très intéressant de pouvoir le faire sur un ordinateur de bureau où l’on est habitué à hiérarchiser ses informations et/ou ses applications.

Pire, Launchpad sur mobile permet de supprimer une application alors que la version bureautique ne le permet que pour les applications achetées via le Mac App Store (impossible de supprimer une application installée « à l’ancienne »). On est à nouveau obligé de passer par le dossier où est stockée l’application pour faire le ménage. Vraiment dommage. Un raté sur toute la ligne !

6. Reprise

Autre fonctionnalité très intéressante. Reprise permet de restaurer au démarrage les applications dans l’état où elles se trouvaient (y compris la disposition des fenêtres) au moment où vous avez éteint votre ordinateur (ou lorsque vous quittez l’application concernée). Idéal pour commencer la journée. Mieux, le système peut restaurer les applications dans certains cas quand le système subit un des rares plantages existants.

Il est à noter que cette fonctionnalité ne nécessite pas de mise à jour spécifique des applications développées pour les versions précédentes de Mac OS X, ce qui est un plus appréciable (que l’on aurait bien vu de pareille façon pour les applications Plein écran). A l’heure actuelle, j’ai rencontré quelques comportements étranges sur des applications comme Photoshop ou Word qui réouvrent des fichiers clos juste avant la fermeture de l’application. Cela est probablement dû à une période d’actualisation trop longue pour les sauvegardes des états des applications.

7. Auto Save

Comme son nom l’indique, Auto Save permet une sauvegarde régulière et automatique des fichiers. Je n’ai pour l’instant pas pu tester cette fonctionnalité car le nombre d’applications le permettant est très restreint. Mais si elle tient ses promesses, cela va constituer une arme redoutable contre les pertes d’information.

8. Versions

Comme pour Auto Save, peu d’applications intègrent un support de Versions. Je n’ai donc pas pu tester pour le moment. Il s’agit d’une fonctionnalité proche de Time Machine (disponible depuis Mac OS X 10.5 Leopard) et qui permet de « remonter dans le temps » directement au sein d’un document pour en parcourir les différentes versions précédentes et retrouver éventuellement des informations perdues (ou revenir à une version antérieure après s’être trompé de direction). Versions est la fonctionnalité que j’attendais le plus. J’espère la voir fonctionner sur beaucoup d’applications très bientôt.

9. AirDrop

AirDrop permet l’échange de fichiers entre ordinateurs équipés d’OS X Lion et dont le module Wifi est activé, sans avoir besoin de se connecter à un réseau spécifique, mais en étant à moins de 10 mètres l’un de l’autre. Pour l’avoir expérimenté plusieurs fois, c’est un outil très pratique qui évite d’avoir à passer par une clé USB pour échanger des fichiers. Les débits en Wifi sont cependant très aléatoires, bien que tous les fichiers transférés soient toujours arrivés entiers à destination.

10. Mail

Véritable refonte de l’application Apple de courrier électronique, Mail passe pour l’occasion en version 5 et bénéficie de nombreuses améliorations, dont la vue des emails sous forme de conversation. Il intègre également un nouveau moteur de recherche très performant bien qu’un peu complexe à prendre en main au début.

Conclusion

Vous l’aurez compris, OS X Lion est une mise à jour du système de demi-teintes. D’un côté, on a de magnifiques ratés (Launchpad, les apps Plein écran). De l’autre, de petites merveilles (AirDrop, la refonte de Mail, Mission Control, Reprise). OS X Lion permet aussi au Mac de rattraper son retard sur ses concurrents à différents niveaux (possibilité de redimensionner les fenêtes par n’importe quel côté, …). Et, au milieu de tout ça, nous avons des concepts très avant-gardistes comme Auto Save ou Versions qui donneront probablement ses lettres de noblesses à Lion dans les prochains mois ou les prochaines années.

Mais alors, au final, la convergence Mac OS X / iOS est elle vraiment entamée. En dehors des gestes multi-touch et de Launchpad, Mac OS X reste lui-même, mais en mieux pour l’essentiel. Certes, OS X Lion est un peu plus gourmand en mémoire, mais quelques réglages plus tard, cela n’y paraîtra plus. Globalement, il s’agit d’un bon système, mais les nouveautés qu’il propose ne justifient pas encore de passer le pas. Mac OS X 10.6.8 Snow Leopard est un système très stable et tant que Auto Save, Versions et les autres fonctionnalités exclusives ne seront pas plus répandues dans le parc application, passer à OS X Lion sera superflu.

L’Open source ou la Vie

L’Open source donne un accès libre et illimité au code source d’un programme, avec la possibilité de le modifier, de le compléter et de le diffuser à sa guise. Cette approche diffère bien évidemment des choix propriétaires qui ont prédominé pendant les années 80 avec la domination notoire de Microsoft et de son Windows. La diffusion de logiciels libres a également profité de l’émergence d’internet dans les foyers et qui a permis de partager beaucoup plus vite des informations.

Cependant, contrairement à la pensée actuelle, l’Open source et la notion de code source partagé ont précédé les grandes sociétés de logiciels propriétaires puisque dès les années 1950, IBM fournissait le code source de ses logiciels aux clients qui investissait dans un ordinateur de la marque.

Deux visions s’opposent donc : la vision capitaliste (ou égoïste) ou la vision communautaire (ou altruiste).

La Vision Capitaliste

Les bases de cette approche sont simples : un développeur engage du temps, de l’argent et des ressources pour développer un logiciel. Celui-ci supporte donc l’ensemble des coûts tant financiers qu’humains de la création dudit logiciel et fait donc payer son client pour obtenir le droit d’utiliser son logiciel, avec pour objectif évident de vendre plus que ce que le développement aura coûté.

Dans le meilleur de cas, l’argent ainsi récolté sera réinvesti dans le logiciel lui-même pour lui assurer un avenir et un bon support tout en enrichissant ses propriétaires. Dans le pire des cas, l’avenir et le support seront oubliés.

Rappelons une chose importante à ce sujet. Lorsque vous acheté une boîte d’un logiciel (quel qu’il soit, logiciel bureautique ou même logiciel de jeu vidéo), vous ne devenez pas propriétaire du logiciel mais d’une licence vous autorisant à vous en servir. Le logiciel reste la propriété de son créateur, ou d’une entité physique ou morale qui en aura fait l’acquisition à un moment donné.

La notion de « propriétaire vendeur » induit nécessairement une notion de « client acheteur ». Une obligation de résultat du logiciel est également induite et si un logiciel propriétaire entraîne une perte avérée d’informations dommageable pour son utilisateur, le « client » peut éventuellement se retourner contre le « vendeur » pour réparation.

La Vision Communautaire

A l’opposée de la vision centrique capitaliste se situe la vision excentrique communautaire. La principale différence vient de la position du développeur par rapport au logiciel qu’il a créé. Ici aussi, un développeur décide d’investir du temps et des ressources (et donc de l’argent) pour créer un logiciel. Cependant, ce logiciel n’est pas nécessairement terminé ou débogué lorsqu’il est fourni au public sous une forme libre. En ouvrant son logiciel au monde, le développeur initial peut potentiellement créer une communauté d’autres développeurs si son concept intéresse du monde.

La chose la plus importante dans le monde de l’Open source est similaire au monde propriétaire. Il s’agit de la notion de licence. Un code libre ne veut pas dire qu’il n’y a aucun encadrement. Une des licences les plus connues, la General Public Licence (ou GPL) inclut dans ses clauses une propriété fondamentale pour l’essor du logiciel libre. Toute modification apportée à un code source libre doit être partagée selon les mêmes termes, et donc rendue libre également. Ce qui permet l’avancée de tous.

Mais alors comment gagne-t-on de l’argent dans le monde libre ? Plusieurs possibilités existent à ce niveau-là :

  • Vendre son logiciel libre
    La General Public Licence est une des rares (sinon la seule) licences à autoriser le diffuseur à vendre ou à revendre son code source libre. Mais comme le code source vendu doit être libre et que la licence autorise la rediffusion de façon gratuite, les sources d’accès payantes n’ont qu’un potentiel très limité. Pourquoi payer si l’on peut avoir un accès légal gratuit identique ?
  • Publier son code source selon plusieurs licences
    En tant que créateur ou originel, il est possible de publier son code source selon plusieurs licences différentes, comme par exemple une licence Open source (qui requiert donc que le logiciel qui sera déployé au final soit Open source lui aussi) et une licence commerciale (qui autorise les développeurs du logiciel suivant à ne pas diffuser leurs sources). C’est le cas notamment du framework Qt, actuellement propriété de Nokia, et utilisé notamment par le gestionnaire de bureau libre KDE.
  • Faire payer le support ou des services
    La notion d’Open source ne porte que sur la liberté d’accès au code source. Rien n’interdit le créateur de faire payer des services connexes comme le support technique pour faciliter l’intégration des outils. On retrouve dans ce cas des sociétés comme Canonical (créateurs d’Ubuntu) ou Red Hat.
  • Offrir un service amélioré
    Nous entrons aujourd’hui dans l’ère du « cloud« , autrement dit des services hébergés sur des sites internet plutôt que des applications installées directement sur nos ordinateurs. Différentes sociétés du monde Open source ont décidé d’embrasser ce mouvement en proposant des services gratuits utilisant leur propre logiciel mais avec des portions payantes pour les utilisateurs désirant aller plus loin. Dans ce cas, on ne paye pas le logiciel, mais simplement l’accessibilité à une partie du service hébergé. Un des exemples de réussite les plus récents reste la plate-forme WordPress.com sur laquelle est hébergée ce blog.
  • Les donations directes

Un Logiciel Libre doit-il rester Gratuit pour ses Utilisateurs ?

La question est large, mais la réponse est oui. La gratuité est la meilleure forme d’égalité et permet l’accès à tous aux mêmes services. Cela garantit donc en partie la neutralité que l’on commence à exiger aujourd’hui d’internet.

Cependant, que penser du fait que des sociétés gagnent de l’argent en utilisant des logiciels libres sans reverser quoi que ce soit aux créateurs originaux ? Cela fait partie du jeu du logiciel libre. Diffuser son code source sous cette forme implique que n’importe qui pourra s’en servir sans compensation.

Il existe cependant des moyens de remercier les auteurs de logiciels libres sans pour autant systématiquement parler d’argent. Voici la liste des actions que j’ai personnellement entamées sur différents projets :

  • depuis plusieurs années, je contribue à la traduction française de TortoiseSVN
  • j’ai effectué une donation pour le logiciel CyberDuck
  • j’aide à la résolution de bugs sur différents plugins WordPress

Cet article a été motivé par ma décision récente d’intégrer la communauté WordPress encore plus activement en tentant de corriger des bugs du logiciel principal et en proposant de nouvelles fonctionnalités.

Tous les projets auxquels j’ai contribué sont tous des logiciels que j’utilise intensivement dans mon travail et/ou dans mes loisirs. Après plusieurs années d’utilisation à sens unique, il m’est apparu important de renvoyer la balle et j’engage tous les développeurs et créateurs motivés à en faire de même pour ces projets et bien sûr pour d’autres

Xcode 4

Depuis que je me suis lancé dans le développement d’applications pour iPhone, Xcode a subit deux évolutions majeures, passant progressivement en version 3 puis, récemment, en version 4. Souvent décrié pour ses lenteurs et son manque d’ergonomie, Xcode 3 constituait cependant pour moi le meilleur outil de développement pour Mac OS X ou iOS, au même titre qu’Eclipse constitue le meilleur environnement de développement pour Java et bon nombre d’autres langages.

Xcode revient donc en version 4.0 pour la sortie très attendue d’iOS 4.3 pour iPhone, iPod et iPad. On peut dire qu’Apple a soigné son outil pour lui faire rattraper le retard qu’il avait accumulé face à ses concurrents. Le logiciel reste entièrement gratuit bien que son code source ne soit toujours pas diffusé, chose relativement normale pour Apple cependant.

Espace de travail unifié

A la manière d’Eclipse et bon nombre d’autres EDI, Xcode arbore désormais un espace de travail unifié intégrant l’ensemble des fonctionnalités de la version précédente et d’Interface Builder dans une seule et même fenêtre. Le gain de temps est considérable. L’interface a été clairement conçue pour les écrans larges mais cela ne constitue en aucun cas un problème puisque toute la gamme Mac actuelle est constitué d’écrans de ce type. Même sur un écran de MacBook Pro 15″, Xcode garde tout son potentiel et gagne énormément en ergonomie et en productivité avec ce mode d’affichage. Certains comme moi seront peut-être un peu perdus au début ou déroutés par le fait que certaines fonctionnalités aient été déplacées, mais dans l’ensemble tout cela va dans le bon sens.

Dans les critiques que l’on pouvait reprocher à la version précédente, on parlait régulièrement de la difficulté d’accès de la documentation en ligne. Xcode 4 en fait un lointain souvenir en intégrant dans le volet droit de son interface une zone d’aide contextuelle avec des liens vers les classes concernées par la position du curseur incluant notamment des références aux exemples fournis par Apple y faisant appel. Très très pratique.

On notera également l’ouverture automatique des fichiers sur simple clic, qui peut surprendre au premier abord, mais s’avère très pratique et permet aux utilisateurs du Magic Trackpad ou d’un MacBook de ne pas « déraper » en voulant ouvrir un fichier spécifique.

Nouvelles fonctionnalités

La Jump Bar

Déjà utilisé par d’autres, cette barre contextuelle se situant au sommet de la zone d’édition permet d’accéder en quelques clics à tous les fichiers et ressources du projet. L’affichage du volet de gauche de l’arborescence du projet en devient vite inutile pour les utilisateurs expérimentés. Cette Jump Bar permet également d’accéder directement aux variantes localisées des différentes ressources du projet.

Fix-It

Xcode 3 permettait déjà d’afficher les avertissements directement sur la ligne concernée, ce qui évitait de se mélanger les pinceaux quand un grand nombre d’erreurs subsistait à la compilation. Xcode 4 va plus loin en proposant carrément, lorsque cela est possible, une solution de remplacement pour corriger immédiatement l’erreur ou supprimer l’avertissement du compilateur. Cette pertinence des résultat va même jusqu’à identifier des variables mal orthographiées et proposer un remplacement par leurs équivalents valides les plus proches. Très efficace cette fonctionnalité permet un gain de temps et offre une assistance supérieure auprès des débutants.

Nouveaux compilateurs et debugger

Apple supporte de nombreux projets Open Source depuis déjà de longues années, comme WebKit par exemple qui fait les beaux jours de navigateurs comme Safari bien sûr, mais aussi de Google Chrome. Apple fait donc partie des supports et contributeurs de LLVM.org. De fait, LLVM et LLDB deviennent respectivement le compilateur et le debugger officiel d’Xcode 4. Exit donc GCC pour la compilation, même si LLDB n’est toujours pas disponible pour débugger les projets iOS.

Apple prone la différence de performances de LLVM par rapport à GCC et, en effet, les projets se compilent bien plus vite. Reste à voir si les applications bénéficieront sur le long terme d’un gain de performances équivalent en situation.

Améliorations du support des outils de versioning

Utilisateur de SVN depuis longtemps, j’ai toujours eu du mal à faire fonctionner Xcode 3 avec mes référentiels. J’utilisais donc pour le moment SmartSVN pour cette tâche. Cela risque de ne plus s’avérer nécessaire avec Xcode 4 puisque le versioning a été grandement amélioré dans cette version. Il est désormais possible d’effectuer toutes les tâches classiques directement au sein d’Xcode, y compris les comparaisons de versions d’un même fichier. Cela marche à merveille et Xcode profite de l’expérience acquise par Apple sur Time Machine pour offrir une interface similaire pour la chronologie des modifications.

Les mauvais points

Ma découverte d’Xcode 4 n’a pour le moment pas déclenché de bugs à répétition ou de lourdeurs particulières. Une mise à jour de cet article interviendra peut-être si de nouveaux éléments apparaissent. On peut cependant noter deux ou trois points noirs pour cette nouvelle version.

Le poids

Xcode 3 n’était déjà pas léger avec ses 2,1 Go à télécharger pour la version fournie avec iOS 4.2, mais Xcode 4 explose ce score pour atteindre les 4,6 Go sur la balance. Autant dire qu’une bonne connexion est requise pour le récupérer. A ma connaissance, aucun autre environnement de travail n’est aussi lourd, même pas Visual Studio.

Impossibilité de modifier la barre d’outils

Les utilisateurs des logiciels Mac savent très bien qu’il est généralement possible de personnaliser une barre d’outils en effectuant un clic droit sur la dite barre et en glissant-déplaçant les éléments souhaités à l’emplacement de son choix. Cela n’est plus possible avec Xcode 4 qui propose uniquement des éléments de base dont il va falloir se satisfaire. Construire un projet sans l’exécuter n’est plus désormais possible que par le menu ou le raccourci clavier adéquat. Dommage.

Conclusion

Malgré quelques petits défauts qui seront probablement corrigés dans des versions à venir, ce nouvel agencement des fonctionnalités est très réussi. Il est toujours possible de télécharger Xcode 3.2 avec le SDK d’iOS 4.3 mais, si ce n’est en raison d’éventuelles limitations matérielles, je ne vois pas ce qui justifierait à l’heure actuelle de rester coincé dans le passé. Xcode 4 est là, profitions-en !