Blogue

Contrôleur de jeu

Avec tout le battage entourant le nouveau look de iOS 7, est-ce que quelqu’un a remarqué qu’Apple ajoute aussi un API standard pour les contrôleurs de jeu?

Ça peut sembler banal, mais je serais surpris que ce ne soit pas un prélude au début des applications (et des jeux) sur Apple TV.

MeoTempo

Depuis environ deux ans, je travaille à temps partiel sur un projet iOS avec une petite équipe. L’application a la forme d’un calendrier, mais contrairement aux autres applications de calendrier celle ci permet de prévoir combien de temps il reste, combien de temps a été prévu et a été fait pour différentes choses, et vient avec un outil pour noter ce qu’on fait en temps réel (ce qui vous donne au final un historique de l’utilisation du temps).

Je n’irai pas dans les détails de ce que l’app peut faire. Elle a été publié la semaine dernière, jetez-y un coup d’œil.

Pour cette application j’ai construit un système de synchronisation. Chaque appareil possède sa copie de la base de donnée, et chaque fois qu’il se connecte sur le serveur les bases de données sont fusionnés et les changements propagés aux autres appareils. Le fonctionnement est particulièrement intéressant, je vais donc élaborer un peu.

Notre système de synchronisation est construit d’une façon similaire à un système de contrôle de version distribué (Git, Mercurial, etc.). Ça comprend un étage de dépôt (repository) utilisé pour synchroniser des blocs de données binaire avec d’autre dépôts. Par dessus l’application maintient une base de donnée SQLite correspondant au modèle. Les chanements dans le dépôt local sont gardés synchronisés avec la base de donnée du modèle. Les changement au dépôt local sont aussi poussé sur le serveur, et vice versa. Et ainsi votre iPhone reste synchronisé avec votre iPad.

Ce système a deux propriétés intéressantes en commun avec les SCVD. D’abord, si un dépôt est perdu (que ce soit sur le serveur ou sur un autre appareil), il peut être reconstruit à partir des autres dépôts. Ensuite, en théorie on pourrait faire une sychronisation pair-à-pair sans serveur central même si en pratique gérer des comminications pair-à-pair est plus compliqué et rien n’a encore été fait de de côté.

C’est intéressant de noter que la base de donnée du modèle est essentiellement une cache pour ce qui se trouve dans le dépôt. Si le schéma de la base de donnée du modèle change (en mettant à jour l’application), il est inutile de migrer les données : on se débarasse de l’ancienne base de donnée et on la reconstruit à partir du dépôt local. Même principe que lors d’une synchronisation.

Au final, je suis bien content de ce système. Ça a pris du temps à construire, et il reste encore des détails à améliorer, mais ça en vallait l’effort. Essayez MeoTempo si vous voulez voir la synchronisation en action.

PHP Markdown Lib

Il est rendu l’heure pour PHP Markdown de devenir une librairie PHP bien encapsulé plutôt qu’un petit fichier qui tente de faire tout pour tout le monde.

Aujourd’hui, j’annonce la branche Lib de PHP Markdown. Elle contient les deux mêmes parseurs que l’on trouve dans PHP Markdown et PHP Markdown Extra, mais sans tout l’enrobage. C’est un paquet fait pour être une librairie, et seulement une librairie. Les deux parseurs sont placées dans l’espace de nom Michelf :

\Michelf\Markdown
\Michelf\MarkdownExtra

Oui, un espace de nom, donc ça prend PHP 5.3 ou plus récent.

La branche Lib est compatible PSR-0 pour permettre le chargement automatique des classes de parseur. C’est aussi un paquet Composer maintenant, disponible sur Packagist.

Trois branches

Donc présentement nous avons trois branches de PHP Markdown. Voici une sommaire de chacune :

PHP Markdown
La version originale de PHP Markdown est celle qui implémente la syntaxe Markdown tel que définie sur Daring Fireball (voir traduction ici). Ça inclus une fonction globale Markdown, une classe pour le parser, ainsi que diverses interfaces pour s’intégrer à Wordpress, Smarty, ou pour remplacer un parseur Textile.
PHP Markdown Extra
La branche Extra s’est ajouté il y a longtemps maintenant pour ajouter des fonctions à la syntaxe de base de Markdown. Une classe dérivée du parseur de PHP Markdown implémente les fonctions supplémentaires, et le tout est emballé exactement de la même façon dans un seul fichier les mêmes interfaces de plugin.
PHP Markdown Lib
La branche Lib est une nouvelle branche contenant une libraire PHP moderne qui peut s’intégrer à plusieurs choses. Contrairement aux deux autres, cette branche ne contient aucun code de plugin. Elle nécessite PHP 5.3 ou plus récent.

PHP Markdown Lib débute à la version 1.3. J’ai pensé à débuter à 1.0, mais faire ça rendrait certain rapports de bogues plus difficile à interpréter (ce n’est pas tout le monde qui sait quelle branche ils utilisent). Voilà pourquoi le numéro de version est différent.

La suite des choses

L’année prochaine, en 2014, seule la branche Lib continua d’être mise à jour.

PHP Markdown et de PHP Markdown Extra continuront d’être accessibles sur la page de la version classique, mais à partir de l’année prochaine les mise à jour incluant les correctifs de bogues et les nouvelles fonctions du parseur Extra iront exclusivement à la nouvelle branche Lib.

Si comme beaucoup d’entre vous vous utilisez PHP Markdown en tant que plugin Wordpress, vous pouvez toujours l’utiliser, elle n’arrêtera pas de fonctionner du jour au lendemain. La réalité cependant est que je n’ai pas le temps d’améliorer les choses au fur et à mesure que Wordpress évolue. Avec le temps qui passe, beaucoup d’autre plugins basé sur PHP Markdown ayant une meilleure intégration sont apparut. Je n’ai pas de recommandation à faire pour l’instant, mais si vous avez des suggestions à faire ne vous gênez pas me les faire parvenir, j’écrirai peut-être quelque chose à ce sujet dans les mois qui suivent.

Laisser derrière les versions de PHP plus anciennes me permettra de simplifier la maintenance et aussi d’utiliser de nouvelles fonctions du langage dans le code. En se débarrassant du code de support pour Wordpress, la branche Lib me permettra de me préoccuper davantage des choses reliés au traitement de la syntaxe.

C’est le temps pour PHP Markdown de devenir une libraire PHP en bon et dû forme au lieu de l’hybride qu’il a été dans son enfance. À compter d’aujourd’hui, la vesrion Lib prend la vedette sur la nouvelle page de PHP Markdown. Faites-moi part de vos questions si vous en avez.

iCloud est génial, mais préoccupant aussi

Est-ce que je m’inquiète pour rien ? Supposons que je crée un nouveau document et que je commence à y inscrire quelque informations confidentielles, tel des mots de passe importants, un numéro d’assurance sociale ou des choses je de doit garder pour moi en vertu d’une entente de confidentialité. Ensuite je sauvegarde le document localement sur mon ordinateur. Rien ne devrait avoir filtré en dehors de mon ordinateur, n’est-ce pas ? Vrai en général, mais pas vous utilisez Mountain Lion et que vous avez iCloud d’activé, puisque tous vos documents « non sauvegardés » sont automatiquement sauvegardés sur iCloud maintenant.

Apple rend difficile de ne pas envoyer vos données à Apple. Ces documents pourraient inclure des données que quelqu’un d’autre vous a confié. Est-ce que vous brisez la confiance de cette personne en plaçant ses données sur iCloud ?

Comment est-ce que cela affecte votre responsabilité en cas de fuite ? Je suis pas mal certain que les termes légaux de iCloud protègent Apple si un pirate pénètre leur système et vole des données, ou si un employé pas content se laisser acheter, ou si le gouvernement du pays qui héberge le centre de données décide de faire quelque chose avec. Mais au final, c’est moi qui sera en faute pour avoir envoyé une copie au loin, hors de mon contrôle et dans une juridiction étrangère.

Alors voici mon conseil : ne placez rien sur iCloud qui causerait des problèmes si révélé au public, ou si espionné par un compétiteur. Avec Mountain Lion, ça veux dire sauvegarder le document localement avant d’écrire quelque chose de confidentiel à l’intérieur. Moi, je garde simplement iCloud désactivé, c’est plus simple.

Mais plus préoccupant pour moi est la tendance générale de tout stocker sans trop y penser sur des services comme iCloud/DropBox/SkyDrive/Google Drive. J’ai bien l’impression que la plupart des gens ne réalisent pas les implication de stocker tout en ligne. Je m’inquiète pour leurs informations confidentielles. Je m’inquiète aussi pour mes propres données confiées à des gens que je connait, gens qui pourrait les éparpiller sur internet sans réaliser qu’ils les rendent aussi accessibles à des tiers qui n’ont à peu près aucune responsabilité à assumer si la confidentialité est brisé.


Archive