Category Archives: News

Projet news and general announcements.

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 !

 

Git master branch update v0.14

A very BIG update. MyDMAM is not dead !

New functionalities:

  • Create a distributed transcoding watchfolder system (#115#114#143)
  • Add an integrated and controlled FTP Server (via an Apache FtpServer handler) (#157 and #175)

Enhancements and refactoring:

  • Add AsyncJS/React router and implement/refactor several JS Pages (#159#154#109#134 and #167)
  • Refactor all dirlists with loop protection (#128)
  • Refactor JS/JSX processing operation code (#168)
  • Remove Log2 logging for log4j and refactor all log systems (#141#152, #153 and #165)
  • Improve AppManager Instance Action / Status, and upgrade to a real API for this (#158)
  • Extract BlockedIPs/access control from Play to a generic tool (#163)
  • Create a “Stoppable Thread” for all services Threads and all sleep needs (#170)
  • Display drift date for user compared to current server date (#169)

Bug correction:

  • Remove IE 8 JS support (#113)
  • Desactivate admin mail with just remove service.administrator_mail in configuration (#145)
  • ffmpeg upgrade, remove strict and add vf null in command line and example config files (#146)
  • Bug with Broker: NPE if a worker is waiting a new job and there a some waiting jobs that it can’t manage (#147)
  • Play 1.4.x compatibility checking (#150)
  • Loosing a Cassandra node can break broker (TokenRangeOfflineException) (#160)
  • Stacktraces and ES errors with some bad chars during a search (#161)
  • Create ES Index during TTL enabling (#162)
  • Pagination don’t works in Navigator pages (#164)
  • Play can’t load JSX from module (#166)
  • Can’t upgrade privileges admin list (#172)
  • No storage configuration cause a NPE (#174)

MyDMAM a 3 ans

10/12/2015, un nouvel anniversaire qui marque une année importante pour ce projet.

Tout d’abord, la parution d’un journal de présentation du projet sur LinuxFR et sur le Journal du Hacker. Les quelques retours ont montré un certain intérêt de la chose. L’approche atypique de MyDMAM lui apporter de la curiosité, sans craintes ni critiques sur le principe.

En un an, bien qu’il n’y a eu que très peu de publication de nouvelles versions, des changements sont bien présents.

La suppression des UsersAction

L’approche était trop complexe et trop limitée qui proposait une API soit disante pratique, mais très lourde à implémenter, et qui au final c’est montrée trop bloquante à la première vraie implémentation. Bloquante a en être inutilisable. C’est ce qui s’appelle se planter.

Jeter une grosse portion de code écrite sur un gros mois de travail n’est pas simple. Mais cette expérience aura été un tremplin pour la suite : React.

L’arrivée de React

Cet création, née des les inventeurs fous de chez Facebook, est en train de révolutionner l’interface web de MyDMAM. Tout devient plus simple, plus clair, et plus souple. Le mode de pensée JQuery ralentissait fortement les évolutions coté interface web.

L’API AsyncJS

L’arrivée de React est accompagnée de la création d’une solution de contrôleurs à la façon Play pour échanger de vrais objets Java avec Javascript, coté navigateur web. De façon quasi transparente bien sur, grace à l’aide de Gson. L’ajout d’un routeur JS permet de faire monter en puissance le dev. cote web tout en restant simple coté Java/Play.

Plus asynchrone, plus fluide, plus dynamique, le couple React + AsyncJS est (en partie) la réponse à l’échec des UsersAction et une porte de sortie vers Play 2 avec l’abandon progressif de Groovy coté vues Play.

Tout ceci permettra aussi un jour d’avoir une API full REST à coté de l’interface web, sans avoir besoin de réécrire quoi que se soit coté Java.

De petites améliorations en tout genre

En vrac :

  • La création d’un cache pour les opérations de navigation dans les fichiers
  • La refonte de l’API Storage, l’une des plus anciennes portions de code de MyDMAM
  • La protection des attaques de force brute sur Play
  • Le passage sur Java 8 (et surtout l’abandon de Java 7) qui à permis de mettre un peu à jour ElasticSearch
  • Le passage sur Play 1.3 et l’évolution du nouveau système de module de Play.
  • L’arrêt du support d’Internet Explorer 8 avec l’arrivée de React
  • Le remplacement de tous les logs par log4j.

Ce qui va arriver en 2016

Si tout va bien :

  • Un système de watchfolders relié avec un transcodeur dans une architecture distribuée (plusieurs instances sur plusieurs watchfolders avec plusieurs instances de transcodeurs). Il marche. Il demande à être testé avec de vrais fichiers en situation de production. Il reste à lui donner une interface graphique correcte, pour le piloter/surveiller.
  • Un serveur FTP reposant sur Apache FTP Server. Il va apporter un suivi d’activité précis et en temps reel des instances, et une vraie gestion du cycle de vie des comptes de leur création à leur expiration et purge automatique. Chaque instance aura une certaine autonomie dans sa configuration, au niveau des comptes et des règles de stockage. Un utilisateur pourra simplement gérer des comptes FTP et aura enfin les réponses aux questions : Ai-je reçu de nouveaux fichiers ? As-t’on récupéré ce que j’ai mis à disposition ? Et l’administrateur n’aura plus à faire de ménage dans les fichiers obsoletes. Une révolution. Il est écrit et en plein debug. L’interface graphique est quasiment terminée.
  • Une nouvelle interface graphique pour la gestion des jobs et des instances. Ecrite avec React, bien sur.
  • Des paquets Debian pour une installation très simplifiée.

A suivre donc.

Git master branch update v0.13

Hello React ! This new version introduce this JS lib created by Facebook. All the JS API was updated, and there are some improvement for this.

This version is now fully functional with Java 8, but can be working with Java 7.

Storage configuration files are now very different from the previous version. This format is more compact, all in one file and one tree and mergue all storageindex declarations. Java Storage API is a bit different.

New functionalities and refactoring:

  • React/JS for Play (#97#103)
  • Import and export SQL files with Play H2 db (#106)
  • Refactor module call for Play 1.3 (#107)
  • Add Play Cache purge option in web view (#108)
  • Refactor Metadata Preview with React (#109), this is not actually closed. There is some works to do.
  • Refactor Storage API (#91)

Bug correction:

  • Strange stacktrace with Broker (#100)
  • Troubles with Server startup Play (#104)
  • CLI user list & disable options don’t works (#105)
  • Bug with SMB client and getPath (#110)
  • Bug with JSX and Play prod mode (#111)
  • Refactor Javascript/Groovy templates (#98)

Projet d’integration JSX avec Play

La prochaine itération de développement sera d’intégrer React de Facebook, une bibliothèque de vues/templeting en JS, qui permet notamment de découper une grosse application en blocs de codes indépendants et réutilisables ; c’est notamment le moteur visuel du site Instagram.

L’intégration portera sur la compilation JSX par Play via Mozilla Rhino, un compilateur JS en Java, en plus de l’optimisation YUI qui sera toujours faite à la fin.

Le défi sera d’intégrer au milieu de la structure JS/JQuery un arbre React et de le faire interagir avec le reste. Il est probable que React communiquera avec Play via un seul contrôleur (ou en tout cas via une abstraction des routes) afin d’éviter la très laide implémentation de déclaration route.js.