<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>The news feed of www.michelepasin.org</title><link>https://www.michelepasin.org/words/</link><description>Latest articles, blogs posts and news</description><atom:link href="https://www.michelepasin.org/feed.xml" rel="self"></atom:link><language>en-us</language><lastBuildDate>Fri, 06 Nov 2026 00:00:00 +0000</lastBuildDate><item><title>What does an LLM need to know about your data? Climbing the semantics ladder</title><link>https://www.michelepasin.org/blog/2026/11/06/semantics-ladder/</link><description>&lt;p&gt;Give an LLM a spreadsheet and ask it a question. How much better does it do if you also tell it what the data &lt;em&gt;means&lt;/em&gt;? And does it matter how you tell it: a Markdown glossary, an OWL ontology, a set of rules?&lt;/p&gt;
&lt;p&gt;I spent the last couple of weeks running experiments to find out. The short version: written-down meaning helps a lot, but only where the meaning is local to your data. The format it comes in barely matters to the model. It matters a great deal to the people who have to maintain it.&lt;/p&gt;
&lt;p&gt;Everything is on the &lt;a href="https://semantic-ladder.michelepasin.org/"&gt;Semantics ladder&lt;/a&gt; site: the data, the questions, the ontologies, every run and every answer.&lt;/p&gt;
&lt;h2&gt;Where this started&lt;/h2&gt;
&lt;p&gt;The trigger was Andrea Splendiani's article &lt;a href="https://www.linkedin.com/pulse/ontologies-ai-practice-part-i-andrea-splendiani-fpihe/"&gt;Ontologies for AI in practice / part I&lt;/a&gt;. He took a family-tree question and walked it up a ladder: raw data, then data plus definitions, then curated data, then rules, checking at each step what the LLM got right.&lt;/p&gt;
&lt;p&gt;His conclusions were clear: &lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Simple text definitions give the biggest bang for the buck, while minor data curation has little impact. Putting the data in RDF helps people understand it, by surfacing assumptions that mislead humans and LLMs alike. A well-curated knowledge graph doesn't necessarily change the answers, but it improves trust and consistency. And ontologies give LLMs an edge by telling them what things mean in a specific context.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I liked the idea a lot, and wanted to see whether it holds up with more questions, more repeats and a domain where the meanings are less obvious than "parent" and "sibling". So I built a small lab around it.&lt;/p&gt;
&lt;h2&gt;The set-up&lt;/h2&gt;
&lt;p&gt;Two invented domains, so that no model could answer from memory:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Credit ratings.&lt;/strong&gt; Companies, their debt instruments and rating actions, with the cryptic codes real extracts have (&lt;code&gt;LTIDR&lt;/code&gt;, &lt;code&gt;RWN&lt;/code&gt;, &lt;code&gt;WD&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Research analytics.&lt;/strong&gt; Works, authors, institutions and citations, shaped like &lt;a href="https://openalex.org/"&gt;OpenAlex&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each domain hides traps of the kind an analyst knows without saying. A rating holds until the next action, so the latest row isn't the answer for a past date. An outlook change isn't a downgrade. Two records with the same LEI are the same company. A preprint and its published version are one work. A record from the QA system is a test, not a real issuer.&lt;/p&gt;
&lt;p&gt;Some of these are general knowledge, which a good model has from training. Others are &lt;em&gt;local&lt;/em&gt;: rules this particular dataset sets for itself, which no model could guess. That distinction turned out to be the most important one.&lt;/p&gt;
&lt;p&gt;Each domain has about 48 questions, graded by code against keys computed from the data wherever possible. I asked them to Claude Sonnet and Haiku, five repeats each, under a ladder of conditions. The main ones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;csv&lt;/code&gt;:&lt;/strong&gt; the data only.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;rdf&lt;/code&gt;:&lt;/strong&gt; the same facts as RDF triples, with no ontology.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;csv+padding&lt;/code&gt;:&lt;/strong&gt; the data plus an unrelated glossary of the same length, on the same subject.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;csv+markdown&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;csv+ontology&lt;/code&gt;:&lt;/strong&gt; the data plus the definitions, as a Markdown glossary or as an ontology in Turtle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;csv+axioms&lt;/code&gt;:&lt;/strong&gt; the data plus OWL and SHACL axioms, with all the prose removed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;executed&lt;/code&gt;:&lt;/strong&gt; the data after the rules have been run on it, with no definitions.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The padding condition matters more than it looks. A longer prompt full of domain words might help on its own. If it did, any gain from the ontology could be length, not meaning. The &lt;a href="https://semantic-ladder.michelepasin.org/method/"&gt;Method&lt;/a&gt; page has the full list, including the querying conditions I come back to below.&lt;/p&gt;
&lt;h2&gt;What helps: meaning that's written down&lt;/h2&gt;
&lt;p&gt;Here are the scores on the credit data:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Scores on the credit data, by condition and model" src="https://www.michelepasin.org/media/static/blog_img/2026-11-06-ladder-credit.png" /&gt;&lt;/p&gt;
&lt;p&gt;And on the research data:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Scores on the research data, by condition and model" src="https://www.michelepasin.org/media/static/blog_img/2026-11-06-ladder-research.png" /&gt;&lt;/p&gt;
&lt;p&gt;With the definitions, in whatever form, both models land between 96% and 100% in both domains. Without them, they get 78–84% on credit and only 45–57% on research.&lt;/p&gt;
&lt;p&gt;The padding adds nothing, so it's the meaning that does the work. And the gain tracks how local the domain is. Sonnet already knows most credit conventions, so the definitions only fill a few gaps (+16 points). The research data has more conventions of its own, such as which affiliation gets the credit or whether a retracted work counts. Without them the model is guessing, and the definitions are worth +41 to +53.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Two more things stood out&lt;/strong&gt;. The weaker the model, the more the definitions are worth: with them, Haiku catches up with Sonnet. And RDF on its own never helped. It holds exactly what the CSV holds, in a more verbose form, and sometimes cost a few points.&lt;/p&gt;
&lt;h2&gt;What doesn't matter: the format&lt;/h2&gt;
&lt;p&gt;This is the result I expected to be most controversial.&lt;/p&gt;
&lt;p&gt;Markdown, SKOS in Turtle, and the same definitions in both forms all scored within a point or two of each other. More surprisingly, the axioms alone (OWL classes and SHACL rules, with every comment and definition stripped out) did about as well as the prose: 99% on credit and 97% on research, for both models. The model reads logic perfectly well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So the model doesn't care what format the meaning comes in. But people do.&lt;/strong&gt; The glossary has to come from somewhere. It has to be written once, kept consistent, versioned, owned, checked against the data, and shared by everyone who uses it. That's what a knowledge graph is for.&lt;/p&gt;
&lt;p&gt;In the lab, the Markdown is generated from the Turtle, so the two can never drift. I think that's the &lt;strong&gt;pattern in miniature: keep the meaning in RDF, and render it as whatever the model reads best.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;What can go wrong: ontologies have opinions&lt;/h2&gt;
&lt;p&gt;Two small findings worried me more than any score.&lt;/p&gt;
&lt;p&gt;First, one sentence in the credit ontology called the foreign-currency rating "the headline rating". A company with three ratings was asked "is it investment grade?", and the honest answer is "which one?". With that sentence, Haiku answered a flat "No" in most repeats, quoting the sentence back. With one neutral rewording, it got it right five times out of five.&lt;/p&gt;
&lt;p&gt;Second, an axiom is followed to the letter, mistakes included. In an early version I declared test records a subclass of entity, while the prose said they describe no real entity. With the axioms alone, the model counted them as entities, every time. The error was mine, and it reproduced it faithfully.&lt;/p&gt;
&lt;p&gt;An ontology carries its authors' emphasis as well as its meaning. If you give one to a model, you need to review it and test it against the data, the way you'd test code.&lt;/p&gt;
&lt;h2&gt;Read the data, or query it?&lt;/h2&gt;
&lt;p&gt;The obvious objection: nobody pastes real data into a prompt. The model should write SQL or SPARQL, and let the database do the counting. So I tried that too. The model never sees the rows: it gets a schema, writes queries for up to eight rounds, and answers from the results.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At the sizes I tried, reading held up better than I expected. &lt;/strong&gt;At 300 companies, with the definitions, reading scores 95% and querying 97–99%. Querying pays off mainly on long lists, where one missed item fails the answer.&lt;/p&gt;
&lt;p&gt;The research data tells the same story. With the definitions, SQL scores 96% against 98% for reading. Without them, both get about half the questions right (52% and 57%).&lt;/p&gt;
&lt;p&gt;So the definitions mattered just as much when querying: +19 points for SQL on credit, +45 on research. A query is only as good as the model's grasp of what the columns mean. Querying doesn't remove the need for an ontology.&lt;/p&gt;
&lt;p&gt;What about graphs? I added &lt;a href="https://semantic-ladder.michelepasin.org/domains/credit/data/#credit_paths"&gt;ownership chains&lt;/a&gt; four to six levels deep, the kind of question a graph store should win. It didn't:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Scores on the ownership-path data, reading and querying" src="https://www.michelepasin.org/media/static/blog_img/2026-11-06-ladder-paths.png" /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;With the definitions, SQL got every path question right in every session. SPARQL got 42% of them on rdflib and 60% on GraphDB.&lt;/li&gt;
&lt;li&gt;The SPARQL failures were mostly about how the model worked: paging through whole classes, or giving up after a few rounds.&lt;/li&gt;
&lt;li&gt;The research data showed the same thing. SPARQL with the ontology scored 97–98% in four sessions out of five, then collapsed to 17% in the fifth, returning almost no answers. SQL never dropped below 96%.&lt;/li&gt;
&lt;li&gt;With the chains precomputed into an &lt;code&gt;ancestors&lt;/code&gt; table, SQL got every path right, every time.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The graph's advantage is following links of any depth at query time. Once the rules have computed the chains, a plain table does as well. And in my runs, the difference between SQL and SPARQL was less about accuracy than steadiness.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;At ten times the size (850 research works, too big to read comfortably), the picture shifts&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img alt="Scores on the research data at 850 works" src="https://www.michelepasin.org/media/static/blog_img/2026-11-06-ladder-research-850.png" /&gt;&lt;/p&gt;
&lt;p&gt;Reading with the definitions drops to 87–89%, because the model keeps the meaning but loses the arithmetic. Querying with the definitions does no better. What works is querying data where the rules have already run: 92% for SQL over the executed tables, and 91% for SPARQL over the graph after its SHACL rules.&lt;/p&gt;
&lt;p&gt;So querying is about &lt;em&gt;size&lt;/em&gt;, and the ontology is about &lt;em&gt;meaning&lt;/em&gt;. They solve different problems.&lt;/p&gt;
&lt;h2&gt;Rules beat reading, if you keep the receipts&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;executed&lt;/code&gt; condition, where the rules have already been applied (duplicate records merged, test records dropped, hierarchies rolled up), got most of the way without any definitions: +15 to +19 points on credit, +34 to +46 on research.&lt;/p&gt;
&lt;p&gt;But it fell short in an instructive way. Merging a preprint into its published version means you can no longer ask about the preprint. &lt;strong&gt;Tables that apply the rules without stating them can't answer "why?"&lt;/strong&gt;. Curation decides what the data can still answer. A store that keeps the records it merged, and the rules it ran, answers more.&lt;/p&gt;
&lt;h2&gt;A pinch of salt&lt;/h2&gt;
&lt;p&gt;These are early results. They're measured carefully, but the scope is small. &lt;/p&gt;
&lt;p&gt;There are two invented domains, with about 50 questions each and ontologies of about 50 terms. Only two models were tested, both Claude, and the datasets are mostly small enough to read. I also wrote the questions myself. So the findings are indicative, not general. They show what happened here, and suggest what might hold elsewhere. The &lt;a href="https://semantic-ladder.michelepasin.org/conclusions/"&gt;Conclusions&lt;/a&gt; page lists where to dig next.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The biggest gap is size&lt;/strong&gt;. A real enterprise ontology has hundreds or thousands of terms, and a production dataset is far too big to read. At 2,000 terms, the definitions alone would fill most of a context window, before any data.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;That's where I think knowledge graphs come into their own&lt;/strong&gt;, and not as a format for the model to read. They're where the meaning is organised and stored as it grows and changes over time: versioned, owned, checked against the data, shared across teams. And they make the hard part tractable: deciding which bit of the ontology should become context for a given question. &lt;/p&gt;
&lt;p&gt;A graph knows which concepts a table's columns use, what those depend on, and which rules touch them. Selecting the right slice from that is a retrieval problem, and the structure is what makes it cheap. It's also where the rules can run, upstream, so the model queries results instead of re-deriving them.&lt;/p&gt;
&lt;h2&gt;What I'd take away&lt;/h2&gt;
&lt;p&gt;Most of this agrees with Andrea's conclusions. Simple definitions were the big win here too, and the gain came from meaning specific to the data's context. RDF on its own didn't help the model, but that fits his point: its value is to the people who build and check the data, not to the LLM. The one difference is curation. Running the rules over the data, rather than tidying it up a little, did change the answers, especially once the data grew.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Write the meaning down,&lt;/strong&gt; especially the local rules. That's where the gain is: +15 to +50 points, depending on how much of your data's meaning is its own.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don't worry about the format you give the model.&lt;/strong&gt; Do worry about the format you keep it in.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review your definitions like code.&lt;/strong&gt; A slanted sentence or a wrong axiom will be followed faithfully.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Run the rules upstream when the data gets big,&lt;/strong&gt; and let the model query the result.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The model reads Markdown just fine. But someone has to keep that Markdown true as the data and the business change. I think that's still the job of a knowledge graph, and probably a bigger one than before.&lt;/p&gt;
&lt;p&gt;The code, data and every run are &lt;a href="https://github.com/lambdamusic/semantic-ladder-demo"&gt;on GitHub&lt;/a&gt;. Thanks to Andrea Splendiani for the article that started this. I'd love to hear from anyone who has tried something similar, especially at real enterprise scale.&lt;/p&gt;</description><pubDate>Fri, 06 Nov 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/11/06/semantics-ladder/</guid></item><item><title>Ontospy: three releases in a day, after nearly four years of silence</title><link>https://www.michelepasin.org/blog/2026/10/12/ontospy-three-releases-in-a-day/</link><description>&lt;p&gt;Today I released three versions of &lt;a href="https://lambdamusic.github.io/Ontospy/"&gt;Ontospy&lt;/a&gt;: 2.2, 2.3 and 2.4. The previous release was in November 2022.&lt;/p&gt;
&lt;p&gt;Ontospy is the open source Python library and command line tool I've been maintaining since 2013. It reads RDF vocabularies and ontologies, lets you inspect them, and generates documentation for them as HTML, Markdown or interactive D3 charts.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://lambdamusic.github.io/Ontospy/"&gt;&lt;img alt="The Ontospy logo" src="https://www.michelepasin.org/media/static/blog_img/2026-10-12-ontospy-logo.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;A confession&lt;/h2&gt;
&lt;p&gt;I let this project go stale. Between a demanding day job and family life, Ontospy kept slipping to the bottom of the list.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Meanwhile people kept using it&lt;/strong&gt;, and kept writing in. Bug reports, feature requests, pull requests with real work in them. The oldest open issues dated back to 2017. One pull request, a nice idea for cleaner class trees, had been waiting since 2019. By last week the library didn't even install on recent versions of Python.&lt;/p&gt;
&lt;p&gt;That kind of backlog is heavy to look at. Each item on its own is small. Together they need days of context-switching I never had.&lt;/p&gt;
&lt;h2&gt;What changed&lt;/h2&gt;
&lt;p&gt;This time I worked through the whole lot with &lt;a href="https://claude.com/claude-code"&gt;Claude Code&lt;/a&gt;. The three releases went out on a single day.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It runs again (2.2)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Support for Python 3.12 and later, which removed an API Ontospy relied on&lt;/li&gt;
&lt;li&gt;A proper test suite with pytest, and continuous integration on Python 3.10 to 3.14&lt;/li&gt;
&lt;li&gt;Packaging fixes: dependency versions are now actually enforced on install&lt;/li&gt;
&lt;li&gt;A crash when documenting class instances, which had been reported three times&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Community contributions (2.3, 2.4)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Custom templates: you can now override any of the documentation templates with your own (thanks to &lt;a href="https://github.com/lambdamusic/Ontospy/pull/138"&gt;@jgsogo&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Better Markdown output (thanks to &lt;a href="https://github.com/lambdamusic/Ontospy/pull/133"&gt;@rvesse&lt;/a&gt; and &lt;a href="https://github.com/lambdamusic/Ontospy/pull/137"&gt;@fmeynadier&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Namespace prefixes declared in a file now win over rdflib's defaults&lt;/li&gt;
&lt;li&gt;Ontospy can load an existing rdflib graph&lt;/li&gt;
&lt;li&gt;Non-redundant class trees for reasoned ontologies, from that 2019 pull request (thanks to &lt;a href="https://github.com/lambdamusic/Ontospy/pull/87"&gt;@floatingpurr&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Correctness (2.4)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Properties without a domain or range now inherit them from their superproperties, as RDFS intends, instead of showing &lt;code&gt;owl:Thing&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Properties typed as a &lt;em&gt;subclass&lt;/em&gt; of &lt;code&gt;owl:ObjectProperty&lt;/code&gt; are recognised, which matters for ontologies like &lt;a href="https://brickschema.org/"&gt;Brick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A property's type no longer depends on alphabetical order (Pizza's &lt;code&gt;hasBase&lt;/code&gt; used to show up as an &lt;code&gt;owl:FunctionalProperty&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://lambdamusic.github.io/ontospy-examples/frbrrdf/prop-coreadaptionof.html"&gt;&lt;img alt="A property page: the domain and range are inherited from the superproperty" src="https://www.michelepasin.org/media/static/blog_img/2026-10-12-ontospy-inferred-domain.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Large ontologies (2.4)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;This is the one I'm happiest about. Someone reported that Ontospy crashed on &lt;a href="http://purl.obolibrary.org/obo/fovt.owl"&gt;FOVT&lt;/a&gt;, a large biology ontology, and suggested raising Python's recursion limit. The real cause was elsewhere: the code walking class hierarchies didn't keep track of where it had been, so cycles and heavy multiple inheritance made it recurse forever.&lt;/p&gt;
&lt;p&gt;With that fixed, FOVT went from not finishing after 26 minutes to loading in under two.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Time to load an ontology: FOVT went from not finishing after 26 minutes to 1.8 minutes; Brick from 49 to 8 seconds" src="https://www.michelepasin.org/media/static/blog_img/2026-10-12-ontospy-load-times.png" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Documentation and examples&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gendocs&lt;/code&gt; no longer wipes the output folder before writing to it&lt;/li&gt;
&lt;li&gt;URLs in metadata are links, and &lt;code&gt;rdfs:seeAlso&lt;/code&gt; gets its own section&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://lambdamusic.github.io/ontospy-examples/"&gt;examples site&lt;/a&gt; is regenerated with the new version, and its index now shows what each ontology is about&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://lambdamusic.github.io/ontospy-examples/"&gt;&lt;img alt="The new index of the examples site" src="https://www.michelepasin.org/media/static/blog_img/2026-10-12-ontospy-examples-index.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In numbers: 28 issues closed, every open pull request dealt with, 45 commits. Three issues are still open, on purpose: a licensing question, a SHACL feature that needs a contributor, and general performance on very large ontologies.&lt;/p&gt;
&lt;h2&gt;How it actually worked&lt;/h2&gt;
&lt;p&gt;It wasn't magic, and I didn't just press a button.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Claude did the legwork&lt;/strong&gt;. It reproduced each bug before touching the code, wrote a failing test first, then the fix. It dug into causes I'd have guessed wrong: the FOVT crash wasn't where the original report, or my own notes, pointed. When a change touched the generated documentation, it rebuilt the docs before and after and compared them, to make sure nothing else moved.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I made the decisions&lt;/strong&gt;. Should an inherited domain be shown as declared, or marked as inferred? Should the examples index be a table or a set of cards? Every change came to me as a diff before it was committed, and the public steps (merging, tagging, publishing to PyPI) stayed mine.&lt;/p&gt;
&lt;p&gt;That split felt right. The judgement calls are the interesting part of ontology engineering anyway. The context-switching was the part I never had time for.&lt;/p&gt;
&lt;h2&gt;Back to it&lt;/h2&gt;
&lt;p&gt;Doing this reminded me how much I enjoy this kind of work: structuring knowledge, and building tools that help other people do it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Next on the list&lt;/strong&gt; are performance on very large ontologies, better support for Jupyter notebooks, and a cleaner documentation site. If you use Ontospy, now is a good time to open an issue. This time I promise to answer.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-bash"&gt;pip install -U ontospy
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;See also: the &lt;a href="https://lambdamusic.github.io/Ontospy/pages/changelog.html"&gt;changelog&lt;/a&gt;, the &lt;a href="https://lambdamusic.github.io/Ontospy/"&gt;documentation&lt;/a&gt; and the &lt;a href="https://github.com/lambdamusic/Ontospy"&gt;source code&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Update, 14 October: version 2.5&lt;/h2&gt;
&lt;p&gt;Two days later, 2.5 is out too, with a few things that came up while regenerating the examples:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The documentation now lists only the namespaces an ontology actually uses, rather than all of rdflib's thirty or so defaults. For Pizza, that's 5 prefixes instead of 30.&lt;/li&gt;
&lt;li&gt;Queries to SPARQL endpoints send only the prefixes they need. On DBpedia, that cut a typical query from 29 &lt;code&gt;PREFIX&lt;/code&gt; lines to 11.&lt;/li&gt;
&lt;li&gt;Ontology metadata is sorted, and nested details like an ontology's editors are shown properly, instead of as cryptic node ids.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also refreshed the &lt;a href="https://lambdamusic.github.io/ontospy-examples/"&gt;examples site&lt;/a&gt;. It now covers 32 ontologies, adding widely used standards like PROV-O, DCAT, SKOS, GeoSPARQL and FIBO, and dropping some dated ones.&lt;/p&gt;</description><pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/10/12/ontospy-three-releases-in-a-day/</guid></item><item><title>Book Summary: The Mom Test</title><link>https://www.michelepasin.org/blog/2026/10/11/the-mom-test/</link><description>&lt;p&gt;Ask your mom whether your business idea is any good and she'll say yes. Not because it is, but because she loves you. That's the starting point of &lt;a href="https://www.momtestbook.com/"&gt;&lt;em&gt;The Mom Test&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://robfitz.com/"&gt;Rob Fitzpatrick&lt;/a&gt;. The trouble is that everyone behaves like your mom. Show people an idea and they'll be polite. They'll say it sounds great, that they'd totally use it, that you should let them know when it launches. None of that is data. It just feels like data.&lt;/p&gt;
&lt;p&gt;The book was published over 10 years ago (2013), but it's still one of the most useful short books on product management I've read.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.momtestbook.com/"&gt;&lt;img alt="Cover of The Mom Test by Rob Fitzpatrick" src="https://www.michelepasin.org/media/static/blog_img/2026-10-11-mom-test-cover.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;How to pass the Mom Test&lt;/h2&gt;
&lt;p&gt;The fix is simple, and it fits in three rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Talk about their life, not your idea.&lt;/li&gt;
&lt;li&gt;Ask about specifics in the past, not opinions about the future.&lt;/li&gt;
&lt;li&gt;Talk less, listen more.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;A question passes the Mom Test if even someone who loves you can't give you a misleading answer to it. "Would you pay for this?" fails. "When did this last happen to you, and what did you do about it?" passes. People are bad at predicting what they'd do, and pretty good at describing what they did.&lt;/p&gt;
&lt;p&gt;The rest of the book is about the habits around those rules. How to deflect compliments, anchor fluff back to real events, and dig beneath feature requests to the problem behind them. How to keep conversations short and casual rather than turning them into formal interviews. And how to end a meeting with something real: a fact, a commitment (time, reputation or money), or a next step. &lt;strong&gt;If a meeting "went well" but nobody gave up anything, it probably didn't.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Why I liked it&lt;/h2&gt;
&lt;p&gt;It's short, practical and a bit funny. More importantly, it's honest about how easy it is to fool yourself. Several of the "signs you're just going through the motions" hit close to home: you talked more than they did, you got an unexpected answer and it didn't change anything, you weren't scared of any of your questions.&lt;/p&gt;
&lt;p&gt;That last one stuck with me. &lt;strong&gt;If none of your questions could hurt your plan, you're not really testing it.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;A field guide&lt;/h2&gt;
&lt;p&gt;To make the ideas stick, I turned my notes into a one-page &lt;strong&gt;&lt;a href="https://www.michelepasin.org/media/static/pages/mom-test-field-guide.html"&gt;Mom Test field guide&lt;/a&gt;&lt;/strong&gt;. It has the three rules, a little quiz on whether a question passes the test, the bad-data patterns and how to handle them, and a before/during/after checklist for customer conversations.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.michelepasin.org/media/static/pages/mom-test-field-guide.html"&gt;&lt;img alt="The Mom Test field guide: the three rules and a quiz on which questions pass the test" src="https://www.michelepasin.org/media/static/blog_img/2026-10-11-mom-test-field-guide.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It's meant to be skimmed five minutes before a call, which is roughly how long it takes, according to Fitzpatrick, to find out whether a problem is real.&lt;/p&gt;</description><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/10/11/the-mom-test/</guid></item><item><title>A Dream of Venice, with Claude as Editor</title><link>https://www.michelepasin.org/blog/2026/09/10/a-dream-of-venice/</link><description>&lt;p&gt;My children can read Italian. Most of their classmates can't. Back in July 2023 I wanted to read the book &lt;a href="https://www.amazon.it/sogno-Venezia-Step%C3%A1n-Zavrel/dp/8895818504"&gt;&lt;em&gt;Un sogno a Venezia&lt;/em&gt;&lt;/a&gt; by &lt;a href="https://en.wikipedia.org/wiki/%C5%A0t%C4%9Bp%C3%A1n_Zav%C5%99el"&gt;Štěpán Zavřel&lt;/a&gt; to their class at school, so first I had to put it into English. Recently I have picked up that project again and used Claude to review it — it's impressive what AI can do with language translation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Un sogno a Venezia&lt;/em&gt; means "A Dream in Venice." A boy called Marco falls asleep worrying about a drawing he owes his teacher. A little mermaid taps on his window and takes him down to see Venice as it will be one day: on the seabed. They swim through St Mark's Square and into the golden basilica. They pass the Doge's Palace, where an octopus guards the empty rooms and plays cards against himself. Children play hopscotch with the fish. It is strange, and gentle, and a little sad.&lt;/p&gt;
&lt;p&gt;Zavřel was a Czech illustrator who spent much of his life in a small town in the Veneto region (Italy), where &lt;a href="https://fondazionezavrel.it/"&gt;the foundation named after him&lt;/a&gt; still champions children's book illustration.&lt;/p&gt;
&lt;p&gt;There is no English edition, so I translated it myself and built a small website for it: &lt;a href="http://zavreldream.michelepasin.org/"&gt;zavreldream.michelepasin.org&lt;/a&gt;. Each page is one of Zavřel's paintings, full screen, with the text beside it. You can read it as a slideshow, as one long scroll, or as a book with pages that turn. Nothing clever underneath — a Django app that produces static HTML, and &lt;a href="https://github.com/lambdamusic/zavrel-dream"&gt;the code is on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="The drowned basilica of St Mark's — domes, arches and the winged-lion campanile, all threaded with seaweed" src="https://www.michelepasin.org/media/static/blog_img/2026-09-10-venice-san-marco.jpg" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;From&lt;/em&gt; A Dream in Venice &lt;em&gt;by Štěpán Zavřel.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;The city really is sinking&lt;/h2&gt;
&lt;p&gt;The premise isn't invented. &lt;strong&gt;Venice was built on millions of wooden piles&lt;/strong&gt; driven into the mud of a lagoon, and it has been settling into that mud ever since. For a stretch of the twentieth century it settled faster, because factories on the mainland pumped groundwater from under the city for decades, until Italy banned the practice in the 1970s.&lt;/p&gt;
&lt;p&gt;The bigger threat now is the sea rising to meet it. Measured against the water, Venice sits roughly 25 cm lower than it did in 1900, and the gap keeps widening. The high tides that flood St Mark's Square — the &lt;a href="https://en.wikipedia.org/wiki/Acqua_alta"&gt;&lt;em&gt;acqua alta&lt;/em&gt;&lt;/a&gt; — were once rare. Now they come dozens of times a year. A set of mobile barriers called MOSE can seal the lagoon against the worst surges, but it was built for today's sea, not the one we are heading towards.&lt;/p&gt;
&lt;p&gt;Zavřel drew the book in 1975. In it, the children are told to imagine Venice underwater and to paint what they see. Fifty years on, that reads less like an art lesson and more like a forecast.&lt;/p&gt;
&lt;p&gt;&lt;img alt="A tall Venetian palace with years marked up one side like a ruler — 1490 near the water, 2011 near the roof, where workers mend the tiles" src="https://www.michelepasin.org/media/static/blog_img/2026-09-10-venice-water-levels.jpg" /&gt;&lt;/p&gt;
&lt;h2&gt;Translating with AI in the loop&lt;/h2&gt;
&lt;p&gt;Here is the part I didn't expect: translating with an AI in the loop is properly addictive.&lt;/p&gt;
&lt;p&gt;I did the first pass myself, the honest way, one sentence at a time. Then I handed it to Claude to check. It started pulling at threads I couldn't see any more, because I had been staring at them too long. And once it found one, I wanted it to check the next page, and the next.&lt;/p&gt;
&lt;p&gt;The easy things to catch are the &lt;strong&gt;italianisms&lt;/strong&gt; — phrases that are grammatical in English but that no English speaker would choose. When Marco says the drowned city can't be real, the mermaid answers &lt;em&gt;"Ma sì"&lt;/em&gt;. I had written "But yes, replies the little mermaid." Claude's version: &lt;em&gt;"Oh yes it is!" replies the little mermaid.&lt;/em&gt; Elsewhere my characters kept "arriving in front of" buildings — a word-for-word lift of &lt;em&gt;arrivare davanti a&lt;/em&gt; — where English just says "coming to" them.&lt;/p&gt;
&lt;p&gt;The harder things are in the &lt;strong&gt;dialogue&lt;/strong&gt;. Italian punctuates speech loosely: the tag folds in with commas, the quotation marks are often dropped. Carry that habit across and you get:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"It's not possible! he exclaims, it's not possible!"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;when English wants:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"It's not possible!" he exclaims. "It's not possible!"&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In one line, the sea-children beg Marco to bring help. I had crushed two sentences together and lost a word along the way: &lt;em&gt;"We've been waiting for so long come and save!"&lt;/em&gt; Claude put it back: &lt;em&gt;"We have been waiting so long for you to come and save us!"&lt;/em&gt; I know exactly what the Italian says. I wrote the broken version anyway, and I read past it a dozen times.&lt;/p&gt;
&lt;p&gt;I want to be clear about what this is and isn't. The AI did not translate the book. The wording is mine, and I threw out plenty of its suggestions. It is closer to having an editor who has read the page forty times and is still paying attention on the forty-first.&lt;/p&gt;
&lt;h2&gt;What writing becomes&lt;/h2&gt;
&lt;p&gt;I keep wondering what this does to writing over the next few years.&lt;/p&gt;
&lt;p&gt;Not translation as a profession — that is already turning over. I mean the small daily act of getting a sentence to say what you meant. A comment on a pull request. A message to a colleague you don't want misread. A children's book you are turning into English so a room full of kids can follow along.&lt;/p&gt;
&lt;p&gt;We are heading somewhere the &lt;strong&gt;distance between "roughly what I mean" and "exactly what I mean" costs almost nothing to close&lt;/strong&gt;, for anyone, at any time. Mostly that is wonderful. It is also a little strange. Some of my worst sentences are the ones that taught me the most, and I don't know what teaches you that once the friction is gone.&lt;/p&gt;
&lt;p&gt;The class got their story in the end, though. That part is done.&lt;/p&gt;</description><pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/09/10/a-dream-of-venice/</guid></item><item><title>Reading Naples '44 as a database</title><link>https://www.michelepasin.org/blog/2026/09/02/reading-naples-44-as-a-database/</link><description>&lt;p&gt;I recently read Norman Lewis's &lt;a href="https://www.travelbooks.co.uk/shop-online-books/naples-44"&gt;&lt;em&gt;Naples '44&lt;/em&gt;&lt;/a&gt;, and it stayed with me more than most books do.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Naples '44&lt;/em&gt; is Lewis's diary from the year he spent as a British intelligence officer in Naples, from the Allied landings of September 1943 to October 1944. It's thin — a few paragraphs per entry. It's also one of the best things I've read about what military occupation looks like from street level. Hunger, the black market, bombs, and in between all of it the ordinary theatre of Neapolitan life: a saint's blood that has to liquefy on schedule, a requisitioned piano, the city aquarium emptied to feed an official banquet.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.travelbooks.co.uk/shop-online-books/naples-44"&gt;&lt;img alt="Cover of Naples '44, Eland Books edition" src="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-cover.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Part of why it landed is that I've spent time in many of the places he describes. Reading stories of that much suffering and misery, set in streets I know, and less than a hundred years ago — that does something to you.&lt;/p&gt;
&lt;p&gt;So I decided to take the book apart and build a small website out of it: &lt;strong&gt;&lt;a href="https://naples44.michelepasin.org"&gt;naples44.michelepasin.org&lt;/a&gt;&lt;/strong&gt;. Partly to hold on to what the book is about, as an interactive index I can come back to. Partly as a test of how far I could get using Claude to do the work.&lt;/p&gt;
&lt;h2&gt;Taking notes by talking to Claude&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-entry.jpg"&gt;&lt;img alt="An entry page: paraphrased summary, themes, and a sidebar of places and people" src="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-entry.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I didn't read &lt;em&gt;Naples '44&lt;/em&gt; on paper. I listened to it on Audible, on walks and commutes, and I took notes by talking to &lt;a href="https://claude.ai/"&gt;Claude&lt;/a&gt; as I went — telling it what had just happened, which places and people I wanted to keep track of, what a passage reminded me of.&lt;/p&gt;
&lt;p&gt;That turned out to be a genuinely new way to take notes on a book. I've always meant to annotate as I read, and I've always been too lazy to actually do it: stopping to write breaks the flow, and you can't type on a walk. Doing it by conversation removes the friction. It's less like keeping a commonplace book and more like going through the book with someone next to you — you can argue with the text, ask "wasn't that the same officer from the Salerno chapter?", and let the running index build itself out of the back-and-forth.&lt;/p&gt;
&lt;p&gt;By the end, that conversation had turned into a small structured dataset.&lt;/p&gt;
&lt;p&gt;The unit is the entry. There are 108 of them, each with a date, a short summary in my own words, and a set of tags. I kept track of &lt;strong&gt;&lt;a href="https://naples44.michelepasin.org/themes/index.html"&gt;themes&lt;/a&gt;&lt;/strong&gt; (11 of them — the evil eye, &lt;a href="https://naples44.michelepasin.org/themes/allied_conduct/index.html"&gt;Allied conduct&lt;/a&gt;, the Camorra, survival), &lt;strong&gt;&lt;a href="https://naples44.michelepasin.org/places/index.html"&gt;places&lt;/a&gt;&lt;/strong&gt; (129), &lt;strong&gt;&lt;a href="https://naples44.michelepasin.org/people/index.html"&gt;recurring people&lt;/a&gt;&lt;/strong&gt; (37), and a running list of &lt;strong&gt;&lt;a href="https://naples44.michelepasin.org/folklore/index.html"&gt;saints, feasts and superstitions&lt;/a&gt;&lt;/strong&gt; (31). Lewis keeps circling back to the same handful of subjects, so most of the tags fell out of the book on their own.&lt;/p&gt;
&lt;p&gt;What surprised me is how much the tagging changed the listening. Deciding whether an entry is "about" the black market or "about" Allied conduct — when it's plainly about both — forces you to say what the entry is really doing. Naming a place means deciding whether two vague references point at the same street. It's interpretation, not extraction — and having something to talk it through with makes you do more of it, not less. The dataset is a record of my reading of the book, not a neutral index of it.&lt;/p&gt;
&lt;h2&gt;The timeline&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-timeline.jpg"&gt;&lt;img alt="The radial timeline: 108 diary entries on the inner ring, 20 war events on the outer ring, with an entry open" src="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-timeline.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The main view is a &lt;a href="https://naples44.michelepasin.org/timeline/index.html"&gt;circular timeline&lt;/a&gt;. The &lt;strong&gt;inner ring&lt;/strong&gt; holds Lewis's 108 entries in date order. The &lt;strong&gt;outer ring&lt;/strong&gt; marks 20 events of the wider war — the Anzio landings, Monte Cassino, the liberation of Rome — on the same axis.&lt;/p&gt;
&lt;p&gt;The point of putting them together is the juxtaposition. While the Allied armies are stuck below Cassino through the winter, Lewis is writing about a woman who rents out her daughters, or the etiquette of a Camorra funeral. The military history and the view from one desk in Naples run in parallel, and you can see where they touch.&lt;/p&gt;
&lt;p&gt;Hover an entry and you get its summary and tags. The theme filters light up every entry that touches a subject, so you can pull the &lt;a href="https://naples44.michelepasin.org/folklore/evil-eye/index.html"&gt;"evil eye"&lt;/a&gt; thread through the whole year in one move.&lt;/p&gt;
&lt;h2&gt;A page for everything&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-place.jpg"&gt;&lt;img alt="The page for Vesuvius: description, a note on its role in the book, and a map of Naples with co-occurring places" src="https://www.michelepasin.org/media/static/blog_img/2026-09-02-naples44-place.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The other half of the site is flatter. Every place, person, saint and theme has its own page — a description, a note on what it's doing in the book, and a chronological list of every entry it appears in. Places also get a map: 114 of the 129 are geocoded, so you can see Lewis's Naples as a scatter of points, most of them within a few streets of each other.&lt;/p&gt;
&lt;p&gt;This is the part I keep coming back to in my own work. &lt;a href="https://www.poms.ac.uk/"&gt;People of Medieval Scotland&lt;/a&gt;, &lt;a href="https://wittgensteiniana.michelepasin.org/"&gt;Wittgensteiniana&lt;/a&gt;, and now this — they're the same move. Take a text, pull out the entities, give each one a stable URL and a page that gathers every mention. It's an old idea, basically an index with hyperlinks, but it still produces something you can't get by reading front to back.&lt;/p&gt;
&lt;h2&gt;How fast this now goes&lt;/h2&gt;
&lt;p&gt;The plumbing is nothing clever. It's a Django app with a SQLite database and an admin interface I use to edit the data, and then the whole thing gets &lt;code&gt;wget&lt;/code&gt;'d into static HTML and served from GitHub Pages. No server running anywhere. I've &lt;a href="https://www.michelepasin.org/blog/2021/10/29/django-wget-static-site/index.html"&gt;written about this pattern before&lt;/a&gt; — it's my default now for small sites that are really just a database with a nice front end. The visualisation is D3, vendored, no CDN. &lt;a href="https://github.com/lambdamusic/naples44"&gt;Source on GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;What's new is the speed. A few years ago, building this as a Django application — models, admin, importers, templates, the timeline — would have taken me weeks, maybe months of evenings. This took a few days, working with Claude.&lt;/p&gt;
&lt;p&gt;The judgement didn't go away. Someone still has to decide what counts as an entity, whether two mentions are the same person, what a theme means, and whether each summary is faithful to the book. I went over every one of those summaries. But the mechanical work — the models, the migrations, the import scripts, the geocoding, the D3 boilerplate — mostly just happened, at a pace that still surprises me.&lt;/p&gt;
&lt;p&gt;I'm planning to package the workflow into a skill: point it at a text and a list of entity types, get back a navigable site like this one. More on that once it exists.&lt;/p&gt;
&lt;h2&gt;The book is still the point&lt;/h2&gt;
&lt;p&gt;If anything the site is an argument for reading &lt;em&gt;Naples '44&lt;/em&gt; slowly. Every summary is deliberately a paraphrase, never Lewis's own words — partly for copyright, and partly because doing the compression — even with an assistant to help — is what makes you look at a passage twice.&lt;/p&gt;
&lt;p&gt;I built this mostly to find out what a book looks like once you've taken it apart. The answer, at least for this one: a year, a few hundred fragments, and the same dozen preoccupations coming round and round.&lt;/p&gt;</description><pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/09/02/reading-naples-44-as-a-database/</guid></item><item><title>Five new ways to visualize Wittgenstein's Tractatus</title><link>https://www.michelepasin.org/blog/2026/08/17/five-new-ways-to-read-the-tractatus/</link><description>&lt;p&gt;I've spent a bit more time this year on &lt;a href="http://wittgensteiniana.michelepasin.org/"&gt;Wittgensteiniana&lt;/a&gt;, my long-running side project that turns Wittgenstein's &lt;em&gt;Tractatus Logico-Philosophicus&lt;/em&gt; into a set of experimental visualizations. Five of them are worth writing up properly: Depth-Rhythm, Silence Spiral, Heartbeat Strip, The Ladder, and Concept Web.&lt;/p&gt;
&lt;p&gt;The starting point for all of them is the same: the Tractatus isn't a normal book. It's 526 numbered propositions, arranged in a strict decimal hierarchy - 1, 1.1, 1.11, 1.12 - where each sub-proposition is a comment on the one above it. That structure is unusual enough that it invites visual treatment on its own, before you even get to the content. So each of these views takes one property of the text - its nesting depth, its length, its ending, its recurring vocabulary - and turns it into a shape.&lt;/p&gt;
&lt;p&gt;All five now show the full text in three editions side by side: the 1922 Ogden translation, the 1961 Pears &amp;amp; McGuinness translation, and Wittgenstein's German original. Click into any proposition and a reading panel opens with all three, plus Previous/Next buttons and left/right arrow-key navigation to step through in reading order.&lt;/p&gt;
&lt;h2&gt;Depth-Rhythm&lt;/h2&gt;
&lt;p&gt;&lt;img alt="2026-08-17-witt-deep-rhythm-sm.gif" src="https://www.michelepasin.org/media/static/blog_img/2026-08-17-witt-deep-rhythm-sm.gif" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rationale.&lt;/em&gt; The numbering isn't decorative - it's the argument's scaffolding. A proposition like 6.3751 is four levels deep in commentary on proposition 6. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://wittgensteiniana.michelepasin.org/depthtree.html"&gt;Depth-Rhythm&lt;/a&gt; plots reading order against that nesting depth as a timeline, so you can see, at a glance, where Wittgenstein digs in with long chains of elaboration and where he surfaces back to a bare top-level claim.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features.&lt;/em&gt; Every proposition plotted as a point, positioned by depth; click any point to open the reading panel with all three translations; Previous/Next and arrow-key navigation through the whole book.&lt;/p&gt;
&lt;h2&gt;Silence Spiral&lt;/h2&gt;
&lt;p&gt;&lt;img alt="2026-08-17-witt-silence-spiral-sm.gif" src="https://www.michelepasin.org/media/static/blog_img/2026-08-17-witt-silence-spiral-sm.gif" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rationale.&lt;/em&gt; The book famously ends with proposition 7: "Whereof one cannot speak, thereof one must be silent." &lt;/p&gt;
&lt;p&gt;&lt;a href="https://wittgensteiniana.michelepasin.org/silence.html"&gt;Silence Spiral &lt;/a&gt;takes that ending literally as a destination - every proposition sits on a spiral that tightens as it goes, converging on 7 at the centre. It's a way of visualizing the whole text as a single movement toward its own limit.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features.&lt;/em&gt; Two-pane layout: the spiral on the left, the reading panel on the right. Dot size is driven by each proposition's word count rather than its position on the spiral, so length becomes visible independently of place in the sequence. Click a dot to read; Previous/Next and arrow keys to move through.&lt;/p&gt;
&lt;h2&gt;Heartbeat Strip&lt;/h2&gt;
&lt;p&gt;&lt;img alt="2026-08-17-witt-heartbeat-sm.gif" src="https://www.michelepasin.org/media/static/blog_img/2026-08-17-witt-heartbeat-sm.gif" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rationale.&lt;/em&gt; The Tractatus has seven top-level propositions - seven "chapters," in effect - and they don't all move at the same pace. Some are terse, single-line claims; others build through dozens of nested sub-propositions. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://wittgensteiniana.michelepasin.org/heartbeat.html"&gt;Heartbeat Strip&lt;/a&gt; renders each chapter as its own EKG-style pulse strip, with spike height mapped to word count, so the pacing of the argument becomes a literal rhythm you can read off the page.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features.&lt;/em&gt; Seven pulse strips, one per chapter, on a warm paper background with a deep green accent. Reading panel below the chart with all three translations; Previous/Next and arrow-key navigation across the flattened reading order spanning all seven strips.&lt;/p&gt;
&lt;h2&gt;The Ladder&lt;/h2&gt;
&lt;p&gt;&lt;img alt="2026-08-17-witt-ladder-sm.gif" src="https://www.michelepasin.org/media/static/blog_img/2026-08-17-witt-ladder-sm.gif" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rationale.&lt;/em&gt; Wittgenstein describes his own propositions, near the very end of the book, as a ladder: you climb it, and once you've used it to see the world rightly, you throw it away. &lt;/p&gt;
&lt;p&gt;&lt;a href="https://wittgensteiniana.michelepasin.org/ladder.html"&gt;The Ladder&lt;/a&gt; takes that metaphor at face value. You scroll upward through a ladder of rungs - one per proposition - and the rungs you've passed dissolve behind you, exactly as the book says they should.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features.&lt;/em&gt; A full-page gradient background running from cool slate at the top to pale blue-white by proposition 7, with a faint dot-grid texture; each rung sits on a dark translucent card so the text stays legible across the whole gradient. Click a rung to open a large overlay with all three translations, Previous/Next buttons, and Escape to close. Up/down arrow keys move along the ladder - scrolling when the overlay is closed, paging through translations when it's open. The dissolve itself is continuous and scroll-linked: opacity and grayscale fade smoothly as a rung crosses out of view, rather than snapping off-screen.&lt;/p&gt;
&lt;h2&gt;Concept Web&lt;/h2&gt;
&lt;p&gt;&lt;img alt="2026-08-17-witt-conceptweb-sm.gif" src="https://www.michelepasin.org/media/static/blog_img/2026-08-17-witt-conceptweb-sm.gif" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Rationale.&lt;/em&gt; This one started life as a placeholder - a graph of propositions linked to whichever of 14 keywords happened to appear in the text. I've since replaced it with something better: a philosophical concept classification I actually did, by hand, studying the Tractatus &lt;a href="https://www.michelepasin.org/projects/philosurfical/index.html"&gt;years ago&lt;/a&gt;, encoded at the time in an old Lisp-based system called OCML and sitting unused ever since. &lt;/p&gt;
&lt;p&gt;I extracted it, cleaned it up, and rebuilt &lt;a href="https://wittgensteiniana.michelepasin.org/conceptweb.html"&gt;Concept Web&lt;/a&gt; to run on it directly - 99 concepts, each with its own description, linked to the 466 propositions I originally read them into. It's no longer a keyword search standing in for interpretation; it's the interpretation.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Features.&lt;/em&gt; A three-panel explorer. On the left, a browsable list of the 99 concepts - hover one to preview the description I wrote for it back then (what "Silence" means in the Tractatus, say, and why); click to select it. In the centre, the force-directed graph itself - concepts as hub nodes, propositions as small satellites coloured by chapter, drag and zoom still work as before, but every edge now reflects an actual reading, not a text match. On the right, a browsable list of propositions - all 466 by default, narrowing to just the selected concept's propositions once you pick one. Click any proposition, in the graph or either sidebar, to open a full-screen reading overlay with all three translations side by side and Previous/Next to step through whichever list is currently active.&lt;/p&gt;
&lt;p&gt;PS the data for this visualization is also &lt;a href="https://github.com/lambdamusic/wittgensteiniana/blob/main/backups/rdf/wittgensteiniana.ttl"&gt;available as RDF&lt;/a&gt;. &lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;None of these are meant to replace reading the book - if anything, they're an argument for reading it more slowly. &lt;/p&gt;
&lt;p&gt;The Tractatus keeps insisting on the limits of what can be said, and there's something fitting about trying to say a bit more about it anyway, just not in words...&lt;/p&gt;</description><pubDate>Mon, 17 Aug 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/08/17/five-new-ways-to-read-the-tractatus/</guid></item><item><title>AI Skills Are a Cottage Industry - And That Might Be Permanent</title><link>https://www.michelepasin.org/blog/2026/06/16/ai-skills-cottage-industry/</link><description>&lt;p&gt;Everyone in my organisation is building their own &lt;a href="https://agentskills.io/home"&gt;AI skills&lt;/a&gt;. Prompts for summarising documents, triaging emails, drafting updates, analysing data. Each one slightly different. Each one optimised for the person who built it.&lt;/p&gt;
&lt;p&gt;The obvious reaction is: we need to standardise this. Create a shared library. Avoid duplication. But I'm not sure that instinct is right - or even achievable.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The Python library analogy, and where it breaks&lt;/h2&gt;
&lt;p&gt;At first it looks a lot like the early days of Python. A massive proliferation of libraries, everyone solving the same problems slightly differently, and only gradually a market emerging where you could tell the mature, trustworthy packages from the abandoned proof-of-concepts.&lt;/p&gt;
&lt;p&gt;And the numbers are striking. &lt;a href="https://www.articsledge.com/post/python-package-index-pypi"&gt;PyPI grew from 60,000 packages in 2015 to over 500,000 a decade later&lt;/a&gt; - today it lists more than 800,000. &lt;a href="https://arxiv.org/abs/1907.11073"&gt;Most of them built by single individuals, not organisations&lt;/a&gt;. A huge long tail of abandoned or barely-maintained work, and a tiny fraction dominating actual usage. The ecosystem became navigable - but it never converged to a clean, curated set of canonical packages. The market never fully cleared.&lt;/p&gt;
&lt;p&gt;But there's a critical difference. Writing a Python library required real technical depth. You had to understand APIs, packaging, dependency management. That friction was also a filter - it meant most libraries were written by people with enough rigour to make something coherent.&lt;/p&gt;
&lt;p&gt;With AI skills, that bar is gone. Anyone who understands a problem and knows how to talk to an LLM can build a skill. That's genuinely exciting - domain experts can now build tools for their own domains without needing a developer. But it also means the signal-to-noise ratio will be far worse than PyPI ever was. The Custom GPT store gives a glimpse of what's coming: &lt;a href="https://seo.ai/blog/gpt-store-statistics-facts"&gt;over 3 million custom GPTs were created within two months of launch, yet only around 160,000 were ever made public&lt;/a&gt;. The rest built privately, used once, or quietly abandoned. And unlike code, &lt;a href="https://arxiv.org/abs/2507.03405"&gt;there's no agreed standard for what a good prompt even looks like&lt;/a&gt; - let alone how to evaluate one.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Trust, not quality&lt;/h2&gt;
&lt;p&gt;Here's what I think changes most fundamentally. With code, you can inspect quality. Read the source, check the tests, look at the issue tracker. With a skill, the source is a prompt - and even if you read it, there's no coding standard for prompts, no way to formally verify correctness, and the outputs are probabilistic anyway. The same skill can give you something sharp on Monday and something subtly off on Friday.&lt;/p&gt;
&lt;p&gt;So you can't really evaluate a skill. You can only trust it - or not.&lt;/p&gt;
&lt;p&gt;Trust built through repeated use, word of mouth, and the credibility of whoever built it. That's a very different relationship to tooling. It's closer to how you trust a colleague than how you trust a library.&lt;/p&gt;
&lt;p&gt;This connects to something deeper. &lt;a href="https://en.wikipedia.org/wiki/Tacit_knowledge"&gt;Michael Polanyi observed that "we can know more than we can tell"&lt;/a&gt; - that the most valuable knowledge is often the hardest to articulate. Skills are a kind of externalised tacit knowledge. Every refinement you make, every edge case you quietly handle, every implicit assumption about your workflow - it all folds into the prompt in ways you probably couldn't fully explain. And &lt;a href="https://www.idc.com/resource-center/blog/the-knowledge-your-ai-may-never-have/"&gt;that kind of knowledge doesn't transfer cleanly&lt;/a&gt;. Hand someone the skill and you're not handing them the context that shaped it.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;Skills resist generalisation&lt;/h2&gt;
&lt;p&gt;There's another dynamic at play. Skills are so malleable that you can refine them endlessly for your own use case - ask the LLM to adjust them, specialise them further, fold in your own context. The result is something exquisitely fitted to your niche. And unlike extending a Python library, you don't need to understand how it was constructed to modify it.&lt;/p&gt;
&lt;p&gt;But that personalisation is also what makes skills hard to share.&lt;/p&gt;
&lt;p&gt;This is &lt;a href="https://oecs.mit.edu/pub/xyn6l8i3"&gt;niche construction&lt;/a&gt; in the biological sense - individuals adapting their local environment in ways that work for them, which is rational at the individual level, but which fragments the shared environment over time. With a skill, the tacit knowledge doesn't just surround the artifact. It lives inside it. The divergence compounds with every refinement.&lt;/p&gt;
&lt;p&gt;So the ecosystem might not converge the way PyPI did. It might stay fragmented almost by nature - not because people aren't trying to share, but because the artifact resists generalisation.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The marketplace is forming - but the rules are different&lt;/h2&gt;
&lt;p&gt;There are early signs of infrastructure. &lt;a href="https://github.com/skillmatic-ai/awesome-agent-skills"&gt;GitHub repos cataloguing agent skills&lt;/a&gt; are accumulating stars. Dedicated marketplaces are emerging: &lt;a href="https://skillsmp.com"&gt;SkillsMP&lt;/a&gt; alone indexes over 800,000 skills scraped from public GitHub repositories. Collections curated by practitioners who've earned credibility are appearing. Social proof is forming.&lt;/p&gt;
&lt;p&gt;But look more closely and the PyPI parallel reasserts itself. &lt;a href="https://www.agensi.io/learn/best-ai-agent-skills-marketplaces-2026"&gt;SkillsMP's catalog size is the most misleading metric in the category&lt;/a&gt; - much of it abandoned experiments, half-finished tests, and duplicates, with no quality filter beyond having at least two GitHub stars. And the stakes of getting it wrong are higher than with a badly written library. &lt;a href="https://arxiv.org/abs/2601.10338v1"&gt;The first large-scale empirical study of skills in the wild analysed over 31,000 skills from major marketplaces and found that 26.1% contained at least one security vulnerability&lt;/a&gt; - spanning prompt injection, data exfiltration, and supply chain risks. Skills execute with implicit trust. There's no pip audit equivalent. Anthropic's own documentation advises users to install only from trusted sources and thoroughly audit anything unverified.&lt;/p&gt;
&lt;p&gt;That word again: trusted.&lt;/p&gt;
&lt;p&gt;A starred skill repo isn't quite like a popular library. Forking a library produces something legible - another developer can read it, understand what changed, and evaluate the fork on its own terms. Forking a skill produces something that looks almost identical but behaves differently in ways that are hard to articulate. The non-determinism means two forks of the same skill can diverge silently, with no diff to inspect and no test suite to run. Stars travel with the original; trust doesn't automatically transfer to the fork.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The cottage industry might be permanent&lt;/h2&gt;
&lt;p&gt;The Python ecosystem partially converged - not through top-down standardisation, but through a few dominant packages pulling away on genuine merit, and experienced practitioners developing taste. But even there, the long tail never disappeared. PyPI is navigable, not clean.&lt;/p&gt;
&lt;p&gt;I'm not sure the same convergence is coming for AI skills. The artifact itself resists generalisation. There's no deterministic behaviour to diff, no breaking change to announce, no changelog to read. Versioning a skill is a conceptual problem we haven't even started to solve - what does it mean for a skill to "change" if the output drifts rather than breaks?&lt;/p&gt;
&lt;p&gt;So the cottage industry might not be a phase. It might be the natural state of this ecosystem.&lt;/p&gt;
&lt;p&gt;If that's true, the question isn't how to standardise skills eventually. It's how to function well when fragmentation is the baseline. How trust networks replace registries. How taste develops without inspection. How knowledge survives when it lives in the practitioner, not the artifact.&lt;/p&gt;</description><pubDate>Tue, 16 Jun 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/06/16/ai-skills-cottage-industry/</guid></item><item><title>What the data doesn't show: presenting at CLACSO's funding flows project</title><link>https://www.michelepasin.org/blog/2026/04/21/funding-flows-global-south-clacso/</link><description>&lt;p&gt;I was in Buenos Aires last week for the &lt;a href="https://www.clacso.org/clacso-folec-presenta-los-resultados-del-proyecto-sobre-flujos-de-financiamiento-de-la-investigacion-en-el-sur-global/"&gt;closing event&lt;/a&gt; of &lt;em&gt;Tracking research funding flows in the Global South&lt;/em&gt;, a project run by &lt;a href="https://www.clacso.org/fundingflows/#"&gt;CLACSO&lt;/a&gt; in partnership with &lt;a href="https://www.universiteitleiden.nl/en/research/research-projects/social-and-behavioural-sciences/centre-for-science-and-technology-studies/tracking-research-funding-flows-in-the-global-south"&gt;CWTS/Leiden University&lt;/a&gt; and &lt;a href="https://idrc-crdi.ca/en"&gt;IDRC&lt;/a&gt;. I'd been invited to present on Dimensions as a funding data infrastructure - roughly fifteen minutes to explain what we collect, how it's structured, and where we stand on openness.&lt;/p&gt;
&lt;p&gt;I came prepared to talk. I left mostly wanting to listen :-) &lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;The question the project is asking&lt;/h2&gt;
&lt;p&gt;The core research question sounds simple: who funds what, where, in Latin America and beyond? But the fact that this is still a research question - that a multi-year project with serious institutional backing is needed to answer it - says something important about the state of global research infrastructure.&lt;/p&gt;
&lt;p&gt;CLACSO represents 927 research and postgraduate centres across 56 countries. The researchers in that room weren't asking theoretical questions. They were asking why the funding landscape of their own region is so hard to see clearly from within it.&lt;/p&gt;
&lt;p&gt;That framing stuck with me. &lt;strong&gt;Infrastructure is never neutral.&lt;/strong&gt; What gets counted, and by whom, shapes what gets funded. The project is mapping a terrain that mainstream bibliometrics has largely ignored - not out of malice, but because the tools were built elsewhere and for other purposes.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What Dimensions actually holds&lt;/h2&gt;
&lt;p&gt;My job was to explain what &lt;a href="https://www.dimensions.ai/"&gt;Dimensions&lt;/a&gt; can contribute to that question.&lt;/p&gt;
&lt;p&gt;The short version: we hold around 10 million grant records from approximately 800 funders worldwide, linked to 130 million publications and 1.5 billion citations. The linking is the important part - we can trace a grant from the funder through to the papers it produced, across institutions and borders.&lt;/p&gt;
&lt;p&gt;For questions about international funding flows specifically, the approach is to query where funder country differs from recipient country. A Canadian grant (say, from IDRC) landing at a Mexican university shows up as an external flow. An EU Horizon grant to a Brazilian institution shows up the same way. In principle, you can build a reasonably detailed picture of how money moves across borders.&lt;/p&gt;
&lt;p&gt;&lt;img alt="2026-04-29-funding-data.png" src="https://www.michelepasin.org/media/static/blog_img/2026-04-29-funding-data.png" /&gt;&lt;/p&gt;
&lt;p&gt;We also extract funding acknowledgements from the full text of publications using NLP. This is the second data stream, and it matters because a lot of funding - especially informal, bilateral, or smaller-scale support - never gets registered as a formal grant anywhere. It only appears in the acknowledgements section of a paper. If we can extract those at scale, we can see flows that would otherwise be invisible.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;See the notebook &lt;strong&gt;&lt;a href="https://colab.research.google.com/drive/1o7EqY3kpWYhSdnR8lpBagtD3p1LYR7-B"&gt;Analysing Research Funding in Latin America - A tutorial using the Dimensions Analytics API&lt;/a&gt;&lt;/strong&gt; for more real world examples.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://colab.research.google.com/drive/1o7EqY3kpWYhSdnR8lpBagtD3p1LYR7-B"&gt;&lt;img alt="2026-04-29-notebook-1.png" src="https://www.michelepasin.org/media/static/blog_img/2026-04-29-notebook-1.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;!-- ![2026-04-29-funding-brazil.png](/media/static/blog_img/2026-04-29-funding-brazil.png) --&gt;

&lt;hr /&gt;
&lt;h2&gt;The map has edges&lt;/h2&gt;
&lt;p&gt;Here's the honest part.&lt;/p&gt;
&lt;p&gt;Both data streams have the same structural bias: they see the world through the lens of who's already in the registries and the indexed journals. That means they're reasonably good at capturing flows &lt;em&gt;into&lt;/em&gt; Latin America from Northern funders - IDRC, NIH, Gates Foundation, EU Horizon. These organisations register their grants. Their grantees publish in indexed journals.&lt;/p&gt;
&lt;p&gt;What we see much less clearly is domestic funding, South-South flows, and the informal support structures that keep a lot of regional science running.&lt;/p&gt;
&lt;p&gt;&lt;img alt="2026-04-29-latam-funding.png" src="https://www.michelepasin.org/media/static/blog_img/2026-04-29-latam-funding.png" /&gt;&lt;/p&gt;
&lt;p&gt;Take Argentina. Over the past couple of years, the &lt;a href="https://www.rpubs.com/daniloceschin/Argentina-Scientific-Funding-Crisis-Under-Milei"&gt;CONICET funding crisis&lt;/a&gt; has been serious - budget cuts, delays, researchers leaving. Against that backdrop, the question of how much Argentine science now depends on international funders isn't just academic. It matters for policy, for sovereignty, for what gets studied. We can begin to answer that question with Dimensions data. But we can't answer it completely, because the picture gets blurry exactly where domestic and informal flows dominate.&lt;/p&gt;
&lt;p&gt;South-South flows - say, a Brazilian agency funding work in Colombia, or African-Latin American scientific partnerships - are largely invisible in the data. Not because they don't exist. Because the infrastructure wasn't built to see them.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;See the notebook &lt;strong&gt;&lt;a href="https://colab.research.google.com/drive/1iqPNkJjCTbjPMZvk2C9qt8rZYSQD8IZU"&gt;Latin America Research Funding Patterns- A tutorial using the Dimensions on Google BigQuery&lt;/a&gt;&lt;/strong&gt; for more examples.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://colab.research.google.com/drive/1iqPNkJjCTbjPMZvk2C9qt8rZYSQD8IZU"&gt;&lt;img alt="2026-04-29-notebook-2.png" src="https://www.michelepasin.org/media/static/blog_img/2026-04-29-notebook-2.png" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2&gt;What I learned from the feedback&lt;/h2&gt;
&lt;p&gt;The researchers at this event had been using Dimensions - and pushing it hard. The feedback they gave wasn't the vague kind you get from people who've skimmed the documentation. It was specific. Funder X isn't linked correctly. Country Y's national agency has three different names in the data and they resolve to different entity IDs. The acknowledgement extraction misses a common Portuguese grant number format.&lt;/p&gt;
&lt;p&gt;That's the kind of feedback you can only get from people who've actually tried to do real work with the data and hit the edges. It's uncomfortable and it's exactly what you need.&lt;/p&gt;
&lt;p&gt;I also found the conversation about openness genuinely refreshing. The panel included colleagues from the &lt;a href="https://barcelona-declaration.org/"&gt;Barcelona Declaration&lt;/a&gt; on Open Research Information, and there was a real dialogue about what open means in practice - not just in principle.&lt;/p&gt;
&lt;p&gt;Dimensions occupies an honest middle position here: we are a commercial company but we've always actively engaged and supported the research community for example by &lt;a href="https://www.digital-science.com/press-releases/digital-science-releases-global-research-identifier-database-grid-cc0-license/"&gt;releasing open datasets&lt;/a&gt;, or by giving them &lt;a href="https://www.digital-science.com/blog/introducing-srad-scientometric-researcher-access-data-program/"&gt;free access to our database for scientometrics projects&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;I came back with a list of things to look at in our funder coverage. I also came back with a clearer sense of why the work matters.&lt;/p&gt;
&lt;p&gt;That's not a bad outcome for fifteen minutes of slides.&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;em&gt;Thanks to the CLACSO team, IDRC, and CWTS/Leiden University for the invitation. The project homepage is at &lt;a href="https://www.clacso.org/fundingflows/"&gt;clacso.org/fundingflows&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/04/21/funding-flows-global-south-clacso/</guid></item><item><title>Dimensions as scientific data infrastructure: funding data, international flows, and open access</title><link>https://www.michelepasin.org/papers/2026/04/12/dimensions-as-scientific-data-infrastructure-funding-data-international-flows-and-open-access/</link><description></description><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2026/04/12/dimensions-as-scientific-data-infrastructure-funding-data-international-flows-and-open-access/</guid></item><item><title>The Shifting Landscape of Research Analytics: From Data Access to Trustworthy Insights</title><link>https://www.michelepasin.org/blog/2026/03/03/shifting-landscape-research-analytics/</link><description>&lt;p&gt;I watched the "&lt;a href="https://www.youtube.com/watch?v=BX5qFM8j9MU"&gt;Vibe Coding with Open Alex&lt;/a&gt;" video recently, and it's been rattling around in my head since.&lt;/p&gt;
&lt;h2&gt;The barrier has dropped&lt;/h2&gt;
&lt;p&gt;A researcher who used to need a vendor's tools or a specialist analyst can now point an LLM at a CSV of publications and get something meaningful in an afternoon. NotebookLM, Cursor, ChatGPT with code interpreter - these tools have commoditised a lot of what used to be specialist craft. Knowing how to wrangle data, write the right pandas operations, build a decent visualisation: it's still a skill, but it's no longer a bottleneck.&lt;/p&gt;
&lt;p&gt;The community is noticing. People at ISSI or STI who wouldn't have called themselves coders are now shipping notebooks.&lt;/p&gt;
&lt;h2&gt;What vendors still have&lt;/h2&gt;
&lt;p&gt;The traditional pitch - "we make the data accessible and usable" - is eroding. But it hasn't gone. The remaining advantages are real, just narrower:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Data quality and curation&lt;/strong&gt; is still genuinely hard. An LLM can't conjure a correctly disambiguated author profile from messy affiliation strings. The judgement calls embedded in our data - what counts as the same person, how to handle name variants, how to classify access type - represent accumulated domain knowledge. You can't replicate that just by having a model and a raw corpus.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coverage and timeliness&lt;/strong&gt; still matter. The gap between Dimensions and something patched together from Unpaywall + OpenAlex + CrossRef is real, especially at scale and for recent data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trustworthiness as infrastructure.&lt;/strong&gt; Institutions and funders need something they can cite in a report to government. That requires provenance, audit trails, a vendor who can be held accountable. An ad-hoc notebook doesn't cut it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where the value is moving&lt;/h2&gt;
&lt;p&gt;The role of a data vendor is genuinely shifting. Clients increasingly don't want a database to query - they want answers and frameworks.&lt;/p&gt;
&lt;p&gt;That means becoming more opinionated: providing benchmarks, recommended metrics, pre-classified outputs. Less neutral data pipe, more methodology partner. The value-add is less about retrieval and more about knowing &lt;em&gt;what to measure and why&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Something interesting is also happening with risk. Clients used to question their own capability to analyse data. Now many feel they have that capability - so the concern has shifted to whether the underlying data is trustworthy enough to build on. That's a subtle inversion, and it increases scrutiny on data quality. Pressure for some vendors, opportunity for others.&lt;/p&gt;
&lt;p&gt;The vendors who thrive in five years will be the ones who made their data legible to AI workflows, not just to human analysts.&lt;/p&gt;</description><pubDate>Tue, 03 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2026/03/03/shifting-landscape-research-analytics/</guid></item><item><title>Event: Hayden Thorpe live in Pordenone</title><link>https://www.michelepasin.org/blog/2025/10/27/hayden-thorpe-live/</link><description>&lt;p&gt;I went to see &lt;a href="https://en.wikipedia.org/wiki/Hayden_Thorpe"&gt;Hayden Thorpe&lt;/a&gt; for the first time the other night at Pordenone's &lt;a href="https://exconventolive.it/"&gt;Ex-Convento Live&lt;/a&gt; venue (Italy). It's quite funny because I had never heard of this musician before last week. I just ran into him on Spotify and immediately felt it was so introspective and inspiring, full of simple yet deep melodies. I loved the performance and am looking forward to seeing more of him!&lt;/p&gt;
&lt;p&gt;Here's a brief excerpt:&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/HRWEPGi-Hjk?si=bE8UmgBY7hzgoUYQ" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;

&lt;h2&gt;A Thorpe Music Box&lt;/h2&gt;
&lt;p&gt;A little interactive experiment..&lt;/p&gt;
&lt;p&gt;A lyric collage built from Hayden Thorpe's 2019 album &lt;a href="https://www.youtube.com/results?search_query=thorpe+diviner"&gt;Diviner&lt;/a&gt;. Phrases cut from all nine songs are scattered across the screen like torn newspaper clippings — move your mouse to illuminate them, click any fragment to read the full song on Genius.&lt;/p&gt;
&lt;p&gt;The piece runs entirely in the browser with no server: layout, sound, and interaction are generated in pure HTML and JavaScript. Audio is synthesised on the fly using the Web Audio API — a soft paper-flick when you brush a phrase, and occasional minor-pentatonic tones drifting in from the edges as the collage quietly stirs around you.&lt;/p&gt;
&lt;div style="position:relative; background:#080808; margin:2em 0;"&gt;

  &lt;div id="thorpe-gate"
    style="position:absolute;inset:0;background:#080808;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;z-index:5;transition:opacity 0.7s ease;"
    onclick="this.style.opacity='0'; setTimeout(()=&gt;this.style.display='none', 700)"&gt;
    &lt;span style="font-family:Georgia,serif;font-size:1.1em;letter-spacing:0.2em;color:#f4f1eb;text-transform:uppercase;"&gt;Thorpe Music Box&lt;/span&gt;
    &lt;span style="font-family:Georgia,serif;font-size:0.72em;letter-spacing:0.14em;color:rgba(244,241,235,0.3);margin-top:12px;font-style:italic;"&gt;click to illuminate&lt;/span&gt;
  &lt;/div&gt;

  &lt;iframe
    src="https://hacks.michelepasin.org/2026-06-19-thorpe-diviner/index.html"
    style="display:block; width:100%; height:500px; border:0;"
    title="Thorpe Music Box"
    allow="autoplay"
    allowfullscreen&gt;
  &lt;/iframe&gt;

&lt;/div&gt;

&lt;p&gt;&lt;a id="thorpe-fs-link" href="https://hacks.michelepasin.org/2026-06-19-thorpe-diviner/index.html" target="_blank" rel="noopener"&gt;
    ↗ open full screen
  &lt;/a&gt;&lt;/p&gt;
&lt;script&gt;
    document.getElementById('thorpe-fs-link').addEventListener('click', function(e) {
      var f = document.getElementById('thorpe-frame');
      if (f &amp;&amp; f.requestFullscreen) {
        e.preventDefault();
        f.requestFullscreen();
      }
      // else falls through to the href → opens in new tab
    });
  &lt;/script&gt;</description><pubDate>Mon, 27 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2025/10/27/hayden-thorpe-live/</guid></item><item><title>The Dimensions API: a domain specific language for scientometrics research</title><link>https://www.michelepasin.org/papers/2025/10/01/the-dimensions-api-a-domain-specific-language-for-scientometrics-research/</link><description>We describe the Dimensions Search Language (DSL), a domain-specific language for bibliographic and scientometrics analysis. The DSL is the main component of the Dimensions API (version 2.12.0), which provides end-users with a powerful, yet simple-to-learn and use, tool to search, filter, and analyze the Dimensions database using a single entry point and query language. The DSL is the result of an effort to model the way researchers and analysts describe research questions in this domain, as opposed to using established paradigms commonly used by software developers e.g., REST or SOAP. In this article, we describe the API architecture, the DSL main features, and the core data model. We describe how it is used by researchers and analysts in academic and business settings alike to carry out complex research analytics tasks, like calculating the H-index of a researcher or generating a publications' citation network.</description><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2025/10/01/the-dimensions-api-a-domain-specific-language-for-scientometrics-research/</guid></item><item><title>Enhancing the Accessibility of ORCID Public Data, now additionally hosted on Google BigQuery</title><link>https://www.michelepasin.org/papers/2025/06/16/enhancing-the-accessibility-of-orcid-public-data-now-additionally-hosted-on-google-bigquery/</link><description>ORCID is committed to openness, exemplified by the annual release of its Public Data File since 2012. This dataset, encompassing all public ORCID records, has been downloaded over 190,000 times and serves as a resource for analyzing research community dynamics, scientific migrations, collaboration networks, and ORCID adoption trends. However, the file’s substantial size poses challenges for users lacking advanced data management skills, hindering exploratory analyses</description><pubDate>Mon, 16 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2025/06/16/enhancing-the-accessibility-of-orcid-public-data-now-additionally-hosted-on-google-bigquery/</guid></item><item><title>Performing Research Analytics at Scale: the Dimensions Reporting Platform</title><link>https://www.michelepasin.org/papers/2025/06/02/performing-research-analytics-at-scale-the-dimensions-reporting-platform/</link><description></description><pubDate>Mon, 02 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2025/06/02/performing-research-analytics-at-scale-the-dimensions-reporting-platform/</guid></item><item><title>Performing Research Analytics at Scale: the Dimensions Reporting Platform</title><link>https://www.michelepasin.org/papers/2025/05/05/performing-research-analytics-at-scale-the-dimensions-reporting-platform/</link><description></description><pubDate>Mon, 05 May 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2025/05/05/performing-research-analytics-at-scale-the-dimensions-reporting-platform/</guid></item><item><title>Event: Installation at Sydney Data Arena</title><link>https://www.michelepasin.org/blog/2025/03/17/installation-sydney-data-arena/</link><description>&lt;p&gt;My piece, "Dreamy Pianos - Study No 1 in C Minor," is part of a new sonic installation by Simon Porter, currently showcased at the University of Technology Sydney.&lt;/p&gt;
&lt;p&gt;The installation took place on March 4, 2025, as part of the Digital Science Showcase within the &lt;a href="https://dataarena.net/"&gt;UTS DataArena&lt;/a&gt;. The installation, titled &lt;strong&gt;Australian Institution Co-authorship Collaboration Patterns&lt;/strong&gt;, was developed by &lt;a href="https://www.linkedin.com/in/simon-porter-9828471/"&gt;Simon Porter&lt;/a&gt; and represents a network of co-authored researchers affiliated with Australian institutions from 2018-2023. &lt;/p&gt;
&lt;p&gt;Each researcher has been color-coded by the scientific field code they are most associated with. Each researcher is depicted by a sphere and given a size based on the number of publications produced. More information is available on the installation's &lt;a href="https://figshare.com/articles/dataset/Australian_Institution_Co-authorship_Collaboration_Patterns_DataArena_exhibition_March_4th/28559957"&gt;Figshare page&lt;/a&gt;.&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/8ocoOJsvi1Q?si=KbvRslTVSWdPAPI1&amp;autoplay=1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;Find out more about my piece: &lt;a href="https://www.michelepasin.org/blog/2023/12/09/many-pianos-1/"&gt;Dreamy pianos - Study No 1 in C Minor&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Mon, 17 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2025/03/17/installation-sydney-data-arena/</guid></item><item><title>Alleanze Ingannevoli: Svelare il lato nascosto della ricerca</title><link>https://www.michelepasin.org/papers/2025/01/22/alleanze-ingannevoli-svelare-il-lato-nascosto-della-ricerca/</link><description>Introdotta nel mondo della ricerca nel 2024, la scientometria forense (Forensic Scientometrics o FoSci) è una nuova disciplina sviluppata per facilitare l'analisi dei dati di pubblicazione, delle reti di co-autorialità, delle collaborazioni istituzionali e altro ancora. Le tecniche FoSci permettono di portare alla luce aspetti della ricerca scientifica  che indicano potenziali rischi, come la partecipazione occulta a reti di ricerca compromesse o i rapporti con individui o gruppi noti per la diffusione di produzioni scientifiche di dubbia qualità o fraudolente.</description><pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2025/01/22/alleanze-ingannevoli-svelare-il-lato-nascosto-della-ricerca/</guid></item><item><title>Unpacking OpenAlex topics classification</title><link>https://www.michelepasin.org/blog/2024/09/27/open-alex-topics/</link><description>&lt;p&gt;In this post I have taken a closer look at the classification of scientific disciplines in &lt;a href="https://openalex.org/"&gt;OpenAlex&lt;/a&gt;, a recently developed database of scientific works. The topics classification has been entirely generated computationally using a mix of citation clustering techniques and LLM-based labeling. The results, although not always so precise, are definitely worth exploring further.&lt;/p&gt;
&lt;p&gt;Last week I went to the &lt;a href="https://sti2024.org/sti-conference/"&gt;STI 2024 conference&lt;/a&gt; in Berlin, the annual European get together of experts in the area of research analytics and evaluation. &lt;/p&gt;
&lt;p&gt;Lots of interesting talks but probably the thing that stroke me the most was the general excitement and sense of expectation about OpenAlex. &lt;/p&gt;
&lt;p&gt;If you haven't encountered yet, &lt;a href="https://openalex.org/"&gt;OpenAlex&lt;/a&gt; is a 2022-released open database of research publications and other related content e.g. datasets, authors, journals etc.. developed by &lt;a href="https://ourresearch.org/"&gt;OurResearch&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Pretty much all of OpenAlex data and services and made available free of charge (with options to &lt;a href="https://help.openalex.org/hc/en-us/articles/24397762024087-Pricing"&gt;pay more for premium services&lt;/a&gt;) under a handy CC0 license.&lt;/p&gt;
&lt;h2&gt;Scientific topics&lt;/h2&gt;
&lt;p&gt;One thing that caught my attention is the topics classification in OpenAlex. This is as hierarchical classification of scientific topics that consists of various thousand categories organized into a 5-levels hierarchy: &lt;code&gt;keywords&lt;/code&gt;, &lt;code&gt;topics&lt;/code&gt;, &lt;code&gt;sub-fields&lt;/code&gt;, &lt;code&gt;fields&lt;/code&gt; and &lt;code&gt;domains&lt;/code&gt;. &lt;/p&gt;
&lt;p&gt;The gist of this approach, according to the OpenAlex team:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://help.openalex.org/hc/en-us/articles/24736129405719-Topics"&gt;Topics&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Works in OpenAlex are tagged with Topics using an automated system that takes into account the available information about the work, including title, abstract, source (journal) name, and citations. There are around 4,500 Topics. Topics are grouped into subfields, which are grouped into fields, which are grouped into top-level domains. This is shown in the diagram below, along with the counts for each.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://help.openalex.org/hc/en-us/articles/24736201130391-Keywords"&gt;Keywords&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Our team put together a new implementation of keywords based on our Topics. There are currently over 26,000 keywords and we expect to add more as time goes on. [...] With our new topics system that was developed in coordination with CWTS, we came out with a list of 10 keywords for each topic. In order to assign keywords to works, we took the topics assigned to that work (at most 3 topics), pulled the keywords associated with those topics (at most 30 keywords, for now) and then determined the similarity of the keyword to the title/abstract using embeddings (and the BGE M3-Embedding model).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;See the &lt;a href="https://help.openalex.org/hc/en-us/sections/24734432836887-Data"&gt;official data documentation&lt;/a&gt; for more, and in particular also worth looking into the paper &lt;a href="https://docs.google.com/document/d/1bDopkhuGieQ4F8gGNj7sEc8WSE8mvLZS/edit#heading=h.5w2tb5fcg77r"&gt;OpenAlex: End-to-End Process for Topic Classification&lt;/a&gt; that describes the process that OpenAlex uses to assign topics to works. Note: this approach is itself taking advantage of publications clustering technology developed by &lt;a href="https://www.leidenmadtrics.nl/articles/an-open-approach-for-classifying-research-publications"&gt;Leiden CWTS group&lt;/a&gt;. &lt;/p&gt;
&lt;h2&gt;Exploring the topics hierarchy&lt;/h2&gt;
&lt;p&gt;I downloaded the topics to have a closer look. This &lt;a href="https://github.com/lambdamusic/openalex-hacks/blob/main/src/2024-09-topics-explore.ipynb"&gt;jupyter notebook&lt;/a&gt; pulls the topics dataset and turns it into a format that can be more easily visualized, eg by the &lt;a href="https://get.carrotsearch.com/foamtree/latest/demos/"&gt;FoamTree chart&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;See the  results &lt;a href="https://lambdamusic.github.io/openalex-hacks/foamtree/"&gt;in full-screen on this page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First impressions: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The classification is pretty impressive, especially considering it's been fully generated algorithmically via a combination of citation based clustering methods and generative AI. &lt;/li&gt;
&lt;li&gt;The topics titles are generally pretty descriptive and in some cases surprisingly specific too EG see &lt;a href="https://openalex.org/topics/T11685"&gt;Zebrafish as a Model Organism for Multidisciplinary Research&lt;/a&gt; and &lt;a href="https://openalex.org/topics/T14319"&gt;Automated Currency Recognition and Authentication&lt;/a&gt; (wow - who would have guessed that's a thing!).&lt;/li&gt;
&lt;li&gt;The hierarchy also makes sense to me, of course modeling scientific knowledge is quite an opinionated piece of work and there is no right or wrong way to do it, but in general I couldn't find any parent-child relationships that stood out as wrong or completely inadequate. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing worth of notice is that all topics have either a Wikipedia or a Wikidata page (or both), which makes it pretty handy for cross-database analytics projects. &lt;/p&gt;
&lt;p&gt;I also had a go at transforming the classification into an &lt;strong&gt;ontology&lt;/strong&gt; or more precisely an RDF (&lt;a href="https://www.w3.org/TR/2008/WD-skos-reference-20080829/skos.html"&gt;SKOS&lt;/a&gt;) model, so more compatible with knowledge graph technologies like wikidata and schema.org. If you are interested, the results are here &lt;a href="https://lambdamusic.github.io/openalex-hacks/ontology/openalex-topics-rdf.ttl"&gt;openalex-topics-rdf.ttl&lt;/a&gt; and here a summary of &lt;a href="https://lambdamusic.github.io/openalex-hacks/"&gt;generated ontology documentation&lt;/a&gt; for it.&lt;/p&gt;
&lt;p&gt;Now, on to the &lt;em&gt;less so good&lt;/em&gt; bits..&lt;/p&gt;
&lt;p&gt;I took at look at the actual publications that get classified within these topics, but the results are a bit spotty. This is just a very preliminary analysis.. as I basically ran a few spot checks of papers I am familiar with, and found them in surprising 'places'. &lt;/p&gt;
&lt;p&gt;For example, looking at &lt;a href="https://openalex.org/authors/A5005388209"&gt;my publications page&lt;/a&gt; on OpenAlex:  &lt;/p&gt;
&lt;p&gt;&lt;img alt="2024-09-27-open-alex-topics.png" src="https://www.michelepasin.org/media/static/blog_img/2024-09-27-open-alex-topics.png" /&gt;&lt;/p&gt;
&lt;p&gt;The main topic &lt;a href="https://openalex.org/works?page=1&amp;amp;filter=authorships.author.id%3Aa5005388209,primary_topic.id%3At10215"&gt;Semantic Web and Ontology Development&lt;/a&gt; is pretty spot on. &lt;/p&gt;
&lt;p&gt;But it turns out that I have done work in two areas that I wasn't quite expecting: &lt;a href="https://openalex.org/works?page=1&amp;amp;filter=primary_topic.id%3At11986"&gt;Management and Reproducibility of Scientific Workflows&lt;/a&gt; and &lt;a href="https://openalex.org/works?page=1&amp;amp;filter=primary_topic.id%3At10064"&gt;Statistical mechanics of complex networks&lt;/a&gt;. I suppose it could be argued that my work is tangential to those areas? &lt;/p&gt;
&lt;p&gt;Looking at other publications, the classification can be instead plainly wrong:&lt;/p&gt;
&lt;p&gt;&lt;img alt="2024-09-27-openalex-2.png" src="https://www.michelepasin.org/media/static/blog_img/2024-09-27-openalex-2.png" /&gt;&lt;/p&gt;
&lt;p&gt;On the &lt;a href="https://openalex.org/works/w2514495023"&gt;New Perspectives on Medieval Scotland&lt;/a&gt; publication, &lt;strong&gt;Scotland and Wales seem to have gotten mixed up&lt;/strong&gt;. Or maybe is it because the citation network of Welsh historian is also correlated to Scottish history? &lt;/p&gt;
&lt;p&gt;I wondered if these clusters might be more representative of groups of researchers / publications connected through an &lt;em&gt;emerging&lt;/em&gt; topic, which may not be established or even known to them as a distinct area. Fascinating question..  &lt;/p&gt;
&lt;p&gt;Another example is &lt;a href="https://openalex.org/works/w2893859569"&gt;this paper&lt;/a&gt; which is about HCI and databases, but instead is classified as NLP: &lt;/p&gt;
&lt;p&gt;&lt;img alt="2024-09-27-open-alex-topics-3.png" src="https://www.michelepasin.org/media/static/blog_img/2024-09-27-open-alex-topics-3.png" /&gt;&lt;/p&gt;
&lt;h2&gt;Conclusions&lt;/h2&gt;
&lt;p&gt;Without a doubt, an automatic classification of science topics is &lt;strong&gt;a hard problem to solve&lt;/strong&gt;. So, despite the sometimes patchy assignment of topics to works, the fact the OpenAlex team did it all using citations-based clustering is still pretty impressive. I honestly hope there will be future iterations where we see this progressing further! &lt;/p&gt;
&lt;p&gt;The enthusiasm around OpenAlex is justified, I believe. OpenAlex has has a pretty good &lt;a href="https://docs.openalex.org/how-to-use-the-api/api-overview"&gt;API&lt;/a&gt;, good coverage of publications data (see this &lt;a href="https://arxiv.org/abs/2401.16359"&gt;arXiv report&lt;/a&gt;) and a committed startup team developing it. All good ingredients that contribute to making the research community feel this may be a stepping stone towards a more open, free and reliable research data infrastructure. &lt;/p&gt;
&lt;p&gt;I’m genuinely sympathetic towards initiatives like this. An ecosystem with open Research metadata makes science progress faster. I’ve had my fair share of experience with such projects while I was working on &lt;a href="https://www.michelepasin.org/blog/2023/02/03/rip-scigraph/index.html"&gt;SN Scigraph&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Long term, no one knows whether this can be a sustainable enterprise. Data quality, funding, the need to keep innovating and for users' uptake are surely among the main challenges that OpenAlex has to deal with. &lt;/p&gt;
&lt;p&gt;Digital Science's Daniel Hook recently outlined a &lt;a href="https://www.digital-science.com/tldr/article/barcelona-a-beautiful-horizon/"&gt;model for thinking about innovation&lt;/a&gt; where both open data and commercial enterprises can - and should - coexists. That makes a lot of sense to me, so I'd like to think of a future where such synergies do become real .. and I guess that this little learning exercise about OpenAlex is a step in that direction. &lt;/p&gt;</description><pubDate>Fri, 27 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2024/09/27/open-alex-topics/</guid></item><item><title>Dimensions: Calculating Disruption Indices at Scale</title><link>https://www.michelepasin.org/papers/2023/09/13/dimensions-calculating-disruption-indices-at-scale/</link><description>Evaluating the disruptive nature of academic ideas is a new area of research evaluation that moves beyond standard citation-based metrics by taking into account the broader citation context of publications or patents. The "CD index" and a number of related indicators have been proposed in order to characterise mathematically the disruptiveness of scientific publications or patents. This research area has generated a lot of attention in recent years, yet there is no general consensus on the significance and reliability of disruption indices. More experimentation and evaluation would be desirable, however is hampered by the fact that these indicators are expensive and time-consuming to calculate, especially if done at scale on large citation networks. We present a novel method to calculate disruption indices that leverages the Dimensions cloud-based research infrastructure and reduces the computational time taken to produce such indices by an order of magnitude, as well as making available such functionalities within an online environment that requires no set-up efforts. We explain the novel algorithm and describe how its results align with preexisting implementations of disruption indicators. This method will enable researchers to develop, validate and improve mathematical disruption models more quickly and with more precision, thus contributing to the development of this new research area.</description><pubDate>Fri, 06 Sep 2024 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/papers/2023/09/13/dimensions-calculating-disruption-indices-at-scale/</guid></item><item><title>Livecoding: Techno jam</title><link>https://www.michelepasin.org/blog/2024/07/05/techno-jam/</link><description>&lt;p&gt;This piece plunges into a heavy, atmospheric soundscape driven by the collision of overlapping basslines and raw industrial noise. &lt;/p&gt;
&lt;p&gt;The melody is provided by a synth line that continuously varies a diatonic interval within a minor scale, creating a sense of subtle suspense and emotional depth. The livecoding environment allows this melodic movement to be modified in real-time, enabling dynamic, expressive shifts in the harmonic texture.&lt;/p&gt;
&lt;p&gt;Crucially, the percussion—specifically the kick drum and snare—is not sequenced conventionally. Instead, these elements are activated only when the synth's oscillator exceeds a defined threshold, linking the rhythm directly to the intensity of the melodic line (which is also driving the filter's cutoff and resonance). This creates a highly reactive, breathing relationship between the melodic and percussive layers.&lt;/p&gt;
&lt;p&gt;Listen with a good pair of headphones!&lt;/p&gt;
&lt;iframe width="560" height="315" src="https://www.youtube.com/embed/Mk31VUWwDnQ?si=WTWV4ZnMTcTLBRKN&amp;autoplay=1&amp;amp;start=340" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen&gt;&lt;/iframe&gt;

&lt;h2&gt;Techniques&lt;/h2&gt;
&lt;h3&gt;Rhythmic patterns&lt;/h3&gt;
&lt;p&gt;Interesting rhythm patterns can be simply generated by using non standard beats. &lt;/p&gt;
&lt;p&gt;Eg here we have a 5/3 downbeat, with the hi-hat playing at each 1/4. This results in two distinct syncopated beats every bar.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-scheme"&gt;(at 5/3 1/4 (playk *kit-hhat3* 90))
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Synth line&lt;/h3&gt;
&lt;p&gt;Generated using a varying diatonic interval on a minor scale. Which can be modified in real time for nice effects etc..&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-scheme"&gt;(play bass (mkint C2 (oneof 0 3 4 5) 'm ) 90 dur)
(mcc *cutoff* osc1)
(mcc *reso* osc2)

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Oscillators driving the DrumKit&lt;/h3&gt;
&lt;p&gt;The kick drum and snare are activated only when the synth oscillator (driving the cutoff and resonance) goes beyond a certain threshold. &lt;/p&gt;
&lt;p&gt;This allows to build up momentum semi automatically.&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-scheme"&gt;
;; cyclical drums
(if&amp;gt; osc1 60 
  (at 1 1/2 (playk *kit-kick* 90)))

(if&amp;lt; osc1 60 
  (at 10/3 1/4 (playk *kit-snare* 90)))

&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;Credits&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Livecoding software: &lt;a href="https://extemporelang.github.io/"&gt;Extempore &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sounds: Ableton Live&lt;ul&gt;
&lt;li&gt;syn1: Analog Lab V / Kick Glitch Hits&lt;/li&gt;
&lt;li&gt;syn2: ZebraHZ / Chordination &lt;/li&gt;
&lt;li&gt;syn3: Kontakt / Ethereal Earth / Trumpet Fireflies&lt;/li&gt;
&lt;li&gt;syn4: Police Radio Sample&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Full source on GitHub: &lt;a href="https://github.com/lambdamusic/The-Musical-Code/blob/main/works/2024-07-techno-beat.xtm"&gt;2024-07-techno-beat.xtm&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 05 Jul 2024 00:00:00 +0000</pubDate><guid>https://www.michelepasin.org/blog/2024/07/05/techno-jam/</guid></item></channel></rss>