Monthly Archives: December 2016

Git master branch update v0.17

A new version, after a long time.

Some big refactoring:

  • Refactor User API and ACLs (#173)
  • Prepare User refactoring with an on-the-fly db export (#194)
  • Remove old school Publish function (#200)
  • Remove deprecated JS engines and use Babel JS (#156)
  • Refactor UI and remove Groovy for React (#199)

Some bug correction / security improvements:

  • Play server can’t start with Windows (#195)
  • Troubles during metadata analyst if the file is locked (#196)
  • Enable mkv (Matroska) and WebM file type for ffmpeg processing (#197)
  • Password API and generator should not manipulate/validate weak passwords (#198)
  • Manage domains with SMB client (#202)
  • Add option for ignore all activity trace in some FTP accounts (#203)
  • Correct bug with NodeJS execution and OSX (#207)
  • Correct Windows Media Audio detection probe (#204)
  • Correct bug with ffprobe and dates (#216 and #217)

And some new functions;

  • Use BBC BMX Tools for wrap OP ATOM to OP1A (#17 8)
  • Enhancements for watchfolders (#186)
  • Create Archive Circle API helper (#206)
  • Re-open the bug correction #7 and add an option for remove all metadatas from empty storages and removed storages

MyDMAM a 4 ans

Déjà 4 ans. Un petit anniversaire compte tenu qu’il n’y a pas eu beaucoup de changement en un an. Je n’ai pas eu le temps que j’eusse souhaité cette année pour progresser autant que je l’aurai voulu. Mais j’ai quasiment rempli mes estimations de 2015.

Mais MyDMAM a tout de même évolué, et on peut notamment relever comme nouveauté :

  • Un serveur FTP intégré à MyDMAM, avec une vraie interface de configuration, un suivi d’activité, une gestion de compte, etc… J’ai assez de recul en prod pour dire qu’il est parfaitement stable. Il repose sur Apache FTP Server en interne.
  • Un moteur de watchfolder pour du transcodage via ffmpeg, et distribué. J’ai ajouté une API pour faire traiter un fichier détecté par Java (en y ajoutant le code métier que l’on veut : ProcessingKit). J’ai prévu un moteur pour wrapper des MXF OPAtoms en OP1A, via un XML dans un watchfolder.
  • Le calcul et l’affichage du loudness aux normes broadcast EBU/UER R128, via la libebur128 de fichiers audio et vidéo, sur tous les canaux audio. Ce traitement est une analyse (ainsi qu’un rendu, pour être précis) de Metadatas, au sens MyDMAM. Cela veut dire qu’il peut être appliqué sur l’ensemble des fichiers d’un dossier, en arrière-plan, automatiquement au fur et à mesure qu’il y a des fichiers.
  • La localisation d’un fichier archivé sur bande LTO en utilisant l’API HTTP REST/Json d’Active Circle (l’utilisation est bien sûr facultative mais nécessite une installation Active Circle et l’option ACAPI).

Et de façon plus technique :

  • Une présence de React encore plus forte dans le code du front-end web : les pages en Groovy de Play ont quasiment disparues. La navigation est devenue beaucoup plus fluide. On peut noter la présence, en full React :
    • Du navigateur de fichiers (ainsi que la consultation des fichiers image, audio, video et loudness)
    • Du moteur de recherche
    • Du suivi des watchfolders
    • Du suivi des taches et des instances. Ces nouvelles pages sont beaucoup plus pratiques et rapides que les anciennes
    • De la gestion des utilisateurs et de leurs droits
    • De suivi FTP
  • Le remplacement de JSXTransformer ainsi que la suppression de YUICompressor (et sa dépendance à Rhino) pour l’utilisation de Babel via Node JS. L’intégration de Babel est transparente (MyDMAM Server va s’occuper de le télécharger et de l’installer tout seul avec le pilotage de Node JS) et facultative, car la version transpilée, réduite et compressée de toutes les sources JS est fournie dans le code. Les opérations sur les JSX sont toujours transparentes et dynamiques, mais faites avec Babel. On peut même imaginer écrire dans d’autres langages des fonctions pour l’interface Web de MyDMAM, du moment ou Babel les transpilent en JS compatible.
  • MyDMAM Server lance… Play dans la même JVM. Plus simple pour de l’admin car jusqu’à présent : bash lance Java qui lance MyDMAM qui lance Python qui lance Java qui lance Play. On aura donc bash lance Java qui lance MyDMAM qui lance Play.
  • Pleins de bugs avec Windows ont été corrigés, la plupart portent sur l’utilisation du “/” au lieu du “\” et du “;” au lieu du “:”.

Tout ceci pour préparer la fin de Play v1, de Groovy, de Bootstrap v2.

Dans la course à obsolescence, on en est actuellement à ce point :

  • Play 1 : il reste quelques pages en Groovy, et certaines fonctions comme le Basket ou les préférences utilisateur n’ont pas été refaites en React. Ce n’est pas le plus urgent car le développement autour de Play 1 est toujours actif (correction de bugs) est n’est pas encore abandonné.
  • Bootstrap 2 : c’est à tester et à adapter. C’est, à mon sens, le moins urgent de tous.
  • JSXTransformer : terminé, remplacé par Babel.
  • YUICompressor : terminé, remplacé par Babel. Son jar et celui de Rhino peuvent être retirés.
  • Cassandra 1 : est réclamé par Astyanax, cependant :
  • Astyanax a été déclaré par Netflix comme étant déprécié. Astyanax est le moteur historique de MyDMAM sur tout un tas de points comme la gestion des taches ou les comptes utilisateur. D’autre part, Cassandra 2 et 3 et leurs approches CQL, vont demander un gros travail de R&D juste pour déterminer si c’est viable de basculer vers la version 3 de Cassandra dans MyDMAM, puis le travail pour l’adaptation dans MyDMAM pour remplacer les appels à Astyanax en CQL. La solution serait donc de penser hors Cassandra, et cela va peut-être revenir à une solution maison.
  • Elasticsearch 1 : des tests sont nécessaires pour l’upgrade v2 et plus, et il y aura de toute façon un refactoring avec la nouvelle API. L’urgence est moyenne.
  • Java 8 : MyDMAM ne fonctionne qu’avec Java 8. Je n’ai pas vu d’obsolescence à problème coté Java 9 pas-encore-sorti.
  • React 0.13.2 : l’évolution devra être faite rapidement. Je sais déjà que je vais devoir faire quelques corrections, mais rien de très méchant normalement. La transition sera facilitée dans le sens ou les versions de dev. de React affichent des warning sur tout ce qui ne devrai plus être fait. Quand il n’y a plus de warning qui s’affiche, on monte d’une version !

Ces points sont plus les prioritaires par rapport à de nouvelles fonctions. De ce côté, les idées ne manque pas :

  • Intégration API Telestream Vantage, et aller-retours entre Vantage et MyDMAM (Metadatas et ffmpeg)
  • Intégration API Interplay, avec check-ins, import-export de master clips et d’Atoms, delivery, locators…
  • Réduire la masse de code en static, afin d’avoir des Factories en Java et la possibilité de faire des tests unitaires. Bref, augmenter la qualité du code et permettre une configuration globale plutôt que limitée à des fichiers textes et un reboot de l’appli à chaque modification. L’idée aussi serai de permettre d’ajout de code personnalisé un peu n’importe où plutôt que d’utiliser une API de Modules limitée.
  • Remonter et Afficher une playlist venant d’une automation TV broadcast (SAM Morpheus en l’occurrence). Oui, c’est spécifique, mais j’en ai besoin…
  • Ajouter des filtres conditionnels dans le moteur de Transcodage afin que MyDMAM propose des fonctionnalités plus avancés (comme la gestion des pistes audio, le format de l’image, la correction de l’entrelacement, l’ajout d’un logo) que ffmpeg permet et qu’il faut juste lui demander.
  • Et bien d’autres choses ! Et peut-être même une vue en vignette dans la navigation de fichiers !