<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>
<title>The Blog — Seven Mile</title><link>https://sevenmile.tech/blog</link>
<description>What we build, learn and think about AI inside real companies. Articles, TILs and annotated reads from the practitioners at Seven Mile.</description>
<atom:link href="https://sevenmile.tech/blog/feed.xml" rel="self" type="application/rss+xml" />
<item><title>Slack CLI : configurer une app Slack sans passer par l’interface</title>
<link>https://sevenmile.tech/blog/slack-cli-sans-clickops</link><guid isPermaLink="true">https://sevenmile.tech/blog/slack-cli-sans-clickops</guid>
<pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;J’étais en train de créer un bot Slack, et le travail s’est arrêté sur des étapes manuelles. Du clic-bouton, et des fois il faut fouiller dans toutes les configs Slack pour retrouver le bon réglage. C’est ce que je déteste le plus faire, et c’était la seule partie que je ne pouvais pas passer à mon harness. Alors je me suis dit : est-ce qu’il n’existe pas, par hasard, une CLI Slack ? Patatra, elle existe, et elle est top.&lt;/p&gt;
&lt;p&gt;Une fois l’authentification faite, les manipulations qui vivaient dans l’interface deviennent des commandes : installer l’app, lire et valider son manifeste, ouvrir ses réglages.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;slack login
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ce qui suit vient de &lt;code&gt;slack help&lt;/code&gt;, avec &lt;code&gt;slack v4.7.0&lt;/code&gt;, observé le 8 septembre 2026 :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;app
  install    Install the app to a team
  settings   Open app settings for configurations
manifest
  diff       Show differences between the project manifest
             and app settings
  validate   Validate the app manifest generated by a project
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;Après le &lt;code&gt;slack login&lt;/code&gt;, je n’exécute plus ces commandes moi-même : je dis à Claude Code d’utiliser la CLI.&lt;/strong&gt; Je décris ce que l’app doit être, le harness passe par la CLI, et il n’y a plus grand chose de manuel dans la création d’un bot Slack ou dans les réglages qui demandaient du clickops avant.&lt;/p&gt;
</description>
<category>Slack</category><category>Claude Code</category></item>
<item><title>From raw data to usable knowledge, and the metadata in between</title>
<link>https://sevenmile.tech/blog/what-is-knowledge</link><guid isPermaLink="true">https://sevenmile.tech/blog/what-is-knowledge</guid>
<pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;Knowledge is of no value unless you put it into practice. — Anton Chekhov&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In college, I took a course called &lt;strong&gt;IF15: Knowledge Engineering&lt;/strong&gt;. That&#39;s when I heard the word &lt;em&gt;ontology&lt;/em&gt; for the first time in my life. It would pop up occasionally in papers and articles I read, but I never took the time to dig deeper–I never felt the need, the necessity.&lt;/p&gt;
&lt;p&gt;This term has come back in force over the past few months with the GenAI boom, and especially with the realization that classic RAG is failing and the rise of an alternative–or rather, a &lt;em&gt;helper&lt;/em&gt;–&lt;strong&gt;GraphRAG&lt;/strong&gt;. GraphRAG relies on the notion of Knowledge Graphs, which is deeply connected to the concepts of Ontologies.&lt;/p&gt;
&lt;p&gt;Originally, this article was just going to be an introduction to ontologies. Then I realized how irrelevant it would be to stay narrowly scoped on that single concept. So I reoriented the article toward &lt;strong&gt;knowledge&lt;/strong&gt; in general–the broader picture.&lt;/p&gt;
&lt;p&gt;The thread running through this article: &lt;strong&gt;how do we structure what we know so that both machines and humans can understand it?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This subject comes in four parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;From raw data to usable knowledge, and the metadata in between&lt;/strong&gt; (this post)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sevenmile.tech/blog/how-to-model-knowledge&quot;&gt;Six ways to structure knowledge, from a list to a knowledge graph&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sevenmile.tech/blog/why-and-for-whom-model-knowledge&quot;&gt;Modelling knowledge for humans and for agents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://sevenmile.tech/blog/why-does-this-matter-now&quot;&gt;Why classic RAG retrieves text instead of knowledge&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/knowledge-from-if15.png&quot; alt=&quot;Knowledge definition from the IF15 course&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Knowledge Definition from my IF15 course&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-triptych-data-information-knowledge&quot;&gt;The Triptych: Data → Information → Knowledge&lt;/h2&gt;&lt;p&gt;Before talking about how to model knowledge, let&#39;s define what it is.&lt;/p&gt;
&lt;p&gt;We generally distinguish three levels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;: Raw facts, without context. &lt;code&gt;42&lt;/code&gt;, &lt;code&gt;&quot;Paris&quot;&lt;/code&gt;, &lt;code&gt;2024-01-15&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Information&lt;/strong&gt;: Contextualized data. &lt;em&gt;&quot;The customer ordered 42 units in Paris on January 15, 2024.&quot;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Knowledge&lt;/strong&gt;: Information usable for action or decision-making. &lt;em&gt;&quot;Paris orders increase in January–we need to anticipate stock levels.&quot;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Knowledge is therefore &lt;strong&gt;information used in a given context&lt;/strong&gt; to solve a problem or make a decision (thanks to my UTT course).&lt;/p&gt;
&lt;h2 id=&quot;knowledge-engineering&quot;&gt;Knowledge Engineering&lt;/h2&gt;&lt;p&gt;My IF15 course defined knowledge engineering as:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An approach that collects and structures reasoning. Its objective is to formalize problem-solving—the approach followed by one or more experts to solve a problem.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In other words: &lt;strong&gt;externalize the knowledge&lt;/strong&gt; produced &lt;em&gt;&quot;in&quot;&lt;/em&gt; and &lt;em&gt;&quot;for&quot;&lt;/em&gt; a domain, and make it exploitable.&lt;/p&gt;
&lt;p&gt;At the time, I found it very theoretical, almost boring. Today, with agents that need to &quot;understand&quot; our data to generate SQL queries or answer business questions, this discipline makes complete sense.&lt;/p&gt;
&lt;h2 id=&quot;the-two-faces-of-metadata&quot;&gt;The Two Faces of Metadata&lt;/h2&gt;&lt;p&gt;When we talk about knowledge in enterprises, we&#39;re essentially talking about &lt;strong&gt;metadata&lt;/strong&gt;–data about our data. This metadata divides into two fundamental categories:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/metadata-two-faces.png&quot; alt=&quot;Metadata Two Faces&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Metadata Two Faces&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&quot;domain-knowledge-business-knowledge&quot;&gt;Domain Knowledge (Business Knowledge)&lt;/h3&gt;&lt;p&gt;This is what the &lt;strong&gt;business knows&lt;/strong&gt; about its domain:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Business concepts and jargon&lt;/strong&gt;: What is &quot;churn&quot;? &quot;MRR&quot;? A &quot;qualified lead&quot;?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Glossaries and definitions&lt;/strong&gt;: How do we calculate revenue? Gross or net?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Acronyms and synonyms&lt;/strong&gt;: WC = World Cup, ARR = Annual Recurring Revenue, CMR = Cameroon&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;structural-knowledge-technical-knowledge&quot;&gt;Structural Knowledge (Technical Knowledge)&lt;/h3&gt;&lt;p&gt;This is what the &lt;strong&gt;data knows&lt;/strong&gt; about itself:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Relationships between elements&lt;/strong&gt;: Which tables can be joined? On which keys?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dependencies&lt;/strong&gt;: If I modify this column, what breaks?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lineage&lt;/strong&gt;: Where does this data come from? What transformations has it undergone?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These two types of knowledge are complementary. Domain knowledge says &lt;em&gt;&quot;the business talks about revenue&quot;&lt;/em&gt;, structural knowledge says &lt;em&gt;&quot;revenue is in &lt;code&gt;fact_sales.amount&lt;/code&gt;&quot;&lt;/em&gt;. Without the mapping between the two, it&#39;s impossible to translate a business question into a technical query.&lt;/p&gt;
&lt;h2 id=&quot;garbage-in-garbage-out&quot;&gt;Garbage In, Garbage Out&lt;/h2&gt;&lt;p&gt;We all know this principle in Machine Learning: if your training data is bad, your model will be bad.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;This principle applies exactly to GenAI and Agents&lt;/strong&gt;, but with an important nuance: for GenAI, the &quot;garbage&quot; we&#39;re talking about is primarily the &lt;strong&gt;metadata&lt;/strong&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When you want to do a text-to-SQL project for example, the heart lies in the metadata—the description of the data you have in your possession.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Very often, companies rush directly into the AI layer, GenAI–either to follow the trend or because they think that&#39;s where the difficulty lies. &lt;strong&gt;But not at all.&lt;/strong&gt; The difficulty is upstream: in the quality and completeness of metadata (and obviously data, but this is normally already well known...).&lt;/p&gt;
&lt;p&gt;Investing heavily in sophisticated models without investing in metadata is building a house on sand.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Next: &lt;a href=&quot;https://sevenmile.tech/blog/how-to-model-knowledge&quot;&gt;Six ways to structure knowledge, from a list to a knowledge graph&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
<category>Knowledge Graph</category><category>Shared Brain</category></item>
<item><title>GitLab Stacked Merge Requests : empiler les merge requests plutôt que gonfler la même</title>
<link>https://sevenmile.tech/blog/gitlab-merge-requests-empilees</link><guid isPermaLink="true">https://sevenmile.tech/blog/gitlab-merge-requests-empilees</guid>
<pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;Je viens de découvrir les &lt;em&gt;stacked merge requests&lt;/em&gt; de GitLab (thks Claude Code 😂)&lt;/p&gt;
&lt;h2 id=&quot;le-probleme&quot;&gt;Le problème&lt;/h2&gt;&lt;p&gt;Quand un travail avance vite – et il avance vite avec Claude Code – on a envie de faire plusieurs changements liés d’un coup. Ils finissent dans la même branche, et la MR arrive en revue avec des centaines de lignes qui mélangent trois ou quatre sujets. Personne ne relit ça sérieusement.&lt;/p&gt;
&lt;h2 id=&quot;ce-que-fait-une-pile&quot;&gt;Ce que fait une pile&lt;/h2&gt;&lt;p&gt;Au lieu d’une branche, on en ouvre plusieurs, presque unitaires, une par périmètre. Chaque MR cible non pas la branche par défaut mais &lt;strong&gt;la branche de la MR précédente&lt;/strong&gt;. Seule celle du bas cible &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Sur un travail récent, ça donne quatre MR, du bas vers le haut :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;feat(stages)&lt;/code&gt; – l’étape d’entrée &lt;code&gt;e0_prequalification&lt;/code&gt; et ses notes de préqualification, vers &lt;code&gt;main&lt;/code&gt; ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat(candidates)&lt;/code&gt; – le &lt;em&gt;owner&lt;/em&gt;, le membre du roster qui suit une candidature ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat(events)&lt;/code&gt; – l’annonce des mouvements d’entretien sur le bus ;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feat(slack)&lt;/code&gt; – la notification Slack au owner quand une candidature bouge.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;GitLab affiche la pile dans l’en-tête de chaque MR (&lt;em&gt;1 of 4&lt;/em&gt;) et rappelle la règle : le bas de la pile fusionne dans &lt;code&gt;main&lt;/code&gt; en premier.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/gitlab-merge-requests-empilees.png&quot; alt=&quot;Le sélecteur « 1 of 4 » ouvert dans l’en-tête d’une merge request GitLab : les quatre MR de la pile, de la notification Slack en haut à l’étape de préqualification en bas, et le rappel « Bottom of stack merges into main first ».&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;ce-que-ca-change-a-la-revue&quot;&gt;Ce que ça change à la revue&lt;/h2&gt;&lt;p&gt;C’est là que la mécanique devient intéressante. Sans la pile, la quatrième MR aurait montré l’écart entre sa branche et &lt;code&gt;main&lt;/code&gt; : tout le travail, quatre sujets empilés dans un seul diff. Avec la pile, elle ne montre que l’écart avec la branche juste en dessous – c’est-à-dire uniquement ce qu’elle ajoute.&lt;/p&gt;
&lt;p&gt;Chaque MR répond donc à une seule question : qu’est-ce que cette étape apporte à la précédente ? Et la pile porte un ordre de lecture : on relit la première, on la fusionne, on passe à la suivante, qui vient poser sa couche par-dessus.&lt;/p&gt;
&lt;p&gt;Un travail global reste condensé en un groupe de MR, mais chacune redevient relisable.&lt;/p&gt;
</description>
<category>GitLab</category><category>Code review</category></item>
<item><title>Six ways to structure knowledge, from a list to a knowledge graph</title>
<link>https://sevenmile.tech/blog/how-to-model-knowledge</link><guid isPermaLink="true">https://sevenmile.tech/blog/how-to-model-knowledge</guid>
<pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;&lt;em&gt;Part 2 of 4. The series starts with &lt;a href=&quot;https://sevenmile.tech/blog/what-is-knowledge&quot;&gt;From raw data to usable knowledge, and the metadata in between&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;There are several ways to structure knowledge, with different levels of sophistication. These are called &lt;strong&gt;Knowledge Management Structures&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The choice depends on the use case, the scale, and especially who will consume this knowledge.
They can obviously be combined depending on the use cases.&lt;/p&gt;
&lt;h2 id=&quot;list-controlled-vocabulary&quot;&gt;List (Controlled Vocabulary)&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/list-structure.png&quot; alt=&quot;List Structure&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;List Structure: Simple enumeration without relationships&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The most basic form of structuring.&lt;/p&gt;
&lt;p&gt;It is a simple enumeration of possible values, with no relationships between them.&lt;/p&gt;
&lt;p&gt;It is a flat, non-hierarchical structure, with no semantics beyond belonging to the list.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: list of countries: France, Germany, Spain..., list of genders: Male, Female, Non-binary, list of order statuses: Pending, Shipped, Delivered, Cancelled&lt;/p&gt;
&lt;p&gt;This is useful for constraining values, but captures no relationships or meaning.&lt;/p&gt;
&lt;h2 id=&quot;taxonomy&quot;&gt;Taxonomy&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/taxonomy-structure.png&quot; alt=&quot;Taxonomy Structure&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Taxonomy Structure: Hierarchical IS-A relationships&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;We step up by introducing &lt;strong&gt;hierarchy&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;A Taxonomy is roughly a hierarchical classification based on parent-child relationships: &lt;strong&gt;Single relationship&lt;/strong&gt;: &lt;strong&gt;IS-A&lt;/strong&gt;.
Taxonomies are tree-like, from general to specific.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;: A car &lt;strong&gt;IS-A&lt;/strong&gt; vehicle, An SUV &lt;strong&gt;IS-A&lt;/strong&gt; car, An SUV &lt;strong&gt;IS-A&lt;/strong&gt; vehicle (by transitivity)&lt;/p&gt;
&lt;p&gt;What is great here, is the introduction of conceptual hierarchy. You can navigate from general to particular and vice versa,
Although, only one relationship possible. You can&#39;t say that a car &lt;em&gt;belongs to&lt;/em&gt; someone or &lt;em&gt;is manufactured by&lt;/em&gt; a brand...&lt;/p&gt;
&lt;h2 id=&quot;thesaurus&quot;&gt;Thesaurus&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/thesaurus-structure.png&quot; alt=&quot;Thesaurus Structure&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Thesaurus Structure: IS-A + Synonyms + Related-To&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The thesaurus enriches taxonomy with &lt;strong&gt;synonymy&lt;/strong&gt; and &lt;strong&gt;generic relationships&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They are taxonomies augmented with equivalence and association links.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Relationships&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IS-A&lt;/strong&gt; (inherited from taxonomy)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SYNONYM-OF&lt;/strong&gt;: Car ↔ Automobile ↔ Auto&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RELATED-TO&lt;/strong&gt;: Car ↔ Road, Car ↔ Driver&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, they help handling linguistic ambiguity. When a user searches for &quot;auto&quot;, we also find &quot;car&quot;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Typical usage&lt;/strong&gt;: Search engines, indexing systems, navigation aids.&lt;/p&gt;
&lt;h2 id=&quot;semantic-layer&quot;&gt;Semantic Layer&lt;/h2&gt;&lt;p&gt;The semantic layer is a related concept that has had a lot of influence in the data ecosystem, with tools like DataHub, dbt Semantic Layer, or Tableau/PowerBI data models.&lt;/p&gt;
&lt;p&gt;They are pre-calculated logical views on data, defining business metrics and concepts. So, they are, by-design, &lt;strong&gt;Hard-coded&lt;/strong&gt; and &lt;strong&gt;static&lt;/strong&gt; information. They are often &lt;strong&gt;scoped to a tool&lt;/strong&gt; (Tableau, PowerBI, dbt) and more like &lt;em&gt;&quot;Semantic Views&quot;&lt;/em&gt; than true semantics&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Concrete example&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-yaml&quot;&gt;metrics:
  - name: revenue
    description: &#39;Total revenue from completed orders&#39;
    type: sum
    sql: amount
    filters:
      - status = &#39;completed&#39;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Despite their theoretical importance, semantic layers remain &lt;strong&gt;marginal&lt;/strong&gt; with clients. Very few companies actually have a mature semantic layer. And when it exists, it&#39;s often limited to a specific tool.&lt;/p&gt;
&lt;p&gt;The semantic layer &lt;strong&gt;references&lt;/strong&gt; recurring information but doesn&#39;t allow &lt;strong&gt;generating&lt;/strong&gt; new knowledge. It&#39;s static–you define &quot;revenue,&quot; but you can&#39;t dynamically ask &lt;em&gt;&quot;which metrics are related to revenue?&quot;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;ontology&quot;&gt;Ontology&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/ontology-structure.png&quot; alt=&quot;Ontology Structure&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ontology Structure: Rich relationships, classes, instances, axioms&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ontology is the major qualitative leap. We move from &lt;strong&gt;static to dynamic&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They are formal structures allowing rich, typed, and semantic relationships, unlimited and explicit (MARRIED-TO, WORKS-FOR, MANUFACTURED-BY, LOCATED-IN, PURCHASED,...).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Classes&lt;/strong&gt;: Abstract concepts (Person, Product, Company)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subclasses&lt;/strong&gt;: Specializations (Employee IS-A Person)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instances&lt;/strong&gt;: Concrete entities representing real facts (John Smith, iPhone 15)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Axioms&lt;/strong&gt;: Rules and constraints (&lt;em&gt;&quot;An employee can only work for one company at a time&quot;&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Properties&lt;/strong&gt;: Attributes of classes (Person has an age, a name...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are many standards out there: RDF, OWL, SPARQL, we used 3 of them at UTT, lol, and we worked with a tool named &lt;a href=&quot;https://protege.stanford.edu/&quot;&gt;Protégé&lt;/a&gt; (read it in french please)&lt;/p&gt;
&lt;p&gt;The ontology is by-design &lt;strong&gt;traversable&lt;/strong&gt;. You can query it to &lt;strong&gt;infer&lt;/strong&gt; new information that wasn&#39;t explicitly declared.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;: If John WORKS-FOR Acme, and Acme LOCATED-IN Paris, then we can infer that John works in Paris–even if this fact isn&#39;t directly stored.&lt;/p&gt;
&lt;h2 id=&quot;knowledge-graph&quot;&gt;Knowledge Graph&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/knowledge-graph-structure.png&quot; alt=&quot;Knowledge Graph Structure&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Knowledge Graph: Instantiated and traversable ontology&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The Knowledge Graph is mainly, in my current understanding, the &lt;strong&gt;concrete implementation&lt;/strong&gt; of an ontology.&lt;/p&gt;
&lt;p&gt;A graph of structured data where entities (Nodes) are connected by typed relationships (Edges). Simple, Basique.&lt;/p&gt;
&lt;p&gt;Nodes are entities (people, products, concepts...) and Edges are labeled and directional relationships&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Next: &lt;a href=&quot;https://sevenmile.tech/blog/why-and-for-whom-model-knowledge&quot;&gt;Modelling knowledge for humans and for agents&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
<category>Knowledge Graph</category><category>Ontology</category></item>
<item><title>Le savoir ne grandit que s’il circule.</title>
<link>https://sevenmile.tech/blog/le-savoir-circule</link><guid isPermaLink="true">https://sevenmile.tech/blog/le-savoir-circule</guid>
<pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By Dom, PA, Reyan and Stano&lt;/p&gt;&lt;p&gt;Nous ouvrons ce blog avec une conviction : pour profiter durablement de l’IA, une entreprise doit faire circuler son savoir et le rendre utilisable par les personnes et les agents.&lt;/p&gt;
&lt;p&gt;Ce carnet est une manière de commencer. Un apprentissage fait par une personne devient une ressource que d’autres peuvent comprendre, réutiliser et discuter.&lt;/p&gt;
&lt;h2 id=&quot;l-ia-en-conditions-reelles&quot;&gt;L’IA en conditions réelles&lt;/h2&gt;&lt;p&gt;Nous écrivons pour les ingénieurs qui cherchent à comprendre les évolutions de l’IA et à les mettre en pratique dans leur entreprise. Ceux qui se demandent quelle stack choisir, comment faire évoluer leur cycle de développement, comment maîtriser les coûts ou comment transmettre une méthode à leur équipe.&lt;/p&gt;
&lt;p&gt;Notre point de départ, ce sont ces questions. AWS, Claude Code, les agents et le context engineering sont des terrains d’exploration. Nous voulons situer nos conseils : une équipe, ses moyens, son système existant, ses contraintes.&lt;/p&gt;
&lt;h2 id=&quot;des-convictions-qui-peuvent-evoluer&quot;&gt;Des convictions qui peuvent évoluer&lt;/h2&gt;&lt;p&gt;Le Shared Brain est un fil conducteur de notre réflexion : comment rendre les connaissances, l’histoire des projets et les méthodes de travail accessibles et utiles au collectif ?&lt;/p&gt;
&lt;p&gt;Nous le considérons comme une capacité essentielle pour tirer parti de l’IA. C’est une conviction que nous voulons mettre à l’épreuve, en explorant aussi les usages, l’évaluation, les coûts et l’organisation du travail.&lt;/p&gt;
&lt;p&gt;Nous préciserons d’où nous parlons. Une conviction s’appuie sur un raisonnement. Une exploration laisse des questions ouvertes. Un retour d’expérience décrit un contexte, des résultats et des limites.&lt;/p&gt;
&lt;h2 id=&quot;une-decouverte-merite-aussi-sa-place&quot;&gt;Une découverte mérite aussi sa place&lt;/h2&gt;&lt;p&gt;Vous trouverez ici trois formes de publication :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://sevenmile.tech/blog?format=article&quot;&gt;Des articles&lt;/a&gt;&lt;/strong&gt; pour développer une implémentation, une méthode ou un point de vue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://sevenmile.tech/blog?format=til&quot;&gt;Des TIL&lt;/a&gt;&lt;/strong&gt; pour partager une découverte, même petite, même évidente pour quelqu’un d’autre.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://sevenmile.tech/blog?format=link&quot;&gt;Des liens commentés (Quotes)&lt;/a&gt;&lt;/strong&gt; pour faire circuler une lecture et expliquer pourquoi elle nous intéresse.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La longueur dépend de ce qu’il faut pour transmettre l’idée. Une note utile vaut la peine d’être publiée.&lt;/p&gt;
&lt;h2 id=&quot;des-voix-individuelles-un-apprentissage-collectif&quot;&gt;Des voix individuelles, un apprentissage collectif&lt;/h2&gt;&lt;p&gt;Chaque auteur conserve sa voix, sa langue et son jugement. Un consultant peut discuter une conviction de Seven Mile, proposer une autre approche ou changer d’avis.&lt;/p&gt;
&lt;p&gt;Notre exigence commune : partager quelque chose d’utile, préciser ses limites et donner du crédit aux personnes dont nous apprenons.&lt;/p&gt;
&lt;p&gt;Bienvenue dans notre carnet.&lt;/p&gt;
</description>
<category>Shared Brain</category><category>Culture engineering</category></item>
<item><title>Modelling knowledge for humans and for agents</title>
<link>https://sevenmile.tech/blog/why-and-for-whom-model-knowledge</link><guid isPermaLink="true">https://sevenmile.tech/blog/why-and-for-whom-model-knowledge</guid>
<pubDate>Sun, 06 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;&lt;em&gt;Part 3 of 4. The series starts with &lt;a href=&quot;https://sevenmile.tech/blog/what-is-knowledge&quot;&gt;From raw data to usable knowledge, and the metadata in between&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Structured knowledge has three types of consumers, each with specific needs.&lt;/p&gt;
&lt;h2 id=&quot;for-humans&quot;&gt;For Humans&lt;/h2&gt;&lt;p&gt;For humans, structured knowledge is invaluable across roles: data analysts, analytics engineers, and data scientists benefit first, gaining the context to interpret fields like &lt;code&gt;status_cd&lt;/code&gt;, understanding how tables can be joined, and correctly discerning whether a negative &lt;code&gt;amount&lt;/code&gt; signals a refund or an error–in the absence of clear documentation, newcomers are forced to relearn what was already known. Stakeholders and business users rely on a common language to avoid ambiguity: a shared glossary ensures that everyone understands terms like &quot;churn&quot; and calculates KPIs, such as &quot;revenue,&quot; using consistent logic, while enabling cross-team communication so that Marketing and Finance speak the same language. Operational and data engineers, along with new team members, need living documentation to grasp data processes, accelerating onboarding so that the information system becomes navigable in days rather than months, and facilitating traceability and audit by making it clear where numbers come from and how calculations happen.&lt;/p&gt;
&lt;h2 id=&quot;agents&quot;&gt;Agents&lt;/h2&gt;&lt;p&gt;This is where it gets really interesting.
Let&#39;s directly take the really common Text-to-insights agent use case.&lt;/p&gt;
&lt;h3 id=&quot;the-text-to-insights-challenge&quot;&gt;The Text-to-insights Challenge&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;Everyone wants to chat with their data, but everyone is not ready to do what is necessary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Whether the data is in a Data Lake, a Data Warehouse, a simple relational database, the problem is the same: &lt;strong&gt;translating a business question into a technical query&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;To achieve this, the agent must be able to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Map business concepts&lt;/strong&gt; → &lt;em&gt;&quot;revenue&quot;&lt;/em&gt; corresponds to which column?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Understand values&lt;/strong&gt; → &lt;em&gt;&quot;World Cup&quot;&lt;/em&gt; is the code &lt;code&gt;WC&lt;/code&gt; or &lt;code&gt;WORLD_CUP&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Know the joins&lt;/strong&gt; → How do you link &lt;code&gt;customers&lt;/code&gt; to &lt;code&gt;orders&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respect business rules&lt;/strong&gt; → Is revenue calculated before or after tax?&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&quot;what-agents-need&quot;&gt;What Agents Need&lt;/h3&gt;&lt;p&gt;Concretely, a performant Text-to-insights agent needs:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Glossary&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Concept → technical mapping&lt;/td&gt;
&lt;td&gt;&quot;revenue&quot; = &lt;code&gt;SUM(orders.amount)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Enriched schema&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tables + columns + descriptions&lt;/td&gt;
&lt;td&gt;&lt;code&gt;status_cd&lt;/code&gt;: Status code (A=Active, I=Inactive)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Joins&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Relationships between tables&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orders.customer_id&lt;/code&gt; → &lt;code&gt;customers.id&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Validated examples&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Question/SQL pairs&lt;/td&gt;
&lt;td&gt;&quot;Top 10 customers&quot; → &lt;code&gt;SELECT...&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Business rules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Constraints and calculations&lt;/td&gt;
&lt;td&gt;Revenue = amount before tax, excluding cancellations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3 id=&quot;the-measured-impact&quot;&gt;The Measured Impact&lt;/h3&gt;&lt;p&gt;This isn&#39;t theory. Research (notably from LinkedIn and Snowflake on Cortex) has &lt;strong&gt;quantified&lt;/strong&gt; the impact of metadata on the quality of generated queries.&lt;/p&gt;
&lt;p&gt;The difference between an agent that hallucinates non-existent columns and an agent that produces correct queries? &lt;strong&gt;The quality of metadata provided in context.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id=&quot;where-to-start&quot;&gt;Where to Start?&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start small&lt;/strong&gt;: A CSV file with a glossary of business terms&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document key tables&lt;/strong&gt;: The most queried ones first&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Describe columns&lt;/strong&gt;: Possible values, meaning, usage patterns&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Map joins&lt;/strong&gt;: Relationships between main tables&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Collect examples&lt;/strong&gt;: Question/SQL pairs validated by humans&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Perfection is not required. Progress is.&lt;/p&gt;
&lt;p&gt;This metadata can be &lt;strong&gt;AI-assisted&lt;/strong&gt;: take samples from your tables, pass them to an LLM to generate descriptions, then manually validate and adjust. It&#39;s tedious work, but it&#39;s the work that makes the difference between a POC that impresses and an agent that delivers value in production.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Next: &lt;a href=&quot;https://sevenmile.tech/blog/why-does-this-matter-now&quot;&gt;Why classic RAG retrieves text instead of knowledge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
<category>Knowledge Graph</category><category>Agents</category></item>
<item><title>Why classic RAG retrieves text instead of knowledge</title>
<link>https://sevenmile.tech/blog/why-does-this-matter-now</link><guid isPermaLink="true">https://sevenmile.tech/blog/why-does-this-matter-now</guid>
<pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;&lt;em&gt;Part 4 of 4. The series starts with &lt;a href=&quot;https://sevenmile.tech/blog/what-is-knowledge&quot;&gt;From raw data to usable knowledge, and the metadata in between&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;the-return-of-knowledge-engineering&quot;&gt;The Return of Knowledge Engineering&lt;/h2&gt;&lt;p&gt;The term &quot;ontology&quot; has been experiencing a resurgence over the past year. This is no coincidence: it&#39;s directly correlated with the rise of GenAI.&lt;/p&gt;
&lt;p&gt;The first peak of interest in ontologies was correlated with the big data boom, the second one with the GenAI one.&lt;/p&gt;
&lt;p&gt;It reminds me of my university courses, courses I found sometimes boring. Those courses are getting their revenge.&lt;/p&gt;
&lt;h2 id=&quot;the-failure-of-classic-rag&quot;&gt;The Failure of Classic RAG&lt;/h2&gt;&lt;p&gt;Classic RAG (Retrieval-Augmented Generation) works like this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Split documents into chunks&lt;/li&gt;
&lt;li&gt;Vectorize these chunks&lt;/li&gt;
&lt;li&gt;Retrieve chunks similar to the question&lt;/li&gt;
&lt;li&gt;Inject them into the LLM prompt&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;We inject &lt;strong&gt;raw context&lt;/strong&gt;–pieces of text without structure. It&#39;s sufficient for simple factual questions (&lt;em&gt;&quot;What is the refund policy?&quot;&lt;/em&gt;), but insufficient for complex reasoning (&lt;em&gt;&quot;Which customers are at risk of churning next month?&quot;&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Classic RAG is a &lt;strong&gt;Raw Context Retriever&lt;/strong&gt;. It retrieves text, not knowledge.&lt;/p&gt;
&lt;h2 id=&quot;from-retrieval-to-reasoning&quot;&gt;From Retrieval to Reasoning&lt;/h2&gt;&lt;p&gt;&lt;img src=&quot;https://sevenmile.tech/blog/knowledge-ontology/rag-evolution.png&quot; alt=&quot;RAG Evolution&quot; loading=&quot;lazy&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;RAG Evolution: From Retrieval to Reasoning&lt;/em&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;RAG Today&lt;/th&gt;
&lt;th&gt;RAG Tomorrow&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Full name&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Retrieval Augmented Generation&lt;/td&gt;
&lt;td&gt;Reasoning Augmented Generation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Input&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Raw text chunks&lt;/td&gt;
&lt;td&gt;Structured knowledge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Method&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vector similarity&lt;/td&gt;
&lt;td&gt;Vector similarity + Graph traversal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Capability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Finding facts&lt;/td&gt;
&lt;td&gt;Inferring insights&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;blockquote&gt;
&lt;p&gt;Raw context is interesting for facts, but it&#39;s even more impactful to be able to reason over existing knowledge in a domain.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is where Knowledge Graphs and ontologies come into play. They allow agents to &lt;strong&gt;Navigate&lt;/strong&gt; through knowledge (not just retrieve it), &lt;strong&gt;Infer&lt;/strong&gt; non-explicit facts, &lt;strong&gt;Reason&lt;/strong&gt; about relationships between concepts.&lt;/p&gt;
&lt;h2 id=&quot;the-evidence-for-enterprises&quot;&gt;The Evidence for Enterprises&lt;/h2&gt;&lt;p&gt;It has become obvious that agents need a &lt;strong&gt;structured&lt;/strong&gt; way to understand reasoning processes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Investing in the AI layer without investing in metadata = predictable failure&lt;/li&gt;
&lt;li&gt;Output quality is determined by input quality (garbage in, garbage out)&lt;/li&gt;
&lt;li&gt;Knowledge Management is no longer a nice-to-have, it&#39;s a prerequisite&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The good news&lt;/strong&gt;: &lt;a href=&quot;https://sevenmile.tech/blog/why-and-for-whom-model-knowledge#where-to-start&quot;&gt;You don&#39;t need to do everything at once.&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Ontology is not (only) a dusty academic concept. It&#39;s the foundation on which tomorrow&#39;s agents will be able to reason–not just retrieve text.&lt;/p&gt;
&lt;p&gt;Classic RAG has shown its limits. GraphRAG and Knowledge Graph-based approaches point toward the future: systems that &lt;strong&gt;understand&lt;/strong&gt; the structure of knowledge, not just its textual content.&lt;/p&gt;
&lt;p&gt;For enterprises, the message is clear: before investing in the latest trendy use cases/tools, invest in your metadata. Document your tables. Define your concepts. Map your relationships.&lt;/p&gt;
&lt;p&gt;It&#39;s less sexy than a new tool, but it&#39;s what will make the difference between an agent that hallucinates and an agent that reasons.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;PA,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Previous: &lt;a href=&quot;https://sevenmile.tech/blog/why-and-for-whom-model-knowledge&quot;&gt;Modelling knowledge for humans and for agents&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</description>
<category>Knowledge Graph</category><category>RAG</category></item>
<item><title>Publier ce que l’on apprend, même quand c’est petit.</title>
<link>https://sevenmile.tech/blog/publier-ce-que-lon-apprend</link><guid isPermaLink="true">https://sevenmile.tech/blog/publier-ce-que-lon-apprend</guid>
<pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate>
<description>&lt;p&gt;By PA&lt;/p&gt;&lt;p&gt;Deux points de départ suffisent : écrire sur ce qu’on vient d’apprendre, raconter ce qu’on construit.&lt;/p&gt;
&lt;p&gt;Le format TIL nous parle particulièrement. Il annonce une découverte personnelle, sans promettre un tutoriel exhaustif ou une idée jamais publiée ailleurs. Même une notion simple peut mériter une note.&lt;/p&gt;
&lt;p&gt;Nous voulons reprendre cette liberté dans un blog collectif. Une personne apprend quelque chose, le signe et le partage. D’autres peuvent s’en servir, le compléter ou poser une question. C’est déjà une manière de faire circuler le savoir.&lt;/p&gt;
&lt;p&gt;Cette lecture a nourri notre décision d’accueillir les notes courtes à côté des articles plus développés.&lt;/p&gt;
</description>
<category>Writing</category><category>Knowledge sharing</category></item>
</channel></rss>