Renaud Pradenc

Aller au contenu | Aller au menu | Aller à la recherche

mardi, mai 22 2012

Calcul de distance et réflexion sur notre métier

Lors de l'une de mes dernières formations pour Mediabox, j'ai posé une question qui me paraissait bien anodine: "Comment calcule-t-on la distance entre deux points" ? Je fus bien étonné qu'aucun de mes élèves ne sache répondre.

Les deux points sont placés dans un repère cartésien et leurs coordonnées sont connues. J'ai commencé par dessiner deux points aux tableau. En complétant le dessin, et en faisant de ces deux points des sommets d'un triangle rectangle, cela donne:

Le dessin

Une fois la figure tracée, une réponse me fut enfin donnée: "Il faut utiliser le théorème de Pythagore". Exact.

Le calcul

La figure montre clairement que la distance est l'hypoténuse du triangle. D'après la réciproque du théorème de Pythagore:

distance = √(largeur^2 + hauteur^2)

Nous obtenons les largeurs et hauteurs par les coordonnées des points: largeur = abs(p1.x - p2.x)

hauteur = abs(p1.y - p2.y)

Il faut utiliser la fonction valeur absolue abs() parce que p2.x peut très bien être supérieur à p1.x. De même pour les y. Cependant, comme le carré d'un nombre réel est forcément positif, le code fera l'économie de l'appel à cette fonction abs().

Implémentation du calcul de distance

Passons donc au code en langage C:

#include <math.h>

typedef struct
{
    float x;
    float y;
} Point;

float distancePoints(Point p1, Point p2)
{
    float largeur = p1.x - p2.x;
    float hauteur = p1.y - p2.y;

    return sqrtf(largeur*largeur + hauteur*hauteur);    
}

Quelques remarques sur l'implémentation:

  • on utilise la fonction sqrtf() et non sqrt() pour le calcul de racine carrée. Les fonctions mathématiques de math.h travaillent normalement sur des doubles et non des floats. Les fonctions adaptées aux floats, comme sqrtf() sont plus rapides.
  • on n'utilise surtout pas powf(largeur, 2), pour élever la largeur au carré. Une simple multiplication est très rapide comparée à un appel de fonction, encore plus comparée à cette fonction powf().

Réflexion sur notre métier

En fait, si j'en suis à vous donner ces explications, c'est parce qu'une fois la réponse donnée à mes élèves, l'un d'eux m'a dit: "À quoi bon savoir comment calculer une distance, je vais trouver la fonction toute faite sur le net en deux minutes". Il me semble que l'argument que je lui ai donné à ce moment était mauvais, à savoir qu'il était important d'avoir une culture générale de l'informatique.

En y réfléchissant, j'ai commencé à programmer à une époque où Internet n'existait pas. Même les rares livres d'informatique ne donnaient pas forcément ce genre d'informations. À l'époque, je n'avais d'autres choix que me creuser la tête ou poser des questions à un prof de math ou de physique, voire parler avec d'autres programmeurs amateurs. L'avantage est que j'ai des connaissances variées, et que je peux revenir aux bases si besoin. Avec suffisamment de temps, peu de choses me paraissent infaisable. L'inconvénient est que j'ai tendance à réinventer la roue: plutôt qu'adopter une bibliothèque toute faite trouvée sur le net, je vais souvent préférer la programmer moi-même; elle sera ainsi plus flexible et plus adaptée à mes besoins, mais l'écrire va me prendre du temps.

Finalement, j'ai tout de même trouvé un bon argument. Voici un cas typique: on clique à la souris, et il faut sélectionner le point le plus proche. Pour ce faire, un algorithme simple consiste à calculer la distance entre tous les points du diagramme et les coordonnées du clic. Or, utiliser la fonction ci-dessus est lent. Une bien meilleure méthode est de comparer non pas les distances, mais les carrés des distances. On élimine ainsi l'appel à la fonction sqrt(), et on gagne énormément de temps!

Mon argument est que si on utilise du code sans vraiment le comprendre, alors on n'en connait pas non plus les limites, et on ne peut pas l'adapter à ses besoins.

mardi, novembre 8 2011

TeleLineo 1.0 est disponible.

L'application a été validée et est disponible.

TeleLineo sur l'App Store.

N'hésitez pas à me laisser vos commentaires et idées d'amélioration.

mercredi, novembre 2 2011

Bogue sur la rotation

En faisant une démonstration de TeleLineo, je me suis rendu compte d'un bogue:

BogueVertical.jpg

Eh oui, j'ai oublié de gérer la rotation, ou plutôt de refuser la position verticale. L'application démarre bien en orientation horizontale, et c'est pour cela que je ne me suis pas rendu compte du problème. De fait, je viens de rejeter l'executable pour qu'il ne soit pas contrôlé par Apple. Je vais corriger rapidement le problème et re-soumettre dans la foulée.

dimanche, octobre 30 2011

20h02 — L'application est soumise

L'application est soumise à Apple. J'ai donc deux minutes de retard, mais on peut admettre que la mission est remplie dans le temps imparti.

SnapshotTeleLineo.jpg

Je vous donne rendez-vous dans quelques jours quand l'application aura été validée par Apple (ou pas).

19h58

J'ai généré un profil sur le portail d'Apple et saisi toutes les infos sur l'appli. Je suis actuellement en train de téléverser l'application sur les serveur d'Apple.

Vais-je finir avant 20h ? Le suspense est à son comble!

19h34

C'est bon pour l'analyse statique et pour Instruments. Ça ne m'étonne guère puisque j'ai activé ARC !

J'ai créé rapidement une image de lancement, en effaçant les titres et les molettes.

Il me reste à signer l'application et écrire une présentation pour l'App Store.

19h15

Le dialogue qui affiche les infos sur l'appli est terminé:

LineoInfo.jpg

J'ai aussi fait une icône assez moche (oui, je sais, c'est le principal critère pour télécharger une appli, mais je n'ai juste pas le temps):

AppIcon320.jpg

Pour finir, je vais lancer un petit coup d'Instruments et d'analyse statique sous Xcode. Aurai-je le temps de proposer l'appli à Apple avant 20 h ?

Deuxième molette

J'ai remanié un peu le code et implémenté la molette verticale. Le rendu ne me plait pas trop; à vrai dire, c'est assez difficile graphiquement parce que la lumière est sensée venir du haut. J'ai tout de même un résultat qui indique clairement le rôle de la molette:

MoletteHorizontale.jpg

Bon, ce n'est clairement pas parfait, mais il ne reste plus que deux heures et j'ai encore une boite de dialogue et l'icône de l'application à faire.

Première molette

La molette verticale fonctionne. Voici ce que ça donne graphiquement:

MoletteVerticale.jpg

Pour simuler le mouvement de rotation, j'ai eu recours à une astuce. Comme il faut au moins trois étapes d'animation pour suggérer la direction d'un mouvement, j'ai tracé un segment horizontal (une rainure) tous les trois points. En fonction du mouvement imprimé, je change l'ordonnée du premier segment horizontal tracé. Ainsi dans le code, on a ça:

animationGrooveDelta = (animationGrooveDelta + (int)pointsDelta) % kAnimationsSteps;

  • animationGrooveDelta est le décalage de l'ordonnée du premier segment
  • pointsDelta est la distance du glisser du doigt
  • kAnimationsSteps vaut 3

L'illusion de mouvement est parfaite, mais je ne suis très satisfait du rendu.

Point à 13 h

Comme prévu, ce matin, j'ai travaillé le graphisme. Voilà ce que ça donne:

Capture13h.jpg

J'ai essentiellement ajouté des ombres pour donner du volume et rendre l'objet plus réaliste. Evidemment, il reste un gros travail sur les molettes que je réserve à cet après-midi.

J'ai commencé par ajouter une barre de navigation. Je n'étais pas très sûr de vouloir le faire pour des questions esthétiques. Finalement, je trouve que ça va. Pour fixer la couleur, j'ai utilisé les nouvelles API UIAppearance de iOS 5.

Pour ce qui est des outils de dessin, j'ai commencé avec Lineform. Ce logiciel était ce qui se faisait de mieux dans cette gamme de prix quand je l'ai acheté, il y a quelques années. Seulement, son auteur a été embauché par Apple, le logiciel a été racheté par son distributeur, et depuis, les bugs restent. Bref, j'aurais préféré qu'il soit racheté par une équipe compétente. En l'occurence, j'ai fait tout le travail pour me rendre compte de gros problèmes de correspondance des couleurs. De fait, j'ai fait une copie d'écran et fini sous PixelMator.

Au départ, je voulais découper l'écran en plusieurs parties pour réduire la taille de l'appli. Mais le .png ne pèse que 40 ko, ce qui est très acceptable; j'utilise donc une seule UIImageView en fond. J'ai superposé ma vue de dessin en la rendant non-opaque.

Au bas, j'ai placé un petit bouton avec le logo de Céroce. L'appuyer affichera un écran modal pour présenter la société et renvoyer vers son offre de prestation.

samedi, octobre 29 2011

Dessin à la molette

J'ai amélioré l'application, et on peut maintenant dessiner:

chateau.jpg

(je voulais vous dessiner la Naissance de Vénus, mais faute de temps, j'ai choisi un sujet plus simple).

Et on peut aussi effacer l'écran en secouant l'iPad.

Ça suffit pour aujourd'hui. Demain, je travaillerai la partie graphique (voire sonore).

Premier prototype

Je viens de prendre ma pause déjeuner, et je vais maintenant me mettre à coder. L'essentiel de la programmation concerne la partie graphique et l'interface homme-machine. Pour l'instant, j'essaie de dégrossir le travail, à savoir où doivent se placer les éléments de l'interface et quelle taille leur donner.

Les bases de l'interface

Vue principale

L'application est pour ainsi dire constituée d'une seule vue. Celle-ci est forcément horizontale, il n'y a donc pas de rotation d'écran à gérer.

Vue de dessin

Une sous-classe de UIView affichera le dessin. Pour l'instant, je vais simplement afficher une croix qui représente la mine qui gratte la vitre.

Molettes

Les molettes sont l'aspect le plus difficile de l'application. Il s'agira d'une sous-classe de UIControl, et elle possède des valeurs minimales et maximales, ce qui l'apparente à UISlider, mais le fait qu'il n'y ait pas de curseur indique que je vais devoir créer ma propre sous-classe de UIControl.

Création du projet Xcode

Il y a au moins une bonne raison à choisir le nom de l'application avant toute chose, c'est qu'on en a besoin pour créer le projet Xcode! Certes, ce nom peut être changé par la suite, mais ça représente du travail.

Je n'ai qu'à choisir le modèle d'application qui va bien et régler l'orientation de l'écran. Pour ce projet, je ne vais assurer la compatibilité qu'avec iOS 5 (tous les iPad sont compatibles), de fait, je vais utiliser ARC pour gérer la mémoire.

Avancement

Après quelques heures de travail, j'obtiens un premier prototype presque fonctionnel:

Proto1.jpg

Pour faciliter la manipulation des molettes avec les pouces, je les ai déportées vers le haut. Elles permettent d'ors et déjà de déplacer la croix à l'écran. Je sais que c'est laid, mais pour l'instant, j'en suis encore à régler précisément les dimensions des éléments, alors je ne veux pas partir tout de suite dans le graphisme.

D'un point de vue fonctionnel, il me reste à gérer le dessin et l'effacement. Faut-il dessiner en bitmap ou en vectoriel ? Je pense que le plus rapide à développer est d'utiliser du vectoriel et je ne pense pas avoir de problème de performances, alors je vais partir sur cette solution.

Design de l'application

Comme je ne dispose que de deux jours, je vais commencer par faire l'application la plus simple possible: elle va reprendre exactement les fonctions de la version réelle du jouet: déplacer la mine et effacer l'écran en le secouant. Pour l'instant, je ne prévois pas d'enregistrement des images, de galerie, etc.

Pour la surface de dessin, je vais reprendre le rapport largeur/hauteur de 3/2.

Les molettes rotatives du jouet original ne sont pas pratiques sur un écran tactile; aussi vais-je utiliser des molettes linéaires. Cette entorse à la nostalgie a l'avantage de retirer deux défauts:

  • le jouet doit préciser pour chaque molette si elle transmet un mouvement horizontal ou vertical à la mine.
  • par ailleurs, il existe un doute sur la direction: une rotation de la molette horizontale dans le sens horaire déplace-t-elle la mine vers la droite ou vers la gauche ?

Enfin, je vais opter pour un boitier bleu afin de bien me différencier du modèle original. La forme sera aussi différente.

Analyse marketing

La première étape lorsqu'on crée une appli est de faire une analyse marketing, même pour ma petite appli du week-end. Inutile d'aller trop dans les détails, mais il y a quelques questions à se poser.

Est-ce que ça existe déjà ?

Première recherche avec le nom Télécran utilisé en France.

Rapidement, je trouve la référence d'une application, mais il se trouve qu'elle n'est plus proposée… certainement pour des questions de droits. Il faut être particulièrement naïf pour croire qu'on va pouvoir utiliser librement une marque déposée ou copier le design de l'engin.

Je trouve Magic Doodle à 1,59 €. Je n'ai pas essayé l'application, mais on voit bien le problème d'une version iPhone: une fois les molettes à l'écran, il ne reste guère de place !

Seconde recherche avec Etch a Sketch, le nom aux États-Unis.

Etch a Sketch HD for iPad à 2,39 €. Ils semblent avoir un accord pour utiliser la marque. L'appli a l'air plutôt bien faite, avec quelques options de partage.

Sketcher HD à 2,39 €. C'est assez moche, et je pense que les auteurs ont tout faux en s'éloignant du concept original en permettant de dessiner au doigt.

Est-ce qu'on se lance ?

Finalement, seule l'application "officielle" se révèle un véritable concurrent. Pour ma part, je n'ai pas d'objectif commercial, juste l'envie de voir mon appli sur tous les iPad. Je vais donc la programmer de toute façon.

À quel prix ?

Là encore, je n'ai pas vraiment d'objectif commercial. Ceci dit, je veux profiter de l'application pour faire connaître les prestations de ma société. De fait, pour ce petit projet de deux jours, l'application sera gratuite. Je me dis que si le succès était au rendez-vous, je pourrais toujours ajouter des fonctionnalités qui seraient débloquées par un achat in-app.

Le nom

Le nom est très important! Comme je ne peux pas utiliser la marque officielle, j'invente mon propre nom. J'ai choisi Telelineo; ça me semble bien exprimer le fait de tracer indirectement des lignes, et je voulais un nom qui sonne latin. J'ai essayé plusieurs noms, mais celui-ci n'a pas l'air déposé, et je peux réserver le telelineo.com.

Une appli pour le week-end

Ma femme étant partie chez ses parents, me voici seul pendant ce long week-end de la Toussaint. J'ai l'intention de mettre à profit ces deux jours pour construire entièrement une application pour iPad.

Cet été, durant mes congés, je me suis rendu dans une petite brocante ou j'ai déniché cet objet pour seulement cinquante centimes:

Telecran

Les plus jeunes de mes lecteurs ne connaîtront peut-être pas ce jeu, aussi je vais résumer son fonctionnement. L'écran est constitué d'une vitre à laquelle adhère, par électricité statique, une poudre dorée. Une mine est appuyée sur la face intérieure de la vitre; la déplacer détache la poudre ce qui permet de dessiner. À cet effet, une molette permet les déplacements horizontaux et une autre les déplacements verticaux. Pour effacer l'écran, il suffit de secouer le jouet pour que la poudre qui se trouve au fond soit à nouveau en contact avec la vitre.

Assez rapidement, l'idée me vient d'en faire une version numérique sur iPad. Je me donne deux jours pour y parvenir.

jeudi, septembre 8 2011

Déploiement aérien d'une application iOS

Que vous veuillez envoyer votre application à des testeurs (distribution AdHoc) ou l'installer sur les terminaux de l'entreprise (distribution Enterprise), la manière classique de procéder est de transmettre l'application sous forme d'un fichier .ipa, de glisser celui-ci dans iTunes, puis de brancher et synchroniser le terminal iOS.

Cependant, il existe aussi un déploiement aérien ("Over the Air") qui consiste à fournir (par courriel ou SMS) une URL vers une page web. En se rendant sur cette page avec le terminal iOS, on touche un simple lien et iOS propose d'installer l'application, puis la télécharge. Cette manière de procéder est peu connue; le fait d'Apple qui l'a documentée dans son guide Distributing Enterprise Apps for iOS 4 Devices, alors que cette procédure est tout à fait permise en mode Ad Hoc.

En pratique

Vous allez créez un répertoire sur votre site web, qui contiendra:

  • le fichier .ipa
  • un fichier index.html qui sera la page web contenant le lien pour télécharger
  • un fichier manifeste, qui est une .plist comportant les renseignements sur votre application.

Le fichier html

Voici un exemple simple, mais bien suffisant:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<head>
	<title>Mon appli</title>
</head>

<body>
<a href="itms-services://?action=download-manifest&url=http://www.monsite.fr/monappli/
app.plist">Installer l'application</a>
</body>

Cette page portera donc le titre Mon appli, et comportera uniquement un lien vers les services d'itunes auxquels on fournit l'adresse du manifeste, app.plist dans cet exemple. Il est évident que le passage par les services d'iTunes garantit que vous n'abuserez pas du système !

Application et manifeste

La doc d'apple donne un manifeste d'exemple fort compliqué. En fait, Xcode 4 va le générer pour nous. Pour cela:

  • commencez par Archiver l'application.
  • une fois l'archive dans l'Organiseur, cliquez le bouton Share…,
  • choisissez iOS App Store Package (.ipa) et le certificat qui convient pour un déploiement Ad Hoc ou Enterprise.
  • conserver "app" comme nom du fichier .ipa, et cochez la case Save for Enterprise Distribution
  • des champs apparaissent, renseignez au moins l'URL de l'appli (http://monsite.fr/monappli/app.ipa) et le titre.

Xcode a généré app.ipa et app.plist, vous n'avez plus qu'à les copier dans le répertoire de votre site web.

Si ça ne fonctionne pas

D'expérience, il est assez rare que cela fonctionne au premier essai !

  • Commencez par vérifier l'URL du manifeste dans le fichier HTML
  • Vérifiez ensuite l'URL de l'appli dans le manifeste. L'adresse doit comporter le nom de l'application, donc se terminer par /app.ipa
  • Si cela ne fonctionne toujours pas, c'est probablement un problème de certificat. On observe généralement que le téléchargement se termine mais que l'application disparait aussitôt. Dans ce cas, rebranchez votre terminal iOS et tentez une installation filaire pour résoudre ce problème.

Limitations

Ce mode de distribution n'est possible qu'à partir d'iOS 4.

Sachez qu'il existe des sites web qui se proposent de stocker le fichier .ipa pour vous; dans le cas ou le terminal tourne sur une version antérieure d'iOS, ils proposent alors d'envoyer un courriel comportant l'URL de l'application pour pouvoir effectuer une installation filaire.

Voilà, essayer le déploiement aérien, c'est l'adopter !

vendredi, août 26 2011

Backdrop

Je viens de découvrir Backdrop.

Cette application sert à masquer le Bureau et ses icônes en les remplaçant par un autre fond. Ceci s'avère bien utile pour préparer des copies d'écran de votre application avant sa publication sur le Mac App Store.

Essayez-là, elle est bien faite et gratuite.

mardi, août 2 2011

Quelques nouvelles

Voilà fort longtemps que je n'ai rien écrit sur ce blog. Ces derniers mois en fait furent très occupés.

Tout d'abord, je donne dorénavant des formations au développement sous iOS pour le compte de la société Mediabox. Tout se passe bien: les gens de Mediabox sont sympas, les locaux sont nickels et en plus, on mange bien à midi au bistrot du coin. Les premiers stagiaires que j'ai eu étaient motivés et nous sommes allés quasiment au bout du programme de la formation, finalement très chargée (surtout après le repas au bistrot, si on a pris une entrée). Si ça vous intéresse, la prochaine session est déjà programmée du 24 au 28 octobre.

J'ai travaillé sur la version iPad de PortraiMatic; non le projet n'est pas abandonné, en fait, le logiciel tourne déjà plutôt correctement, il me reste un travail d'optimisation (mémoire et vitesse) et de finition avant de le proposer à mes bêtas testeurs en vacances.

En parlant de vacances, les miennes sont terminées. Peupeul a eu l'idée de lâcher son nouveau félin "Lion" (Mac OS 10.7) pile au milieu de mon séjour, si bien que je le découvre seulement aujourd'hui. Et évidemment, PortraiMatic est incompatible, alors que la transition de 10.5 à 10.6 s'était faite sans douleur.

(D'accord, j'admets que c'est de ma faute, parce que je n'ai pas pris le temps de tester les bêtas de Lion, mais quand même, je me demande ce qu'ils ont changé pour que ça foire autant).

Pour finir, je re-découvre Twitter. Vous pouvez dorénavant suivre mes aventures sous @renaudpradenc.

mardi, mars 22 2011

PortraiMatic iPad (3): Esquisse de l'IHM

Dans cet article nous verrons comment je suis parti de la version Mac de PortraiMatic pour esquisser l'IHM (Interface Homme-Machine) de la version iPad.

La version Mac

On a souvent l'impression qu'une IHM coule de source. Il n'en est rien ! Par exemple, aujourd'hui, les navigateurs web se ressemblent beaucoup, mais il a fallu de nombreuses années pour aboutir à cette solution actuelle. Notez au passage qu'il s'agit d'une solution, parmi d'autres aussi valides. Il se trouve qu'il serait aujourd'hui difficile d'adopter une autre solution à cause de l'habitude des utilisateurs.

Revenons à PortraiMatic. De la même façon, son IHM n'a pas été découverte d'emblée: il s'agit de la troisième version. Si bien que je dispose de recul et je sais que son organisation actuelle est bonne.

PM_JocondePortrait.jpg

Partie de gauche

À gauche se trouve la liste des portraits. Au-dessous, il y a deux icônes qui permettent de créer des portraits, respectivement en ouvrant un fichier graphique ou en se prenant en photo à la webcam.

Partie de droite

La partie de droite comporte une barre présentant les trois icônes Portrait | Enregistrer | Imprimer, pour passer d'un volet à l'autre. Visuellement, la barre est située à la même hauteur que la liste. Ce n'est pas un détail, ceci indique clairement que cliquer une icône ne va changer que le contenu de la partie de droite.

Le volet Portrait sert à recadrer le portrait et régler l'image.

Le volet Enregistrer, sert à enregistrer une planche de portraits dans un fichier JPEG:

PM_JocondeEnregistrer.jpg

Le volet Imprimer permet d'imprimer une planche:

PM_JocondeImprimer.jpg

Exquisse la version iPad

J'ai réalisé une première ébauche sur papier de l'IHM de la version iPad:

PortraiMaticIPadProjet.jpg

Partie de gauche

On retrouve deux icônes pour créer les portraits. L'une pour créer un portrait avec une photo de la photothèque, l'autre en utilisant la webcam.

La liste des portraits est présentée sous forme de photos, contrairement à la version Mac. Sous iOS, il est toujours un peu contraignant de taper du texte et à vrai dire, utiliser les photos est plus judicieux. En pratique, sur la version Mac, je constate que je prends rarement le temps de nommer les portraits, conservant le nom par défaut. À terme, je souhaite que la version Mac affiche également des photos plutôt que du texte. Ceci est toutefois bien plus complexe sur Mac que sur iOS, c'est pourquoi jusqu'à maintenant seuls les noms des portraits sont affichés.

Pour finir, deux photos par lignes sont affichées: on assez de place.

Partie de droite

Commençons par les trois icônes que j'ai dessinées en bas: elles reprennent les fonctions Portrait | Enregistrer | Imprimer de la version Mac. La flèche indique que j'hésite à les placer en haut…

Au centre, on trouve le portrait. Tout comme sur Mac, cette vue permettra de cadrer le visage et de voir l'effet des corrections de couleurs. Le curseur permettant de régler le zoom disparaît: ceci se fera par l'habituel pincement.

Les différents réglages seront quand à eux déportés dans des boîtes de dialogues (Pop Overs) attachées aux icônes de la barre d'outils supérieure.

La barre d'outil contient deux icônes. L'icône Yin et Yang affichera les réglages de couleurs. Le drapeau symbolise le choix du pays qui définit le format du portrait.

Attacher les réglages à la barre d'outils est la manière standard de faire sur l'iPad. Ce choix permet de libérer de la place pour le contenu. Il résout également un problème lié à la rotation de l'iPad. Imaginons que nous placions les réglages sur le côté droit comme pour le Mac. En orientation paysage, cela convient assez. Toutefois en orientation portrait, presque la moitié de la largeur de l'écran serait monopolisée par ces réglages.

La suite

Dans le prochain article, nous verrons quelles modifications j'ai appliqué à cette esquisse, essentiellement pour respecter les canons d'iOS.

Dans la même série

vendredi, mars 18 2011

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.

- page 1 de 3