L’Arnacoeur : Bonne Pioche

Après avoir acheté le très décevant Lucky Luke en Blu-Ray, je suis allé voir ce dimanche en salle le dernier film de Romain Duris et Vanessa Paradis : L’Arnacœur.

Je ne vous parlerai pas de l’histoire du film, à découvrir par vous-même. Je vous en dirai simplement du bien : qu’il s’agit d’un film certes léger mais que parfois cela fait aussi du bien. Ici, pas d’arme, pas de violence gratuite, beaucoup d’humour et de romantisme. Bref, un film de printemps qui va bien avec l’air du moment.

A voir absolument, de préférence en bonne compagnie !

Publicités

SmartFox Server : Un Bon Produit… mais Pas Parfait

Mise à jour : Cet article concerne la branche 1.x de SmartFox Server et non pas la nouvelle version plus récente et à la conception repensée SmartFox Server 2X.

Les aspects sociaux et communautaires n’ont jamais aussi présents dans l’univers actuel des technologies de l’information que depuis ces deux dernières années. La faute à Facebook et autres MySpace ou Twitter. Et qui dit communauté dit mise en relation des individus. Pour arriver à ce résultat, il est nécessaire de concevoir soi-même ou d’utiliser un serveur multi-utilisateurs dédié ou non au jeu. Une courte recherche Google montre que les prétendants « immédiats » ne sont pas légion. Seuls deux résultats ressortent immédiatement comme Electro Server ou SmartFox Server. C’est à ce dernier que nous allons nous insérer maintenant car cela fait déjà plus d’un an que je travaille avec presque quotidiennement et une bonne partie des ces bons et mauvais côtés sont d’ors et déjà ressortis dans mes diverses expérimentations.

Les bons côtés

Le prix

De façon pratique, utiliser une solution existante est avant tout une question de coût. Développer un serveur multijoueurs sûr, fiable et dont la charge peut facilement évoluer n’est pas une tâche facile. D’une part, cela demande un certain nombre de connaissances réseau bien entendu, mais aussi en matière d’optimisations multi-processus. Mais tant bien même une telle solution serait développée en interne par une société, il faudrait encore disposer par la suite d’une équipe de maintenance pour corriger les éventuels bugs et/ou faire évoluer la technologie en fonction des besoins. SmartFox Server propose une license progressive pour la version Pro dont le prix peut aller jusqu’à 2000 € pour un nombre illimité de clients.

Prêt à Etre Déployé

SmartFox Server a été développé en Java et peut donc être déployé sur à peu près n’importe quelle architecture serveur sans dépendance spécifique. De plus, un grand nombre d’API clientes existe pour plusieurs langages et/ou plate-formes très populaires tels que Flash/Flex, Unity ou encore iPhone OS. Des fonctions de base sont diponibles et permettant de réaliser quelques tâches simples sans difficulté.

Une Plate-Forme Reconnue

SmartFox Server est également une plate-forme utilisée dans un grand nombre de projets professionnels et commerciaux, recevant quotidiennement plusieurs dizaines de milliers d’utilisateurs. Cela dénote bien évidemment une qualité certaine pour ce produit.

Le Support

Une plate-forme dédiée au support sous la forme d’un forum est accessible à tous pour résoudre les problèmes rencontrés avec le serveur. En général, les réponses arrivent quelques heures après les questions, ce qui est appréciable dans un cadre professionnel.

Les mauvais côtés

Malheureusement, tout n’est pas rose au pays de SmartFox et cela entraîne parfois bien des complications dans l’utilisation de ce serveur. Voyons par le menu les points qui nécessiteraient véritablement une amélioration de la part de l’éditeur.

Code Source Serveur Propriétaire

SmartFox Server étant un logiciel payant, il est normal pour son éditeur de le voir comme un produit fermé. Cela pose d’autres problèmes du point de vue utilisateur lorsque certaines fonctionnalités sont erronées ou peu pratiques et que l’on reste sur sa faim : impossible de modifier quoi que ce soit. Dans la plupart des cas, il est possible de contourner le problème, mais pas de le résoudre véritablement. L’exemple le plus probant étant la classe DbManager fournie par SmartFox qui ne permet pas de gérer à sa guise les erreurs SQL ou d’autres petites choses comme les transactions. Nous avons été obligés de réécrire un gestionnaire de base de données qui puisse fonctionner avec SmartFox et en accord avec nos besoins. Dommage, d’autant que cela n’est pas le seul point faible du logiciel.

Peu de Fonctionnalités de Localisation

Même si un serveur n’est pas censé supporter la traduction d’une application, certaines fonctionnalités de localisation auraient dû être intégrées au serveur d’entrée de jeu. Notamment en ce qui concerne le filtre de mots tabou. Il est possible de fournir à SmartFox une liste de mots que l’on ne souhaite pas voir apparaître dans les messages publics ou privés du réseau. Le serveur filtre automatiquement ces mots et éjecte au bout d’un certain nombre de répétitions les utilisateurs disgracieux. Cette fonctionnalité est tout à fait appropriée mais il n’est pas possible de filtrer les mots tabou par langue. Ce qui peut entraîner des croisements inattendus entre les langues où un mot français tout à fait banal pourrait passer pour une insulte dans une autre langue. Mais cela n’est pas le seul cas où ce problème se pose. Les messages d’erreurs du serveur sont également exclusivement en anglais. Il faut donc créer des vérifications à chaque fois pour renvoyer les bons codes d’erreur au client qui se chargera d’afficher le message texte correspondant à l’utilisateur. Dommmage…

Une Documentation Peu… Documentée

Une documentation d’API est censée vous aider à apprivoiser la philosophie de développement qui a été choisie par les créateurs du logiciel, vous aider à éviter de tomber dans les pièges les plus basiques et surtout à comprendre comment marchent les différentes fonctionnalités. Malheureusement, là aussi, SmartFox fait les choses différemment. Certes l’API n’est pas très fournie avec à tout casser une trentaine de classes Java apparaissant dans la documentation. L’ennui c’est que la plupart des pages ne semblent que faire référence aux différentes signatures des fonctions sans en expliquer le sens. On va tout aussi vite avec Eclipse, et même plus loin, puisque l’IDE nous permet d’en savoir plus sur les classes pourtant à accès public qui ne sont pas référencées. Reprenons l’exemple du filtre de mots tabou (classe BadWordsFilter). Cette classe est tout à fait accessible à tous hors du package SmartFox mais elle n’est documentée nulle part. Elle est pourtant bien utile pour par exemple filtrer les pseudos disgracieux (qui ne sont pas automatiquement filtrés).

Résolument Développé pour les Jeux en Tour par Tour

Même si rien n’empêche d’envisager une utilisation pour un jeu temps réel, il est difficile en connaissant un tant soit peu l’interface de programmation de SmartFox de penser que son utilisation ne soit pas limitée à des jeux en tour par tour où les temps de réponses ne sont pas nécessairement critiques. On relève par exemple des ralentissements globaux spectaculaires du serveur dans les temps de réponse quand une quantité importante de données est envoyée à un client. Tout cela ne serait pas nécessairement un problème si cela intervenait uniquement au sein d’une zone, mais cela bloque toutes les zones.

Redémarrage et Rechargement Automatique des Extensions

La grande force d’un serveur comme SmartFox est sa capacité à être étendu à volonté par des extensions serveurs pouvant être codées en Java, en ActionScript 1/2/3 ou en Python. Pour des raisons de proximité avec le serveur, nous avons fait le choix de Java, mais les trois API proposent les mêmes fonctionnalités. En ce qui concerne les extensions Java, le serveur permet de recharger le code source en cas de modifications du fichier binaire. Tout se passe bien lorsque tout le code source est stocké dans des extensions, mais si vous souhaitez utiliser des classes ne dérivant pas des extensions fournies, le rechargement en cas de modification ne marche pas pour ces classes et vous êtes dans l’obligation de redémarrer complètement le serveur pour que les changements soient pris en compte.

Redémarrage, Occupation mémoire et Outils d’administration

Le dernier point sur lequel je m’arrêterai (et non des moindres) concerne la qualité de finition de l’outil en production. Certes, lorsque tout est bien programmé, le serveur fonctionne à merveille, mais laissez passer une seule exception un peu « violente » et le serveur tombe en panne générale immédiatement. Difficile de le considérer alors comme « rock solid » (solide comme un roc) tel que le site officiel le décrit. De même, en cas de redémarrage sous un environnement Linux 64 bits pourtant tout ce qu’il y a de plus normal, le serveur redémarre correctement mais la JVM dans laquelle il fonctionnait au départ reste figée en mémoire et une nouvelle est exécutée pour la nouvelle instance du serveur. Problématique si chaque instance réclame plusieurs gigaoctets de mémoire vive pour fonctionner. Dernière chose sur les finitions, SmartFox est pourvu d’une interface d’administration qui permet soit disant de connaître le pourcentage d’utilisation processeur du serveur mais, soit le serveur est très performant, soit l’indicateur est inopérant, car cette valeur est toujours égale à 0% (je vous laisse deviner la bonne réponse).

Conclusion

SmartFox promet beaucoup et offre déjà bon nombre de choses, mais la plupart sont terminées à moitié. Certes, le prix de la licence n’est pas très élevé mais on serait en droit d’attendre plus d’un logiciel qui se veut être à la pointe de ce qui se fait en la matière. SmartFox est en partie sauvé par sa communauté très active et qui permet d’avancer beaucoup plus vite, mais il ne faudrait pas grand chose pour qu’un concurrent un tant soit peu sérieux lui rafle la mise.

Flash et Facebook… ou le mal de tête du mardi soir

Les développeurs web comme moi doivent déjà avoir entendu parler du fameux bug Flash wmode qui provoque quelques comportements étranges avec les claviers sous Windows pour les navigateurs utilisant les plugin compatible Netscape (Firefox, Safari, Chrome ou Opera). Pour résumer, lorsque vous remplissez les conditions requises, ce bug vous empêche de taper certains caractères tels que @ dans un champ de saisie Flash.

Si vous l’avez pas encore remarqué, une animation Flash insérée avec les réglages par défaut dans une page HTML se place au-dessus de tous les autres éléments, quel que soit son emplacement ou son niveau de profondeur (z-index). Il s’agit du mode window du paramètre wmode. Il est possible de demander à Flash de se comporter comme tout autre élément HTML d’une page en passant le paramètre wmode à opaque ou transparent. Malheureusement, sous Windows avec les navigateurs cités précédemment, certaines touches de nos claviers ne réagissent plus comme elles le devraient.

Je travaille actuellement sur un jeu en Flash pleine page et qui doit fonctionner en adéquation avec Facebook. Jusque là rien d’étonnant me direz-vous. Sauf que les boîtes de dialogue de Facebook sont générées grâce à des éléments HTML par une API javascript et ne sont donc pas immédiatement intégrées à Flash. Jusque là encore tout va bien. Pour que ces éléments soient visibles par dessus mon animation Flash (qui recouvre toute la page comme je l’ai dit), il faut passer l’animation en mode opaque. Et à partir de là, plus rien ne va… à moins d’utiliser Internet Explorer. Ou de passer un temps fou à se demander pourquoi Adobe ne prend pas le temps de corriger ce problème.

Quoi qu’il en soit, dans le cas qui me préoccupe, je n’ai pas de solution simple. Si ce n’est qu’avec Internet Explorer tout va bien. Le mode opaque de Flash permet aux éléments de Facebook de passer par-dessus et le navigateur ne présente pas de problème de clavier. Sous Firefox, par chance, les popups Facebook sont générées grâce à des iframe qui se superposent automatiquement à l’animation, il n’est donc plus nécessaire d’utiliser le mode opaque et le clavier reste cohérent. Reste à trouver une solution pour Safari, Chrome et Opera. Et là, … c’est pas gagné.

Heureusement que Flash permet de créer des applications web indépendantes de la plate-forme !

Aidez à la traduction de WordPress.com

Lors de mes pérégrinations sur la toile, et plus précisément sur WordPress.com qui héberge ce blog, je suis tombé sur un outil que je ne m’attendais pas à croiser sur mon chemin. J’ai nommé GlotPress ! Il s’agit d’un outil de traduction collaboratif, permettant donc d’améliorer et de traduire plus rapidement les projets en ligne.

Comme son nom le laisse entendre, GlotPress fait partie des nombreux projets d’Automattic, groupement à l’origine du désormais ultra-célèbre WordPress. Cela n’étonnera donc personne que la toute récente interface de traduction de WordPress.com soit pilotée par ce nouveau projet. Bien qu’encore jeune, l’interface utilisateur de GlotPress est relativement agréable, avec ce qu’il faut d’Ajax pour rendre le tout intéractif et très Web 2.0.

Je participe actuellement à la traduction de la version française. Les bonnes volontés semblent les bienvenues, et ce, dans toutes les langues.

java.lang.Object.equals() et les entiers

Saviez-vous que, parfois, en informatique, 10 n’était pas égal à 10, ni même à 2 ? En tout cas, c’est comme cela que peut être amené à raisonner Java avec les entiers.

Prenons le code suivant :

boolean result = (10 == 10);

La variable result est bien égale à true.

Mais avec le code suivant :

Integer entier = new Integer(10);
Long entierLong = new Long(10);
boolean result = entierLong.equals(entier);

La variable result est égale à false. Etonnant, non ?

En fait, pas tant que ça. Java stocke les entiers sur 32 bits et les entiers longs sur 64. Il va de soit qu’avec cette différence un entier long peut stocker beaucoup plus de valeurs différentes qu’un entier « normal ». Cette différence de plage de valeurs prend tout son sens si l’on considère le fait que Java ne gère que les entiers signés.

En effet, pour un entier signé 32 bits :

1111 1111 1111 1111 1111 1111 1111 1111

équivaut à -1.

Mais, pour un entier signé 64 bits :

0000 0000 0000 0000 0000 0000 0000 0000 1111 1111 1111 1111 1111 1111 1111 1111

équivaut à 4 294 967 295.

Si les entiers étaient non signés, il serait alors possible d’appliquer la comparaison en cas de types différents sur les 32 premiers bits. Mais voilà, ce n’est pas le cas. Alors attention lors que vous utilisez des objets Integer et Long dans des conteneurs de type Collection ou List avec la fonction contains(). Vous pourriez avoir des surprises.

Windows Live ID vs Facebook/Google Connect

Ces dernières années, en informatique, tout bon troll qui se respectait devait débuter par un Microsoft sucks ! Force est de constater que la situation s’améliore petit à petit sur le marché du logiciel avec un Windows 7 moins mauvais qu’on pouvait le craindre. Ceci dit, Microsoft reste une société qui aime jouer les originales et surtout, chose au combien frustrante, qui aime faire bande à part.

Pour des raisons professionnelles, il m’a fallu m’intéresser de près aux diverses API existantes d’authentification utilisateur telles que Facebook Connect, Google Friend Connect ou encore Windows Live ID. Lors de mes recherches, les critères importants pour qu’une API soit retenue étaient la simplicité d’intégration à une application tierce et une portabilité vers différentes plate-formes (Web, Flash, …).

Les API de Facebook et de Google reposent sur le même principe : une API cliente (principalement en JavaScript mais de nombreuses variantes existent dans d’autres langages) permet aux sites web d’autoriser les utilisateurs. A partir de cette API, des appels aux plates-formes distantes de Facebook et Google peuvent être exécutés via le protocole REST. L’avantage de cette méthode réside dans sa flexibilité. Il est possible de concevoir un site web classique ou un site web entièrement codé en Flash sans pour autant perdre en fonctionnalité. De plus, ces deux API sont résolument dédiées aux réseaux sociaux.

De l’autre côté de la barrière se trouve Windows Live ID. Ici, tout est différent… Pas de JavaScript à l’ordre du jour, ce qui exclut d’office la possibilité d’intégrer aisément l’authentification Microsoft à une application web écrite en Flash (il ne m’a pas été possible de faire fonctionner l’authentification à distance via un serveur Java). De plus, en dehors de l’avantage certain qu’offre l’accès aux millions de comptes Windows Live, aucune fonctionnalité sociale n’est mise en avant par l’API fournie par Microsoft, ce qui restreint considérablement l’intérêt du Windows Live ID par rapport à ses concurrents. Facebook présente par exemple un degré de viralité tel qu’une même information peut être transmise à plusieurs milliers de clients potentiels en quelques heures seulement.

Là encore, cet exemple montre bien l’importance de l’ouverture dans les démarches des grands groupes de l’univers informatique. Facebook et Google sont des acteurs majeurs de la communauté open source et le prouvent à chaque étape de leur développement. Microsoft, en revanche, reste cantonné dans ses plate-bandes à développer des technologies propriétaires qui peinent à s’imposer dans d’autres services que les siens.