Categories
Non classé

Les Français restent des écoliers

Ce fait est troublant: affichez deux champs de texte, le premier pour saisir le prénom, le second le nom de famille. Vous constaterez que la moitié des sujets français saisit son nom de famille dans le champ Prénom, et son prénom dans le champ Nom. Ceci est mon expérience d’un an et demi de vente de PortraiMatic.

Le taux d’inversion est similaire chez les Belges francophones, moindre chez les Suisses francophones, et quasiment nul pour les autres. Je suppute que nous autres français avons l’esprit formaté par nos années d’école où le nom précède toujours le prénom et la foule de documents administratifs qui suivent cette règle pour la plupart.

Categories
Non classé

PortraiMatic iPad (2): Reprendre le code de la version Mac ?

C’est décidé, je vais convertir PortraiMatic du Mac à l’iPad. Mais par où commencer ?

Faut-il reprendre le code de la version Mac ?

Il s’agit d’une question économique, à savoir: sachant que les bibliothèques de développement Mac et iOS possèdent de nombreuses similitudes, peut-on partager les fichiers sources entre les deux plateformes ? Après tout, le langage de programmation est le même, et Cocoa Touch est une adaptation de Cocoa Mac. Et si la réponse est positive, est-ce que la lourdeur structurelle (mise en place sous Xcode) n’anéantis pas le bénéfice de cette réutilisation?

Le gros du code concerne l’IHM

L’Interface Homme-Machine représente une grosse proportion dans PortraiMatic. Or, il s’agit probablement d’une des plus grosses différences entre Mac OS et iOS. D’un côté, nous utilisons App Kit, de l’autre UIKit. Il ne s’agit pas d’une simple adaptation: les ingés d’Apple l’ont repensé pour l’utilisation avec un écran tactile et l’ont grandement modernisé.

PM_ReframeView

Par exemple, je sais d’avance que je vais devoir reprogrammer entièrement la vue qui sert à recadrer les portraits. Or, il s’agit de la classe la plus complexe de PortraiMatic Mac.

Pas de bindings

Les Bindings sont une des technologies les plus utiles, mais également les plus complexes qui existe sur Cocoa Mac. Cette technologie synchronise l’état des vues (ce qui apparaît à l’écran) et l’état interne (couche ‘métier’). PortraiMatic en fait grand usage, entre autres parce qu’elle réduit les dépendances entre classes, et donc la complexité de l’architecture. Pour des raisons de performances, je pense, cette technologie n’a pas (encore) trouvé son chemin dans Cocoa Touch. Il existe des alternatives, mais cela signifie à nouveau que de grand pans du code ne peuvent pas être réutilisés.

Pas de Core Image

Core Image est ma technologie préférée dans Mac OS X. Elle permet d’appliquer des effets sur les images voire de générer des images. C’est une technologie à la fois performante, facile à utiliser et extensible. Malheureusement, elle n’a pas encore été portée sous iOS, même si je ne doute pas que cela sera fait prochainement. En conséquence, j’ai décidé, dans un premier temps, de ne pas inclure de fonctions de corrections de couleurs dans la version iPad. Non, pas que ceci me poserait de problème particulier (la programmation graphique est ma spécialité), mais je veux publier l’application rapidement.

Gestion des fichiers

La gestion des fichiers dans PortraiMatic est à la fois un motif de satisfaction — parce qu’elle est maintenant bien au point — et une inquiétude à chaque nouvelle version pour s’assurer de la compatibilité avec les versions précédentes. Elle présente quelques détails malins. Tout d’abord, la “galerie” est un bundle, c’est à dire un dossier qui apparaît comme un fichier sous Finder. On peut l’ouvrir sous Finder, par un clic droit > Afficher le contenu du paquet, et constater que chaque portrait possède son dossier:

PM_BundleGalerie

Chaque dossier comporte l’image utilisée par le portrait et un fichier Portrait.plist qui décrit les paramètres du portrait (recadrage, correction des couleurs). Cette organisation s’est révélée pratique en cas de problème (on peut mettre un dossier à la corbeille), plus simple à déboguer (on voit immédiatement si les données ont été enregistrées). Elle a aussi permis de mettre en œuvre facilement la fusion des galeries de deux utilisateurs. Cependant, je vais passer à Core Data pour enregistrer les données.

Core Data permet de décrire le modèle (la partie “métier”) de l’application de façon graphique et de stocker les informations dans une base de données SQLite de façon transparente. J’en attends des simplifications de l’architecture et une baisse de volume du code source. Par ailleurs, elle devrait régler mes soucis de migration d’une version à l’autre, en m’obligeant à décrire précisément les évolutions de chaque version.

À l’heure du choix

Finalement, je constate que peu de code peut être repris; si nécessaire, je dispose toujours de la possibilité de copier-coller du code. Je n’ai franchement pas envie de m’engager dans des problèmes d’inclusions de fichier d’un projet Xcode à l’autre. Il me semble donc plus opportun de ne pas partager de fichiers entre les versions Mac et iPad, et de créer un projet Xcode tout neuf.

Categories
Non classé

PortraiMatic iPad (1): Objectif du projet

Je me suis décidé à convertir mon logiciel PortraiMatic du Mac à l’iPad. Je débute donc une série d’articles qui vous permettra de suivre l’avancement de l’application, mais surtout qui vous expliquera mes choix et les problèmes que j’ai rencontré.

L’objectif du projet

Quand développer un logiciel est un loisir, il importe finalement peu que ce projet ait un avenir; on le fait avant tout pour le plaisir, pour le challenge intellectuel. À l’inverse, dans le cadre d’une société, chaque choix doit être motivé. Aussi doit on avoir des objectifs avant d’investir son temps dans l’écriture d’une application. L’objectif le plus courant est de gagner de l’argent, mais peut être de se former, de tester la faisabilité technique d’une idée, ou de promouvoir la société.

Version iPhone

On m’a demandé à de nombreuses reprises pourquoi PortraiMatic n’existait pas sur iPhone. La réponse est très simple: ce serait un mauvais investissement. Il existe déjà un palanquée d’application à 0,79 € pour produire des planches de photos d’identité. Même si je concevais le meilleur programme du genre — ce qui est probable — elle ne pourrait guère être vendue plus d’1,59 €. Rappelons que sur 1,59 €, la société ne toucherait que (1,59 – 15% de TVA – 30% de commission d’Apple) = 0,95 €. Rappelons que pour me verser un salaire de 1500 € nets/mois, cela coûterait à la société Céroce à peu près le double pour payer les charges sociales, soit 3000 €. Rappelons que les sociétés sont soumises à divers impôts et ont des frais, ne serait-ce qu’un loyer, des abonnements au téléphone et à Internet, d’importants frais de transport, acheter des Mac ou iPad ou une imprimante, et toutes les fournitures qui vont avec, de la documentation, un comptable, etc. Eh bien on arrive vite à 5000 €/mois. Notez que je ne fais pas cet inventaire pour me plaindre de “toutes ces charges qui plombent les entreprises”, comme on dit au MEDEF, mais pour effectuer un calcul réaliste.

Imaginons que je passe trois semaines sur le développement de la version iPhone (ce qui est optimiste), il faudrait qu’elle rapporte 3/4 de 5 000 € soit 3 750 €. Le premier jet serait donc rentable avec 3 948 ventes. Or, si vous croyez que c’est facilement atteignable, vous vous trompez lourdement. L’application serait noyée au milieu de 350 000 autres ! Si bien qu’il faudrait un plan marketing pour y parvenir, qui prend du temps et a un coût. C’est bien simple, si la promotion prenait trois semaines, il faudrait vendre deux fois plus d’exemplaires. Bref, j’ai préféré ne pas investir mon précieux temps sur ce marché.

Version iPad

Pourquoi une version iPad alors ? Certes la concurrence y est moindre (seulement 65 000 applications) et je pourrais pratiquer un prix de vente plus correct, autour de 5 €. Mais à vrai dire, je doute fortement que le coût du développement sera couvert par les ventes. L’objectif est ailleurs: démontrer mon savoir faire sur cette plateforme. Comme tout prestataire amené à démarcher des clients, il me faut les convaincre de ma capacité à réaliser un projet complexe. Cette version iPad sera mon ambassadrice. Quand l’iPad fut présenté l’année dernière, je me suis dit que c’était la machine idéale pour PortraiMatic. C’est encore plus vrai pour l’iPad 2 et ses caméras intégrées.

Categories
Non classé

BeMyApp 4

Me voilà bien en retard pour parler de ma participation au quatrième BeMyApp qui eut lieu le week-end du 4 février. Rappelons qu’il s’agit d’un concours consistant à mettre au point une application mobile en un week-end. J’avais déjà participé aux deux premières éditions consacrées à l’iPhone. Vous pourrez lire à leur propos ici et .

À chaque édition, nos deux compères, John et Cyril, tentent de nouvelles choses. Certaines fonctionnèrent bien. Ainsi, avaient-ils décidé que nous livrerions l’application et son source le dimanche avant 18 heures, avec deux objectifs. L’un étant de permettre aux 50 bêta-testeurs, pré-inscrits depuis un mois, d’installer les applications sur leurs iPhone et les tester, et l’autre de transmettre le code source à Guillaume Cerquant, chargé de décerner le prix du meilleur code. Cette organisation fut pertinente, puisqu’à 18 heures, nous autres développeurs fûmes libérés du travail, pûmes enfin nous restaurer et préparer la présentation avec le porteur de projet.

Autre succès, j’ai constaté que les bêta testeurs ont bien joué le jeu et donné leurs avis. L’engouement pour notre application est très encourageant pour la suite.

Autre nouveauté, cette édition fut la première à être nationale; ne se déroulant pas qu’à Paris, mais aussi à Lyon et Marseille. Le succès de cette initiative est mitigé. D’un côté, les équipes provinciales ont bien travaillé, de l’autre, les retransmissions vidéos entre les trois sites furent un échec à cause du LiveStream qui créait un décalage de près d’une minute, et ne permit pas aux spectateurs de vivre l’événement. Cette infrastructure fit perdre trois heures à tout le monde le samedi, et allongea énormément la délibération du dimanche. Par ailleurs, les marseillais ne parvinrent pas à faire fonctionner le LiveStream chez eux.

Parlons un peu des idées soumises au public. À vrai dire, dans leur ensemble, elles ne m’ont guère emballé. Peut-être qu’avec trois participations, je deviens blasé ! Heureusement, l’un des projets à été repêché au dernier moment. Il s’agit d’iKado. Je suis heureux de la manière dont nous avons travaillé durant ce week-end. Je me suis particulièrement bien entendu avec toute l’équipe, Mathieu, le porteur de projet qui devint graphiste pour la circonstance, Anthony et François-Julien, les deux autres développeurs venus de Marseille, et passés par Supinfo. Aussi, une rivalité sympathique se créa entre les trois écoles d’ingénieur représentées.

De gauche à droite: François-Julien, Anthony, moi et Mathieu.
De gauche à droite: François-Julien, Anthony, moi et Mathieu.

Nous avons vraiment travaillé très dur. Le projet nécessita la mise en place d’un service web, aussi m’y suis-je collé parce que j’étais le plus expérimenté, malgré mon peu d’expérience sur les technologies web. J’ai donc laissé François-Julien et Anthony travailler sur l’application iPhone, quasiment autonomes. Je ne suis intervenu que pour déboguer le programme de temps en temps, et leur expliquer quelques concepts. Leur code était plutôt propre, mais le dimanche matin, j’ai travaillé deux heures pour le réarranger un peu.

Malheureusement, je n’ai pas avancé aussi vite que voulu sur la partie web, ce qui nous a obligé à réduire nos ambitions pour la présentation du dimanche. L’application finale fut quand même fonctionnelle, assez pour expliquer clairement l’intérêt au jury.

Pour finir, sachez que parmi les trois prix décernés, nous avons reçu le prix Parrot, du meilleur code, qui nous récompensa chacun d’un AR Drone ! Je n’ai pas encore eu beaucoup de temps pour m’exercer au pilotage, et je ne suis pour l’instant pas très brillant.