Liferay Montreal user group: Le premier meetup de la rentrée.

Le 18 août à Montréal s’est tenue la première instance du Liferay Montreal User Group depuis septembre 2013. Le meetup fut centré sur les nouveautés apportées par Liferay 7, principalement pour les développeurs.

Tour du mobilier

01-ui

Le premier facteur qui saute aux yeux, c’est la nouvelle interface graphique. Ce qui est important de comprendre, c’est que malgré un remaniement presque complet du UI, les fonctionnalités sont très similaires à la version 6.2 de Liferay. On remarque par ailleurs une expérience intégrée entre le panneau de contrôle et le site en soi. Bonne ou mauvaise chose? À vous de juger.

Nouvelle suite d’outils frontend

Suite au petit tour d’interface, le développement frontend a été abordé. Liferay 7 propose beaucoup de nouveautés de ce côté. Notamment une suite basée sur des outils tels que Yeoman, NPM et Gulp. Le développement frontend est maintenant isolé du backend. Auparavant, les développeurs faisaient appel au SDK ou au plugin Maven pour créer des thèmes. Maintenant, le flot de développement des fonctionnalités frontend ne dépend plus des fonctionnalités de Maven ou de Ant.

Générateur Yeoman

Yeoman est un outil en ligne de commande pour générer des projets. Il est analogue aux archétypes Maven.

Pour générer un thème, cette ligne suffit :

yo liferay-theme

Il est même possible de générer les Layout Templates avec la sous-commande « layout » :

yo liferay-theme:layout

Hot-deploy

Les thèmes peuvent être déployés automatiquement aussitôt qu’une ressource du thème est changée :

gulp watch

Usage par défaut de FreeMarker

Alors que les thèmes étaient typiquement développés à l’aide du moteur Velocity dans Liferay 6.2, les thèmes sont maintenant créés à l’aide du moteur FreeMarker par défaut dans Liferay 7.

Nouveautés et régressions

Staging: Gabarits de publication

Gabarit de publi

Liferay 7 propose un nouvel outil intéressant de publication : les gabarits de publication. Dans Liferay 6.2, chaque publication de site devait être paramétrée manuellement.

Maintenant, il est possible de configurer un « gabarit » de publication afin de ré-effectuer une publication avec des configurations sauvegardées. Moins de manipulations, moins d’erreurs.

Fonctionnalités disparues de la CE

Tel qu’annoncé par Liferay, certaines fonctionnalités ont été retirées. Le clustering et le support des bases de données propriétaires ont notamment été retirés de la version communautaire1. On note aussi le retrait du support de LCS et Audience Targeting 2.0 en version communautaire2.

2https://web.liferay.com/fr/web/bryan.cheung/blog/-/blogs/audience-targeting-2-0-and-lcs-will-not-be-compatible-with-liferay-portal-7-community

Développement backend avec OSGi

La base

OSGi a été au centre de ce meetup étant donné les ramifications.

Liferay 7 repose maintenant sur le cadriciel de services OSGi3. Ce cadriciel est notamment utilisé par l’IDE Eclipse. Sans entrer dans les détails de OSGi, ceci cause les différences suivantes :

  • Tous les modules sont maintenant des « bundles » au format JAR

  • Certains « hooks » sont maintenant remplacés par des « bundles » implémentant des services spécifiques

  • Les modules sont déployés dans le conteneur OSGi (en occurrence, Apache Felix4), pas dans le conteneur Web

Le fait d’utiliser OSGi introduit un nouveau concept lors du développement : Les dépendances dites « runtime ».

Dans un développement d’application Web typique, les dépendances sont spécifiées « compile time » à l’aide d’outils tels que Maven ou Ivy. La spécification des dépendances nous garantit qu’au moment de la compilation du programme, tous les éléments sont présents pour le compiler.

Cependant, ceci ne garantit pas que les composantes nécessaires au bon fonctionnement du programme seront présentes une fois le programme déployé. C’est là que OSGi entre en jeux : chaque module OSGi doit définir ses dépendances d’exécution. Par exemple, nous pouvons définir que « Portlet A » dépend de l’API « portal-kernel ». Si le conteneur OSGi détecte que « portal-kernel » est défectueux ou absent, « Portlet A » sera automatiquement mis hors service.

Voici deux diagrammes illustrant la différence :

Illustration 2: Développement avec OSGi

Comme on peut le voir dans les images précédentes, les modules Liferay 7 sont déployés dans un runtime OSGi, contrairement à un runtime classique EE. Les modules OSGi peuvent cependant être interconnectés au container Servlet via un « Extender » OSGi. Liferay fournit par ailleurs plusieurs « Extenders » par défaut afin de faciliter le développement d’applications Web.

Les annotations

Les portlets dans Liferay 7 peuvent maintenant être déclarés à l’aide d’annotations. Voici un exemple :

@Component(
immediate = true,
service = Portlet.class
property = {
// portlet.xml props here
}
)
public class MyPortlet extends MVCPortlet {
//…
}

Il faut noter que l’usage de l’annotation OSGi « @Component » n’est pas une manière standard JSR-286 de déclarer un portlet. Cependant, il permet au portlet d’être déclaré comme composante OSGi. De plus, aucun « portlet.xml » n’est nécessaire.

Outils de développement

Liferay propose de nouveaux outils pour le développement backend :

  • Liferay Workspace (basé sur Gradle)

  • Blade CLI (générateur de projets et exécuteur de tâches)

Le « liferay-maven-plugin » est maintenant discontinu5. Cependant, cela ne veut pas dire que développer avec Maven n’est plus possible. Simplement, le plugin Maven de Liferay n’est plus vraiment nécessaire pour effectuer la plupart des tâches. Il est possible de créer un projet Maven de toute pièce et de l’assembler en utilisant des plugins tels que :

  • maven-bundle-plugin (provenant du projet Apache Felix)

  • bnd-maven-plugin (Bndtools)

Par ailleurs, un exemple complet de projet développé avec Maven a été présenté et publié sur Github : https://github.com/njuneau/lr7-test-project .

Savoir-faire Linux, partenaire bronze de la LinuxCon en Amérique du Nord, du 22 au 24 août!

Savoir-faire Linux sera présent à titre de partenaire sponsor bronze de la LinuxCon qui se déroulera dès Lundi à Toronto. La conférence Linux fait partie des gros événements de l’année organisés par la Linux Fondation. Il n’existe tout simplement pas d’autre événement en Amérique du Nord lors duquel seront réunis sous un même toit, des développeurs, des sys admins, des architectes tout niveau confondu pour travailler ensemble à l’élargissement de la plate-forme Linux. 

Cette occasion est une belle opportunité pour Savoir-faire Linux, leader au Canada, de renforcer son implication auprès de la communauté, en plus de mettre de l’avant son nouveau partenariat avec la fondation Linux en matière de formation. En effet, l’entreprise est depuis quelques mois, le partenaire exclusif de la Fondation Linux en matière de cours et formations données aux experts du milieu.

Plusieurs activités sont prévues sur le stand de l’entreprise :

LinuxContainerNA

L‘un de nos développeurs du projet Ring, Alexandre Viau livrera des démonstrations sur Ring. Ring est un logiciel de communication universel et libre, respectant les libertés et la vie privée des utilisateurs. . En juin dernier, le projet a été officiellement accepté dans Debian, il présente des innovations majeures en R&D avec l’implémentation d’un blockchain.

Pour plus de renseignements sur le projet, consulter notre site web https://ring.cx/

Ring_VOIP_logo.svg

Savoir-faire Linux sera également présent avec un objectif de recrutement pour compléter ses équipes de sys admins, d’architectes et de développeur dans ses domaines respectifs que sont l’infrastructure .

Enfin, cet événement est l’occasion pour la communauté open-source de fêter le 25ème anniversaire de Linux, le plus grand projet en logiciel libre mené jusqu’à date et pour lequel nous sommes contributeurs.

Voici le lien pour consulter la liste des conférences données:

http://events.linuxfoundation.org/events/linuxcon-north-america/program/schedule

Savoir-faire Linux sera aussi présent au ContainerCon qui vient se greffer à la LinuxCon dans une optique plus large de perspectives en lien avec l’évolution de l’industrie. Au total, plus de 2000 participants sont attendus et plus de 100 conférences seront données parmi lesquelles celles des grands noms de l’industrie comme Linux Torvalds et Jim Whitehurst, le CEO de notre partenaire RedHat notamment.

Partie 2 : L’optimisation du trafic réseau

Rappelez-vous, dans notre article précédent, nous vous parlions de la PHT et de la possibilité d’y lancer plusieurs recherches sur une clef précise au lieu d’une seule et unique requête présente sur une clef donnée.

Cette activité sur les clés continue et se précise puisqu’il est désormais question d’optimiser les recherches des utilisateurs. Simon Désaulniers, développeur pour le projet Ring, travaille actuellement sur l’optimisation des opérations sur la table de hachage OpenDHT en y implentant des query (requêtes). Cette fonctionnalité permet de faire le tri des données non plus à la réception, mais à l’envoi. Autrement dit, les nœuds contenant les données appliquent le filtre décrit par les requêtes avant d’effectuer l’envoie des données. De cette façon, beaucoup de données échangées précédemment éviteront de transiter inutilement sur le réseau.

De son côté, Nicolas Reynaud travaille sur le comportement évolutif de l’arbre préfixe. Ses efforts visent à optimiser la couche du PHT de façon à ce que celui-ci présente un état cohérent en tout temps.

Car en effet, après le passage des clefs unidimensionnelles aux clefs multidimensionnelles, le risque que les données se perdent au cours de l’évolution du réseau augmentera avec la complexité de la clé. De plus, il a pour objectif l’ajout des clés multidimensionnelles complètes comme partielles (c.f. encadré).

Afin de s’assurer que les données se déplacent au bon endroit dans l’arbre préfixe, l’algorithme qui tourne sur le PHT a été automatisé de telle manière à ce qu’aucune données ne se perdent en allant se nicher « dans la mauvaise feuille ». Ceci est une étape cruciale pour Ring puisqu’il s’agit d’établir les fondations pour un système de publication de profil Ring.

visuel-article-tahia

Épisode 1 : Les arbres préfixes (PHT) comme moteur de recherche

OpenDHT est un système distribué public permettant d’indexer des données sous la forme de paire clé – valeur. La clé représente un identifiant unique et la valeur est le contenant de la donnée.

OpenDHT peut stocker des valeurs tout en répartissant les données sur l’ensemble des nœuds du réseau. La librairie est basée sur l’algorithme « Kademlia » introduit par Maymounkov et Mazières.

technology-x-binary-and-backgrounds-541917

OpenDHT innove en implémentant de nouvelles fonctionnalités comme listen : une opération de notification à la réception de nouvelles valeurs annoncées sur le réseau. Toutefois, les tables de hachage distribuées (DHT) offrent la possibilité d’effectuer uniquement des recherches exactes, sur une clef-précise. Or, l’un des principaux problèmes auxquels le logiciel Ring fait face est la recherche d’utilisateurs. Voici pourquoi l’équipe Ring et une équipe de l’UQAM ont travaillé à la recherche d’une solution pour ce problème.

Le solution utilisée: La PHT ou Prefix Hash Tree

capture2

La solution est inspirée d’un article intitulé Prefix Hash Tree : An Indexing Data Structure over Distributed hash Tables. L’objectif est de créer un arbre dont la structure représente l’information qu’on y ajoute. Les feuilles stockent les clés et les liens de l’arbre servent au routage logique. Le tout repose sur le réseau distribué de la DHT. Cette structure permet une recherche basée sur des mots clefs.

On peut également noter la possibilité de faire exister plusieurs arbres préfixes sur un même réseau. Ce qui servirait par la suite à indexer d’autres données comme des profils Ring ou des services tiers. Il est à noter que l’utilisation du PHT n’est soumise à aucune limitation. En effet, dans un contexte différent, on peut très bien imaginer l’indexation de blogs, d’appareils connectés (domotique), etc.

Cas pratique sur la PHT

Un utilisateur A souhaite rechercher un utilisateur B dont l’identifiant Ring est le suivant : ring:9ad22cac841bed877b8d5f65d4fb2d44bda7fdc4. L’utilisateur A pourra utiliser le PHT pour rechercher l’utilisateur B grâce à des mots clefs comme son prénom, son nom, sa ville de résidence, etc.

À suivre….épisode 2 : l’optimisation des requêtes sur la PHT! 

Ring est maintenant dans Debian

C’est le 30 Juin que Ring fut officiellement accepté dans Debian testing, les dépôts de développement de la prochaine version de Debian: Stretch.

Ceci est une bonne nouvelle pour les utilisateurs de Ring!

Il est donc maintenant possible d’installer Ring à partir des dépôts de votre distribution sans avoir à ajouter ceux de ring.cx.

Ring à la DebConf16 et arrivée dans les dépôts de Debian et Ubuntu

CmYA4fXXgAAyhaf

La 17e édition de la conférence annuelle des développeurs de Debian se déroulait à Cape Town en Afrique du Sud.

Des membres de l’équipe de développement de Ring ont fait le déplacement afin d’y présenter le projet et travailler sur son intégration dans les dépôts officiels de Debian.

Ring dans les dépôts d’Ubuntu et de Debian

Si vous êtes un utilisateur de Debian testing, vous pouvez maintenant installer Ring avec la commande suivante:

– « apt-get install ring »

L’arrivée de Ring dans les dépôts de Debian implique également sa disponibilité dans Ubuntu.

Ring fut intégré dans Ubuntu 16.10 le 2 Juillet 2016.

Des contributeurs de Debian ont déjà commencé à tester Ring sur GNU Debian/kFreeBsd, on peux y espérer un paquet dans un avenir proche.

Une requête accompagnée d’un patch à été envoyée par un utilisateur Debian afin de permettre à Ring de compiler sur Debian Jessie.

Il y aura donc possiblement un backport de Ring dans jessie-backports, ce qui permettra aux utilisateurs de Debian Jessie d’installer Ring depuis les dépôts officiels de Debian.


Présentation de Ring à la DebConf16

Alexandre Viau et Simon Désaulniers ont fait une présentation détaillant la technologie utilisée pour passer des appels de manière décentralisée. Un avant-goût de l’utilisation d’Ethereum pour l’enregistrement de noms d’utilisateur est également exploré.

Un enregistrement de la présentation est disponible dans les archives de debian-meetings:
http://meetings-archive.debian.net/pub/debian-meetings/2016/debconf16/Decentralized_communications_with_Ring.webm


OpenDHT dans Debian expérimental

OpenDHT à été développé pour répondre aux besoins de Ring mais le projet demeure tout de même indépendant et pourrait être utilisé par d’autres applications.
Le paquet libopendht a fait son apparition dans Debian expérimental pendant la DebConf.

Les prochaines itérations du paquet vont inclure le programme dhtnode, qui permet d’exécuter un noeud OpenDHT.

Le programme permet à la communauté d’héberger des nœuds OpenDHT sans avoir à exécuter dring, le daemon Ring, qui est plus lourd en dépendances que dhtnode.