{"id":2004,"date":"2015-05-26T16:48:53","date_gmt":"2015-05-26T16:48:53","guid":{"rendered":"http:\/\/ellignostage.test\/?p=2004"},"modified":"2021-05-26T13:05:55","modified_gmt":"2021-05-26T18:05:55","slug":"mise-a-niveau-dun-simulateur-vers-c11","status":"publish","type":"post","link":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/","title":{"rendered":"Mise \u00e0 Niveau d\u2019un Simulateur  vers C++11"},"content":{"rendered":"\n<h3 class=\"wp-block-heading\">Description<\/h3>\n\n\n\n<p>La<strong> programmation scientifique<\/strong> est un domaine tr\u00e8s particulier qui combine plusieurs champs scientifiques et demande une tr\u00e8s bonne connaissance de la programmation (structure de programme, optimisation, algorithme de haute performance, \u2026). Il y a tr\u00e8s peu de domaines qui demandent la maitrise \u00e0 la fois des math\u00e9matiques, de la physique et de les combiner pour produire des produits technologiques (programmes informatiques) qui ont des applications dans diff\u00e9rents domaines industriels. Par exemple en environnement, pour mesurer les impacts environnementaux, dans le jeu vid\u00e9o pour reproduire le monde physique virtuellement (effet de la gravite, \u2026) pour ne nommer que ceux-ci.&nbsp;La <strong>programmation d\u2019algorithmes math\u00e9matiques<\/strong> est un art et surtout un savoir-faire. Heureusement plusieurs langages et techniques sont apparues et nous permettent de structurer les programmes de fa\u00e7on concises et par concepts. Le r\u00e9sultat : plus facile \u00e0 maintenir, tester et surtout \u00e0 modifier, puisque le code est appeler \u00e0 \u00e9voluer dans le temps.<\/p>\n\n\n\n<p>Le code est un simulateur physique qui est un des modules de la compagnie (<strong>Elligno Virtual Physics Studio<\/strong>)., un ensemble de plusieurs modules (Classes C++ sous forme de librairies) qui permet de prototyper &nbsp;des <strong>algorithmes physiques<\/strong>. &nbsp; Les \u00c9quations de St-Venant unidimensionnelles sont solutionn\u00e9es par une approche aux <strong>volumes finis<\/strong>. &nbsp;Le programme utilise une approche proc\u00e9durale ce qui rend difficile d\u2019apporter des changements et de programmer de nouveaux algorithmes. On a d\u00e9cid\u00e9 la r\u00e9\u00e9criture du code en utilisant une technique Objet-Orient\u00e9e Num\u00e9rique &nbsp;avec &nbsp;le langage C++11. Principale raison : nous changeons notre m\u00e9thodologie de d\u00e9veloppement vers une approche &nbsp;\u00abTest Driven Approach \u00bb. De plus, ce genre d\u2019application demande une tr\u00e8s grande flexibilit\u00e9 au niveau de la <strong>programmation d\u2019algorithme physique<\/strong> et l\u2019<strong>Objet-Orient\u00e9e<\/strong> nous donne cette flexibilit\u00e9. &nbsp;Finalement, ceci va servir dans une <strong>collaboration industrielle<\/strong>&nbsp;(transfer technologique) afin de nous aider \u00e0 mieux comprendre la physique par des mod\u00e8les plus simples (voir page <strong>Produits<\/strong> sous <strong>Application<\/strong>). Dans les applications industrielles, le programmeur est tr\u00e8s souvent appel\u00e9 \u00e0 prototyper des algorithmes et de les tester\/valider. &nbsp;Architecture OO permet d\u00e9finir une couche abstraite (par exemple niveau de l\u2019algorithme) &nbsp;et de programmer diff\u00e9rentes impl\u00e9mentations en utilisant l\u2019inheritance et les patrons de conception. &nbsp;Ainsi le programmeur n\u2019a pas \u00e0 se soucier des d\u00e9tails de l\u2019impl\u00e9mentation dans le code, mais sur sa t\u00e2che principale, de programmer des algorithmes physiques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Code original (Analyse)<\/strong><\/h3>\n\n\n\n<p>1. Plusieurs fonctions font beaucoup de travail (plus que ce qu\u2019elles devraient faire, beaucoup plus);<\/p>\n\n\n\n<p>2. Programmation num\u00e9rique en C implique \u00e9norm\u00e9ment de boucles, utilise des tableaux pour stocker les donn\u00e9es et ensuite d\u2019appliquer des algorithmes math\u00e9matiques sur celles-ci;<\/p>\n\n\n\n<p>3. Plusieurs concepts sont absents (de base qui sont inherents a la methode), pas clair sur quoi la boucle est faite (cell face, noeuds), rend tr\u00e8s difficile la compr\u00e9hension du code;<\/p>\n\n\n\n<p>4. Concepts de la m\u00e9thode ne sont pas clair, par exemple m\u00e9thode num\u00e9rique de type volumes finis est utilis\u00e9e, concepts de cell ou volume, de n\u0153uds totalement absent ce qui rend le code tr\u00e8s difficile \u00e0 lire;<\/p>\n\n\n\n<p>5. Les fonctions ont plusieurs responsabilit\u00e9s, ce qui rend difficile de programmer des variantes ou m\u00eame d\u2019\u00e9tendre certains algorithmes;<\/p>\n\n\n\n<p>6. Certaines fonctions calcules (ex\u00e9cute) plusieurs parties de l\u2019algorithme principale, en modifiant cette fonction ceci a un effet sur tout le reste du code (ripple effect);<\/p>\n\n\n\n<p>7. Beaucoup d\u2019interd\u00e9pendances entre les parties du code, impossible de tester les algorithmes s\u00e9par\u00e9ment;<\/p>\n\n\n\n<p>8. Beaucoup de variables globales qui sont hard-coder;<\/p>\n\n\n\n<p>9. Pas possible de r\u00e9utiliser certaines parties de code ou algorithmes sans faire du copie\/coller, ce qui est de mon point de vue est une erreur (conduit \u00e0 des bugs qui sont souvent tr\u00e8s difficiles \u00e0 retracer et \u00e0 d\u00e9tecter);<\/p>\n\n\n\n<p>10. Maintenance est extr\u00eamement difficile, pour les raisons que nous venons de mentionn\u00e9es;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">&nbsp;Migration (nouvelle architecture)<\/h3>\n\n\n\n<p>1. Ajout de tests unitaires, qui sont un must (nous avons adopte une approche \u00ab test driven approach \u00bb). De mon point de vue, cette fa\u00e7on de faire augmente significativement la qualit\u00e9 du code et rend plus productif. Pour chaque concept ou class correspond un test;<\/p>\n\n\n\n<p>2. Ajout de types math\u00e9matiques (par exemple grille de calcul du domaine, notion de champ) ce qui facilite la compr\u00e9hension du code. \u00c9galement au niveau de l\u2019algorithme num\u00e9rique, concept de volume, de domaine de calcul, \u2026 qui rendent de loin le code plus lisible;<\/p>\n\n\n\n<p>3. Programmation Orient\u00e9e-Objet, on s\u00e9pare les responsabilit\u00e9s. Chaque class a une responsabilit\u00e9 et doit \u00eatre testable;<\/p>\n\n\n\n<p>4. Utilisation de librairies externes telles que Boost library (connaitre Boost est un MUST!!!). Boost est un ensemble de librairies qui offre une tr\u00e8s vaste gamme d\u2019outils qui sont indispensables et des standards en programmation. Nous avons commenc\u00e9 \u00e0 utiliser boost dans notre environnement de programmation (pointer container l, range, range algorithm, range adaptor, string library, iterator range, iterator pour nommer que ceux-ci);<\/p>\n\n\n\n<p>5. Programmation avec la STL (Standard Templale Library), \u00e9galement un must. Avec les nouvelles fonctionnalit\u00e9s de C++11 telles que bind, lambda par exemple, c\u2019est une autre fa\u00e7on de faire de la programmation scientifique. On \u00e9limine un tr\u00e8s grand nombre de boucles qui proviennent de la programmation C et qui sont souvent des sources d\u2019erreurs;<\/p>\n\n\n\n<p>6. Mise en place d\u2019une architecture (utilisation de certains patrons de conception tels que Singleton, Observer, Template) qui sont des standards en d\u00e9veloppement logiciel;<\/p>\n\n\n\n<p>7. Ajout d\u2019un GUI (Graphical User interface) pour faciliter la validation des algorithmes ainsi que la visualisation des r\u00e9sultats (Qt framework est la technologie que nous utilisons);<\/p>\n\n\n\n<p>8. Couche abstraite de concepts (class abstraite) d\u00e9fini une interface pour diff\u00e9rentes impl\u00e9mentations de l\u2019algorithme (manipuler par le pointeur de base, polymorphisme);<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Depuis les 3 derniers mois je travaille sur la migration d\u2019un code (\u00e9crit en C) avec comme application en m\u00e9canique des fluides. Je pr\u00e9sente les grandes \u00e9tapes de la migration (C vers C++11), les difficult\u00e9s rencontr\u00e9es et les le\u00e7ons apprises de ce projet. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-2004","post","type-post","status-publish","format-standard","hentry","category-projets"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno\" \/>\n<meta property=\"og:description\" content=\"Depuis les 3 derniers mois je travaille sur la migration d\u2019un code (\u00e9crit en C) avec comme application en m\u00e9canique des fluides. Je pr\u00e9sente les grandes \u00e9tapes de la migration (C vers C++11), les difficult\u00e9s rencontr\u00e9es et les le\u00e7ons apprises de ce projet.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/\" \/>\n<meta property=\"og:site_name\" content=\"Elligno\" \/>\n<meta property=\"article:published_time\" content=\"2015-05-26T16:48:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-26T18:05:55+00:00\" \/>\n<meta name=\"author\" content=\"Elligno\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Elligno\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/\"},\"author\":{\"name\":\"Elligno\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/person\\\/95f2e5f7a779215bc13c98f05efafc8b\"},\"headline\":\"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11\",\"datePublished\":\"2015-05-26T16:48:53+00:00\",\"dateModified\":\"2021-05-26T18:05:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/\"},\"wordCount\":973,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\"},\"articleSection\":[\"Projets\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/\",\"name\":\"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#website\"},\"datePublished\":\"2015-05-26T16:48:53+00:00\",\"dateModified\":\"2021-05-26T18:05:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/mise-a-niveau-dun-simulateur-vers-c11\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\",\"name\":\"Elligno\",\"description\":\"Site dev elligno\",\"publisher\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/elligno.com\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#organization\",\"name\":\"Elligno Inc\",\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/elligno.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/elligno.com\\\/wp-content\\\/uploads\\\/2021\\\/06\\\/favicon.png\",\"width\":256,\"height\":256,\"caption\":\"Elligno Inc\"},\"image\":{\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/elligno.com\\\/fr\\\/#\\\/schema\\\/person\\\/95f2e5f7a779215bc13c98f05efafc8b\",\"name\":\"Elligno\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g\",\"caption\":\"Elligno\"},\"sameAs\":[\"https:\\\/\\\/elligno.com\"],\"url\":\"https:\\\/\\\/elligno.com\\\/fr\\\/author\\\/panel-65ui89\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/","og_locale":"fr_FR","og_type":"article","og_title":"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno","og_description":"Depuis les 3 derniers mois je travaille sur la migration d\u2019un code (\u00e9crit en C) avec comme application en m\u00e9canique des fluides. Je pr\u00e9sente les grandes \u00e9tapes de la migration (C vers C++11), les difficult\u00e9s rencontr\u00e9es et les le\u00e7ons apprises de ce projet.","og_url":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/","og_site_name":"Elligno","article_published_time":"2015-05-26T16:48:53+00:00","article_modified_time":"2021-05-26T18:05:55+00:00","author":"Elligno","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Elligno","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/#article","isPartOf":{"@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/"},"author":{"name":"Elligno","@id":"https:\/\/elligno.com\/fr\/#\/schema\/person\/95f2e5f7a779215bc13c98f05efafc8b"},"headline":"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11","datePublished":"2015-05-26T16:48:53+00:00","dateModified":"2021-05-26T18:05:55+00:00","mainEntityOfPage":{"@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/"},"wordCount":973,"commentCount":0,"publisher":{"@id":"https:\/\/elligno.com\/fr\/#organization"},"articleSection":["Projets"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/","url":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/","name":"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11 - Elligno","isPartOf":{"@id":"https:\/\/elligno.com\/fr\/#website"},"datePublished":"2015-05-26T16:48:53+00:00","dateModified":"2021-05-26T18:05:55+00:00","breadcrumb":{"@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/elligno.com\/fr\/mise-a-niveau-dun-simulateur-vers-c11\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/elligno.com\/fr\/"},{"@type":"ListItem","position":2,"name":"Mise \u00e0 Niveau d\u2019un Simulateur vers C++11"}]},{"@type":"WebSite","@id":"https:\/\/elligno.com\/fr\/#website","url":"https:\/\/elligno.com\/fr\/","name":"Elligno","description":"Site dev elligno","publisher":{"@id":"https:\/\/elligno.com\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/elligno.com\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/elligno.com\/fr\/#organization","name":"Elligno Inc","url":"https:\/\/elligno.com\/fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/elligno.com\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/elligno.com\/wp-content\/uploads\/2021\/06\/favicon.png","contentUrl":"https:\/\/elligno.com\/wp-content\/uploads\/2021\/06\/favicon.png","width":256,"height":256,"caption":"Elligno Inc"},"image":{"@id":"https:\/\/elligno.com\/fr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/elligno.com\/fr\/#\/schema\/person\/95f2e5f7a779215bc13c98f05efafc8b","name":"Elligno","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5d5d65a6272025dfbdbf8600bd75d9abcc5eede7e37fe620531e2d2c00f91464?s=96&d=mm&r=g","caption":"Elligno"},"sameAs":["https:\/\/elligno.com"],"url":"https:\/\/elligno.com\/fr\/author\/panel-65ui89\/"}]}},"_links":{"self":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts\/2004","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/comments?post=2004"}],"version-history":[{"count":0,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/posts\/2004\/revisions"}],"wp:attachment":[{"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/media?parent=2004"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/categories?post=2004"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/elligno.com\/fr\/wp-json\/wp\/v2\/tags?post=2004"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}