Éditeurs de texte, le renouveau ?

03 11 2011 In: Logiciel

text editor on mac os x Alors que Textmate 2, accumule tellement de retard que l'on pourra bientôt le comparer à Duke Nukem Forever, la relève en tant qu'éditeur de texte mac puissant et léger essaye de se faire une place :

  • Sublime Text 2 (59$, beta), disponible sur Mac OS X, Windows et Linux.
  • Chocolat App (£30, alpha), uniquement disponible sur Mac et compatible avec les thèmes et bundles Textmate.
  • Espresso 2 (79$), principalement orienté développement web et qui intègre l'éditeur CSSEdit 3.

En ce qui me concerne, je teste actuellement Sublime Text 2 qui est vraiment sympa, même si j'avoue que j'ai encore du mal à me séparer de Textmate. Si vous en connaissez d'autres, n'hésitez pas à utiliser les commentaires pour partager vos découvertes.

Palm rend disponible le SDK Mojo

17 07 2009 In: Logiciel

Palm vient de rendre disponible le kit de développement de son OS mobile webOS qui contrairement au SDK iPhone existe pour toutes les plateformes (Linux, Windows et bien sûr Mac). Il est aussi intéressant de noter que le SDK utilise VirtualBox pour faire tourner l'émulateur webOS. Pour plus d'informations, je vous invite à découvrir les liens suivants :

Eclipse pour Mac en Cocoa

02 07 2009 In: Logiciel

La version 3.5 d'Eclipse (nom de code Galileo) vient de sortir, et la grande nouveauté est que l'interface graphique est écrite en Cocoa (plus exactement c'est le gestionnaire d'interface SWT qui à été porté en Cocoa) pour une meilleur rapidité.

Pour avoir testé, c'est vrai que c'est plus rapide que les anciennes versions, mais je préfère de loin quelque chose de beaucoup plus léger comme TextMate (donc la version 2 est en cours de développement).

Murky, un client Mercurial

05 05 2009 In: Logiciel

Si comme moi vous utilisez Mercurial comme gestionnaire de source, je vous propose de découvrir Murky (code source), un client écrit par Jens Alfke, un ancien d'Apple maintenant développeur indépendant.

Murky, un client Mercurial

Il faut par contre actuellement le compiler à la main car il n'existe pas encore de distribution binaire. Plus d'informations pour compiler le projet sont disponible sur le wiki du projet.

L'actualité du développement web

26 02 2009 In: Liens, Logiciel

Si vous suivez l'actualité Mac, vous avez certainement vu que Apple vient de rendre disponible une version bêta de Safari 4. Parmi les nouveautés, quelques une nous intéresse tout particulièrement :

Pour finir, je voudrais aussi signaler les actualités concernant Cappuccino, qui proposera d'ici peu un nouveau thème et une application web de type XCode pour développer des applications Objective-J / Cappuccino :

Vous trouverez ci-dessous la vidéo de Atlas, qui mérite d'être vue tellement on a l'impression d'avoir à faire à un XCode en ligne :

Gérer une base de données MySQL

25 02 2009 In: Logiciel

Lorsque l'on développe une application, et plus particulièrement dans le cadre d'une application web, on utilise souvent une base de données pour stockés les données de l'application. Une des solutions est d'utiliser phpMyAdmin qui est souvent installé par défaut sur les hébergements ou les packages permettant de faire du développement web, mais il faut avouer que son interface n'est pas toujours des plus facile à utiliser. L'alternative est de passer par un client MySQL installé sur votre ordinateur, c'est pour ça que je vais aujourd'hui vous en présenter quelques-uns :

  • Sequel Pro qui est utilisable à partir de Mac OS X 10.5 et qui est gratuit et sous licence GNU GPL.
  • Querious, un logiciel qui coûte 25$ et qui me semble plus facile à utiliser et avec une interface plus dans la philosophie Mac.
  • Navicat MySQL, qui coûte entre 79$ et 149$ et qui propose une version lite gratuite. Elle n'est pas la plus orienté Mac, mais elle propose la gestion des tunnels SSH ce qui est très pratique pour gérer les serveurs MySQL distants. C'est en ce qui me concerne le logiciel que j'ai choisi (la version lite). Il existe en plus une version pour PostgreSQL et une version pour Oracle si vous n'utilisez pas MySQL.

Edit : Un test de Querious et Sequel Pro est disponible sur MySQL Showdown: Querious vs. Sequel Pro

10 manières de réduire les bogues

21 01 2009 In: Astuces, Cocoa, Logiciel, Objective-C

Les bogues ne sont pas une fatalité: ce sont des défauts dus à des erreurs d'êtres humains:

  1. Trop grande complexité
  2. Méconnaissance des API ou du langage
  3. Étourderies
  4. Laxisme !

Comme vous êtes comme moi et détestez passer vos après-midi sur un débogueur, voici quelques stratégies éprouvées pour les réduire.

10. Documentez

Je vais ici seulement insister sur les aspects de la doc qui permettent de limiter les bogues :

  • Rédigez une partie de la description d'une méthode avant de la coder
    Vous devez réfléchir aux cas particuliers du déroulement, aux valeurs possibles des arguments d'entrée (notamment comment gérer les gammes de valeurs inattendues), et quelles erreurs peuvent subvenir pendant l'exécution. Inspirez-vous de la programmation par contrat.

  • Faites des commentaires utiles
    Ils ne doivent pas paraphraser le code, ni expliquer chaque appel de méthode. Expliquez le cheminement du code, et soulignez ce qui est le moins évident. C'est très utile au débogage, quand on revient au code quelques semaines plus tard.

  • Nommez vos variables avec grand soin
    Je suis toujours étonné qu'à notre époque, les gens nomment encore leurs variables i,j, tab[] ou ptr, dans la plus pure tradition du Kernighan & Ritchie. Il m'est arrivé de rendre des bogues évidents rien qu'en renommant.

9. Relisez-vous

D'expérience, la moitié des bogues pourraient être évités lors de l'écriture du code. Je ne parle pas des erreurs de syntaxes (signalées par le compilateur), mais utiliser une variable à la place d'une autre, effectuer les opérations dans le mauvais ordre, etc.

Si vous programmez seul, pensez à relire — avec un œil critique s'entend — votre nouveau code systématiquement avant de compiler.

8. Corrigez les bogues dès qu'ils apparaissent

Il arrive fréquemment de découvrir un bogue, et de le laisser à plus tard. Comme vous êtes un programmeur consciencieux, vous y reviendrez. Mon expérience dicte de corriger le bogue immédiatement, parce qu'il arrive souvent de commettre encore et encore la même erreur. Mieux vaut donc la corriger au plus tôt, pour ne faire l'erreur qu'une fois.

7. Testez les codes d'erreur et gérez les exceptions

À moins que cela n'alourdisse exagérément le code, il est sage de vérifier les résultats des fonctions. Gérez aussi les exceptions. Ces deux tâches triviales ne doivent pas être laissées à plus tard — c'est à dire jamais.

6. Créez des projets d'essai

Bien que je travaille sur un gros projet, je crées de nombreux petits projets annexes. Le dernier en date était destiné à vérifier sur mon site web si une nouvelle version de l'appli est disponible. Je n'avais aucune expérience du téléchargement d'un fichier texte. Sur ce petit programme de vingt lignes, j'avais tout de même commis deux bogues. Avoir un programme léger permet de les cerner rapidement.

Si j'avais intégré la fonction directement dans mon appli, je me serais demandé si les problèmes venaient du nouveau code ou de l'ancien. J'aurais peut être modifié du code valide. Enfin, maîtriser une technologie permet de savoir comment l'intégrer au mieux au reste de l'application.

5. Ayez des scénarios de test sous la main

D'expérience, il arrive que les bogues apparaissent dans des circonstances déjà rencontrées. Lorsque vous avez trouvé une procédure pour reproduire un bogue à coup sûr, notez-là et déroulez cette procédure à chaque version. Si possible, automatisez les tests. Par exemple, les tests de l'interface utilisateur peuvent être automatisés avec Instruments.

4. Écrivez des tests unitaires

Les tests unitaires s'appliquent essentiellement aux classes de la couche modèle. Ma première expérience fut une classe que je n'arrivais pas à mettre au point pour un programme de musique, qui devait renvoyer les notes faisant partie d'une gamme. J'étais capable de trouver ces notes sur le papier, mais je m'y suis repris à trois fois avant d'avoir un algorithme… qui ne marchait pas dans certains cas particuliers.

Après avoir écrit les tests unitaires, les erreurs apparaissaient de façon évidente dans la couche modèle, plutôt que de manière indirecte dans l'interface utilisateur. J'ai gagné du temps, et j'étais enfin sûr de mon code.
Nous reviendrons sur les tests unitaires, à la mode, et ceci pour d'autres très bonnes raisons.

3. Réduisez les contraintes

Comme dit plus haut, la cause principale des bugs est la complexité. En effet, des scientifiques ont mesuré que les individus les plus doués étaient capables de prendre en compte simultanément sept contraintes. Pour la plupart des gens, c'est plutôt quatre (<- c'est là que je me situe).

L'idée est donc de limiter la complexité du logiciel:

  • en ajoutant de l'abstraction
    pour pouvoir se concentrer sur la tâche présente au lieu des détails d'implémentation.

  • en limitant le couplage
    c'est à dire les interdépendances entre objets.

Et cela est difficile. Très. Beaucoup de gens se disent programmeur ("oui, j'ai étudié un peu le langage C pendant mes études de biologie"), mais peu ont déjà travaillé sur un projet conséquent, un où les bogues deviennent difficiles à résoudre et semblent réapparaître sans cesse.

Je n'ai pas de secret, il faut se forger une expérience: étudier les patrons de conception, savoir comment fonctionne la machine et le système d'exploitation, étudier d'autres langages de programmation ou d'autres bibliothèques…

2. Ne construisez que les infrastructures nécessaires maintenant

Ce point est un peu en contradiction avec le précédent. En effet, quand on commence à ajouter de l'abstraction, on a ensuite tendance à vouloir rendre tout réutilisable et générique. Imaginons que vous vouliez écrire un texte en rouge. Il est tentant d'écrire une méthode générique qui prend la couleur en paramètre, pour le jour où vous voudriez écrire en vert.

Pourtant, la méthode générique sera forcément plus difficile à écrire et à tester. Pourquoi passer du temps sur quelque chose d'inutile aujourd'hui ? Attendez un jour prochain que le besoin soit réel. De plus, une méthode simple sera une bonne base de départ pour écrire une méthode plus complexe.

1. Codez moins

Aucun code n'est plus flexible que pas de code.

Il existe souvent une méthode qui rend 80% du service avec seulement 20% du travail que demanderait une méthode parfaite. Ne visez pas la perfection. La vie est trop courte ! Demandez-vous si vos utilisateurs préfèrent une fonction parfaite dans un an ou une fonction correcte aujourd'hui.

Moins de code = moins de bogues
Travaillez le cœur de métier de votre logiciel. Les détails seront réglés plus tard (voire jamais).

Pour finir

Voilà les méthodes que j'utilise — avec plus ou moins de rigueur — pour conserver mes applis stables. Auriez-vous d'autres techniques à proposer ?

Une des pratiques importantes dans le développement logiciel, est l'utilisation de tests unitaires. Cela permet de s'assurer du comportement de son code, d'éviter les régressions et de manière général d'avoir plus confiance en son code.

Google vous propose dans le cadre de son Google Mac Developer Playground un certain nombre d'outils pour développeur dont CoverStory, qui permet de visualiser facilement le taux de couverture de votre code à partir des fichiers générés par Gcov.

CoverStory

Pour plus d'informations sur CoverStory, les outils Google pour développeurs Mac et Gcov, utilisez les liens ci-dessous :

Utiliser Git avec un projet XCode

29 11 2008 In: Logiciel

Un des outils indispensable pour un développeur, est un gestionnaire de versions. Malheureusement XCode gère uniquement CVS, Perforce et Subversion. Si vous avez décidez d'aller voir du coté du gestionnaire distribué Git, voici un article de Christopher Roach sur son utilisation pour gérer un projet XCode :

Il est aussi possible de se servir uniquement de la liste des fichiers à ignorer pour l'adapter à Mercurial par exemple.

Installation des outils développeur

28 10 2008 In: Cocoa, Logiciel

Ça y est, vous vous êtes décidé à vous lancer dans la programmation Cocoa. Bravo, mais il va falloir d'abord installer les outils de développement.

Où trouver les outils

Première bonne nouvelle, ces outils sont gratuits. Vous les trouverez à deux endroits:

  • sur le deuxième DVD de Mac OS X qu'il soit livré avec votre machine ou acheté séparément
  • sur l'Apple Developer Connection (ADC). Il faut s'inscrire sur le site. Il existe plusieurs types de comptes ADC, mais celui de base est gratuit, et vous permettra de télécharger entre autres les outils développeur.

Vous devez savoir que, selon la version de Mac OS X qui anime votre machine, vous ne pouvez pas utiliser n'importe quelle version des outils. Ainsi XCode 2.5 fonctionne sous Mac OS 10.4 et 10.5, mais XCode 3.0 est réservé à 10.5. La version actuelle est la 3.1.1.

Ce qui est installé

Une fois l'installation (des plus classiques) terminée, vous trouverez un dossier Developer à la racine de votre disque dur. Nous n'allons pas ici détailler ce qui fut installé (ne serait-ce que parce que je ne connais pas tous les outils); concentrons-nous sur ceux du quotidien:

XCode

Il s'agit d'un intégré de développement, dédié avant tout au développement Cocoa: un éditeur de texte, un éditeur des paramètres des applications, un modélisateur Core Data et de quoi s'interfacer avec les outils externes.

Les programmes en ligne de commande

XCode est surtout est éditeur de texte amélioré, il n'inclut pas de compilateur, mais fait appel au compilateur libre gnu C (tapez gcc dans le terminal pour vérifier qu'il est bien là), au débogueur gnu debug (gdb), ou au gestionnaire de version subversion (svn).

Vous pouvez évidemment utiliser ces outils indépendamment de XCode, mais il vous est toutefois conseillé d'installer ces outils par le biais de l'installateur de XCode, qui se chargera de bien configurer votre environnement.

Interface Builder

Mon programme favori, qui permet d'éditer les interfaces utilisateur. Nous verrons son utilisation de base dans un très prochain article.

Analyse des performances et débogage

De nombreuses applications sont fournies pour vous aider à améliorer votre application :

  • MallocDebug, ObjectAlloc pour analyser les allocations et les fuites mémoire
  • Instruments, Sampler et Shark pour l'étude des performances et un tas d'autres petites applications plus spécifiques que vous aurez l'occasion d'essayer.

Quartz Composer

Introduit avec Mac OS 10.4, il s'agit d'un programme singulier qui permet de composer des animations en couchant des blocs fonctionnels sur une feuille et en les reliant. Les animations résultantes peuvent être utilisées dans vos applications Cocoa, pour créer des économiseurs d'écran, ou être lues directement par QuickTime. Le formidable PulpMotion repose sur QuartzComposer.

Dashcode

Il s'agit d'un éditeur, à mi-chemin de XCode et Interface Builder, pour concevoir les Widgets. Il permet de concevoir leur interface utilisateur et de saisir directement le code JavaScript.

Nous passerons à quelque chose de plus concret dans le prochain article. En attendant, joyeuse installation !