<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Multi Sources | </title>
    <link>http://localhost:1313/tags/multi-sources/</link>
      <atom:link href="http://localhost:1313/tags/multi-sources/index.xml" rel="self" type="application/rss+xml" />
    <description>Multi Sources</description>
    <generator>HugoBlox Kit (https://hugoblox.com)</generator><language>fr-FR</language><lastBuildDate>Fri, 03 Jul 2026 00:00:00 +0000</lastBuildDate>
    <image>
      <url>http://localhost:1313/media/logo.svg</url>
      <title>Multi Sources</title>
      <link>http://localhost:1313/tags/multi-sources/</link>
    </image>
    
    <item>
      <title>Migration DataViz - une couche d’interopérabilité SQL amont-aval - {oa-lake}</title>
      <link>http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/</link>
      <pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/</guid>
      <description>&lt;p&gt;Les plateformes décisionnelles reposent souvent sur plusieurs bases de données, plusieurs data warehouses / data lakes et plusieurs outils de restitution.&lt;/p&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt; introduit une couche SQL intermédiaire entre les sources de données et les outils de datavisualisation.&lt;/p&gt;
&lt;p&gt;Les règles de gestion, objets métier, dimensions, mesures et calculs sont centralisés dans cette couche puis exposés aux outils consommateurs.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les sources de données et les outils de restitution deviennent indépendants les uns des autres.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt; se connecte simultanément à plusieurs systèmes de données : bases relationnelles, data warehouses, lakehouses, fichiers ou APIs.&lt;/p&gt;
&lt;p&gt;Les requêtes sont fédérées par un moteur SQL distribué qui exécute les jointures, calculs et transformations nécessaires.&lt;/p&gt;
&lt;p&gt;Le SQL produit reste standard et exécutable sur différents moteurs, ce qui limite le lock-in technologique.&lt;/p&gt;
&lt;p&gt;Les objets métier sont définis une seule fois puis exposés aux outils consommateurs.&lt;/p&gt;
&lt;h2 id=&#34;sources-de-données&#34;&gt;Sources de données&lt;/h2&gt;
&lt;p&gt;Les données restent dans leurs systèmes d&amp;rsquo;origine.&lt;/p&gt;
&lt;p&gt;Oracle, SQL Server, PostgreSQL, DB2, BigQuery, Snowflake, Redshift, Azure SQL (et autres) ou des fichiers peuvent être interrogés dans une même requête.&lt;/p&gt;
&lt;p&gt;Le mécanisme de &lt;strong&gt;Push-Down SQL&lt;/strong&gt; évite toute copie systématique des données : les requêtes s&amp;rsquo;exécutent directement sur les systèmes existants, dans le respect des architectures en place.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; construire un dashboard à partir de données réparties sur plusieurs plateformes sans migration préalable.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;couche-métier-sql&#34;&gt;Couche métier SQL&lt;/h2&gt;
&lt;p&gt;Les dimensions, mesures, hiérarchies et règles de calcul sont centralisées dans &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Cette couche devient le point d&amp;rsquo;entrée unique pour les outils de restitution.&lt;/p&gt;
&lt;p&gt;Les règles de gestion ne sont plus dupliquées dans chaque plateforme de datavisualisation.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; une seule définition des indicateurs pour l&amp;rsquo;ensemble du système décisionnel.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;cache-parquet&#34;&gt;Cache Parquet&lt;/h2&gt;
&lt;p&gt;Les données peuvent être matérialisées au format Parquet.&lt;/p&gt;
&lt;p&gt;Cette couche de cache réduit les temps de réponse et limite les sollicitations des systèmes sources. Elle est gérée automatiquement selon les usages observés, sans intervention manuelle.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; accélérer les traitements analytiques les plus coûteux.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;data-visualisation&#34;&gt;Data visualisation&lt;/h2&gt;
&lt;p&gt;Les outils de restitution se connectent au modèle exposé par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Power BI, Looker, Spotfire, Tableau, Qlik, SAP BusinessObjects ou tout outil compatible SQL peuvent exploiter les mêmes objets métier.&lt;/p&gt;
&lt;p&gt;















&lt;figure  &gt;
  &lt;div class=&#34;flex justify-center	&#34;&gt;
    &lt;div class=&#34;w-full&#34; &gt;
          &lt;img alt=&#34;img-big&#34; 
               srcset=&#34;http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/dataviz_to_sql5_hu_cc40a0b6ed53e8a4.webp 320w, http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/dataviz_to_sql5_hu_a0c38dc1450ec025.webp 480w, http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/dataviz_to_sql5_hu_ef5b054544195ca9.webp 760w&#34;
               sizes=&#34;(max-width: 480px) 100vw, (max-width: 768px) 90vw, (max-width: 1024px) 80vw, 760px&#34;
               src=&#34;http://localhost:1313/ressources/middlewares/oa-lake-couche-interoperabilite/dataviz_to_sql5_hu_cc40a0b6ed53e8a4.webp&#34;
               width=&#34;760&#34;
               height=&#34;410&#34;
               loading=&#34;lazy&#34; data-zoomable /&gt;&lt;/div&gt;
  &lt;/div&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Les changements d&amp;rsquo;outils de data visualisation n&amp;rsquo;impliquent plus de reconstruire les dimensions, mesures et règles de calcul.&lt;/p&gt;
&lt;h2 id=&#34;migration-progressive&#34;&gt;Migration progressive&lt;/h2&gt;
&lt;p&gt;Plusieurs outils peuvent coexister pendant une phase de transition.&lt;/p&gt;
&lt;p&gt;Un même modèle métier peut être exposé simultanément vers plusieurs plateformes de restitution.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; migration progressive des usages sans modification des systèmes de données.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;data-lineage&#34;&gt;Data Lineage&lt;/h2&gt;
&lt;p&gt;Le data lineage reconstruit par &lt;strong style=&#34;color:#C00000;&#34;&gt;{openAudit}&lt;/strong&gt; reste disponible sur l&amp;rsquo;ensemble de la chaîne.&lt;/p&gt;
&lt;p&gt;Les dépendances sont documentées depuis les systèmes sources jusqu&amp;rsquo;aux indicateurs exposés dans les dashboards.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les transformations, calculs et usages restent traçables sur l&amp;rsquo;ensemble de l&amp;rsquo;architecture.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
    <item>
      <title>Migration DataViz - une couche sémantique interopérable - {oa-lake-ctx}</title>
      <link>http://localhost:1313/ressources/middlewares/oa-lake-ctx-couche-semantique/</link>
      <pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://localhost:1313/ressources/middlewares/oa-lake-ctx-couche-semantique/</guid>
      <description>&lt;p&gt;Les plateformes décisionnelles historiques reposaient généralement sur une couche sémantique permettant aux utilisateurs de manipuler des objets métier plutôt que des tables ou des requêtes SQL.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Clients&amp;rdquo;, &amp;ldquo;contrats&amp;rdquo;, &amp;ldquo;produits&amp;rdquo; ou &amp;ldquo;chiffre d&amp;rsquo;affaires&amp;rdquo; étaient exposés sous une forme fonctionnelle indépendante des structures physiques de stockage.&lt;/p&gt;
&lt;p&gt;Pour répondre à ce besoin, nous avons conçu &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; constitue la couche sémantique de l&amp;rsquo;architecture &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt;. Elle centralise les objets métier, les dimensions, les mesures, les KPIs, les règles de calcul et les mécanismes de sécurité.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les outils consommateurs manipulent des objets métier. Les structures physiques restent masquées.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;architecture&#34;&gt;Architecture&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; centralise les dimensions, mesures, hiérarchies, KPI et règles de calcul.&lt;/p&gt;
&lt;p&gt;Ces composants sont définis une seule fois puis exposés aux outils consommateurs.&lt;/p&gt;
&lt;p&gt;Contrairement à certaines couches sémantiques du marché, &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; ne nécessite ni modèle physique spécifique, ni table pivot, ni chemin de navigation imposé.&lt;/p&gt;
&lt;p&gt;Les relations sont calculées dynamiquement à partir du modèle existant.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; un modèle métier unique pour toutes les données et tous les outils consommateurs.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sources-de-données&#34;&gt;Sources de données&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; peut exploiter simultanément plusieurs systèmes de données.&lt;/p&gt;
&lt;p&gt;Les données peuvent provenir de bases Oracle, SQL Server, PostgreSQL, DB2, Snowflake, BigQuery, Redshift, fichiers ou autres sources compatibles SQL.&lt;/p&gt;
&lt;p&gt;Les objets métier peuvent combiner plusieurs sources dans une même définition fonctionnelle.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Usage typique :&lt;/strong&gt; construire un KPI à partir de données réparties sur plusieurs plateformes.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;objets-métier&#34;&gt;Objets métier&lt;/h2&gt;
&lt;p&gt;Les catalogues exposés par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; regroupent les dimensions, mesures, KPI, hiérarchies et nomenclatures métier.&lt;/p&gt;
&lt;p&gt;Les relations entre objets sont définies dans la couche sémantique et non dans les outils de restitution.&lt;/p&gt;
&lt;p&gt;Les catalogues peuvent être organisés indépendamment des structures physiques des bases de données.&lt;/p&gt;
&lt;h2 id=&#34;génération-sql&#34;&gt;Génération SQL&lt;/h2&gt;
&lt;p&gt;Les requêtes SQL sont générées dynamiquement à partir des objets métier, dimensions, mesures et filtres sélectionnés.&lt;/p&gt;
&lt;p&gt;Les jointures, agrégations et règles de calcul sont appliquées par le moteur.&lt;/p&gt;
&lt;p&gt;Les filtres utilisateurs sont propagés jusqu&amp;rsquo;aux systèmes sources via le mécanisme de &lt;strong&gt;Push-Down SQL&lt;/strong&gt; : pas de copie systématique des données, les requêtes sont exécutées sur les systèmes existants, dans le respect des architectures en place.&lt;/p&gt;
&lt;p&gt;Le SQL généré peut être exécuté par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt; ou par tout moteur SQL compatible.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les utilisateurs manipulent des objets métier ; le SQL est généré automatiquement.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;smart-cache&#34;&gt;Smart Cache&lt;/h2&gt;
&lt;p&gt;Les données restent dans les systèmes sources lorsque cela est possible.&lt;/p&gt;
&lt;p&gt;Les jeux de données les plus sollicités peuvent être matérialisés au format Parquet.&lt;/p&gt;
&lt;p&gt;Le cache est piloté par le &lt;strong&gt;Cache Manager&lt;/strong&gt; de &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt;, géré automatiquement selon les usages observés.&lt;/p&gt;
&lt;p&gt;La gestion du cache reste indépendante des outils consommateurs.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les requêtes les plus coûteuses peuvent être accélérées sans modifier les systèmes sources.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sql-engine&#34;&gt;SQL Engine&lt;/h2&gt;
&lt;p&gt;&lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake}&lt;/strong&gt; s&amp;rsquo;appuie sur un moteur SQL columnar et in-memory.&lt;/p&gt;
&lt;p&gt;Les requêtes générées par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; sont exécutées par ce moteur ou propagées vers les systèmes sources selon le contexte.&lt;/p&gt;
&lt;p&gt;Le SQL reste portable, standard et exécutable sur différents moteurs, indépendant des technologies de stockage utilisées — ce qui limite le lock-in technologique.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; le moteur SQL constitue la couche d&amp;rsquo;exécution de l&amp;rsquo;architecture.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;sécurité&#34;&gt;Sécurité&lt;/h2&gt;
&lt;p&gt;La sécurité est gérée au niveau de la couche sémantique.&lt;/p&gt;
&lt;p&gt;Les restrictions d&amp;rsquo;accès, profils utilisateurs, catalogues métier et filtres de sécurité sont appliqués avant génération des requêtes.&lt;/p&gt;
&lt;p&gt;Cette approche permet de reproduire les mécanismes de sécurité rencontrés dans des plateformes telles que SAP BusinessObjects ou IBM Cognos.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; les règles de sécurité sont définies une seule fois puis appliquées à tous les outils connectés.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;restitution&#34;&gt;Restitution&lt;/h2&gt;
&lt;p&gt;Les catalogues exposés par &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; peuvent être consommés par tout outil capable d&amp;rsquo;interroger une source PostgreSQL.&lt;/p&gt;
&lt;p&gt;Power BI, Looker, Spotfire, Tableau, Qlik ou d&amp;rsquo;autres plateformes accèdent aux mêmes objets métier, dimensions, mesures et KPI.&lt;/p&gt;
&lt;p&gt;Les définitions fonctionnelles restent identiques quel que soit l&amp;rsquo;outil utilisé.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Résultat :&lt;/strong&gt; plusieurs plateformes peuvent partager le même catalogue métier sans duplication des règles de calcul.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;h2 id=&#34;gouvernance&#34;&gt;Gouvernance&lt;/h2&gt;
&lt;p&gt;Les objets métier, KPI, dimensions, mesures et règles de calcul sont centralisés dans un référentiel unique.&lt;/p&gt;
&lt;p&gt;Les évolutions fonctionnelles sont réalisées dans &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; puis immédiatement disponibles pour les outils connectés.&lt;/p&gt;



  
  &lt;blockquote class=&#34;border-l-4 border-neutral-300 dark:border-neutral-600 pl-4 italic text-neutral-600 dark:text-neutral-400 my-6&#34;&gt;
    &lt;p&gt;&lt;strong&gt;Point clé :&lt;/strong&gt; &lt;strong style=&#34;color:#C00000;&#34;&gt;{oa-lake-ctx}&lt;/strong&gt; constitue le point central de définition des objets métier et des KPI.&lt;/p&gt;

  &lt;/blockquote&gt;

&lt;script&gt;
(function () {
  // Masque la date &#34;Last updated on&#34; et le bloc Auteur sur les pages
  // Ressources : ce ne sont pas des articles de blog (pas de date/signature).
  function hide() {
    document.querySelectorAll(&#34;time.mt-12.mb-8&#34;).forEach(function (el) {
      el.style.display = &#34;none&#34;;
    });
    document.querySelectorAll(&#34;div.flex.pt-12.pb-4&#34;).forEach(function (el) {
      if (el.querySelector(&#39;img[src*=&#34;/media/authors/&#34;]&#39;)) {
        el.style.display = &#34;none&#34;;
      }
    });
    // Filet de sécurité supplémentaire : masque aussi la ligne de partage
    // social et tout conteneur lié à la fiche auteur, par correspondance
    // sémantique plutôt que par nom de classe (plus robuste aux mises à jour
    // du thème).
    var shareHrefPatterns = [
      &#34;twitter.com/intent&#34;, &#34;x.com/intent&#34;, &#34;facebook.com/sharer&#34;,
      &#34;linkedin.com/sharing&#34;, &#34;wa.me/&#34;, &#34;api.whatsapp.com&#34;, &#34;mailto:?&#34;
    ];
    document.querySelectorAll(&#34;a[href]&#34;).forEach(function (a) {
      var href = a.getAttribute(&#34;href&#34;) || &#34;&#34;;
      if (shareHrefPatterns.some(function (p) { return href.indexOf(p) !== -1; })) {
        a.style.display = &#34;none&#34;;
      }
    });
    document.querySelectorAll(&#39;a[href=&#34;http://localhost:1313/authors/me/&#34;]&#39;).forEach(function (a) {
      var el = a.closest(&#34;div.flex&#34;) || a.parentElement;
      if (el) el.style.display = &#34;none&#34;;
    });
  }
  document.addEventListener(&#34;DOMContentLoaded&#34;, hide);
})();
&lt;/script&gt;
</description>
    </item>
    
  </channel>
</rss>
