Collect, ma vision de la gestion de collection de films « physiques »

closeCet article a été publié il y a 9 ans 1 mois 3 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Enfin, aujourd’hui, je me décide à vous présenter une application développée entièrement par mes soins. Une application que j’ai déjà évoquée dans mes expérimentations sur MongoDB. J’ai beaucoup de films au format DVD ou Bluray, et pour éviter d’acheter deux fois le même film, ou pour garder la trace des personnes à qui je prête une galette, il me fallait un outil accessible de n’importe où. L’occasion rêvée d’améliorer mes maigres connaissances en développement d’applications, et j’ai décidé de publier le code à la vue de tous. Découverte d’une application au titre affreusement peu original.

Historique

J’aime le cinéma. Et même si mes préférences vont d’abord aux films d’action/science-fiction qui demandent deux neurones pour la réflexion et le reste pour s’émerveiller devant les effets spéciaux et les cascades, j’ai une large palette de goûts. Malgré la saturation de mon serveur perso (2,7To tout de même), j’ai aussi une quantité assez importantes de galettes, en DVD et Blu-ray. Au point d’avoir dû fabriquer moi-même l’étagère pour les ranger, parce que je ne trouvais aucun meuble avec des dimensions convenant à l’emplacement.

Faites pas attention au bordel devant les galettes.

Faites pas attention au bordel devant les galettes.

Il y a plus de 400 galettes là-dedans, autant dire qu’il est presque impossible de retenir la totalité des titres qui composent cette collection. Il me fallait donc un moyen de recenser tous les films. L’idée, c’est de pouvoir vérifier, devant le rayon DVD/Blu-ray d’Auchan (le cas le plus courant), si j’ai déjà un film, avec mon smartphone. Mais la base doit aussi être accessible avec un autre appareil, au cas où je n’ai pas mon bigophone sur moi. Bref, une application web est typiquement adaptée pour cet usage.

Et ça tombe bien, je voulais un peu grossir mes connaissances en PHP, et au passage en MySQL. Il me fallait aussi quelques bases en HTML/CSS, sinon, ça sera très, très moche. Je n’ai malheureusement pas gardé de traces des premières versions, mais je peux vous dire que c’était laid, et basique au possible. J’affichais les films sous forme de tableau, y’avait à peine deux couleurs (gris foncé pour le fond, et gris clair pour le texte), ce n’était absolument pas pensé pour les mobiles (fallait pas avoir des gros doigts, et je zoomais pour être sur de ne pas me rater)…

Pire, du côté du code, tout était écrit pratiquement dans une seule page, à peine avais-je un fichier supplémentaire pour la configuration de la base de données. Imaginez un immonde blob de PHP, d’HTML/CSS, des requêtes SQL, et j’avais écrit tout ça avec Notepad au départ, puis Notepad 2, qui m’a déjà bien rendu service (ça ne fait qu’un an que je travaille sous Linux). Mais c’était devenu impossible à faire évoluer. Dans un élan de bonne volonté, j’ai cherché à refondre à la fois l’interface, et l’architecture de l’application.

collect-default

Présentation

La technique

Tout en gardant la même base de données, j’ai commencé à écrire en parallèle  ce qui est maintenant disponible sur le dépôt Github. On a donc une application web, écrite en PHP, utilisant une base de données MySQL, et utilisant le thème NativeDroid, qui repose sur jQuery Mobile, pour s’assurer d’un affichage optimal et « joli » sur mobile. Et ça reste fonctionnel sur PC, avec un navigateur standard (même IE si je dis pas de bêtise).

Sans aller jusqu’à de la programmation orientée objet, avec laquelle je ne suis pas encore au point, j’ai tenté de suivre les concepts de la programmation dite MVC, pour modèle-vue-contrôleur. L’idée étant de découper le code pour que les différentes sections soient organisées et optimisées sur des fonctionnalités bien distinctes. Ainsi, les fonctions ayant trait au « modèle » sont celles communiquant avec la base de données, les contrôleurs sont chargés appellent les fonctions des modèles, et appellent les vues, qui ne s’occupent que de mettre en forme, en incluant les données traitées par les contrôleurs, et de générer les pages qui seront transmises au navigateur. Et vous avez le droit de me pourrir sur la tronche actuelle de l’arborescence, je sais, c’est pas assez découpé encore.

Les fonctions

Quand on arrive sur l’application, elle affiche les dix derniers films ajoutés en date. Par défaut, on n’a pas accès aux fonctions de modifications, donc si on clique/tape sur un film, on affiche le détail (année, type, prêté/à qui). Les choses deviennent intéressantes quand on clique sur le menu sandwich en haut à gauche.

collect-menu

On peut donc afficher la liste complète, la liste des films prêtés, revenir à la liste des 10 derniers, il y a un champ de recherche en haut où vous pouvez saisir un titre ou une partie d’un titre, il y a une page à propos, et un « login », qui vous envoie vers un formulaire pour saisir un mot de passe débloquant les fonctions de « modifications ». Le menu verra alors apparaître une ligne pour ajouter un film, et le détail d’un film affichera deux boutons, l’un pour modifier le film, l’autre pour le supprimer.

La modification d’un film permet d’en changer le type, et de basculer le switch indiquant si le film est prêté; dans ce cas, on ajoutera le nom de la personne qui emprunte le film. Si vous récupérez un film, rebasculez « Prêté » sur « Non », validez, le nom sera supprimé automatiquement. Simple, efficace. Enfin d’après moi.

collect-modify

Installation

Comme indiqué sur Github, pour faire tourner l’application, il faut quelques éléments :

  • Un serveur Web : j’ai utilisé l’application sur Apache, puis sur Nginx, tous les deux avec succès
  • Un « runtime » PHP : mod-php pour Apache, ou FPM pour les deux. J’ai même eu la surprise de la voir fonctionner avec HHVM, là où des mastodontes comme PHPMyadmin demandent des adaptations (même mon lecteur de flux, Leed, ne fonctionne plus avec la dernière version).
  • Une base de données MySQL, mais MariaDB conviendra aussi parfaitement.

Ces éléments s’installent en une seule commande sur toute distribution Linux qui se respecte, et les Windowsiens peuvent tenter XAMPP, par contre, je n’ai pas testé ce dernier cas.

Une TODO list longue comme le bras de Sultan Kösen

Je dois avouer qu’au fil du temps, j’ai fini par m’intéresser beaucoup moins à cette application, car elle fonctionne parfaitement.  Mais les idées ne manquent pas, comme l’atteste le README du dépôt :

  • Coder un assistant d’installation. Pour l’instant, il faut créer manuellement la base et l’utilisateur, et importer à la main le squelette de la base de données. Aussi, il faut soi-même enregistrer les accès à la base ainsi que le mot de passe de modification dans le fichier config.inc.php. Même documenté, ça ne fait pas très « user-friendly »;
  • Ajouter les pages pour gérer les types. En effet, j’ai déjà séparé la gestion des types dans la base de données pour aller au-delà des DVD/Bluray (avec pourquoi pas les livres, les pins, bref, des collections), mais je n’ai codé que les fonctions pour les utiliser, pas les créer/modifier/supprimer;
  • Recherche complète : pour l’instant, on ne peut chercher que le titre, là, il faudrait ajouter la possibilité de chercher sur l’année, le nom de l’emprunteur…
  • Internationalisation : Pour l’instant, seul le français est supporté, même si je parle en anglais sur le dépôt. Ajouter le support pour d’autres langues est intéressant, mais un peu long, et je ne traduirais qu’en anglais :/
  • Support des affiches, avec les imagettes dans les listings (seulement pour les grands écrans). Demande de retravailler un peu le thème, et j’ai déjà dans l’idée de faire sauter NativeDroid pour avoir un truc si possible sans JavaScript, beaucoup plus léger donc;
  • Convertir en tout orienté objet. Mais je ne suis pas encore à l’aise avec ça, donc là encore, c’est pas une priorité
  • Coder une API et adapter l’application pour qu’elle l’utilise. J’ai déjà commencé à faire l’API, mais comme j’ai cherché à changer de stockage de base, donc c’est loin d’être urgent. Et pour l’occasion j’aurais peut-être pris la décision de tout réécrire (pourquoi pas en Python tiens).

Bref, ce n’est pas très novateur, ni très bien écrit, mais pour l’instant, j’ai réussi à m’en servir sans bugs pendant plus de trois ans, deux avec le thème actuel comme en atteste mon « Copyright » affiché en bas de chaque page. Et cerise sur le gâteau, c’est ma première contribution sous licence GPLv3, historiquement avant Domohouse qui, si l’on regarde de près, utilise une arborescence très proche 🙂

1 Commentaire
Le plus ancien
Le plus récent
Commentaires en ligne
Afficher tous les commentaires
Fred
Fred
09/06/2015 13:33

Bonjour,
Il y aussi http://denmovies.fr qui répond aux mêmes besoins de gestion d’une collection de films.

Le site est responsive et donc consultable partout et sur n’importe quel périphérique.
Bonne chance pour votre application 😉