<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jean Dusenne, auteur/autrice sur EKITE</title>
	<atom:link href="https://ekite.info/author/jean-dusenne/feed/" rel="self" type="application/rss+xml" />
	<link>https://ekite.info</link>
	<description>Vos défis, notre passion</description>
	<lastBuildDate>Mon, 21 Aug 2023 10:28:47 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://ekite.info/wp-content/uploads/2023/06/cropped-favicon2-150x150.png</url>
	<title>Jean Dusenne, auteur/autrice sur EKITE</title>
	<link>https://ekite.info</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Feature Flipping</title>
		<link>https://ekite.info/2023/07/27/feature-flipping/</link>
		
		<dc:creator><![CDATA[Maxime Montagne]]></dc:creator>
		<pubDate>Thu, 27 Jul 2023 16:30:13 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=1091</guid>

					<description><![CDATA[<p>Introduction Ici nous allons parler de Feature Flipping, (que vous pouvez aussi connaitre sous le nom de Feature Toggles, Feature Switches, Feature Flag et bien d’autres encore), qui a pour principe de donner la possibilité de contrôler l’accès à des fonctionnalités de vos applications. Cette technique devient pertinente lorsque que par exemple, nous voulons mettre [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2023/07/27/feature-flipping/">Feature Flipping</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 id="introduction" style="text-align: justify;">Introduction</h2>
<p style="text-align: justify;">Ici nous allons parler de Feature Flipping, (que vous pouvez aussi connaitre sous le nom de Feature Toggles, Feature Switches, Feature Flag et bien d’autres encore), qui a pour principe de donner la possibilité de contrôler l’accès à des fonctionnalités de vos applications. Cette technique devient pertinente lorsque que par exemple, nous voulons mettre en place des fonctionnalités destinées à un public cible (beta user, premium user …), que nous souhaitons avoir plus de contrôle sur l’ensemble des services proposés par une application (possibilité de désactiver telle ou telle fonctionnalité pour maintenance, évolution, correctifs).</p>
<p style="text-align: justify;">Cette méthodologie peut être implémentée dans différents langage et de manière différente, cela va être à vous de choisir ce qui correspond le mieux à votre besoin. Il existe déjà des librairies, des Frameworks, et même des solutions SaaS pour répondre à ce besoin.</p>
<p>&nbsp;</p>
<h2 id="quel-intérêt-pour-la-technique-" style="text-align: justify;">Quel intérêt pour la technique ?</h2>
<p>&nbsp;</p>
<h3 id="cycle-de-vie-de-livraison-dapplication" style="text-align: justify;">Cycle de vie de livraison d’application</h3>
<p style="text-align: justify;">Le Feature Flipping apporte beaucoup de souplesse dans le cycle de vie d’une application et ce à plusieurs niveaux. D’abord l’équipe de développement va pouvoir désactiver tout ou partie du code source d’une ou de plusieurs features. Une feature non finalisée ou qu’on ne souhaite pas activer ne bloquera pas le déploiement d’une release complète. Ce qui ajoute énormément de liberté à l’équipe de développement dans ses réalisations.</p>
<p style="text-align: justify;">Ces features pourront être activées dans un second temps et n’empêchent donc pas le bon fonctionnement du processus de déploiement continu d’une application.</p>
<h3 id="graceful-degradation--progressive-enhancement--fr-dégradation-gracieuse--amélioration-progressive" style="text-align: justify;">Graceful degradation &amp; Progressive enhancement ( fr: Dégradation gracieuse &amp; Amélioration progressive)</h3>
<p style="text-align: justify;">Cela permet aussi, lorsqu’on identifie un problème sur une fonctionnalité, de pouvoir la désactiver sans avoir besoin de déployer une nouvelle release. L’activation et la désactivation d’une feature peut se faire distinctement du déploiement d’une release.</p>
<p style="text-align: justify;">Imaginons que votre parcours de vente soit complétement bloqué à cause d’une étape facultative, la désactiver rendra le service à vos utilisateurs On peut également faire du déploiement “progressif” de fonctionnalités. C’est à dire, n’autoriser l’accès qu’à une poignée d’utilisateurs de l’application.</p>
<p style="text-align: justify;">Ainsi, cela permet à l’équipe de s’assurer de la pertinence d’une fonctionnalité avant un déploiement complet à l’ensemble des utilisateurs, et aussi potentiellement détecter des anomalies niveau applicatif ou infrastructure, qui n’avaient pas été anticipées.</p>
<p>&nbsp;</p>
<h2 id="quel-intérêt-pour-le-métier-" style="text-align: justify;">Quel intérêt pour le Métier ?</h2>
<p>&nbsp;</p>
<h3 id="tests-ab" style="text-align: justify;">Tests A/B</h3>
<p style="text-align: justify;">Dans l’agilité, nous parlons souvent du principe de l’empirisme. Ce principe se résume grosso-modo à l’apprentissage par l’expérience.</p>
<p style="text-align: justify;">L’A/B testing en est un bel exemple. Il permet de proposer des parcours différents de façon aléatoire afin de récolter des datas sur l’utilisation de l’application, et donc, de comprendre comment les utilisateurs l’utilisent en réalité. La mise en place de campagnes de test “A/B testing” est simple à comprendre, il permet de donner l’accès à différents parcours utilisateurs sur une même fonctionnalité ou encore de modifier graphiquement l’application pour avoir différents retours selon son utilisation.</p>
<p style="text-align: justify;">Ainsi, grâce aux données récoltées lors des campagnes de test, nous allons pouvoir valider une ou plusieurs hypothèses sur l’utilisation d’une ou de plusieurs fonctionnalités. Nous avons donc appris par l’expérience des utilisateurs que l’application devra s’orienter vers la version définitive d’une fonctionnalité qui correspond mieux aux besoins utilisateurs.</p>
<h3 id="fonctionnalités-temporaires--payantes" style="text-align: justify;">Fonctionnalités temporaires &amp; Payantes</h3>
<p style="text-align: justify;">Le feature flipping permet également de pouvoir activer des fonctionnalités uniquement lors de périodes spécifiques. Comme par exemple, un jeu ou un affichage spécifique pour la période de Noël, qu’on pourra désactiver une fois les fêtes terminées. Des modules activés uniquement en période de soldes, ou même des campagnes réservées aux premiers utilisateurs qui accéderons a la fonctionnalité.</p>
<p style="text-align: justify;">On peut également rapidement mettre en place un système pour gérer des fonctionnalités payantes de la même manière que pour les features temporaire, juste en changeant les critères de sélection.</p>
<p>&nbsp;</p>
<h2 id="comment-implémenter" style="text-align: justify;">Comment implémenter</h2>
<p>&nbsp;</p>
<p style="text-align: justify;">Il existe un <a href="https://featureflags.io/">site web</a> qui rassemble énormément de ressources autour de ce sujet, des guides, mais aussi une liste de librairies/SDKs. En le parcourant, nous nous rendons compte qu’il existe beaucoup de façons différentes de l’implémenter. Il existe plusieurs frameworks disponibles, parfois pour plusieurs langages de développement, nous pouvons retrouver par exemple, FF4J pour Java, FFLIP pour nodeJS ou encore Toggle pour Golang.</p>
<p style="text-align: justify;">On peut également retrouver des solutions Saas qui vont vous permettre via un SDK, (et bien sûr moyennant finance ?), d’implémenter du feature flipping dans votre code, c’est le cas par exemple de launchdarkly, qui a un sdk disponible pour quasiment tous les langages du marché. Le plus intéressant serait peut-être de créer une solution maison, mais cela demanderait pas mal d’effort, et pourrait devenir vite complexe à gérer pour les différents langages qu’on peut utiliser.</p>
<p style="text-align: justify;">Cependant ! Il existe une solution open source, que vous pouvez déployer, via du conteneur dans votre infrastructure, compatible avec les langages les plus communs, il s’agit de Unleash qui apprait comme étant une solution très attrayante ! Mettant à disposition facilement une plateforme de gestion des features, facile à déployer et à maintenir, vous laissant également la possibilité d’y implémenter des fonctionnalités propres à vos besoin, compatible avec la plupart des langages, que demander de mieux !</p>
<p>&nbsp;</p>
<h2 id="quelques-tests-pour-se-faire-un-avis" style="text-align: justify;">Quelques tests pour se faire un avis</h2>
<p>&nbsp;</p>
<p style="text-align: justify;">Pour tester rapidement, nous avons décidé de fabriquer une application web, développée en React, qui ferait appel à deux APIs différentes, une développée en NestJS, l’autre en Java Spring, pour justement activer ou non des features.</p>
<p style="text-align: justify;">Côté React nous avons utilisé <a href="https://github.com/paralleldrive/react-feature-toggles/">React Feature Toggles</a>, l’implémentation du feature flipping est assez simple coté front. Nous récupérons la liste des features et en fonction de leur disponibilité : les composants relatifs à ces features sont activés/chargés.</p>
<p style="text-align: justify;">Pour l’API Nestjs, nous avons utilisé <a href="https://github.com/FredKSchott/fflip">FFLIP</a>, plutôt simple à mettre en place, qui fonctionne avec un principe de critères qui peuvent être définis, calculés et cumulés, qui donnent accès à une ou plusieurs features. La simplicité d’utilisation et de compréhension permet une mutualisation rapide du code et le tout sans coût supplémentaire, contrairement à d’autres solutions Saas. Exemple d’un critère</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">{ 
    id: 'isPaidUser', 
    check: function (user, isPaid) { 
        return user.isPaid == isPaid; 
    }, 
}</pre>
<p style="text-align: justify;">Exemple d’une feature</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">{ 
    id: 'newFeatureRollout', 
    // Si la feature est associée à une liste de critère, tous les critères doivent être évalués à vrai pour rendre accessible la feature à l’utilisateur 
    criteria: [ 
        { isPaidUser: true }, 
        { percentageOfUsers: 0.5 }, 
        { allowUserIDs: AllowEdIds }, 
    ], 
    enabled: true, 
}</pre>
<p style="text-align: justify;">Exemple utilisation simple</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">let fflip = require('fflip'); 

 let Users = [ 
    { 
    id: 1, 
    name: 'Bob', 
    isPaid: false, 
    role: 'scrum', 
    canDrinkBeer: false, 
    } 
]; 

fflip.config({ 
    criteria: Criteria, // Une liste de critères comme définie plus haut 
    features: Features, // Une liste de feature comme définie plus haut 
}); 

console.log(fflip.getFeaturesForUser(Users[0])); 

let str: string;
const listName: string[] = Users.filter(user =&gt; fflip.isFeatureEnabledForUser('canDrinkBeer', user))
  .map(user =&gt; {
    console.log('Welcome to the Closed Beta!');
    str += `${user.name} can go drink some beer!\n`;
    return user.name;
  });</pre>
<p style="text-align: justify;">Pour finir, avec l’API Spring, nous avons essayé de mettre en place un système maison, afin de vérifier la possibilité de se passer de librairie ou solution tierce. Et le résultat est plutôt concluant, nous avons des résultats similaires entre les 2 APIs. Très grossièrement, pour imager à quoi ressemble un bout de code qui utilise du Feature Flipping, nous pourrions le résumer à un ensemble de “if”. Type implémentation simple</p>
<pre class="EnlighterJSRAW" data-enlighter-language="js">if Feature.is_enabled(‘new_feature’) 
        # new feature 
    else 
        # other 
    End</pre>
<p style="text-align: justify;">Le Feature Flipping consiste à activer ou désactiver une fonctionnalité en fonction d’une variable, dynamiquement dans le code. Mais vous vous rendrez compte que c’est un peu plus complexe que cela, si vous le souhaitez, vous pouvez retrouver nos essais <a href="https://github.com/ekit3/feature-flipping">ici</a>. Au final il nous restait un bon nombre de librairies sur différentes technologies à tester, la liste étant longue, peu importe les affinités que vous avez dans les langages de développement vous trouverez de quoi essayer et pourquoi pas le mettre en place</p>
<p>&nbsp;</p>
<h2 id="limites" style="text-align: justify;">Limites</h2>
<p>&nbsp;</p>
<h3 id="multiplications-des-cas-de-tests" style="text-align: justify;">Multiplications des cas de tests</h3>
<p style="text-align: justify;">Ce type de développement implique une grande rigueur quant au suivi et à la mise en place des tests autour de l’application. La multiplication des scénarios de tests et des différents parcours utilisateurs peut être une source de complication si le Feature Flipping n’est pas suivi ni appliqué correctement. Une grande rigueur est nécessaire de la part de toute l’équipe de développement.</p>
<h3 id="changement-modèle-de-données" style="text-align: justify;">Changement modèle de données</h3>
<p style="text-align: justify;">Il ne faut pas oublier non plus que certaines modifications de fonctionnalités peuvent impliquer des impacts sur le modèle de données de l’application, ce qui peut rendre compliqué la cohabitation de plusieurs features. Le métier ne demandera pas le feature flipping pour les mêmes raisons (activation des features en fonctions des périodes, des profils utilisateurs) que le développement (faciliter le développement, le déploiement et rendre dispo la feature une fois terminée et testée) Alors, dans quelle mesure et jusqu’où peut-on aller avec le Feature Flipping ?</p>
<h3 id="quelques-conseils" style="text-align: justify;">Quelques conseils</h3>
<p style="text-align: justify;">Si vous deviez mettre en place le Feature Flipping, un premier conseil serait de le faire dès le début de vos projets ou de l’intégrer sur des nouvelles fonctionnalités indépendantes, cela peut représenter un gros travail de reprendre un système déjà en place.</p>
<p style="text-align: justify;">Il vous faudra également beaucoup de liant entre les équipes de développement, la qualité et le métier afin garantir une application parfaitement fonctionnelle de bout en bout. Mais ces efforts en valent la peine, vous n’aurez plus à attendre les tests de telle ou telle feature pour déployer, vous pourrez interagir plus facilement avec vos utilisateurs et mieux réagir en cas de problèmes.</p>
<p>L’article <a href="https://ekite.info/2023/07/27/feature-flipping/">Feature Flipping</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1091</post-id>	</item>
		<item>
		<title>Boostez vos applis web avec Web Assembly !</title>
		<link>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/</link>
					<comments>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/#respond</comments>
		
		<dc:creator><![CDATA[Laurent Duchaussoy]]></dc:creator>
		<pubDate>Thu, 06 Oct 2022 10:28:27 +0000</pubDate>
				<category><![CDATA[Tech]]></category>
		<guid isPermaLink="false">https://ekite.info/?p=1004</guid>

					<description><![CDATA[<p>Web Assembly (ou WASM) est un standard du World Wide Web consistant en un bytecode exécuté côté navigateur dans un environnement dédié (sandbox) en complément du Javascript (JS). Ce code bas niveau étant interprété côté navigateur peut être écrit dans différents langages comme le C, C++, RUST, x86 etc. L’interprétation du Web Assembly se fait [&#8230;]</p>
<p>L’article <a href="https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/">Boostez vos applis web avec Web Assembly !</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p class="post-header" style="text-align: justify;">Web Assembly (ou WASM) est un standard du World Wide Web consistant en un bytecode exécuté côté navigateur dans un environnement dédié (sandbox) en complément du Javascript (JS).</p>
<div class="extract">
<p style="text-align: justify;">Ce code bas niveau étant interprété côté navigateur peut être écrit dans différents langages comme le C, C++, RUST, x86 etc.</p>
<p style="text-align: justify;">L’interprétation du Web Assembly se fait plus bas-niveau que celle du Javascript. Web Assembly utilise de manière plus efficace et directe les ressources disponibles sur la machine sur laquelle il s’exécute (CPU/Mémoire), et permet donc d’atteindre un haut niveau de performances.</p>
<p style="text-align: justify;">Ces performances accrues permettent alors de développer des applications qui n’étaient pas envisageables en Javascript. Par exemple du traitement vidéo en temps réel, comme le floutage d’arrière plan en visio-conférence, ou encore des jeux vidéo.</p>
<p style="text-align: justify;">Pour résumer, WASM a été créé pour tirer parti de la puissance des langages de bas niveau, couplé à la flexibilité de Javascript afin de créer des applications Web plus performantes.</p>
<h2 id="un-peu-de-contexte" style="text-align: justify;">Un peu de contexte</h2>
<p style="text-align: justify;">WASM fut officiellement lancé en 2015 pour la première fois sous forme d’une démonstration faite sous Unity (moteur de jeu multi plateforme) afin de démontrer les performances et les possibilités de l’outil.</p>
<p style="text-align: justify;">Mozilla a sorti asm.js, le 21 mars 2013, un sous-ensemble du langage JS pour améliorer les performances grâce à une couche de traitement binaire. Google et Lars Bak ont mis en place un moteur JS V8, le 2 septembre 2008, qui peut compiler nativement vers de l’assembleur. Ces deux derniers événements sont surtout des améliorations liées à la gestion du langage.</p>
<h2 id="objectifs" style="text-align: justify;">Objectifs</h2>
<p style="text-align: justify;">Les objectifs du WASM sont:</p>
<ul style="text-align: justify;">
<li><b>la rapidité</b> : avoir des performances proches des applications natives (C/C++/Rust) tout en fonctionnant sur un navigateur Web..</li>
<li><b>la portabilité</b> : WebAssembly est conçu de manière à s’associer aux autres technologies web mais aussi de garantir une rétro compatibilité ascendante entre les différentes versions.<br />
Il existe aussi des polyfills pour les navigateurs plus anciens.</li>
<li><b>la sécurité</b> : l’environnement dédié permet de garantir une isolation totale du code et de la machine de l’utilisateur. Par exemple, la partie entrée / sortie (réseau et fichier) est totalement inaccessible (en dehors du module qui l’embarque).</li>
</ul>
<h2 id="la-compilation" style="text-align: justify;">La compilation</h2>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-1.jpg" alt="image" /></p>
<p style="text-align: justify;">Fig: Le processus de compilation Web Assembly</p>
<p style="text-align: justify;">Afin d’exécuter du Web Assembly dans une page web, il faut compiler du code écrit dans un langage source (écrit en C, C++, Rust ou autre) vers un code intermédiaire (le bytecode WASM). Le bytecode est situé entre le code d’un langage source et le code machine (binaire). Cela est rendu possible grâce à une infrastructure de compilation <a href="https://ekite.tech/articles/front-end/web-assembly/#llvm">LLVM</a>, qui implémente la traduction d’un AST (<a href="https://ekite.tech/articles/front-end/web-assembly/#syntaxeTree">arbre de syntaxe abstraite</a>) en bytecode WASM.<br />
Le fichier ainsi compilé aura pour extension ‘.wasm’.</p>
<p style="text-align: justify;">L’utilisation d’une LLVM permet d’isoler et d’uniformiser la compilation de tous les langages sources supportés vers ce format. Pour ajouter le support d’un langage, il suffit d’implémenter un programme capable de lire un AST pour le transmettre à la LLVM (transpilateur).<br />
Il est donc possible de créer des compilateurs pour n’importe quel langage. (une liste des langages principaux déjà supportés par WASM se trouve sur le Discord de sa communauté.)</p>
<p style="text-align: justify;">Fonctionnement général du Web Assembly</p>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-2.jpg" alt="image" /></p>
<p style="text-align: justify;">Le code initialement écrit dans un langage haut-niveau est donc compilé dans en un module web-assembly. La compilation produit un fichier binaire ‘.wasm’ contenant le bytecode devant être exécuté dans le navigateur web de l’utilisateur. Les fichiers ‘.wasm’ peuvent alors être distribués aux utilisateurs comme le reste des ressources statiques d’une application web.</p>
<p style="text-align: justify;">Lorsqu’un utilisateur consulte l’application web, les ressources statiques (HTML, CSS, Images) sont téléchargées par son navigateur, ainsi que le code Javascript et les binaires ‘.wasm’. Le navigateur se charge de décoder, compiler et exécuter le code WASM, en parallèle du code Javascript habituel.</p>
<h2 id="les-concepts" style="text-align: justify;">Les concepts</h2>
<ul style="text-align: justify;">
<li>Intégration sur le web WebAssembly est conçu de manière à facilement s’associer aux autres technologies web et de garantir une rétrocompatibilité.</li>
<li>Le fichier compilé est téléchargé, l’exécution est faite nativement sur le poste de l’utilisateur et la mémoire est gérée de manière linéaire.</li>
<li>Bien que l’exécution ait lieu sur le poste de l’utilisateur, WASM ne permet pas l’accès à certains composants du <a href="https://ekite.tech/articles/front-end/web-assembly/#kernel">kernel</a> : Il existe une limite sur la gestion des entrées/sorties. (pour des raisons de sécurité)</li>
<li>Mémoire linéaire La mémoire linéaire est une seule plage d’adresse mémoire sur laquelle on peut agir au fil de l’eau. Vu l’abstraction du sujet, il est mieux de pouvoir se représenter tout ça. Voici un parallèle entre la manière dont est gérée la mémoire en Java (de Jakob Jenkov) et un schéma de la mémoire linéaire (de Meghalee Goswami) :</li>
</ul>
<p style="text-align: justify;"><img decoding="async" src="https://ekite.tech/articles/front-end/web-assembly//image-3.jpg" alt="image" /></p>
<p style="text-align: justify;">Avant d’aller à la suite un petit aparté : WASM a mis en place un traducteur du fichier compilé nommé <a href="https://developer.mozilla.org/en-US/docs/WebAssembly/Understanding_the_text_format">Web Assembly Text (WAT)</a>. Le fichier compilé est donc lisible</p>
<ul style="text-align: justify;">
<li>Module Représente un binaire WASM qui a été compilé en code exécutable par le navigateur.</li>
<li>Table Représente un tableau typé de référence ne pouvant être stocké de manière brute en mémoire (pour des raisons de sécurité et de portabilité).</li>
<li>Instance Représente un module associé ainsi que ses états (la mémoire, la table ainsi qu’un ensemble de données importées).</li>
</ul>
<h2 id="les-cas-dusage-de-wasm" style="text-align: justify;">Les cas d’usage de WASM</h2>
<p style="text-align: justify;">Comme expliqué en introduction, WASM permet un haut niveau de performances impossible en Javascript. Ces performances ouvrent la possibilité d’implémenter de nouveaux cas d’usage. Certains de ces cas d’usage sont concrets et déjà mis en place dans certaines applications et jeux. D’autres cas d’usage sont plutôt de l’ordre du POC (Proof Of Concept) ou de la démo :</p>
<ul style="text-align: justify;">
<li>Server-side rendering</li>
<li>OCI (Open Container Initiative)</li>
<li>3D Web View Rendering</li>
<li>Étendre des fonctions JS</li>
<li>Extensions navigateurs (ublock origin)</li>
<li>Utilisation de la 3D</li>
</ul>
<p style="text-align: justify;">Voici des exemples d’applications connues faites à l’aide de WASM :<br />
<a href="https://www.figma.com/fr/blog/webassembly-cut-figmas-load-time-by-3x/">Figma</a>, <a href="https://madewithwebassembly.com/showcase/google-earth">Google Earth</a>, <a href="https://madewithwebassembly.com/showcase/unity">Unity</a>, <a href="https://madewithwebassembly.com/showcase/tensorflow">Unity</a>, etc.</p>
<h3 id="pros" style="text-align: justify;">Pros</h3>
<ul style="text-align: justify;">
<li>Performance</li>
<li>Cross platform</li>
<li>Sécurisation</li>
<li>multiples langages Rust / C++ / C etc.</li>
<li>Portabilité</li>
</ul>
<h3 id="cons" style="text-align: justify;">Cons</h3>
<ul style="text-align: justify;">
<li>Communauté faible</li>
<li>Beaucoups de concepts complexe à appréhender avant de pouvoir faire la moindre chose</li>
<li>N’a pas encore percé malgré son “âge”</li>
<li>Installation plus ou moins aisée en fonction de la plateforme de développement</li>
<li>Pas “user friendly”</li>
</ul>
<h2 id="conclusion" style="text-align: justify;">Conclusion</h2>
<p style="text-align: justify;">Le principal but de WASM est d’apporter un enrichissement de la stack technique de Javascript avec un haut niveau de performances. La plus grande difficulté de WASM reste d’assimiler ses différents principes et concepts généraux</p>
<ul style="text-align: justify;">
<li>devoir utiliser un langage de bas niveau</li>
<li>utiliser un compilateur</li>
<li>avoir affaire à une communauté de niche</li>
<li>assez complexe à appréhender Malgré une adoption encore faible, il n’en reste pas moins fiable que ce soit en termes de sécurité, de performance, de lisibilité et dans certains domaines la seule solution possible afin de garantir un haut niveau de performance sur une application Web.</li>
</ul>
<h2 id="lexique" style="text-align: justify;">Lexique</h2>
<ul style="text-align: justify;">
<li><b><a name="bytecode"></a>bytecode:</b> En informatique, le bytecode (terme anglais signifiant « code en bytes ») est un code intermédiaire entre les instructions machines et le code source, qui n’est pas directement exécutable. Le bytecode (également appelé code portable ou p-code) peut être créé à la volée et résider en mémoire (compilation à la volée, JIT en anglais) ou bien résider dans un fichier, généralement binaire qui représente le programme, tout comme un fichier de code objet produit par un compilateur. <a href="https://fr.wikipedia.org/wiki/Bytecode">Source</a></li>
<li><b><a name="syntaxeTree"></a>Arbre de syntaxe abstraite:</b> Un arbre de syntaxe abstraite (AST) est une manière de représenter la syntaxe d’un langage de programmation sous la forme d’une structure arborescente hiérarchique. Cette structure est utilisée pour générer des tables de symboles pour les compilateurs et la génération de code ultérieure. L’arbre représente toutes les constructions du langage et leurs règles ultérieures. <a href="https://definir-tech.com/arbre-de-syntaxe-abstraite-ast/">Source</a></li>
<li><b><a name="llvm"></a>LLVM:</b> LLVM (anciennement appelé Low Level Virtual Machine en français : « machine virtuelle de bas niveau ») est une infrastructure de compilateur conçue pour l’optimisation du code à la compilation, à l’édition de liens, voire à l’exécution ou durant les « temps morts » d’un programme, quel que soit le langage d’origine. LLVM permet de créer une machine virtuelle pour des langages similaires à Java et sa JVM, un générateur de code pour une architecture matérielle spécifique, et des optimiseurs de compilation indépendants de toute plate-forme et de tout langage. <a href="https://fr.wikipedia.org/wiki/LLVM">Source</a></li>
<li><b><a name="kernel"></a>Kernel:</b> terme anglais signifiant « noyau ». Il constitue le cœur du système qui exploite un ordinateur. Il établit la communication entre la partie matérielle et la partie logicielle de l’appareil. <a href="https://www.jedha.co/blog/kernel-definition-utilite">Source</a></li>
</ul>
<h2 id="sources" style="text-align: justify;">Sources</h2>
<p style="text-align: justify;">The state of WebAssembly (2022)</p>
<ul>
<li style="text-align: justify;"><a href="https://tech.mozfr.org/post/2017/03/08/D-ou-vient-la-rapidite-de-WebAssembly">https://tech.mozfr.org/post/2017/03/08/D-ou-vient-la-rapidite-de-WebAssembly</a></li>
<li style="text-align: justify;"><a href="https://developer.mozilla.org/fr/docs/">https://developer.mozilla.org/fr/docs/</a></li>
<li style="text-align: justify;"><a href="https://emscripten.org/">https://emscripten.org/</a></li>
<li style="text-align: justify;"><a href="https://developer.mozilla.org/fr/docs/">https://developer.mozilla.org/fr/docs/</a></li>
<li style="text-align: justify;"><a href="https://jenkov.com/tutorials/java-concurrency/java-memory-model.html">https://jenkov.com/tutorials/java-concurrency/java-memory-model.html</a></li>
<li style="text-align: justify;"><a href="https://www.youtube.com/watch?v=hSeB9I_mK6A&amp;t=4s">Angry Bots Démo</a></li>
<li style="text-align: justify;"><a href="https://discord.gg/3B8QFXkYTc">lien discord Wasm</a></li>
<li style="text-align: justify;"><a href="https://madewithwebassembly.com/">Applications faite en WASM</a></li>
<li style="text-align: justify;"><a href="https://radu-matei.com/blog/wasm-to-oci/">OCI (Open Container Initiative)</a></li>
<li style="text-align: justify;"><a href="https://study.com/academy/lesson/what-is-the-linear-memory-model-definition-constraints.html">schéma mémoire linéaire de Meghalee Goswami</a></li>
</ul>
</div>
<p>L’article <a href="https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/">Boostez vos applis web avec Web Assembly !</a> est apparu en premier sur <a href="https://ekite.info">EKITE</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://ekite.info/2022/10/06/boostez-vos-applis-web-avec-web-assembly/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1004</post-id>	</item>
	</channel>
</rss>
