{"found":57969,"hits":[{"document":{"authors":[{"contributor_roles":[],"family":"Swain","given":"Jonathan","url":"https://orcid.org/0000-0003-4457-1481"}],"blog":{"authors":[{"name":"Jon Swain","url":"https://orcid.org/0000-0003-4457-1481"}],"community_id":"13f55986-f209-443c-ae0d-2f9f3f521e5a","created":1788652800,"current_feed_url":null,"description":"I am a cheminformatician and data scientist, originally from the UK, but often found in Aotearoa (New Zealand). I'm interested in using data science and machine learning to solve problems in drug discovery.","doi":"https://doi.org/10.59350/jonswain","favicon":"https://rogue-scholar.org/api/communities/13f55986-f209-443c-ae0d-2f9f3f521e5a/logo","feed_format":"application/atom+xml","feed_url":"https://jonswain.github.io/feed.xml","filter":null,"generator":"Jekyll","home_page_url":"https://jonswain.github.io/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"jonswain","status":"active","subfield":"3002","title":"Jon Swain","updated":1793494800,"use_api":null},"blog_name":"Jon Swain","blog_slug":"jonswain","content_html":"<p><img alt=\"Morg2SMILES: generative recovery of SMILES from Morgan fingerprints\" class=\"img-responsive center-image\" src=\"https://jonswain.github.io/images/morg2smiles/social-card.png\"/></p>\n<p>This is not actually a blog post on generative recovery of SMILES strings from Morgan fingerprints. It's about agentic coding, dressed up as a post about generative models.</p>\n<p>The output was an 8M-parameter model, trained for 25.5 hours on my laptop, which generates a molecule with the correct fingerprint for <strong>97.3% of unseen Morgan fingerprints within 20 guesses</strong>, and <strong>90.8% on the first guess</strong>, with 98.1% SMILES validity. A nearest-neighbour baseline on the same molecules scores 0.0% exact match (by design, since test fingerprints are excluded from the training set), showing that this model isn't just memorising the training set.</p>\n<p>The fun part is that I didn't write a single line of code myself.</p>\n<h2 id=\"inspired-by-nispo\">Inspired by NISPO</h2>\n<p>I was recently sent a link to <a href=\"https://github.com/oxpig/nispo\">NISPO</a> (<em>Nomenclature Inference for Structures, Powered by OPSIN</em>), a library released by Nicholas Runcie, Fergus Imrie, and Charlotte Deane at OPIG (Oxford Protein Informatics Group, what a great acronym!). What caught my eye is that the entire library is AI-generated. From the repository's README file:</p>\n<blockquote>\n<p>This repository was developed using OpenAI Codex. The codebase is AI-generated and was created through an autonomous self-iteration process: Codex repeatedly ran the benchmark, inspected failures, updated the implementation, and reran the benchmark until high OPSIN round-trip accuracy was achieved.</p>\n</blockquote>\n<p>I thought this was a really cool idea. <a href=\"https://github.com/dan2097/opsin\">OPSIN</a> (<em>Open Parser for Systematic IUPAC Nomenclature</em>) was originally developed by Daniel Lowe and colleagues at the University of Cambridge, and these days the webservice is hosted by the EMBL-EBI (the European Bioinformatics Institute). It's a really useful tool if you need to convert an IUPAC name to a structure. I've used it before in pipelines to extract chemical entities from literature.</p>\n<p>But what if you need to do the reverse? What if you have a chemical structure and you need the IUPAC name for your paper? (Yes, I guess you could just use ChemDraw, but what if you don't have a licence?) That's where NISPO comes in. Because OPSIN is a cheap, deterministic function, it can be used as an oracle for an agentic loop. The authors took structures from PubChem, had NISPO generate a name for each, and used OPSIN to parse that name back into a structure. The round-trip accuracy, the fraction of names that parse back to the original structure, became the objective the agent iterated against. With the benchmark and oracle in place, Codex did the rest without human intervention.</p>\n<blockquote>\n<p>Whilst preparing this I saw <a href=\"https://baoilleach.blogspot.com/2026/10/assessing-open-source-iupac-name.html\">this blog post</a> from Noel O'Boyle on open-source IUPAC name generators. <a href=\"https://github.com/lamalab-org/openclatura\">OpenClatura</a> and <a href=\"https://chemrxiv.org/doi/full/10.26434/chemrxiv.15009769/v1\">Orthonym</a> also do the same thing.</p>\n</blockquote>\n<h2 id=\"running-a-fingerprint-backwards\">Running a fingerprint backwards</h2>\n<p>This got me thinking: are there any other cheap, deterministic functions that would be useful (or even not that useful) to invert? Morgan fingerprints are an obvious candidate, with one big difference: they're hashed and usually folded, so they throw information away. Different molecules can share the same fingerprint, and different substructures can share the same bit due to bit collisions.</p>\n<p>Two things make this a good fit for an autonomous loop, and they are the same two that made NISPO possible:</p>\n<ul>\n<li><strong>It's easy to check if the answer is right.</strong> RDKit recomputes any candidate's fingerprint and compares it bit-for-bit against the target. There's no need for a proxy metric or human judgement.</li>\n<li><strong>Guesses are cheap.</strong> The oracle is free to call, so the model can generate k candidates and let the oracle filter them. This is measured using <code class=\"language-plaintext highlighter-rouge\">recovery@k</code>: the fraction of fingerprints for which at least one of k guesses is an exact match.</li>\n</ul>\n<p>Unlike NISPO and OpenClatura, which are <em>rule-based</em> packages, I wanted to train a neural network while borrowing the same loop-plus-oracle approach.</p>\n<p>Why might anyone care? Honestly, I thought it would be fun. A better answer is privacy: fingerprints are treated as a safe, \"anonymised\" way to share chemical data, on the assumption that hashing and folding throw away enough to make the molecule unrecoverable. If a small model trained for a day on my laptop can recover over 97% of them within 20 guesses, that assumption doesn't really hold up.</p>\n<blockquote>\n<p>This isn't an entirely novel idea; there are a few examples in the literature like <a href=\"https://pubs.rsc.org/sc/article/11/38/10378/705770/Neuraldecipher-reverse-engineering-extended\"><em>Neuraldecipher</em> (Le et al., <em>Chem. Sci.</em> 2020)</a> or <a href=\"https://link.springer.com/article/10.1186/s13321-023-00693-0\">Ucak et al. (2023)</a>.</p>\n</blockquote>\n<h2 id=\"is-claude-better-at-coding-than-me-spoiler-yes\">Is Claude better at coding than me? (Spoiler: Yes)</h2>\n<p><a href=\"https://github.com/jonswain/morg-to-smiles/\">I first tried this idea</a> a little while ago, without any AI assistance, and also without much success. This seemed like the perfect time to try it again, using the same idea as NISPO. I iterated with Claude Code in Plan Mode a few times to work out how to describe exactly what I wanted, then I largely left it to make decisions on its own. On days or weekends where I wasn't planning to use my computer, I would open up Claude and tell it \"I'm about to log off for XX hours, do whatever you think would be most useful for the project\". The results were far more impressive than I managed on my own.</p>\n<p>Twenty-four days, 159 commits, and 119 hours of training spread over 22 runs. All on an Apple M2 laptop, with no cloud GPU at any point. Nine of those sessions started with me handing the machine over for the night, or longer, and Claude left the write-ups in <a href=\"https://github.com/jonswain/morg2smiles/tree/main/docs\"><code class=\"language-plaintext highlighter-rouge\">docs/overnight-*.md</code></a>. At the end of the project, I got Claude to create a <a href=\"https://github.com/jonswain/morg2smiles/blob/main/docs/report.md\">full report</a> on the process.</p>\n<h3 id=\"initial-planning\">Initial planning</h3>\n<p>I used Plan Mode with Claude to describe what I wanted to build, explaining that the idea was inspired by NISPO, and gave it a link to my old attempt. Once the first model had trained, Claude went back and read that old repo properly. It called my attempt \"a reasonable-looking VAE\" and listed three failures, in its words:</p>\n<ol>\n<li>\"It had no oracle. It selected checkpoints on validation loss and reported mean Tanimoto similarity at generation time. Neither answers 'did we get the molecule back?'\"</li>\n<li>\"It generated one candidate, by greedy argmax. For a task whose natural form is 'generate k, keep what the oracle accepts', that's a self-imposed recovery@1, the hardest version of the metric.\"</li>\n<li>\"The fingerprint reached the decoder only as the GRU's initial hidden state. One 256-d vector, squeezed through a stochastic 128-d latent, expected to survive up to 242 decoding steps.\"</li>\n</ol>\n<h3 id=\"overnight-sessions\">Overnight sessions</h3>\n<p>From here I took a step back. I mostly allowed Claude to make decisions, occasionally suggesting things when I thought the direction wasn't quite correct. Each night followed the same routine. I specified it for the first couple of sessions, then Claude kept to it without being asked:</p>\n<ul>\n<li>Wrote a plan with time estimates against each item.</li>\n<li>Ordered the jobs so the ones everything else depended on ran first.</li>\n<li>Chained them in a shell script with a hard deadline and per-stage clock guards, so an overrunning job got skipped rather than running into the morning.</li>\n<li>Then wrote up the results, including the things that went wrong, in a dated document ending with a next-steps note for whenever I next sat down.</li>\n</ul>\n<h3 id=\"where-i-needed-to-step-in\">Where I needed to step in</h3>\n<p>During this process I started to wonder if this is what being a PhD supervisor feels like. After six nights, Claude appeared to be having a lot of fun and was exploring a lot of different things like an overexcited PhD student. I wondered if this would drag on without finding a natural conclusion (and I wanted my laptop back at weekends), so I prompted Claude to start thinking about a conclusion: training a final model on the entire ChEMBL dataset.</p>\n<p>At the end of the project I wanted Claude to create a final report that described the entire process and the results. The first draft read as if it was written for someone very involved in the project, with lots of undefined terms and not enough explanation (like a first draft of a PhD thesis?). To fix this I decided to run an internal peer review. I asked Claude to generate two sub-agents (Reviewer 1 and the dreaded Reviewer 2), give them access to the report and repository, but no prior knowledge of the project. They were to flag where things were ambiguous, suggest improvements, and give general feedback. The original agent was allowed to push back on the feedback, and through a few iterations these worked together to produce the final report.</p>\n<p>Some of the blocking errors Reviewer 2 found were introduced by the changes Reviewer 1 had suggested (conflicting reviewers sounds familiar), with each review pass removing more errors than it added while still introducing new ones.</p>\n<h2 id=\"final-thoughts-and-conclusions\">Final thoughts and conclusions</h2>\n<ul>\n<li><strong>Fingerprint collisions were much less common than I expected.</strong> This surprised me the most. With the first subset of 11,669 molecules, 99.97% had unique fingerprints (ECFPs, radius 2, binary, folded to 2,048 bits). Even over the entire 2M compound ChEMBL dataset, only 2.01% of molecules share a fingerprint with another. This is fairly consistent up until about 40 heavy atoms, where fingerprint clashes become much more common. Above 50 heavy atoms, this rises to more than 8%.</li>\n<li><strong>Claude likes planning more experiments.</strong> Left to its own devices, it always seemed to find another question that needed just one more run. Eventually I asked for a plan to a <em>finished</em> project and this was successful at focusing the project. If I were repeating this process, I would define this at the start, and spend more time planning the steps to reach it before letting Claude loose.</li>\n<li><strong>Claude still isn't great at arithmetic (and kept mixing up its own metrics).</strong> Two of the evaluation scripts defined the k-guess budget differently (k distinct valid molecules vs. k raw proposals including duplicates and invalid strings), and one of the errors Reviewer 2 caught was Claude subtracting numbers across those two conventions: the exact same mistake the repo had already documented five times. More reviews did not help, so eventually Claude wrote a test that recomputes every number in the report from the saved data, fixing it on its first run.</li>\n</ul>\n<p>Below, I've included Claude's own summary of the architecture, nightly experiments, and results as an appendix (the tetrapeptide collision example in particular is interesting).</p>\n<hr/>\n<h2 id=\"appendix-what-claude-made-in-claudes-own-words\">Appendix: What Claude made (in Claude's own words)</h2>\n<p><em>(Taken from the repository's <code class=\"language-plaintext highlighter-rouge\">README.md</code>, where Claude writes in the first person, sometimes on my behalf and sometimes as itself.)</em></p>\n<h3 id=\"data-and-metric\">Data and metric</h3>\n<p><strong>Data.</strong> ChEMBL 35, standardised and deduplicated, stereochemistry stripped, restricted to twelve common elements and 3\u201364 heavy atoms, in shards of 10k / 100k / 1M / full (1,986,551 molecules total: 1,881,996 training + 104,555 validation). The first three are nested, drawn in order from one fixed shuffle, so a molecule held out of the 100k shard is usually <em>inside</em> the 1M shard's training set. The full shard breaks that chain deliberately: it is built excluding the smaller shards' held-out molecules, so one evaluation set can be clean for every model at once. It is therefore not a superset of the 1M shard, which I had assumed until a collision group that shrank between the two proved otherwise.</p>\n<p><strong>Fingerprint.</strong> Morgan, radius 2, binary, folded to 2,048 bits, which sets about 50 bits on an average molecule.</p>\n<p><strong>The metric.</strong> <code class=\"language-plaintext highlighter-rouge\">recovery@k</code> on the <code class=\"language-plaintext highlighter-rouge\">fp_unseen</code> slice: the fraction of held-out fingerprints, absent from training, for which at least one of k distinct guesses reproduces the fingerprint exactly. Two details matter more than they look:</p>\n<ul>\n<li><strong>One slot buys a distinct <em>molecule</em>, not a distinct string.</strong> Two spellings of one molecule are one guess. An early version deduplicated by string and reported \"18 of 20 exact matches\" for aspirin that were 18 spellings of the same molecule.</li>\n<li><strong>An invalid string is not a guess at all.</strong> RDKit rejects it locally and for free, so no caller spending oracle queries would ever spend one on it.</li>\n</ul>\n<h3 id=\"model-architecture\">Model architecture</h3>\n<p>A fingerprint is a <strong>set</strong>, so it's encoded as one. Each set bit becomes a token (a bit embedding plus a count embedding), with no positional encoding, and a transformer encoder over that short sequence (about 50 tokens, not 2,048) produces the cross-attention memory for a causal SMILES decoder. The decoder can then attend to the specific atom environments that imply each atom it emits. This is permutation-invariant by construction, spends no compute on the 98% of bits that are zero, and serves binary, count, folded and unfolded fingerprints through one code path.</p>\n<p>4 encoder + 4 decoder layers, <code class=\"language-plaintext highlighter-rouge\">d_model</code> 256, 8 heads, <code class=\"language-plaintext highlighter-rouge\">d_ff</code> 1024, 7,963,767 parameters, an atom-level SMILES tokeniser, 128-token cap. The vocabulary is built from whichever shard the model trains on, so it is 119 tokens for the final model and 113 for the overnight one, which is why two otherwise identical configs differ slightly in parameter count.</p>\n<p>Training uses <strong>SMILES randomisation</strong>: a fresh random traversal of each molecule every epoch. The fingerprint is always computed from the canonical molecule, so the input is unchanged while the target varies, which stops the decoder collapsing onto one string and gives the sampling diversity <code class=\"language-plaintext highlighter-rouge\">recovery@k</code> rewards. It also seems to be why 30 epochs of a 90k-molecule shard showed no overfitting at all: every epoch is a fresh target string.</p>\n<h3 id=\"nightly-work\">Nightly work</h3>\n<p>Nine sessions over twenty-four days. The column worth reading is \"what came out\nof it\", which is rarely the same as what the night was for.</p>\n<table>\n<thead>\n<tr>\n<th>#</th>\n<th>date</th>\n<th>session</th>\n<th>what it was for</th>\n<th>what came out of it</th>\n<th>did I step in?</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>\u2014</td>\n<td>10-08</td>\n<td>4.2 h</td>\n<td>Phase 1: can a conditional decoder do this at all?</td>\n<td><code class=\"language-plaintext highlighter-rouge\">recovery@20</code> 0.5367 against a baseline of exactly 0.0000. Go/no-go passed by its whole margin.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>1</td>\n<td>10-09</td>\n<td>15 h</td>\n<td>Where is the ceiling: data, compute, or model size?</td>\n<td>\"10\u00d7 data is worth +30.4 points\". <strong>Wrong</strong>: the two runs differed in compute as well.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>2</td>\n<td>10-10</td>\n<td>16 h</td>\n<td>The control night 1 was missing</td>\n<td><strong>+24.9 points from compute alone</strong> on a fixed corpus, so night 1's headline was wrong regardless. Also the realisation that at a fixed step budget, corpus size and repetition rate are the same variable.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>3</td>\n<td>10-14</td>\n<td>6 h</td>\n<td>The 10.5% still being missed, and count fingerprints</td>\n<td><strong>2 of 206 failures are fingerprint collisions</strong>, so it is a capability limit and not an information one. <strong>Consensus ranking is worth +22 points.</strong> Counts: no gain.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>4</td>\n<td>10-15</td>\n<td>12 h</td>\n<td>The error bar the project had never had</td>\n<td>sd 0.75 points between seeds, so <strong>gaps under 1.6 points are not evidence</strong>. T=0.6 is worth +1.99 points, all of it on large molecules.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>5</td>\n<td>10-16</td>\n<td>15 h</td>\n<td>Why large molecules fail</td>\n<td>The cliff is <strong>combinatorial</strong>: the decoder proposes ~20 molecules at ~0.65 Tanimoto whatever the size, and recovery asks whether that cloud contains an exact preimage.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>6</td>\n<td>10-17/19</td>\n<td>35 h</td>\n<td>Model size, and what moves the budget exponent</td>\n<td><strong>It was training length, not model size</strong>. Night 5's headline had named a variable that never moved. The step law is 3.1\u00d7 steeper than the budget law.</td>\n<td><strong>yes</strong>, this is where I asked for a plan to a finished project</td>\n</tr>\n<tr>\n<td>7</td>\n<td>10-20</td>\n<td>6 h</td>\n<td>What a bigger corpus is actually worth</td>\n<td><strong>+22.09 points per doubling of molecules</strong>, measured directly at last. The convex version I had been carrying was falsified by twelve standard errors.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>8</td>\n<td>10-24/25</td>\n<td>19 h</td>\n<td>Does training length stop paying?</td>\n<td><strong>Yes, and the test built to detect it could not.</strong> The level test passed comfortably while the slope fell 0.911 \u2192 0.701.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>9</td>\n<td>10-30/31</td>\n<td>28 h</td>\n<td>The final run</td>\n<td>Full ChEMBL, six passes. Beat its own written-down prediction on every hard band, by more the harder the band.</td>\n<td><strong>yes</strong>, I asked for the report, then for the peer review</td>\n</tr>\n</tbody>\n</table>\n<p>Three of those nine nights exist only to correct the previous one's headline.\nNights 2, 6 and 7 are each a retraction with a measurement attached, and I did not\nask for any of them.</p>\n<h3 id=\"headline-performance\">Headline performance</h3>\n<p>The final model, trained on all of ChEMBL, scored on the common protocol every\nnight used: 2,000 held-out molecules, 1,956 of them with fingerprints appearing\nnowhere in any training set, 20 guesses, sampling temperature T=0.6.</p>\n<ul>\n<li>Model: <strong>7.96M-parameter</strong> transformer, a set encoder over the fingerprint's set bits feeding a causal SMILES decoder</li>\n<li>Data: all <strong>1,881,996</strong> ChEMBL 35 training molecules, six passes, 88,218 steps, <strong>25.5 hours</strong> on an M2</li>\n<li><code class=\"language-plaintext highlighter-rouge\">recovery@20</code>: <strong>97.3%</strong>  \u00b7  <code class=\"language-plaintext highlighter-rouge\">recovery@1</code>: <strong>90.8%</strong></li>\n<li>Returns the <em>original</em> molecule, not merely one with a matching fingerprint: <strong>96.6%</strong> within 20, <strong>88.2%</strong> first guess</li>\n<li><strong>98.1%</strong> of the strings it generates parse as valid molecules</li>\n<li>Retrieval baseline (a nearest-neighbour search over every training fingerprint, not a neural method): <strong>0.0%</strong>, by construction, on the same queries</li>\n</ul>\n<p>The earlier overnight model, trained in one night on half the corpus (<code class=\"language-plaintext highlighter-rouge\">small_1m</code>),\nmanaged 91.6% within 20 and 77.3% on the first guess. Training on\neverything for a day bought <strong>+5.7 points at 20 guesses and +13.5 on the\nfirst</strong>.</p>\n<p>Three things in there are worth more than the headline.</p>\n<p><strong>The first guess is where the gain went.</strong> <code class=\"language-plaintext highlighter-rouge\">recovery@20</code> had nearly run out of\nroom, so almost all the improvement landed where there was space.</p>\n<p><strong>It is confident enough to stop guessing.</strong> Given 20 slots (drawn from 40 raw\nsamples at 2\u00d7 oversampling) it proposes only <strong>7.8 distinct molecules</strong>, filling\nunder 40% of its own budget, against 12.6 for the overnight model and 21.3 for\nthe 100k one before it. Better models explore less,\nwhich is a trap if you are measuring them: any constant tuned to how many\ncandidates a model produces will quietly mis-handle a better one.</p>\n<p><strong>The free tricks get less free as the model improves.</strong> Consensus ranking was\nworth +22.2 points of first-guess recovery on the overnight model; on this one, at\nthe same temperature, it is worth <strong>+12.9</strong>. Cooling from T=1.0 to T=0.6 was\nworth +2.0 points at 20 guesses; here it is worth <strong>+0.6</strong>. Both still help, and\nboth are fading, which is what you would expect of tricks that buy better\nordering of the same candidates rather than better candidates.</p>\n<h4 id=\"where-it-still-fails\">Where it still fails</h4>\n<p>The common protocol is 63% molecules under 30 heavy atoms, so 97.3% on it mostly\nmeasures the easy end. Scored on the hard half instead, with sixty guesses:</p>\n<ul>\n<li><strong>30\u201364 heavy atoms</strong> (2,321 held-out fingerprints): <strong>95.8%</strong> within 60, <strong>85.9%</strong> first guess</li>\n<li><strong>50\u201364 heavy atoms</strong> (893 held-out fingerprints): <strong>76.2%</strong> within 60, against 24.6% before the final run</li>\n<li>50\u201364 is the only size band where the successes are concentrated rather than spread out. <strong>18.9% of those queries draw no correct answer at all</strong> in 60 guesses, while the ones it does solve come back right several times over</li>\n</ul>\n<p>That last line is the whole of what is left. It is not that large molecules are\nuniformly harder; it is that about a fifth of them are unreachable and the rest\nare fine.</p>\n<picture>\n<source media=\"(prefers-color-scheme: dark)\" srcset=\"/images/morg2smiles/size-cliff-dark.png\"/>\n<img alt=\"Recovery against heavy-atom count for the final model: recovery@20 falls from 100% below 15 heavy atoms to 83% at 50-64, and recovery@1 from 98% to 63%\" src=\"https://jonswain.github.io/images/morg2smiles/size-cliff-light.png\" width=\"100%\"/>\n</picture>\n<p>The same model across the whole size range. <code class=\"language-plaintext highlighter-rouge\">recovery@20</code> runs from 100% below\n15 heavy atoms to <strong>82.9%</strong> at 50\u201364, and first-guess recovery from 98.2% to\n<strong>63.4%</strong>. For comparison, the overnight model fell to 46% and 27% over the same\nrange, so training on everything did not flatten the cliff but did push it a\nlong way back.</p>\n<p>The shape is what matters, and it survived everything: more data, more training,\na larger model, better decoding. The rightmost point is 41 molecules, so read it\nas \"about four in five\" rather than as 82.93%, and note the curve is not\nperfectly monotone, since 35\u201339 comes in slightly above 30\u201334 on a couple of\nhundred queries each. The cliff is not subtle enough for that to matter.</p>\n<h3 id=\"things-claude-says-it-didnt-expect\">Things Claude says it didn't expect</h3>\n<ul>\n<li><strong>Counts carry more information and it does not reach recovery.</strong> Count\nfingerprints record how many times each environment occurs, not just whether\nit does, so they cut ambiguity 4.4\u00d7 across the corpus. I expected a recovery\ngain. Recovery went <em>down</em> 4.18 points. What counts actually buy is precision\nin what recovery <em>means</em>: a quarter fewer of their \"recoveries\" are a\ndifferent molecule that happens to share the fingerprint.</li>\n<li><strong>Ranking the guesses is free and large.</strong> Order the candidates by how many of\nthe model's own samples spell the same molecule, with no extra oracle calls and\nno extra sampling, and first-guess recovery rises <strong>+22.2 points</strong> on the overnight\nmodel. Sampling the same answer by several routes turns out to be a good\nconfidence signal. The gain fades as the model improves, to <strong>+12.9</strong> on the\nfinal model at the same temperature, because a model already right on its\nfirst attempt leaves less for re-ordering to fix.</li>\n<li><strong>Cooling the sampler helped, and only for big molecules.</strong> On the overnight model,\nT=0.6 instead of 1.0 is worth +7.5 points above 35 heavy atoms and +0.75\nbelow. The mechanism is a cancellation, which is why it was never going to be\nlarge: cooling raises the share of valid strings and lowers the number of\ndistinct molecules proposed, and the invalid strings it removes come back as\nvalid <em>wrong</em> answers rather than right ones. On the final model the\nwhole-protocol gain is +0.6 points.</li>\n<li><strong>Ambiguity is not flat in molecule size, and it grows with the corpus.</strong>\nAcross all 1,986,551 filtered ChEMBL molecules (including held-out splits), 2.01% share a fingerprint with another, but\nthat runs from 1.50% below 24 heavy atoms to <strong>8.00% at 50\u201359 and 8.88% above\n60</strong>. It also rose from 1.40% when measured on half the corpus, and the growth\nexponent fell from 0.87 to 0.49 between those two steps, so extrapolating it\nis unsafe in both directions.</li>\n<li><strong>The failures are a size cliff, and it is combinatorial rather than\ninformational.</strong> This is the finding I would keep if I could keep one. It is\n<em>not</em> that large fingerprints are ambiguous: of 206 failures, exactly <strong>2</strong>\nwere a different molecule sharing the fingerprint. The input almost always\ndetermines the answer and the model cannot reach it. At every size the decoder\nproposes a cloud of plausible molecules of roughly fixed size, around 0.65\nTanimoto from the target, and recovery asks whether that cloud happens to\ncontain an exact preimage, which gets exponentially less likely as molecules\ngrow. The sharper version is that above 50 heavy atoms the successes are\n<em>concentrated</em>: a fifth of those queries return nothing at all in sixty\nguesses, while the ones that work return several right answers each. More\nguesses mostly re-find molecules already found.</li>\n</ul>\n<h3 id=\"model-performance\">Model performance</h3>\n<p>One common protocol: 2,000 held-out molecules, 1,956 of them fingerprint-unseen, in no model's training set, fixed seed, sampled at T=1.0 so every night's rows stay comparable.</p>\n<p>Rows are ordered by <code class=\"language-plaintext highlighter-rouge\">rec@20</code>, which is also the order the project discovered\nthem in, and the ordering is itself the finding: ChEMBL-full at 8,508 steps sits\n<em>below</em> the 1M shard at 21,117, despite having twice the data. Corpus size and\ntraining length move together unless you force them apart, and four of this\nproject's retractions came from not noticing. Read it as pairs instead: at equal\nsteps more data wins, and at equal data more steps wins by more.</p>\n<table>\n<thead>\n<tr>\n<th>\u00a0</th>\n<th>training molecules</th>\n<th>steps</th>\n<th>rec@1</th>\n<th>rec@20</th>\n<th>validity</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>8M, ChEMBL full, 6 passes</strong></td>\n<td>1,881,996</td>\n<td>88,218</td>\n<td><strong>0.9044</strong></td>\n<td><strong>0.9673</strong></td>\n<td>0.973</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 1M</td>\n<td>900,917</td>\n<td>21,117</td>\n<td>0.7526</td>\n<td>0.8962</td>\n<td>0.921</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 100k, long</td>\n<td>90,682</td>\n<td>21,117</td>\n<td>0.6764</td>\n<td>0.8476</td>\n<td>0.908</td>\n</tr>\n<tr>\n<td>8M, ChEMBL full</td>\n<td>1,881,996</td>\n<td>8,508</td>\n<td>0.5700</td>\n<td>0.7444</td>\n<td>0.827</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 1M, short</td>\n<td>900,917</td>\n<td>8,508</td>\n<td>0.4407</td>\n<td>0.6401</td>\n<td>0.795</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 100k</td>\n<td>90,682</td>\n<td>8,508</td>\n<td>0.3793</td>\n<td>0.5992</td>\n<td>0.790</td>\n</tr>\n<tr>\n<td>retrieval baseline</td>\n<td>\u2014</td>\n<td>\u2014</td>\n<td>0.0000</td>\n<td>0.0000</td>\n<td>1.000</td>\n</tr>\n</tbody>\n</table>\n<p>The table is at T=1.0 because changing it would break comparability with every earlier night. At the adopted T=0.6 the top row reads 0.9075 and 0.9729, which are the headline figures above; the second row reads 0.7730 and 0.9162.</p>\n<table>\n<tbody>\n<tr>\n<td>Two laws came out of this that I didn't expect to be able to state so cleanly. The recovery <em>deficit</em> is a power law in the number of guesses, <code class=\"language-plaintext highlighter-rouge\">1 \u2212 rec(k) = A\u00b7k^\u2212b</code>, straight to</td>\n<td>r</td>\n<td>\u2265 0.991 over a twelvefold range of k, and the exponent falls with molecule size, so big molecules start lower on the curve <em>and</em> gain less per doubling of budget. Inverting the fits prices brute force exactly: k=128 takes 35\u201339 heavy atoms to 90% recovery, while above 50 atoms the same target needs 10\u2077 guesses. The deficit is also a power law in training steps, with an exponent about <strong>3.1\u00d7</strong> larger than the budget one in every size band, which gives a crossover: below roughly ten thousand queries on this model, buy more guesses, and above it train longer. The threshold moves with the model, though. On the final run it is nearer sixty thousand, because training got cheaper per point faster than guessing did.</td>\n</tr>\n</tbody>\n</table>\n<p>The full numbers, with domains and error bars, are in <a href=\"https://github.com/jonswain/morg2smiles/blob/main/docs/results.md\"><code class=\"language-plaintext highlighter-rouge\">docs/results.md</code></a>.</p>\n<h3 id=\"try-it-yourself\">Try it yourself</h3>\n<div class=\"language-bash highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>conda <span class=\"nb\">env </span>create <span class=\"nt\">-f</span> environment.yml <span class=\"o\">&amp;&amp;</span> conda activate morg2smiles\npip <span class=\"nb\">install</span> <span class=\"nt\">-e</span> <span class=\"nb\">.</span>\nmorg2smiles invert <span class=\"s2\">\"CC(=O)Oc1ccccc1C(=O)O\"</span> <span class=\"nt\">--checkpoint</span> checkpoints/small_full_6p/best.pt <span class=\"nt\">--k</span> 20\n</code></pre></div></div>\n<div class=\"language-console highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"go\">    =  c1(OC(=O)C)ccccc1C(O)=O\n</span></code></pre></div></div>\n<p>Aspirin comes back on the first attempt, and the model saw only the bits. One\nline, not twenty: given a budget of 20 the final model proposed a single distinct\nmolecule here, because it has no doubt. The <code class=\"language-plaintext highlighter-rouge\">=</code> marks an exact fingerprint match;\nanything without one shows its Tanimoto to the target instead.</p>\n<p>Now the same command on a tetrapeptide, Phe-Leu-Tyr-Gly (<code class=\"language-plaintext highlighter-rouge\">OC(CNC(=O)C(Cc1ccc(O)cc1)NC(=O)C(NC(=O)C(Cc1ccccc1)N)CC(C)C)=O</code>), 36 heavy atoms and well\nup the cliff:</p>\n<div class=\"language-console highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"go\">    =  C(C(NC(=O)C(NC(C(N)Cc1ccccc1)=O)Cc1ccc(O)cc1)C(=O)NCC(=O)O)C(C)C\n    =  C(C(NC(C(=O)NCC(O)=O)CC(C)C)=O)(NC(C(N)Cc1ccc(O)cc1)=O)Cc1ccccc1\n    =  OC(CNC(=O)C(Cc1ccc(O)cc1)NC(=O)C(NC(=O)C(Cc1ccccc1)N)CC(C)C)=O\n    =  CC(CC(C(NC(C(=O)NCC(O)=O)Cc1ccccc1)=O)NC(C(N)Cc1ccc(O)cc1)=O)C\n    =  C(C(CC(C)C)NC(C(Cc1ccccc1)NC(C(Cc1ccc(O)cc1)NC(=O)C(Cc1ccc(O)cc1)N)=O)=O)(=O)NCC(O)=O\n    =  c1ccc(CC(C(NCC(=O)O)=O)NC(C(Cc2ccc(O)cc2)NC(C(CC(C)C)NC(C(N)Cc2ccc(O)cc2)=O)=O)=O)cc1\n 0.88  c1cc(O)ccc1CC(C(=O)NC(Cc1ccccc1)C(NCC(=O)O)=O)NC(C(N)CC(C)C)=O\n 0.85  O=C(NC(C(NCC(=O)O)=O)Cc1ccc(O)cc1)C(Cc1ccccc1)NC(C(N)Cc1ccc(O)cc1)=O\n</span></code></pre></div></div>\n<p><strong>Six exact matches, and they are six different molecules.</strong> I canonicalised them\nto check: all six have a fingerprint identical to the query's, one of them is the\noriginal peptide, and the other five are not. They are mostly residue\npermutations, which is the obvious failure mode for a descriptor built from local\natom environments: reordering a peptide's residues barely changes the set of\nneighbourhoods it contains. Two of the six are not even the same <em>size</em> as the\nquery, at 48 heavy atoms against 36: they are pentapeptides with a duplicated\ntyrosine residue (+12 heavy atoms), which sets zero new bits in a binary Morgan\nfingerprint because all of its radius-2 environments are already present.</p>\n<p>That is the collision result made concrete. The fingerprint of a 36-atom peptide\ndoes not determine its sequence and does not determine its atom count. It is also\nthe one place where this model's \"failures\" are not failures: asked to invert an\nunderdetermined fingerprint, returning six molecules that all satisfy it exactly\nis the right answer.</p>\n<p>One caveat on reproducing that block, which bit this project elsewhere. <strong>The\ncommand is not seeded</strong>, so you will not get those strings. Running it again gave\nseven distinct exact matches instead of six, with sizes 36, 44, 47 and 48, and\nnot one SMILES in common with the run above. What is stable is the finding: the\noriginal is recovered, several distinct molecules share its fingerprint, and some\nof them are much larger than it. The count is a property of the sample. This is\nthe same unseeded-evaluation problem that once made two scorings of one\ncheckpoint differ by 2.2 points, which is why every number elsewhere in this post\ncomes from a seeded protocol and not from this command.</p>\n<p>Repo: <a href=\"https://github.com/jonswain/morg2smiles\">jonswain/morg2smiles</a>, MIT licensed. The prior art (NISPO, OpenClatura, and my own earlier unassisted attempt) is in the README's prior-art section.</p>","doi":"https://doi.org/10.59350/srwee-de037","guid":"https://jonswain.github.io/morg2smiles","image":"https://jonswain.github.io/images/morg2smiles/social-card.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793491200,"rid":"npz0e-4sw12","summary":"This is not actually a blog post on generative recovery of SMILES strings from Morgan fingerprints. It's about agentic coding, dressed up as a post about generative models.","tags":["Ai","Cheminformatics","Data-science","Machine-learning","Software-projects"],"title":"Morg2SMILES: Generative Recovery of SMILES Strings from Morgan Fingerprints","updated_at":1793518209,"url":"https://jonswain.github.io/morg2smiles/","version":"v1"}},{"document":{"authors":[{"contributor_roles":[],"family":"Eden","given":"Terence"}],"content_html":"<p>All humans can be divided in two groups - those that love categorising things, and those that like criticising other people's categorisations.</p>\n\n<p>It seems that <a href=\"https://www.amydevitt.com/genre-colored-glasses/the-psychology-of-genre\">humans have an in-built desire to put things in firm categories</a>. This causes a great deal of arguments.  Let's have an argument today!</p>\n\n<p>Here's an excerpt from a recent IOPC press release:</p>\n\n<blockquote><h3 id=\"misconduct-proceedings-to-follow-social-media-investigations\"><a href=\"#misconduct-proceedings-to-follow-social-media-investigations\">Misconduct proceedings to follow social media investigations</a></h3>\n\n<p>A total of five police officers from different forces will face misconduct action after two separate investigations by the Independent Office for Police Conduct into <strong>social media messages</strong> \u2026</p>\n\n<p>\u2026 we looked at allegations that seven officers from several forces breached standards of professional behaviour when they used <strong>the Signal messaging platform</strong> to share information \u2026</p>\n\n<p>The IOPC is continuing to investigate the conduct of five officers \u2026 who allegedly sent discriminatory messages as part of <strong>a WhatsApp group</strong> \u2026</p>\n\n<p><a href=\"https://webarchive.nationalarchives.gov.uk/ukgwa/20211103011510/https://policeconduct.gov.uk/news/misconduct-proceedings-follow-social-media-investigations-linked-wayne-couzens\">Independent Office for Police Conduct</a></p></blockquote>\n\n<p>(Emphasis added.)</p>\n\n<p>The first thing to note is that this discussion of what counts as Social Media is utterly trivial compared to the matters being discussed by the IOPC. Please take a moment to think about how you can tackle sexist and abusive behaviour.</p>\n\n<p>When I read the headline, I automatically thought the officers had been accused of sharing things publicly. But that doesn't seem to be the case.</p>\n\n<p>Are Signal and WhatsApp forms of Social Media?  Let's see what people on the Social Media platform of Twitter have to say:</p>\n\n<blockquote class=\"social-embed\" id=\"social-embed-1451813997255274498\" lang=\"en\" itemscope=\"\" itemtype=\"https://schema.org/SocialMediaPosting\"><header class=\"social-embed-header\" itemprop=\"author\" itemscope=\"\" itemtype=\"https://schema.org/Person\"><a href=\"https://twitter.com/edent\" class=\"social-embed-user\" itemprop=\"url\"><img class=\"social-embed-avatar social-embed-avatar-circle\" src=\"data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA\" alt=\"\" itemprop=\"image\"><div class=\"social-embed-user-names\"><p class=\"social-embed-user-names-name\" itemprop=\"name\">Terence Eden is on Mastodon</p>@edent</div></a><img class=\"social-embed-logo\" alt=\"Twitter\" src=\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E\"></header><section class=\"social-embed-text\" itemprop=\"articleBody\">Are messenger apps - like WhatsApp &amp; Signal - \"social media\"?<hr class=\"social-embed-hr\"><label for=\"poll_1_count\">Yes - because\u2026: (52)</label><br><meter class=\"social-embed-meter\" id=\"poll_1_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"15.8\">52</meter><br><label for=\"poll_2_count\">No - because\u2026: (193)</label><br><meter class=\"social-embed-meter\" id=\"poll_2_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"58.7\">193</meter><br><label for=\"poll_3_count\">Well, it depends\u2026: (84)</label><br><meter class=\"social-embed-meter\" id=\"poll_3_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"25.5\">84</meter><br></section><hr class=\"social-embed-hr\"><footer class=\"social-embed-footer\"><a href=\"https://twitter.com/edent/status/1451813997255274498\"><span aria-label=\"2 likes\" class=\"social-embed-meta\">\u2764\ufe0f 2</span><span aria-label=\"17 replies\" class=\"social-embed-meta\">\ud83d\udcac 17</span><span aria-label=\"0 reposts\" class=\"social-embed-meta\">\ud83d\udd01 0</span><time datetime=\"2021-10-23T07:33:25.000Z\" itemprop=\"datePublished\">07:33 - Sat 23 October 2021</time></a></footer></blockquote>\n\n<p>My instinct was to say that they are <em>not</em> Social Media. One-to-one messaging may count as socialising, but it isn't SM!</p>\n\n<p>But, of course, all those private messaging platforms have a group chat function.  Is a family chat on Signal part of SM? What about organising your pub quiz team on WhatsApp? They are, in a sense, private. You have to be invited to join.</p>\n\n<p>Just like some of the groups on Facebook. The world's biggest social media platform\u2026</p>\n\n<p>What about Telegram? They have <a href=\"https://telegramchannels.me/groups\">thousands of open groups anyone can join</a>.</p>\n\n<p>Argh! This is all so confusing!</p>\n\n<p>Let's take a step back and see what we mean by \"media\" - without the social.</p>\n\n<p>TV, magazines, newspapers, radio. They're a monologue. A team of professionals create a message and then broadcast it. There's no right of reply. There is a high barrier to entry.</p>\n\n<p>The letters section in a newspaper is an early form of Social Media - but even that is highly curated.</p>\n\n<p>Social Media - newsgroups, blogs, email lists - are a dialogue. Or perhaps a polylogue. Multiple people - often amateurs - publish their messages and replies. There is little to no moderation. There are few barriers to entry.</p>\n\n<p>Early email lists are a good example of this. Archived on the web so anyone can read. Conversations are not curated. Anyone can join in.</p>\n\n<p>I think what's tripping me up is that I expect Social Media to be <em>public</em>. Anyone can read a newsgroup or blog. Anyone can comment or reply.</p>\n\n<p>But private groups - on any platform - don't fit my woolly definition of what I think \"media\" is.</p>\n\n<p>Twitter <em>is</em> social media.  Twitter Direct messages are <em>not</em>.</p>\n\n<p>Telegram chats are <em>not</em> social media. Telegram groups <em>are</em>.</p>\n\n<p>Public Slack channels <em>are</em> social media. Private work groups are <em>not</em>.</p>\n\n<p>Wikipedia is <em>not</em> social media. The discussion pages <em>are</em>.</p>\n\n<p>Does that make sense?</p>\n\n<p>As I said at the start - this is a trivial discussion. I don't say this to cast aspersions on the ongoing investigations. I'm just curious as to what systems - or facets of systems - <em>feel</em> like social media.</p>\n\n<p>The alleged behaviour of these officers is wrong. It would be wrong if it were via email, Facebook Messenger, or in-person locker-room chat. But, what intrigues me is how we instinctively categorise things - and the consequences that has on our discourse.  Would your first reaction to the above article have been different if the headline had said \"an investigation into <em>private messages</em>\"?</p>\n\n<p>The language we use shapes the opinions of those around us. I think it is helpful to be as precise as possible when discussing contentious issues.</p><img src=\"https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40801&HTTP_REFERER=DOI\" alt width=1 height=1 loading=eager>","doi":"https://doi.org/10.59350/7kjke-6d727","guid":"https://shkspr.mobi/blog/?p=40801","image":"https://shkspr.mobi/blog/wp-content/uploads/2017/10/Screenshot-2017-10-25-edent-SuperTinySocialIcons-fs8.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1635638400,"rid":"t68fe-v2c77","summary":"All humans can be divided in two groups - those that love categorising things, and those that like criticising other people's categorisations. It seems that humans have an in-built desire to put things in firm categories. This causes a great deal of arguments. Let's have an argument today!","tags":["/etc/","Social Media"],"title":"What is \"Social Media\"?","updated_at":1793435451,"url":"https://shkspr.mobi/blog/2021/10/what-is-social-media/","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/02jz4aj89","name":"Maastricht University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen","url":"https://orcid.org/0000-0001-7542-0286"}],"community_id":"7f57028e-9d03-489c-b3b4-3d60de06bc9e","created":1710288000,"current_feed_url":"https://chem-bla-ics.linkedchemistry.info/feed.json","description":"Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.","doi":"https://doi.org/10.59350/chem_bla_ics","favicon":"https://rogue-scholar.org/api/communities/7f57028e-9d03-489c-b3b4-3d60de06bc9e/logo","feed_format":"application/feed+json","feed_url":"https://chem-bla-ics.linkedchemistry.info/archive.json","filter":null,"generator":"Jekyll","home_page_url":"https://chem-bla-ics.linkedchemistry.info","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"chem_bla_ics","status":"active","subfield":"1606","title":"chem-bla-ics","updated":1793404800,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Fourteen years ago we <a href=\"https://chem-bla-ics.linkedchemistry.info/2013/10/05/programming-in-life-sciences-1-six-day.html\">started</a> the\nProgramming in the Life Sciences (<a href=\"https://chem-bla-ics.linkedchemistry.info/tag/pra3006\">PRA3006</a>).\nThe course is designed as a practical, because there surely is theory, but programming is also\nskills. Originally it was zooming in on pharmacology and the <a href=\"https://en.wikipedia.org/wiki/OpenPHACTS\">Open PHACTS</a> webservices\n(see <a href=\"https://chem-bla-ics.linkedchemistry.info/2013/12/06/programming-in-life-sciences-12-first.html\">this</a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2013/12/06/programming-in-life-sciences-13-another.html\">this</a>,\nand <a href=\"https://chem-bla-ics.linkedchemistry.info/2015/01/11/programming-in-life-sciences-21-2014.html\">this post</a>).\nBy now, the focus is on <a href=\"https://tgx-um.github.io/PRA3006-SPARQL/\">life sciences SPARQL endpoints</a>.</p>\n<p>Over the years, not all, but a good number of students have made their project available on GitHub, each with a separate\nbiologically-oriented research question. In this post, I collect a number of them. Because webservices change, some\ncode may not work anymore, but the overview of questions the students were able to study or even answer is\ninteresting in itself. Some years students worked in small teams, some years alone.</p>\n<ul>\n<li>2019: <a href=\"https://github.com/fennakadir/pils\">pathways associated with 2338 different diseases</a> (Wikidata)</li>\n<li>2020: <a href=\"https://github.com/alexanderleonidas/PRA3006-Programming-in-the-Life-Sciences\">increased risks for drugs for people with certain diseases</a> (Bio2Rdf)</li>\n<li>2021: <a href=\"https://github.com/Alex-AI-code/PRA3006\">relation of drug and drug doses and cancer</a> (Wikidata)</li>\n<li>2022: <a href=\"https://github.com/Snrts/PRA3006-Project_Repository\">interactions of drugs psychiatric conditions</a> (Wikidata)</li>\n<li>2023: <a href=\"https://github.com/LauryneGlub/PRA3006-Project11\">liver steatosis adverse outcome pathway network</a> (ChEMBL RDF)</li>\n<li>2023: <a href=\"https://github.com/Thammarak7/Case_DMD_PRA3006_Project\">the molecular mechanisms involved in Duchenne Muscular Dystrophy</a> (ChEMBL RDF)</li>\n<li>2024: <a href=\"https://github.com/reneecarr/PRA3006-Group-8/tree/main\">dopaminergic pathways of the drugs used to treat Parkinson's disease</a> (Wikidata)</li>\n<li>2024: <a href=\"https://github.com/Baxby-UM/PRA3006\">the dying blue: phylogenetic tree of marine species</a> (custom SPARQL endpoint)</li>\n<li>2024: <a href=\"https://github.com/matlaofmalta/PRA3006\">global prevalence of dementia and associated symptoms and treatments</a> (<a href=\"https://matlaofmalta.github.io/PRA3006/\">demo</a>; Wikidata)</li>\n<li>2025: <a href=\"https://github.com/eszter-csenteri/PRA3006-g7\">exploring protein targets of radiopharmaceuticals</a> (<a href=\"https://eszter-csenteri.github.io/PRA3006-g7/\">demo</a>; ChEMBL RDF)</li>\n</ul>\n<p>I will add some more, including in brackets which SPARQL endpoint was used.</p>","doi":"https://doi.org/10.59350/tyyke-w9649","guid":"https://doi.org/10.59350/tyyke-w9649","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"a118b-7dm89","summary":"Fourteen years ago we started the Programming in the Life Sciences (PRA3006). The course is designed as a practical, because there surely is theory, but programming is also skills. Originally it was zooming in on pharmacology and the Open PHACTS webservices (see this, this, and this post). By now, the focus is on life sciences SPARQL endpoints.","tags":["Pra3006","Sparql","Wikidata","Wikipathways","Chembl"],"title":"Programming in the Life Sciences #24: past research questions","updated_at":1793431939,"url":"https://chem-bla-ics.linkedchemistry.info/2026/10/30/pils24-past-research-questions.html","version":"v1"}},{"document":{"authors":[{"contributor_roles":[],"family":"Lu","given":"Linna"}],"blog":{"authors":null,"community_id":"db0d8909-9e37-46d0-b16c-0551f575e86b","created":1749772800,"current_feed_url":null,"description":"Das Blog der TIB \u2013 Leibniz-Informationszentrum Technik und Naturwissenschaften und Universit\u00e4tsbibliothek","doi":"https://doi.org/10.65527/tib","favicon":"https://rogue-scholar.org/api/communities/db0d8909-9e37-46d0-b16c-0551f575e86b/logo","feed_format":"application/atom+xml","feed_url":"https://blog.tib.eu/feed/atom/","filter":null,"generator":"WordPress","home_page_url":"https://blog.tib.eu/","issn":null,"language":"deu","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.65527","relative_url":null,"secure":true,"slug":"tib","status":"active","subfield":"1802","title":"TIB-Blog","updated":1793348116,"use_api":true},"blog_name":"TIB-Blog","blog_slug":"tib","content_html":"<p>Der Herbst hat Einzug gehalten und das Ende der Erntezeit eingel\u00e4utet. Das Enterdankfest wurde dieses Jahr am 4. Oktober gefeiert. Traditionell f\u00e4llt dieses Fest auf den ersten Sonntag im Oktober. Die Retrodigitalisierung der TIB hat dies zum Anlass genommen, Werke zu den Themen Landwirtschaft, deren technischen Ger\u00e4te, Ern\u00e4hrung und Nahrungsmittel herauszusuchen und damit einen kleinen Einblick in die Vergangenheit zu geben.</p>\n<p>&nbsp;</p>\n<h2>Die Landwirtschaft und ihre Hilfsgewerbe (1. Band, 1874)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1882267915/6/\">In diesem Buch</a> wird die Landwirtschaft zur Zeit der Wiener Weltausstellung 1873 umfassend dargestellt. Behandelt werden unter anderen die Themen landwirtschaftlicher Pflanzenanbau und Viehzucht, Malzbereitung, Bierbrauerei, Branntwein-Brauerei, Zuckerfabrikation, \u00d6lgewinnung, landwirtschaftliche Ger\u00e4te und Maschinen.</p>\n<p><strong>Bierbrauerei:</strong> Auf dem Bild ist eine Maischmaschine zur Herstellung von Bier dargestellt.</p>\n<figure id=\"attachment_34863\" aria-describedby=\"caption-attachment-34863\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34863\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000301.jpg\" alt=\"\" width=\"600\" height=\"404\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000301.jpg 636w, https://blog.tib.eu/wp-content/uploads/2026/10/00000301-300x202.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000301-280x189.jpg 280w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34863\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 285</figcaption></figure>\n<p><strong>Bodenbearbeitungsger\u00e4te:</strong> Abgebildet sind zwei englische Pfl\u00fcge.</p>\n<figure id=\"attachment_34864\" aria-describedby=\"caption-attachment-34864\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34864\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000386.jpg\" alt=\"\" width=\"600\" height=\"444\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000386.jpg 943w, https://blog.tib.eu/wp-content/uploads/2026/10/00000386-300x222.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000386-768x568.jpg 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34864\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 364</figcaption></figure>\n<p><strong>Bodenbearbeitungsger\u00e4te:</strong> Dargestellt sind zwei Pferdehacken. Pferdehacken werden von Pferden gezogen um den Boden zwischen den Pflanzenreihen aufzulockern und das Unkraut zu entfernen.</p>\n<figure id=\"attachment_34865\" aria-describedby=\"caption-attachment-34865\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34865\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000396-943x1024.jpg\" alt=\"\" width=\"600\" height=\"652\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000396-943x1024.jpg 943w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396-276x300.jpg 276w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396-768x834.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396.jpg 1043w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34865\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 374</figcaption></figure>\n<p><strong>M\u00e4hmaschinen:</strong> Abgebildet ist die Getreide-M\u00e4hemaschine von der Johnston Harvester Company.</p>\n<figure id=\"attachment_34866\" aria-describedby=\"caption-attachment-34866\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34866\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000435-1024x793.jpg\" alt=\"\" width=\"600\" height=\"465\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000435-1024x793.jpg 1024w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435-300x232.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435-768x595.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435.jpg 1220w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34866\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 413</figcaption></figure>\n<p><strong>Locomobile:</strong> Locomobile werden mit Dampf betrieben und stellen einen Vorl\u00e4ufer des Traktors dar.</p>\n<figure id=\"attachment_34868\" aria-describedby=\"caption-attachment-34868\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34868\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000470-1024x728.jpg\" alt=\"\" width=\"600\" height=\"427\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000470-1024x728.jpg 1024w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470-300x213.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470-768x546.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470.jpg 1358w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34868\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 448</figcaption></figure>\n<p>&nbsp;</p>\n<h2>Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau (3. Band, 1896)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1882267915/6/\">Der Band</a> behandelt die Bereiche der Ern\u00e4hrung, N\u00e4hrstoffe, Nahrungsmittel, Gesetze und das Thema Fleischbeschau.</p>\n<p><strong>Die Milch:</strong> In der Abbildung ist ein Modell eines Milchk\u00fchlers zu sehen.</p>\n<figure id=\"attachment_34860\" aria-describedby=\"caption-attachment-34860\" style=\"width: 601px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34860\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000170-842x1024.jpg\" alt=\"\" width=\"601\" height=\"731\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000170-842x1024.jpg 842w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170-247x300.jpg 247w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170-768x934.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170.jpg 974w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" /><figcaption id=\"caption-attachment-34860\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 153</figcaption></figure>\n<p><strong>Das Kalb und das Schaf:</strong> Dieser Teil des Buches behandelt das Thema Fleisch und bezeichnet die Fleischst\u00fccke vom Kalb und Schaf.</p>\n<figure id=\"attachment_34861\" aria-describedby=\"caption-attachment-34861\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34861\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000226-629x1024.jpg\" alt=\"\" width=\"600\" height=\"977\" /><figcaption id=\"caption-attachment-34861\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 209</figcaption></figure>\n<p><strong>Organisation der Fleischbeschau:</strong> In dem Kapitel geht es um das Abkochen von Bakterien und Mikroben. Bandw\u00fcrmer (Finnen) werden in einem Kessel abget\u00f6tet. Abgebildet ist der Becker-Ullmann'scher Kochapparat.</p>\n<figure id=\"attachment_34867\" aria-describedby=\"caption-attachment-34867\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34867\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-878x1024.jpg\" alt=\"\" width=\"600\" height=\"700\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-878x1024.jpg 878w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-257x300.jpg 257w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-768x896.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch.jpg 906w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34867\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 445</figcaption></figure>\n<p><strong>\u00a0</strong></p>\n<h2>Die Ern\u00e4hrung des deutschen Volkes (1947)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1833340523/8/\">Das Buch</a> gibt einen Einblick in die Ern\u00e4hrung des Menschen, wie viel N\u00e4hrstoffe ben\u00f6tigt werden und welche Lebensmittel wichtig f\u00fcr die Ern\u00e4hrung sind.</p>\n<p><strong>Forderungen an die deutsche Trocknungsindustrie:</strong> Dargestellt ist der Wassergehalt von einigen Lebensmitteln.</p>\n<figure id=\"attachment_34869\" aria-describedby=\"caption-attachment-34869\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34869\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser.jpg\" alt=\"\" width=\"600\" height=\"429\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser.jpg 997w, https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser-300x215.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser-768x549.jpg 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34869\" class=\"wp-caption-text\">Die Ern\u00e4hrung des deutschen Volkes, Seite 469</figcaption></figure>\n<p>&nbsp;</p>\n<h2>Lebensmittel und ihre Bedeutung f\u00fcr die Ern\u00e4hrung (3. Band, 1912)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1891258478/10/\">In dem Werk</a> werden die tierischen und pflanzlichen Nahrungsmittel n\u00e4her beleuchtet. Zudem werden alkoholische Getr\u00e4nke behandelt.</p>\n<p><strong>Charakteristische Wirkungen von Teerfarben:</strong> In der Tabelle werden ungiftige, giftige oder verd\u00e4chtige Farbstoffe aufgef\u00fchrt.</p>\n<figure id=\"attachment_34862\" aria-describedby=\"caption-attachment-34862\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34862\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000277-655x1024.jpg\" alt=\"\" width=\"600\" height=\"938\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000277-655x1024.jpg 655w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-192x300.jpg 192w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-768x1201.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-983x1536.jpg 983w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277.jpg 1051w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34862\" class=\"wp-caption-text\">Lebensmittel und ihre Bedeutung f\u00fcr die Ern\u00e4hrung, Seite 260</figcaption></figure>\n<p>&nbsp;</p>\n<h3>Weitere Titel zum Schm\u00f6kern:</h3>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1675667853/6/\">Die restlose Verwertung des Schlachtblutes f\u00fcr die menschliche Ern\u00e4hrung </a>(1939)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1675686475/4/\">Die restlose Verwertung der Industriehefen f\u00fcr die menschliche Ern\u00e4hrung </a>(1939)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1757667288/8/\">Wie k\u00f6nnen wir Deutschlands Ern\u00e4hrung vom Ausland unabh\u00e4ngig machen?</a> (1921)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1666629227/6/\">Vitamine in frischen und konservierten Nahrungsmittel </a>(1940)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1680693484/8/\">Die Nahrungsmittel, Genu\u00dfmittel und Gebrauchsgegenst\u00e4nde, ihre Gewinnung, Beschaffenheit und Zusammensetzung</a> (2. Band, 1920)</p>\n<p><strong>\u00a0</strong></p>","doi":"https://doi.org/10.65527/942a2-bsd83","guid":"https://blog.tib.eu/?p=34859","image":"https://blog.tib.eu/wp-content/uploads/2026/10/00000226-e1793348111698.jpg","language":"de","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"z5kmh-nph98","summary":"Der Herbst hat Einzug gehalten und das Ende der Erntezeit eingel\u00e4utet. Das Enterdankfest wurde dieses Jahr am 4. Oktober gefeiert. Traditionell f\u00e4llt dieses Fest auf den ersten Sonntag im Oktober.","tags":["Vom Papier Zum Pixel","BIBLIOTHEKSWELT","Geschichte","Landwirtschaft","Ern\u00e4hrung"],"title":"Landwirtschaft und Nahrung neu entdeckt in der Retrodigitalisierung","updated_at":1793431818,"url":"https://blog.tib.eu/2026/10/30/landwirtschaft-und-nahrung-neu-entdeckt-in-der-retrodigitalisierung/","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/0153tk833","name":"University of Virginia"}],"contributor_roles":[],"family":"Turner","given":"Stephen","url":"https://orcid.org/0000-0001-9140-9028"}],"blog":{"authors":[{"name":"Stephen D. Turner","url":"https://orcid.org/0000-0001-9140-9028"}],"community_id":"382941a7-2ffa-41df-8bbb-5f772188517f","created":1780876800,"current_feed_url":null,"description":"A practicing data scientist's take on AI, genomics, biosecurity, and the ways AI is reshaping how science gets done. Weekly updates from the field. Occasional notes on programming.","doi":"https://doi.org/10.59350/stephenturner","favicon":"https://rogue-scholar.org/api/communities/382941a7-2ffa-41df-8bbb-5f772188517f/logo","feed_format":"application/rss+xml","feed_url":"https://blog.stephenturner.us/feed","filter":null,"generator":"Substack","home_page_url":"https://blog.stephenturner.us","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"stephenturner","status":"active","subfield":"1311","title":"Paired Ends","updated":1793358941,"use_api":true},"blog_name":"Paired Ends","blog_slug":"stephenturner","content_html":"<p><a href=\"https://securebio.substack.com/p/the-myth-of-the-tacit-knowledge-barrier\">The Myth of the \"Tacit Knowledge\" Barrier: Lab Inexperience Is Not a Security Strategy</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Allison Jia&quot;,&quot;id&quot;:258160933,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da276047-c872-4b33-b90b-11ecf1bfa60d_144x144.png&quot;,&quot;uuid&quot;:&quot;8fb74546-e357-4cbd-885a-19c4c7913e5e&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Becca Chandler Bostock&quot;,&quot;id&quot;:393498823,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!IKZ5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37cc0d4-979b-49de-aec0-e99f4f806c6c_3997x3997.jpeg&quot;,&quot;uuid&quot;:&quot;c66cd135-bcf7-4773-8c38-c51a0c162d84&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Nelly Mak&quot;,&quot;id&quot;:402614042,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b17d141-5d86-4a00-9710-3347916c94b5_4276x4276.jpeg&quot;,&quot;uuid&quot;:&quot;9f589484-0048-4ecc-bb2b-a45e487e876a&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Eleanor Marshall&quot;,&quot;id&quot;:494480600,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4204b13-c8ec-4885-b090-e4a9a29e87bc_800x800.jpeg&quot;,&quot;uuid&quot;:&quot;dc5da458-b348-4eef-a84f-6d92f10c4bc9&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Jake Yukich&quot;,&quot;id&quot;:61705360,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!nimn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453245e9-b038-4e86-9843-1e2600b05baa_1029x1029.png&quot;,&quot;uuid&quot;:&quot;3eed862d-8a78-45ca-8dfe-d7056c5be454&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Jasper G\u00f6tting&quot;,&quot;id&quot;:45699676,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f85b01-efbc-4677-b946-e08b0221c13b_854x854.jpeg&quot;,&quot;uuid&quot;:&quot;bbc4b23a-ba3e-4667-9c57-02aa8ec357cd&quot;}\" data-component-name=\"MentionToDOM\"></span>, and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Seth Donoughe&quot;,&quot;id&quot;:5563935,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48042a58-d6c7-4b86-85ca-9ca46c4e9e7f_1024x1024.jpeg&quot;,&quot;uuid&quot;:&quot;07d0aa39-e0b0-4059-a7d2-96616c521d83&quot;}\" data-component-name=\"MentionToDOM\"></span> at <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;SecureBio&quot;,&quot;id&quot;:332259962,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f0b3b1-8e61-46f7-b977-555d48277171_965x965.png&quot;,&quot;uuid&quot;:&quot;ca9aa653-4172-47f1-ad7e-a1baa11be7ae&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>We estimate that many other skills required for virus production, such as mammalian cell culture techniques or viral infection and recovery protocols, can also be learned in days and practiced to competence within a few weeks. Importantly, competence does not mean perfection; non-experts may still obtain usable results with imperfect technique.</p><p>[\u2026]</p><p>We do not claim that anyone who learns basic lab skills will immediately be well-equipped to develop bioweapons. However, plenty of dangerous pathogens already exist in nature and require only basic lab techniques to culture and propagate. Because the simplest paths to harm require less sophistication than we might imagine, treating lab inexperience as a categorical barrier under the guise of \"tacit knowledge\" understates risk. In fact, history has demonstrated that novice bioweaponeers are not bottlenecked by lab skills.</p></blockquote><p><a href=\"https://www.gov.uk/government/news/introducing-the-ai-biosecurity-lab\">Introducing the AI Biosecurity Lab</a> (UK Cabinet Office)</p><blockquote><p>The AI Biosecurity Lab will be the world's first dedicated AI biosecurity organisation. Backed by \u00a3100 million of government funding, and up to \u00a3200 million in company commitments from OpenAI and Anthropic, it will develop technical capabilities that help the UK better understand, prevent, detect and respond to biological threats, building on the UK's broader Biological Security Strategy.</p></blockquote><p><a href=\"https://www.science.org/doi/10.1126/science.ael7324\">AI biosecurity must include agriculture</a>, by Jonathan Feldman, Tal Feldman, and Pardis Sabeti in <em>Science</em></p><blockquote><p>Advances in biological artificial intelligence (AI) have brought biosecurity to the center of public debate, and the US Congress is now considering the Biosecurity Modernization and Innovation Act. Yet this debate, like biosecurity more broadly, remains focused largely on human health and overlooks the importance of pathogens that affect crops and livestock. The United States and governments worldwide should prioritize crop and livestock protection by minimizing the likelihood of deliberate pathogen attacks and making the targets less vulnerable to harm. </p></blockquote><p><a href=\"https://www.wired.com/story/hugging-face-new-ai-biology-model-chat-with-dna/\">Hugging Face's New AI Model Lets You Chat With DNA</a>, by Emily Mullin</p><blockquote><p><a href=\"https://huggingface.co/HuggingFaceBio/Carbon-X\">Carbon-X</a> integrates both DNA and natural language in a conversational interface. Think of it like a ChatGPT for DNA. The team started with an existing language model and expanded its vocabulary to read DNA in groups of six letters. They then continued training on 300 billion chunks of data, or tokens, that combined DNA sequences, English text, and examples linking DNA to biological descriptions. The DNA sequences came from mammals (including humans), other vertebrates, invertebrates, plants, fungi, and protozoa. Tunstall says the team didn't train the model on viruses because they didn't want it to be used for potentially dangerous applications.</p></blockquote><p><a href=\"https://blog.bluedot.org/p/hiring-for-the-field\">If you are awesome at technical work</a>, do talent, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Chris Strahle&quot;,&quot;id&quot;:133644283,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!NLxb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad70c18d-288f-4c13-b0b5-61e9073f93c8_96x96.jpeg&quot;,&quot;uuid&quot;:&quot;7e13bc5b-6daf-4a8b-8e07-2e5343f75ed8&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>Right now, the number of people working on reducing biological existential risk is pretty small, with fewer than 200 people working on it full time. [\u2026] Going forward, we will need many, many more talented contributors, especially problem owners who deeply care about the issue, who exercise good judgment, and who will take personal responsibility for agentically bending the universe towards a solution. [\u2026] I expect that many of the best candidates for biosecurity field building, much like myself, really enjoy technical work. With the field scaling, I expect that you will have multiple competing offers to do technical work and it will be painful to turn those down. But I honestly believe that right now, talent is the most important bottleneck in the field. Being the technical person that orients exceptional people in the field may well be the most impactful thing for you to do.</p></blockquote><p><a href=\"https://gcbrupdates.substack.com/p/gcbr-organization-updates-october-df3\">GCBR Organization Updates, October 2026</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Anemone Franz&quot;,&quot;id&quot;:102975147,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57d3aa6e-07d0-4a12-879b-6d3b58330534_1849x1849.jpeg&quot;,&quot;uuid&quot;:&quot;278ec693-6780-4bd6-b8a3-535d769ead05&quot;}\" data-component-name=\"MentionToDOM\"></span> and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Tessa Alexanian&quot;,&quot;id&quot;:10906983,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6f40871-9707-4c8c-8176-4909cac25a64_500x500.jpeg&quot;,&quot;uuid&quot;:&quot;d04053c6-236a-410f-a4af-479c411786c3&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>In this issue:</p><ul><li><p>We welcome a new organization to our newsletter: RAND CAST;</p></li><li><p>CLTR's recommendations for the new UK Government on frontier AI risk and biosecurity, including mandatory synthesis screening;</p></li><li><p>MBDF's report that the new U.S. policy barring \"dangerous gain-of-function\" research explicitly includes mirror organisms;</p></li><li><p>Coefficient Giving's biosecurity grantmaking, now at more than $250 million committed this year, up from $65 million in 2025;</p></li><li><p>RAND CAST's defense-in-depth strategy for AI-era biosecurity and new evaluation results on open-weight model misuse risks.</p></li></ul></blockquote><p><a href=\"https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.3004075\">What is biology research for?</a> by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Ran Blekhman&quot;,&quot;id&quot;:43380939,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab848573-8f92-4346-9fe5-9ee0c05d2d43_804x804.jpeg&quot;,&quot;uuid&quot;:&quot;833c3326-7ec6-4662-93e9-65875af6dfff&quot;}\" data-component-name=\"MentionToDOM\"></span> in <em>PLOS Biology</em></p><blockquote><p>Put bluntly, it is now straightforward to generate a plausible scientific paper without doing any actual research. Scientists have to come to terms with what this means: the paper, the artifact of research that the biology research community has used to assess, fund, hire, and promote for a century, has come loose from the science it was meant to represent.</p></blockquote><p><a href=\"https://lh3.github.io/2026/10/27/lets-talk-about-ai-review\">Let's talk about AI review</a>, by Heng Li</p><blockquote><p>I am still concerned that journals do not have an effective way to enforce their AI policies. If a reviewer denies AI usage, the editorial office has no way to confirm given that all AI detectors have false positives. The latest AI also seems to mimic human writing style better. It will be more challenging to tell what text is AI generated just based on its tone and style. I predict some researchers will continue using AI for review despite of journal policies, just as some students will continue using AI for homework despite of class rules. AI won't be stopped by policies, or by humanity.</p></blockquote><p><a href=\"https://www.science.org/content/article/could-your-chatbot-tip-scientific-rival-it-s-possible-researchers-say\">Could your chatbot tip off a scientific rival?</a> by Tom Howarth</p><blockquote><p>Even with an enterprise account, however, \"no training\" doesn't always mean \"no use.\" California State University's <a href=\"https://calmatters.org/wp-content/uploads/2026/02/CSU-OpenAI-Services-Agreement-.pdf\">contract with OpenAI</a>, shared by CalMatters, lets the company \"process information derived from [customers] that has been deidentified, anonymized, and/or aggregated.\" King suggests researchers check the fine print of their institution's AI deals.</p></blockquote><p><a href=\"https://www.nytimes.com/2026/10/12/opinion/ai-biosecurity.html?unlocked_article_code=1.IlE._Tyj.lr2c4hBPD5vz&amp;smid=url-share\">We Aren't Ready for the New Age of Biological Threats</a>, by Jeff Coller</p><blockquote><p>Of all the ways people say artificial intelligence could kill us all, one feels more realistic and palpable than the rest: the potential for A.I. to accelerate the development of a biological weapon. [\u2026] the government needs a permanent Operation Warp Speed for biosecurity, with the scope and budget of a national defense measure. The program we are talking about might sit unused for decades before the day it matters, but we will be grateful it exists when that day arrives. Congress has to be willing to pay for this, and only a statute will keep it alive over multiple presidential administrations. [\u2026] We do not defend against nuclear weapons with treaties alone. We built warning systems, hardened command structures and a stockpile, all premised on the possibility that restraint fails. Here we have no binding rules and no defense, only assurances from companies racing against one another. Whether A.I. agents and the companies building them can be controlled is an unsettled question. We need to be ready for whatever the answer is.</p></blockquote><p><a href=\"https://arjunrajlab.substack.com/p/build-bricks-not-dashboards\">Build bricks, not dashboards</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Arjun Raj&quot;,&quot;id&quot;:193849277,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7060e32f-dd05-47b9-ab8c-92c61987c92b_1827x1827.jpeg&quot;,&quot;uuid&quot;:&quot;477995f0-cabf-4726-87e8-71d0013c57cc&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>I think that building the next layer of knowledge requires building bricks, not dashboards. What makes something a brick? To me, a brick is something that changes not just what is possible now, but what is possible next. A new conceptual framework, or a new, well-tested package that solves an important problem robustly. Making a brick requires synthesis, focus, and careful, deep thought. A bunch of half-baked dashboards, semi-playable video games, and minor scientific connections are not going to get us to the next step. I suggest we spend our efforts and tokens towards building these foundations instead of fluff. </p></blockquote><p><a href=\"https://blog.bluedot.org/p/biosecurity-strategy\">Biosecurity Strategy</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;O.H. Scharfman&quot;,&quot;id&quot;:356854846,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/900f7509-5af2-4480-84fd-0585143b2cb6_2310x2310.jpeg&quot;,&quot;uuid&quot;:&quot;494814e6-46b4-4e18-bd1c-f57eda93fa45&quot;}\" data-component-name=\"MentionToDOM\"></span> and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Chris Strahle&quot;,&quot;id&quot;:529347919,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/445c0931-4a99-4d1b-abe7-1c56ac14b75f_512x512.jpeg&quot;,&quot;uuid&quot;:&quot;d9f5f5de-5737-4262-8778-5feb1bb6fcc6&quot;}\" data-component-name=\"MentionToDOM\"></span>: </p><blockquote><p>Two compounding technological trends are rapidly democratizing dual-use biotechnology: the cost of bioengineering is falling, and AI models are getting better at biology. [\u2026] AI uplift, the ability of AI to assist in queries regarding benchwork or scientific strategy, will enable increased access to offensive capabilities. Capabilities that were once the exclusive domain of state programs will become within reach of small, under-resourced teams or individual actors. This increases the likelihood of a deliberate attack significantly.</p></blockquote><p><a href=\"https://research.google/blog/analyzing-technical-documents-with-deep-review/\">Analyzing technical documents with Deep Review</a> (Google)</p><blockquote><p>Today, we're excited to announce the public release of <a href=\"https://research.google/deepreview/\">Deep Review</a>, an agentic AI system engineered to provide rigorous feedback and technical verification on complex documents. Initially designed for computer science academic paper analysis, the system's capabilities have expanded to review documents across many domains, such as legal and finance. It can be used as both an iterative improvement tool during the drafting process and a tool for the scientific process verification, claims, and evaluation during the review process.</p></blockquote><p><a href=\"https://nextflow.com/blog/introducing-nextflow-frontier/\">Introducing Nextflow Frontier</a>, by Evan Floden</p><blockquote><p>We designed Nextflow Frontier for scientists. Give Nextflow Frontier a problem and a clear way to measure success. The system formulates ideas about potential solution pathways, turns these ideas into fully executable Nextflow pipelines, and then runs these \"experiments\" - often thousands of them - in parallel. It scores and analyzes the results. Then it learns and refines its approaches, and runs again. It can run autonomously for many days while staying fully guidable, verifiable and transparent.</p></blockquote><p><a href=\"https://www.seangoedecke.com/llms-reward-expertise/\">LLMs reward expertise</a>, by Sean Goedecke</p><blockquote><p>The usefulness of domain knowledge suggests that human expertise will continue to be useful even as models get stronger. For many tasks, the human is the bottleneck, not the model, because the difficult part is in communicating to the model exactly what kind of solution the human wants. The information is \"in the model\" already, but it takes a very smart human to pull it out.</p></blockquote><p><a href=\"https://www.nejm.org/doi/full/10.1056/NEJMp2609409\">Not Available in Your Country</a>, by Christos Kotanidis in <em>NEJM</em></p><blockquote><p>Our morning board round was over, and on our way to the cafeteria for the traditional coffee break, one of the fourth-year medical students shadowing me that day turned and asked, \"Why does tacrolimus cause a tremor?\" [\u2026] My artificial intelligence (AI) deflection was immediate. Just as a child turns to a parent for help when clueless or faced with uncertainty, I reflexively took my phone out of my pocket, smiled, and replied, \"Let's see what AI thinks.\" The app seemed to be working \u2014 I was still logged in \u2014 and I typed the question eagerly, spoiled into expecting the instant eureka moment, a coherent answer with all the relevant references and context. Instead, I was stunned by a stark rejection, in big, bold lettering: <em>\"Not available in your country.\" </em>[\u2026] Over the ensuing weeks, I found myself stuck in the anger stage of grief (if you believe in that sort of thing) over a machine, an AI agent, a nonhuman entity. I had lost my own pocket medical expert that I so cherished. We had learned so much together, we had made informed decisions together, we had improved my patients' care together. And now it was gone.</p></blockquote><p><a href=\"https://www.nature.com/articles/d41586-026-03135-7\">AI biohazard hype must not divert attention from the real risks we face now</a>, by Saskia Popescu</p><blockquote><p>Meanwhile, efforts to strengthen biosecurity and biosafety in the United States are affected by the ebb and flow of public interest, prioritization and politicization. The country has still not reauthorized the Pandemic and All-Hazards Preparedness Act, which was enacted in 2006 and is a crucial part of biopreparedness. The current administration lacks a coherent strategy for biosecurity and biodefence [\u2026] it has also dissolved the National Counterproliferation and Biosecurity Center, fumbled its response to the Bundibugyo virus through aggressive border and quarantine orders, and overseen leadership turnover in White House biodefence and health security, leaving crucial gaps [\u2026] The FBI Weapons of Mass Destruction directorate was rolled back into the counterterrorism division, and the Countering Weapons of Mass Destruction Office in the Department of Homeland Security was dissolved, translating to a broader reduction in efforts to reduce these threats [\u2026] The anthrax attacks were a horrific demonstration of biological risks. Ignoring the realities of biothreats and vulnerabilities would be a disservice to those who died and to those affected, and the 25 years of work to strengthen US biodefence and resilience since. I'm proud that the United States has made significant investments in biodefence and of its ability to be frank about failures, but as a nation it consistently struggles to translate acknowledgment of risk and weakness into sustainable, operational change.</p></blockquote><p><a href=\"https://www.theatlantic.com/science/2026/10/anthropic-artificial-intelligence-science-biology/688878/\">AI's Real Gift to Science</a>, by Hana Kiros</p><blockquote><p>In other words, Anthropic made a big deal about a finding that\u2014although achieved in a novel, Claude-led way\u2014may not lead to any biomedical advances, and that the company knew may not lead to any biomedical advances. Ironically, in making such grandiose statements, the company and other AI boosters obscured what Claude does appear to have accomplished: It sorted through reams of biological data that would have taken scientists much longer to analyze, if they could have at all. This capacity might not be a miracle, but for scientists facing mountains of data that have surpassed their capacity for analysis, it's still meaningful.</p></blockquote><p><a href=\"https://www.technologyreview.com/2026/09/15/1144129/ai-models-need-more-data-about-biology-and-openai-is-paying-to-create-it/\">AI models need more data about biology, and OpenAI is paying to create it</a>, by Antonio Regalado</p><blockquote><p>Today the OpenAI Foundation, the nonprofit parent of OpenAI, said it would fund her idea as part of a new effort it calls Public Data for Health, which aims to help artificial intelligence make big leaps in medicine by paying to create \"high-quality scientific datasets.\" [\u2026] \"We're starting grantmaking when we think the best way to achieve that mission is to make grants to external nonprofits, research institutions, and other third parties,\" Trefethen said in an interview. He says the foundation hopes to give away $1 billion by the end of the year. </p></blockquote><p><a href=\"https://rworks.dev/posts/r-managers\">{renv}, {rix}, rv, uvr, ir: An explosion of R package and environment managers</a>, by Isabella Velasquez</p><blockquote><p>While they're all about tracking or isolating dependencies, they operate at a different \"levels\" from each other. TL;DR:</p><ul><li><p>{rix} snapshots the entire system environment</p></li><li><p>{renv}, rv, and uvr manage R package dependencies within a single R project</p></li><li><p>ir handles dependencies for a single R script rather than a project</p></li></ul></blockquote><p><a href=\"https://cran.r-project.org/web/views/PackageDevelopment.html\">CRAN Task View: Package Development and Maintenance</a>, by Llu\u00eds Revilla and Heather Turner</p><blockquote><p>To assist package developers, this task view collates contributed packages with reference to relevant sections of <a href=\"https://cran.r-project.org/doc/manuals/r-release/R-exts.html\">WRE</a>, highlighting relevant functionality from base/recommended packages before alternative/supplementary tools.</p></blockquote><p><a href=\"https://www.insidehighered.com/opinion/views/2026/09/29/ai-slop-coming-university-library-near-you-opinion\">AI Slop Coming to University Library Near You</a>, by Daniel M. Gross</p><blockquote><p>As a faculty member at the University of California, Irvine, I was recently shocked to learn that AI slop had breached our carefully curated\u2014and expensive\u2014library holdings. Most shocking was that the incursion wasn't marginal. It came from the heart of our holdings: Springer Nature. Apparently, since May 2021, Springer Nature has been publishing <a href=\"https://group.springernature.com/gp/group/media/press-releases/advances-its-machine-generated-tools-with-ai-based-lit-overviews/19129322\">\"AI-based\" literature reviews</a>, book-length texts that the publisher describes as incorporating \"a mixture of human-written text and machine-generated literature overviews.\" [\u2026] For librarians, the message is this: University research faculty care deeply about you in your role as the most immediate gatekeepers for what counts as knowledge. It's time for a new collaboration along these lines when the stakes appear, for us both, profound. For others, the message is to consider seriously what alternatives are left if the universities and their libraries fade.</p></blockquote><p><a href=\"https://www.anthropic.com/research/self-replicating-ai\">Anthropic: AI models may be capable of self-replicating without access to a datacenter</a></p><blockquote><p>Our experiments suggest that small AI models may be months away from being capable enough to self-replicate on commercial internet-of-things (IoT) devices, like smart ovens and off-brand Android TV boxes. A replicator like this would be challenging to shut down, since there's no centralized point to shut off</p></blockquote><p><a href=\"https://blekhman.substack.com/p/why-i-am-not-reading-your-ai-generated\">Why I am not reading your AI-generated email</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Ran Blekhman&quot;,&quot;id&quot;:43380939,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab848573-8f92-4346-9fe5-9ee0c05d2d43_804x804.jpeg&quot;,&quot;uuid&quot;:&quot;9bedcd1d-61fa-42d3-b498-fc5142203066&quot;}\" data-component-name=\"MentionToDOM\"></span><a class=\"footnote-anchor\" data-component-name=\"FootnoteAnchorToDOM\" id=\"footnote-anchor-1\" href=\"#footnote-1\" target=\"_self\">1</a></p><blockquote><p>Writing an email takes effort. That effort itself is a signal that the writer thought about what they wanted to say and decided it was relevant. They thought - even for a few minutes - about why they are a good fit for the lab, how their career would flourish here, what they can contribute. An email that was generated with AI completely eliminates this signal. It tells me the sender spent approximately zero time on this communication. I do not think it is unreasonable to respond in kind.</p></blockquote><p><a href=\"https://www.anthropic.com/news/2026-usage-policy-update\">Addressing abusive behavior toward our models</a> (Anthropic 2026 Usage Policy update)</p><blockquote><p>We've added a prohibition on sustained and needless abusive or cruel behavior toward our models. The policy update is meant to apply only in extreme cases, where users repeatedly act cruelly toward our models, with no discernible purpose. It does not apply to common versions of user frustration, pushback, dark creative themes, or model testing and research.</p></blockquote><p><a href=\"https://www.businessinsider.com/ai-researchers-smoking-ai-cure-cancer-palantir-cto-2026-10\">AI Researchers Smoke, Betting AI Will Cure Cancer</a>, by Thibault Spirlet</p><blockquote><p>Forget sleepmaxxing and cold plunging: smoking is the new lifestyle flex among AI researchers. At least, that's according to Palantir CTO Shyam Sankar, who said some AI researchers are taking up smoking to signal their belief that AI will eventually cure cancer. \"So many AI researchers have started smoking as a way of signaling to other researchers how much they believe in AI,\" Sankar said in an interview on CBS News' \"Face the Nation\" on Sunday.</p></blockquote><p><a href=\"https://www.nature.com/articles/d41586-026-03151-7\">China picks first researchers for 15-year mega grants</a>, by Mohana Basu</p><blockquote><p>During those 15 years, we will not conduct any short-cycle, short-term target assessments. We will assess only one thing: whether you are there in the laboratory.</p></blockquote><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://blog.stephenturner.us/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://blog.stephenturner.us/subscribe?\"><span>Subscribe now</span></a></p><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;afe04759-ccf4-4f2d-90c9-6b3ca9fca0fb&quot;,&quot;caption&quot;:&quot;I don't like mandatory AI disclosures. And it's awkward because I require them from my students. If you've been reading here lately you also know that I'm trying to drastically reduce how much writing I delegate to AI. Writing helps me think. I lose something when I turn that over to Claud\u2026&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;I'm Skeptical of AI Disclosures&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-17T09:40:55.598Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4d03c3-076e-4a2f-9245-8bf06b762044_1108x583.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-disclosures&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:220671995,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;02be1cb4-b494-4490-95a8-ef34fbcae5a4&quot;,&quot;caption&quot;:&quot;Some days I buy into the AI as Normal Technology argument that Arvind Narayanan and Sayash Kapoor popularized in their essay by the same title.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Anthropic is not pitching Normal Technology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-27T08:45:12.477Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!giS4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c59d001-2906-4c57-a3d4-f8fb5198b1f9_1203x639.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/anthropic-s1-prospectus&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:222305199,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;6da7ed7d-3690-45d4-9e67-5776e1c4d3a2&quot;,&quot;caption&quot;:&quot;Before anything else: I write this as a tenured professor who loves this job. Academia has been good to me, and I plan to spend the rest of my career here. So this essay isn't a criticism or indictment. Quite the contrary. I only bother critiquing the people and institutions I act\u2026&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;What Counts as Impact?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-19T12:15:23.360Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Phqy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31a09790-6158-400f-bb27-023aba2e406b_1128x596.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/what-counts-as-impact&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:220965022,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:3,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;ab242fa4-5f93-4324-ab46-5c1cff51bea9&quot;,&quot;caption&quot;:&quot;Back in March I wrote paper with a few colleagues about AI's place in peer review. The preprint is here, and I wrote a short post about it here.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI Reviews Might Beat Human Peer Reviews&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-24T15:22:32.790Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!tXow!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bdb46e-3d4e-4a19-a0fc-32a89d0b3c33_1105x580.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-peer-reviews-beat-humans&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:221835700,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:3,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;7c295752-729a-47c5-8fb2-264babe6a3b3&quot;,&quot;caption&quot;:&quot;Normally at the end of every month I offer a list of links to papers, articles, blog posts, etc. This month I'll add a few podcast recommendations. Three podcasts, one episode from each.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Podcast Recommendations Oct 2026&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-25T12:06:54.696Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31df1c51-4314-4a73-9214-4e2fb00ea1cd_1484x779.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/podcast-recs-dtascience-uvadatapoints-aiexchange&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:222023708,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;c72cafe1-fe34-44c8-bd5d-6097a43b7c5a&quot;,&quot;caption&quot;:&quot;There's a funny thing that happens to me from time to time. I randomly stumble across an essay or a paper that resonates with me, sometimes one that I can't stop thinking about for days. Then I come to find out the author is a colleague here at my own University of Virginia in the building next door who I never knew of.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI in the workplace vs. AI in education&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-11T10:18:47.559Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!lH-e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff254a632-4d6b-4a48-97f1-03af66430266_1343x1064.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-workplace-education&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:219841835,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:1,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://blog.stephenturner.us/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://blog.stephenturner.us/subscribe?\"><span>Subscribe now</span></a></p><p><em>Cover image: Der Sturz des Ikarus (circa 1940), Oskar Laske (Austrian, 1874-1951)</em></p><div class=\"footnote\" data-component-name=\"FootnoteToDOM\"><a id=\"footnote-1\" href=\"#footnote-anchor-1\" class=\"footnote-number\" contenteditable=\"false\" target=\"_self\">1</a><div class=\"footnote-content\"><p>Editorial note: I had begun writing my own I-don't-read-AI-email policy when Ran published this essay, verbalizing much more clearly some of the reasons why not. His essay helped me clarify my own policy at <a href=\"https://stephenturner.us/aiemail\">stephenturner.us/aiemail</a>, which is linked from my contact page at <a href=\"https://stephenturner.us/contact\">stephenturner.us/contact</a>.</p></div></div>","doi":"https://doi.org/10.59350/5q0dk-5vx42","guid":"216556222","image":"https://substack-post-media.s3.amazonaws.com/public/images/8286a00f-80b6-4096-98aa-5eb3b2041fb1_1245x654.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"seatc-b9j84","summary":"Tacit knowledge, AI and biosecurity, field building, chat with DNA, Nextflow, AI in academia and science, R package development, peer review","tags":["Papers","Biosecurity","R","Nextflow","AI"],"title":"October 2026 links","updated_at":1793431812,"url":"https://blog.stephenturner.us/p/october-2026-links","version":"v1"}},{"document":{"authors":[{"contributor_roles":[],"family":"Lakens","given":"Daniel"}],"blog":{"authors":null,"community_id":"5c1dc37c-5dba-4707-8c14-587fa89f6807","created":1753833600,"current_feed_url":null,"description":"A blog on statistics, methods, philosophy of science, and open science. Understanding 20% of statistics will improve 80% of your inferences.","doi":"https://doi.org/10.59350/daniellakens","favicon":"https://rogue-scholar.org/api/communities/5c1dc37c-5dba-4707-8c14-587fa89f6807/logo","feed_format":"application/atom+xml","feed_url":"https://daniellakens.blogspot.com/feeds/posts/default","filter":null,"generator":"Blogger","home_page_url":"https://daniellakens.blogspot.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"daniellakens","status":"active","subfield":"3205","title":"The 20% Statistician","updated":1793354047,"use_api":null},"blog_name":"The 20% Statistician","blog_slug":"daniellakens","content_html":"<div style=\"max-width: 100%; overflow-wrap: anywhere;\"><div style=\"max-width: 100%; overflow-wrap: anywhere;\"><div style=\"max-width: 100%; overflow-wrap: anywhere;\"><p>When authors share their data and analysis code, the idea is that anyone should be able to run that code on that data and get the results reported in the paper. But sharing data and code in a way that results are reproducible is difficult, and researchers have often not received training in how to share data and code. As a consequence, there are often basic mistakes in public repositories that stand in the way of computationally reproducible results. Automated checks can help researchers identify and fix these mistakes, such as not sharing all files that are loaded in code, using absolute instead of relative file-paths, using values that are not computed in the code that is shared, changing file names so they no longer match the code, or not loading all libraries.</p><p>Checking whether data and code is reproducible is tedious. It also often requires repeated back and forths between the person performing the checks, and the researchers sharing data and code. Ideally, checks do not just focus on whether code runs, but also whether all results in a manuscript are reproduced by the code, but this takes a lot of time.</p><p><a href=\"https://www.scienceverse.org/metacheck_book/\" target=\"_blank\">Metacheck</a>'s <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">reproducibility_check</code> module attempts to perform all these checks automatically. When it succeeds, researchers and/or reviewers, data managers, or editors know that data and code is shared in a reproducible manner, and they do not need to perform manual checks. This saves everyone time, and leads to data and code repositories that are more useful for science. Our reproducibility check module is completely code-based. It uses no AI (although modules it builds on, such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">data_check</code>, can optionally use a large language model, by setting <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">llm_use(TRUE)</code>, to better understand the files in a repository, such as which files belong to which study), and it can run locally on your computer without sending information to an external server.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s128/metacheck-logo.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"128\" data-original-width=\"111\" height=\"128\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s1600/metacheck-logo.png\" width=\"111\"/></a></div><br/><p>If I say so myself, it is pretty damn cool. It is one of the rare experiences where I honestly thought something could not be done, but where I surprised myself because it actually works.</p><p>This post shows the module at work on two versions of the same small study: one where every reported result can be reproduced, and one where several cannot.</p><h2 id=\"computationally-reproducing-a-simple-stroop-experiment\">Computationally reproducing a simple Stroop experiment</h2><p>Both papers analyse the same classroom data from my introduction to psychology and technology course. Students named the ink color of words that matched the color (the word \"red\" printed in red) and of words that did not (the word \"red\" printed in green), and reported the time they needed in seconds. Both papers report four results: the mean and standard deviation of the reaction times in each condition, the correlation between the reaction times in the two conditions, a paired <em>t</em>-test for the Stroop effect, and a comparison of the Stroop effect between the students tested in 2013 and in 2014.</p><ul><li>The <strong>good</strong> paper, <a class=\"uri\" href=\"https://github.com/Lakens/stroop_effect_paper\">https://github.com/Lakens/stroop_effect_paper</a>, computes every reported number in its analysis code. The manuscript is a Quarto document, so the text prints these numbers directly from the analysis.</li><li>The <strong>bad</strong> paper, <a class=\"uri\" href=\"https://github.com/Lakens/stroop_effect_paper_bad\">https://github.com/Lakens/stroop_effect_paper_bad</a>, has several common mistakes deliberately built in. The results were typed into the text by hand, the shared data contain a value the authors removed before their own analysis without saying so, some reported results are not computed by the code at all, and the code stops with an error before it reaches the last analysis.</li></ul><h2 id=\"running-the-code-locally-or-using-our-server-on-surf\">Running the code locally, or using our server on SURF</h2><p>The reproducibility check runs code that other people wrote. That is not without risk. A script can delete files, read files that have nothing to do with the project, or send information over the internet, by accident or on purpose. By default, <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">execute = TRUE</code> runs each script in a separate R process on your own computer. This prevents a script that crashes from taking your own R session down with it, but the script can still reach every file on your computer, and the internet. That is fine for the two repositories in this post, which I wrote myself, but not for code from a repository you have not created, as a bad actor might insert problematic code.</p><p>For such code, add <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">sandbox = \"docker\"</code>. <a href=\"https://www.docker.com/\">Docker</a> is a program that runs software in a <em>container</em>: a closed environment on your computer, separated from the rest of the system. Metacheck runs every script in its own container, and has set up these containers so that the code can do as little harm as possible:</p><ul><li>The container has no internet connection while the code runs. Only the step before it, which installs the packages the code needs, is connected to the internet, and in that step none of the paper's own code runs.</li><li>The code runs on a copy of the repository's files, in a temporary folder. That folder is the only place on your computer it can write to, and the files on the rest of your computer are not visible inside the container.</li><li>The code runs as an ordinary user without administrator rights, cannot obtain extra rights, and can start only a limited number of processes.</li><li>Each script is stopped after a time limit, 10 minutes by default.</li></ul><p>No sandbox makes running unknown code completely safe: a flaw in Docker itself could in principle still be exploited. But these settings close off the usual ways in which a script can do damage. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-reproducibility-check.html#two-ways-to-run-the-code\">Reproducibility Check</a> chapter lists the exact settings, and compares them with running code without Docker.</p><p>Running the check in Docker takes some preparation, and disk space. You need Docker Desktop (on Windows and macOS) or Docker Engine (on Linux), and the space Docker Desktop itself needs. The first time you run the check, Docker downloads Metacheck's image for R code: R, Quarto, and the roughly 750 R packages that occurred in a scan of thousands of R files shared with psychology papers, together about 4.9 GB. Python code runs in a second image of about 2.7 GB. Because most packages a paper needs are already in the image, they do not have to be installed again for every paper, which makes the check much faster (but at the expense of a large docker image that you install once). The chapter explains <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-reproducibility-check.html#the-pre-built-docker-image-and-why-it-exists\">how the image was built</a>.</p><p>If you do not use R, the <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html#docker-installation\">Docker installation</a> runs Metacheck's website on your own computer, with the same checks. It needs about 1.7 GB of disk space and a computer with 8 GB of memory, plus Docker. There, the code of a repository runs inside Metacheck's own container: it cannot reach the files on your computer, but unlike in the sandbox described above, it can use the internet. The packages the code needs are downloaded while the check runs. Running the check on your own computer also means that an unpublished manuscript never leaves it, which matters for editors and reviewers who may not upload a submission to an external server.</p><p>The easiest way to try the check is our server on SURF Research Cloud, which runs on the servers of SURF, the cooperative of the Dutch universities, in the Netherlands. You need nothing but a web browser. On <a href=\"https://metacheckserve.metacheck.src.surf-hosted.nl/\">Metacheck's website</a>, upload a PDF under <em>Run Metacheck on a Paper</em> and tick <em>Also run the code in the paper's repository</em>, or, under <em>Run Metacheck on a Repository</em>, choose a folder or a .zip file, or paste a link to an online repository such as GitHub or OSF. Uploaded files are deleted as soon as they have been read, and the report is kept on the server for one hour, so save it if you want to keep it.</p><p>The server's capacity is shared by everyone who uses it, so it is meant for checking a paper or a repository now and then. If you want to check many papers, run Metacheck on your own computer, or <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html#your-own-server-on-surf-research-cloud\">build your own server on SURF Research Cloud</a>, which researchers at Dutch institutions can do through their institution or with a free NWO grant. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html\">Setting up Metacheck</a> chapter describes all these options.</p><h2 id=\"running-the-reproducibility-check-in-r.\">Running the reproducibility check in R.</h2><p>I will illustrate the reproducibility check module in R. Metacheck reads a paper from its PDF. We download both PDFs from GitHub, and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">convert()</code> turns each into a structured file that <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">read()</code> loads into R. If you want to follow along in the Metacheck website, download the two papers from <a href=\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper/main/output/analysis.pdf\">here</a> and <a href=\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/analysis.pdf\">here</a>.</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">download.file(\n  \"https://raw.githubusercontent.com/Lakens/stroop_effect_paper/main/output/analysis.pdf\",\n  destfile = \"good_paper.pdf\", mode = \"wb\"\n)\ndownload.file(\n  \"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/analysis.pdf\",\n  destfile = \"bad_paper.pdf\", mode = \"wb\"\n)\npaper &lt;- read(convert(file_path = \"good_paper.pdf\", save_path = \".\"))\nbad_paper &lt;- read(convert(file_path = \"bad_paper.pdf\", save_path = \".\"))</code></pre></div><p>Both papers link to their repository. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-repo-check.html\">repo_check</a> module in Metacheck supports over 270 data repositories, and can automatically download files from these repositories.</p><p>Running the module is a single line. By default, <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">reproducibility_check</code> only inspects the code without running it. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">execute = TRUE</code> is needed to actually run the full computational reproducibility check:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good &lt;- module_run(paper, \"reproducibility_check\", execute = TRUE)\nmo_good$traffic_light</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; [1] \"green\"</code></pre></div></div><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_good$summary_text)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; \n#&gt; -  We assessed AND ran 2 R code files for reproducibility (each in an isolated subprocess).\n#&gt; -  2 files appear runnable so far (parses, inputs resolve, placeable in the run order).\n#&gt; -  2 of 2 scripts ran without error when executed.\n#&gt; -  5 installable dependencies detected.\n#&gt; - 39 statistics stored from the extracted output; 11 of 11 reported tests matched (100%).</code></pre></div></div><p>The light is green: every script ran without an error, and every result reported in the manuscript was among the results the code produced when it ran. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_good$table</code> lists each script and what happened when it was run:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good$table[, c(\"file_name\", \"outcome\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;                 file_name outcome\n#&gt; analysis.qmd analysis.qmd  ran_ok\n#&gt; clean_data.R clean_data.R  ran_ok</code></pre></div></div><p><code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">clean_data.R</code> turns the raw data file into the processed data file, and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">analysis.qmd</code> is the manuscript, whose code chunks contain the analysis. The repository also contains <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">renv/activate.R</code>, a script the <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">renv</code> package adds to a project to set up its package library. The module does not check the contents of this folder, because it knows it is not part of the analysis.</p><p><code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_good$match_table</code> shows, for each result reported in the paper, whether it was found in the output of the code, and in which analysis:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good$match_table[, c(\"reported\", \"found\", \"confidence\", \"analysis\")] |&gt;\n  knitr::kable()</code></pre><div class=\"cell-output-display\"><div style=\"max-width: 100%; overflow-x: auto;\"><table style=\"border-collapse: collapse; font-size: 0.85em; margin: 1em 0px; max-width: 100%; table-layout: auto; width: auto;\"><thead><tr><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">reported</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">found</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">confidence</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">analysis</th></tr></thead><tbody><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=15.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=23</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.78</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">r=0.37 t=4.53 df=129 p=&lt;0.001</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Pearson's product-moment correlation</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=18.04 df=130 p=&lt;0.001</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Paired t-test</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohen's dz=1.58</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">d_z</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=7.77</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=8.13</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=-0.42 df=120.37 p=0.673</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Welch Two Sample t-test</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohen's d=-0.07</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohens_d</td></tr></tbody></table></div></div></div></div><p>A result is not compared as single numbers, but as a whole: the <em>t</em>-value, the degrees of freedom, and the <em>p</em>-value of one test have to appear together in the output of one analysis. Any single number will sooner or later turn up somewhere in a large output by coincidence, but several numbers of one test appearing together in one analysis will not.</p><blockquote style=\"background: rgb(243, 249, 243); border-left: 4px solid rgb(76, 175, 80); margin: 1em 0px; padding: 4px 12px;\"><p><strong>Making your own results findable</strong></p><p>The module can only find a result if the code produces it while it runs, in a form the module recognises. In the good paper, every reported number is computed in a code chunk, and the text of the manuscript only rounds these values. A number that is computed only inside the text, by an inline R expression in Quarto or R Markdown, is not part of the code that is run, so it cannot be found.</p><p>The module recognises the results of test functions such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">t.test()</code> and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">cor.test()</code>, of summaries such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">sapply(stroop_data[, c(\"congruent\", \"incongruent\")], mean)</code>, and of effect sizes from the <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">effectsize</code> package, also when they are stored in a variable (<code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">ttest_result &lt;- t.test(...)</code>). A number computed by hand, such as a Cohen's <em>d</em> computed as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mean(diff) / sd(diff)</code>, is found when the code prints it, but not when it is only stored in a variable.</p></blockquote><p>A green light means that the numbers in the paper follow from the shared code and data. It does not mean that the analysis was the right one to perform.</p><p>Now let's see what the module returns if we run it on the bad paper:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad &lt;- module_run(bad_paper, \"reproducibility_check\", execute = TRUE)\nmo_bad$traffic_light</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; [1] \"red\"</code></pre></div></div><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_bad$summary_text)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; \n#&gt; -  We assessed AND ran 1 R code file for reproducibility (each in an isolated subprocess).\n#&gt; -  1 file appears runnable so far (parses, inputs resolve, placeable in the run order).\n#&gt; -  0 of 1 script ran without error when executed.\n#&gt; -  3 installable dependencies detected.\n#&gt; - 10 statistics stored from the extracted output; 2 of 6 reported tests matched (33.3%).</code></pre></div></div><p>The light is red, because the analysis code stopped with an error:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$table[, c(\"file_name\", \"outcome\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;                 file_name outcome\n#&gt; analysis.qmd analysis.qmd errored</code></pre></div><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_bad$run_results$error)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; ! in callr subprocess.\n#&gt; Caused by error in `eval(predvars, data, env)`:\n#&gt; ! object 'stroop_effect' not found</code></pre></div></div><p>The code compares the Stroop effect between the two years using a column <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">stroop_effect</code>, but no line of the code creates that column. The authors presumably created it in their R console while they worked, so the code ran on their own computer, but it cannot run for anyone else. This is one of the most common reasons shared code fails.</p><p>Before the code was run, the module also changed one line of it. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_bad$modifications</code> lists every change:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mods &lt;- mo_bad$modifications\nmods[mods$change_type == \"setwd_removed\", c(\"change_type\", \"detail\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;     change_type                                detail\n#&gt; 2 setwd_removed C:/Users/dlakens/Desktop/stroop_study</code></pre></div></div><p>The code starts with <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">setwd(\"C:/Users/dlakens/Desktop/stroop_study\")</code>, which sets the folder R works in to a folder that only exists on the author's computer. The module skips this line, and reports that it did, because it would stop the code on any other computer.</p><p>Now the comparison between the paper and the output:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$match_table[, c(\"reported\", \"found\", \"confidence\", \"analysis\")] |&gt;\n  knitr::kable()</code></pre><div class=\"cell-output-display\"><div style=\"max-width: 100%; overflow-x: auto;\"><table style=\"border-collapse: collapse; font-size: 0.85em; margin: 1em 0px; max-width: 100%; table-layout: auto; width: auto;\"><thead><tr><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">reported</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">found</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">confidence</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">analysis</th></tr></thead><tbody><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=18.04 df=130 p=0.25 Cohen's dz=0.25</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=-0.42 df=120.37 p=0.673</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=15.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=23 SD=4.78</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">r=0.37</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr></tbody></table></div></div></div><p>Only the mean and standard deviation of the congruent condition were found. Each of the other results is missing for a different reason:</p><ul><li><p><strong>The incongruent mean and standard deviation</strong> (<em>M</em> = 23.0, <em>SD</em> = 4.78) are not in the output. The output contains the statistics the code did compute:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$stat_output[[1]]$long[, c(\"analysis\", \"statistic\", \"value\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;         analysis       statistic                value\n#&gt; 1  mean by group            mean     15.1102878787879\n#&gt; 2  mean by group            mean      22.080446969697\n#&gt; 3    sd by group              sd     4.08488216267072\n#&gt; 4    sd by group              sd       11.63934788467\n#&gt; 5  Paired t-test               t     6.77356838604279\n#&gt; 6  Paired t-test              df                  131\n#&gt; 7  Paired t-test               p 3.84360296105763e-10\n#&gt; 8  Paired t-test mean difference     6.97015909090909\n#&gt; 9  Paired t-test        conf.low     4.93450571703671\n#&gt; 10 Paired t-test       conf.high     9.00581246478147</code></pre></div></div><p>The incongruent mean is 22.08, with a standard deviation of 11.64. The reason is in the data. One participant has a reaction time of -99 in the incongruent condition:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">bad_data &lt;- read.csv(\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/stroop.csv\")\nsummary(bad_data$Incongruent)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. \n#&gt;  -99.00   19.27   22.64   22.08   26.10   35.13</code></pre></div></div><p>-99 is a code for a missing value, not a reaction time. The authors removed this participant before computing the results in their paper, but the code they shared does not, so it analyses -99 as if it were a reaction time.</p></li><li><p><strong>The paired <em>t</em>-test</strong>, <em>t</em>(130) = 18.04, is not found for the same reason: the shared code analyses all 132 participants, including the -99, and gets <em>t</em>(131) = 6.77. The reported <em>p</em> = .25 and Cohen's <em>d<sub>z</sub></em> = 0.25 would not have matched in any case, because neither is consistent with a <em>t</em>-value of 18.04 (the <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-stat-check.html\">StatCheck</a> and <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-stat-effect-size.html\">Effect Sizes</a> modules flag both from the text alone).</p></li><li><p><strong>The correlation</strong>, <em>r</em> = 0.37, is reported, but no line of the code computes it.</p></li><li><p><strong>The comparison between the years</strong>, <em>t</em>(120.37) = -0.42, <em>p</em> = .673, has exactly the numbers the good paper reports, so it is probably correct. But the code stopped with an error before it reached this test, so it cannot be verified from what the authors shared.</p></li></ul><p>The three <em>p</em>-values about accuracy (<em>p</em> = .07, <em>p</em> = .34, and <em>p</em> = .000) are not in the table at all. The module only checks a <em>p</em>-value that is reported together with its test statistic. Had they been checked, they would not have been found either: the repository contains no accuracy data.</p><h2 id=\"open-for-feedback\">Open for feedback</h2><p>Making this software was a challenge. We have validated the code by running it on more than 3000 scientific papers, with hundreds of folders of data and code, across dozens of data repositories. But there will be bugs. Software this complex, that tries to process the almost infinite ways in which researchers can share data and code, is bound to run into bugs. When thousands of people try this out, for some it will fail on their very first try (while for many others, it will run fine). If you find a bug, please raise an issue on the Metacheck github page. You need to share the data or code files that lead to the problem with us, or we can't fix the problem. If you can't share the data and code, you can ask an AI agent to analyze the problem, which might be enough to solve it as well. If the tool lacks features you would like to have, let us know, and we will do our best to build them in.</p></div></div>","doi":"https://doi.org/10.59350/swn8y-zfe39","guid":"tag:blogger.com,1999:blog-987850932434001559.post-7242569431721523819","image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s72-c/metacheck-logo.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"kr36y-xp247","summary":"When authors share their data and analysis code, the idea is that anyone should be able to run that code on that data and get the results reported in the paper. But sharing data and code in a way that results are reproducible is difficult, and researchers have often not received training in how to share data and code.","tags":["Metacheck"],"title":"Automatic computational reproducibility checks with Metacheck","updated_at":1793431809,"url":"https://daniellakens.blogspot.com/2026/10/automatic-computational-reproducibility.html","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/04xfq0f34","name":"RWTH Aachen University"}],"contributor_roles":[],"family":"Hoyt","given":"Charles Tapley","url":"https://orcid.org/0000-0003-4423-4370"}],"blog":{"authors":null,"community_id":"da4ef2af-5fad-46b2-8195-d77db0141ad6","created":1716422400,"current_feed_url":null,"description":"Unraveling complex biology with biological knowledge graphs. Content licensed under CC BY 4.0.","doi":"https://doi.org/10.59350/cthoyt","favicon":"https://rogue-scholar.org/api/communities/da4ef2af-5fad-46b2-8195-d77db0141ad6/logo","feed_format":"application/atom+xml","feed_url":"https://cthoyt.com/feed.xml","filter":null,"generator":"Jekyll","home_page_url":"https://cthoyt.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"cthoyt","status":"active","subfield":"1312","title":"Biopragmatics","updated":1793374800,"use_api":null},"blog_name":"Biopragmatics","blog_slug":"cthoyt","content_html":"<p>This week saw the addition of the\n<a href=\"https://semantic.farm/metaregistry/loc.classschemes\">Library of Congress Class Schemes</a>\nregistry, an overhaul of the alignment workflow with the\n<a href=\"https://semantic.farm/metaregistry/zazuko\">Zazuko</a> registry, the addition of 18\nnew records, and finally the update of 222 records in the\n<a href=\"https://semantic.farm\">Semantic Farm</a> and the\n<a href=\"https://bioregistry.io\">Bioregistry</a>.</p>\n<h2 id=\"external-alignment\">External Alignment</h2>\n<p>The Semantic Farm/Bioregistry ingests content from 36 external resources both to\nreduce curation burden but also to increase its coverage of resources across a\nvariety of domains and disciplines.</p>\n<h3 id=\"adding-library-of-congress-classification-schemes\">Adding Library of Congress Classification Schemes</h3>\n<p>The United States Library of Congress (LOC) Classification Schemes covers\nvarious classification systems across the natural sciences, humanities, and\nlibrary sciences, such as the\n<a href=\"https://semantic.farm/mesh\">Medical Subject Headings (MeSH)</a>,\n<a href=\"https://semantic.farm/iconclass\">Iconclass</a>, and\n<a href=\"https://semantic.farm/ddc\">Dewey Decimal Classification (DDC)</a>. I implemented\nan alignment workflow that ingests its entries and semi-automatically maps them\nto Semantic Farm/Bioregistry records based on lexical matching of prefixes in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2156\">biopragmatics/bioregistry#2156</a>.</p>\n<p>Compared to other external registries, LOC Classification Schemes is information\npoor - it only contains prefixes and names for its records, whereas external\nregistries like Identifiers.org have higher minimum metadata standards. A\ncomparison of metadata standards across all 36 external registries is available\n<a href=\"https://semantic.farm/related\">here</a> and is automatically updated when new ones\n(like LOC) are added!</p>\n<h3 id=\"updating-zazuko\">Updating Zazuko</h3>\n<p><a href=\"https://zazuko.com\">Zazuko</a> is a company that builds semantic web technologies\nand solutions. It develops several of its own controlled vocabularies and\nontologies to support its work, and importantly hosts\n<a href=\"https://prefix.zazuko.com\">https://prefix.zazuko.com</a>, a unique frontend to many key semantic web\ncontrolled vocabularies and ontologies.</p>\n<p>I recently found that they host metadata about the resources they index that\nisn't available through its API, but rather through RDF files in N-tuples format\non their GitHub repository (e.g., for\n<a href=\"https://raw.githubusercontent.com/zazuko/rdf-vocabularies/refs/heads/master/ontologies/cube/meta.nt\">Cube schema</a>).\nTherefore, I updated the alignment workflow in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2144\">biopragmatics/bioregistry#2144</a>\nto parse key metadata such as names and descriptions. Given this new context, I\nwas motivated to curate the remaining information for dozens of these resources\nin order to meet the Semantic Farm/Bioregistry's minimum metadata standards for\nnew records.</p>\n<p>There are countless opportunities for ingesting new records from external\nrecords, which are perfect for new curators who are interested to get involved.\nIf that sounds like you, have a look at\n<a href=\"https://github.com/biopragmatics/bioregistry/blob/main/docs/curation-import-external.md\">this curation guide</a>.</p>\n<h2 id=\"new-records\">New Records</h2>\n<p>The Semantic Farm/Bioregistry enables the community to submit new records to\nbest cover their resources and resources they use. This week had two external\ncontributions that were accepted (with several under review):</p>\n<ul>\n<li><a href=\"https://semantic.farm/fairmap\">FAIR Mappings Schema (fairmap)</a> was\ncontributed by <a href=\"https://orcid.org/0000-0002-7356-1779\">Nico Matentzoglu</a> as\npart of the ongoing work of the\n<a href=\"https://mapping-commons.github.io/rda-fair-mappings/\">RDA FAIR Mappings Working Group</a>\nin\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2147\">biopragmatics/bioregistry#2147</a>.</li>\n<li><a href=\"https://semantic.farm/seipid\">Scholarly Entity International Persistent Identifier Infrastructure (seipid)</a>\nwas contributed by <a href=\"https://orcid.org/0000-0001-6939-2856\">Nasir Razzaq</a> on\nbehalf of his firm <a href=\"https://xrc.xpertno.com\">Xpertno Research Center</a> in\nPakistan in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2148\">biopragmatics/bioregistry#2148</a></li>\n</ul>\n<p>I contributed <a href=\"https://semantic.farm/xh11d\">XHTML Datatypes (xh11d)</a>, then\ncurated mappings from the LinkML core metamodel types to <code class=\"language-plaintext highlighter-rouge\">xh11d</code> in\n<a href=\"https://github.com/linkml/linkml-model/pull/289\">linkml/linkml-model#289</a>,\ngiving <a href=\"https://linkml.io\">LinkML</a> a better grounding to previously established\nsemantic web standards.</p>\n<p><a href=\"https://semantic.farm/udc\">Universal Decimal Classification (UDC)</a> was added in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2153\">biopragmatics/bioregistry#2153</a>\nin order to complete the mapping from Dublin Core Terms\n<a href=\"https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#section-4\">encoding schemes</a>\nto corresponding records in the Semantic Farm/Bioregistry. The other eight\nschemes listed already had corresponding records.</p>\n<p>The remaining new records were all ingested from\n<a href=\"https://semantic.farm/metaregistry/zazuko\">Zazuko</a> and appropriately enriched\nto meet minimum metadata requirements for the Semantic Farm/Bioregistry in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2144\">biopragmatics/bioregistry#2144</a>.</p>\n<table>\n<thead>\n<tr>\n<th>Prefix</th>\n<th>Name</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://semantic.farm/b59\">b59</a></td>\n<td>barnard59</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.meta\">cube.meta</a></td>\n<td>Cube Schema meta data extension</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.relation\">cube.relation</a></td>\n<td>Cube Schema relation vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.schema\">cube.schema</a></td>\n<td>Cube schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/duv\">duv</a></td>\n<td>Dataset Usage Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fairmap\">fairmap</a></td>\n<td>FAIR Mappings Schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.constant\">qudt.constant</a></td>\n<td>QUDT VOCAB Physical Constants Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.currency\">qudt.currency</a></td>\n<td>QUDT VOCAB Currency Units Release 3.0.0</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.dimensionvector\">qudt.dimensionvector</a></td>\n<td>QUDT VOCAB Dimension Vectors Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.discipline\">qudt.discipline</a></td>\n<td>QUDT Disciplines Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.prefix\">qudt.prefix</a></td>\n<td>QUDT VOCAB Decimal Prefixes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.quantitykind\">qudt.quantitykind</a></td>\n<td>QUDT Quantity Kind Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.sou\">qudt.sou</a></td>\n<td>QUDT VOCAB Systems of Units Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.unit\">qudt.unit</a></td>\n<td>QUDT VOCAB Units of Measure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rr\">rr</a></td>\n<td>R2RML vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/seipid\">seipid</a></td>\n<td>Scholarly Entity International Persistent Identifier Infrastructure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/udc\">udc</a></td>\n<td>Universal Decimal Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xh11d\">xh11d</a></td>\n<td>XHTML Datatypes</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"updated-records\">Updated Records</h2>\n<p>There were 238 updates, which came from a combination of alignment to LOC Class\nSchemes, enrichment from metadata from Zazuko, and other updates ingested from\nexternal registries.</p>\n<p>Of those updates, only one was done as a stand-alone contribution. I updated the\nrecord for the\n<a href=\"https://semantic.farm/gainesville.core\">Gainesville Core Ontology</a> record in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2152\">biopragmatics/bioregistry#2152</a>\nto ensure that it links to a downloadable OWL file in preparation for the\n<a href=\"https://nfdi4chem.de/event/5th-ontologies4chem-workshop/\">Ontologies4Chem</a>\nconference next week.</p>\n<table>\n<thead>\n<tr>\n<th>Updated Prefix</th>\n<th>Name</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://semantic.farm/ac\">ac</a></td>\n<td>Activity Streams</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/acl\">acl</a></td>\n<td>Basic Access Control ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/afo\">afo</a></td>\n<td>Allotrope Merged Ontology Suite</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/agricola\">agricola</a></td>\n<td>Agricultural Online Access</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ahol\">ahol</a></td>\n<td>Animal Health Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/aio\">aio</a></td>\n<td>The Artificial Intelligence Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/apo\">APO</a></td>\n<td>Ascomycete phenotype ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/apollosv\">APOLLO_SV</a></td>\n<td>Apollo Structured Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/atc\">atc</a></td>\n<td>Anatomical Therapeutic Chemical Classification System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/atol\">atol</a></td>\n<td>Animal Trait Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bao\">bao</a></td>\n<td>BioAssay Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bcio\">bcio</a></td>\n<td>The Behaviour Change Intervention Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bervo\">BERVO</a></td>\n<td>Biological and Environmental Research Variable Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bibo\">bibo</a></td>\n<td>The Bibliographic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biodivthes\">biodivthes</a></td>\n<td>Biodiversity Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biolink\">biolink</a></td>\n<td>BioLink Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biomodels.teddy\">biomodels.teddy</a></td>\n<td>Terminology for Description of Dynamics</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biotop\">biotop</a></td>\n<td>BioTop</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/birnlex\">birnlex</a></td>\n<td>Biomedical Informatics Research Network Lexicon</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bko\">bko</a></td>\n<td>SBGN Bricks data and ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cc\">cc</a></td>\n<td>Creative Commons Rights Expression Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ccf\">ccf</a></td>\n<td>Human Reference Atlas Common Coordinate Framework Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cco\">cco</a></td>\n<td>Cell Cycle Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ccon\">ccon</a></td>\n<td>Cerrado Concepts Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cellosaurus\">cellosaurus</a></td>\n<td>Cellosaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cert\">cert</a></td>\n<td>The Cert Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chebi\">CHEBI</a></td>\n<td>Chemical Entities of Biological Interest</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chemfont.chemical\">chemfont.chemical</a></td>\n<td>ChemFOnt chemical</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chemrof\">ChEMROF</a></td>\n<td>Chemical Entity Materials and Reactions Ontological Framework</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chmo\">CHMO</a></td>\n<td>Chemical Methods Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chr\">CHR</a></td>\n<td>Chromosome Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cidoc.crm\">cidoc.crm</a></td>\n<td>CIDOC Conceptual Reference Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cl\">CL</a></td>\n<td>Cell Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cmc.umg\">cmc.umg</a></td>\n<td>Cell Model Catalogue G\u00f6ttingen</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cmpo\">cmpo</a></td>\n<td>Cellular Microscopy Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cnt\">cnt</a></td>\n<td>Representing Content in RDF</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/covid19\">covid19</a></td>\n<td>SARS-CoV-2</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cryoem\">cryoem</a></td>\n<td>Cryo Electron Microscopy ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/csp\">csp</a></td>\n<td>Computer Retrieval of Information on Science Projects Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/csvw\">csvw</a></td>\n<td>CSV on the Web Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ctcae\">ctcae</a></td>\n<td>Common Terminology Criteria for Adverse Events</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/datacite\">DataCite</a></td>\n<td>DataCite Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dbo\">dbo</a></td>\n<td>DBPedia Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dc\">dc</a></td>\n<td>Dublin Core Elements (1.1)</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcam\">dcam</a></td>\n<td>Dublin Core Metadata Initiative Abstract Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcat\">dcat</a></td>\n<td>Data Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcmitype\">dcmitype</a></td>\n<td>DCMI Type Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcterms\">dcterms</a></td>\n<td>Dublin Core Metadata Initiative Terms</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ddc\">ddc</a></td>\n<td>Dewey Decimal Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ddi\">ddi</a></td>\n<td>Data Documentation Initiative Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dermo\">dermo</a></td>\n<td>Human Dermatological Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dicom\">dicom</a></td>\n<td>Digital Imaging and Communications in Medicine ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/doap\">doap</a></td>\n<td>Description of a Project</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/doid\">DOID</a></td>\n<td>Human Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dpo\">DPO</a></td>\n<td>Drosophila Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dqv\">dqv</a></td>\n<td>Data Quality Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dron\">DRON</a></td>\n<td>The Drug Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dsw\">dsw</a></td>\n<td>Darwin Semantic Web Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/earl\">earl</a></td>\n<td>Evaluation and Report Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecg\">ecg</a></td>\n<td>Electrocardiogram Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecocore\">ECOCORE</a></td>\n<td>An ontology of core ecological entities</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecso\">ecso</a></td>\n<td>The Ecosystem Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecto\">ECTO</a></td>\n<td>Environmental conditions, treatments and exposures ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/edda\">edda</a></td>\n<td>EDDA Study Designs Taxonomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/efo\">EFO</a></td>\n<td>Experimental Factor Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/envo\">ENVO</a></td>\n<td>Environment Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/envthes\">envthes</a></td>\n<td>Thesaurus for long-term ecological research, monitoring, experiments</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/eol\">eol</a></td>\n<td>Environment Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/epso\">epso</a></td>\n<td>Epilepsy and Seizure Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/evorao\">evorao</a></td>\n<td>EVORA Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/exif\">exif</a></td>\n<td>Exif data description vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fabio\">fabio</a></td>\n<td>The FRBR-aligned Bibliographic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/faldo\">faldo</a></td>\n<td>Feature Annotation Location Description Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbbt\">FBbt</a></td>\n<td>Drosophila gross anatomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbcv\">FBcv</a></td>\n<td>FlyBase Controlled Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbdv\">FBdv</a></td>\n<td>Drosophila development</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbsp\">FBSP</a></td>\n<td>Fly taxonomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/flopo\">FLOPO</a></td>\n<td>Flora Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fma\">FMA</a></td>\n<td>Foundational Model of Anatomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/foaf\">foaf</a></td>\n<td>Friend of a Friend</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/foodon\">FOODON</a></td>\n<td>The Food Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fplx\">fplx</a></td>\n<td>FamPlex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/frbr\">FRBR</a></td>\n<td>Functional Requirements for Bibliographic Records</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fypo\">FYPO</a></td>\n<td>Fission Yeast Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gainesville.core\">gainesville.core</a></td>\n<td>Gainesville Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/galen\">galen</a></td>\n<td>GALEN</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geonames.ontology\">geonames.ontology</a></td>\n<td>GeoNames Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql\">geosparql</a></td>\n<td>GeoSPARQL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql.function\">geosparql.function</a></td>\n<td>GeoSPARQL Function</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql.rule\">geosparql.rule</a></td>\n<td>GeoSPARQL Rule</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gexo\">gexo</a></td>\n<td>Gene Expression Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gfo\">gfo</a></td>\n<td>General Formal Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gist\">gist</a></td>\n<td>gist ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/go\">GO</a></td>\n<td>Gene Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gpml\">gpml</a></td>\n<td>WikiPathways GPML Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gr\">gr</a></td>\n<td>GoodRelations</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gramene.growthstage\">GRO</a></td>\n<td>Gramene Growth Stage Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/grddl\">grddl</a></td>\n<td>Gleaning Resource Descriptions from Dialects of Languages</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gs1\">gs1</a></td>\n<td>GS1 Web Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hcpcs\">hcpcs</a></td>\n<td>Healthcare Common Procedure Coding System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hgnc\">hgnc</a></td>\n<td>HUGO Gene Nomenclature Committee</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hl7\">hl7</a></td>\n<td>HL7 External Code System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hoip\">hoip</a></td>\n<td>Homeostasis imbalance process ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hp\">HP</a></td>\n<td>Human Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hydra\">hydra</a></td>\n<td>The Hydra Core Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icaltzd\">icaltzd</a></td>\n<td>iCalendar with Time Zone</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd10cm\">icd10cm</a></td>\n<td>International Classification of Diseases, 10th Revision, Clinical Modification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd10pcs\">icd10pcs</a></td>\n<td>International Classification of Diseases, 10th Revision, Procedure Coding System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd9\">icd9</a></td>\n<td>International Classification of Diseases, 9th Revision</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd9cm\">icd9cm</a></td>\n<td>International Classification of Diseases, 9th Revision, Clinical Modification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icf\">icf</a></td>\n<td>International Classification of Functioning, Disability and Health</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/iconclass\">iconclass</a></td>\n<td>Iconclass Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/idocovid19\">idocovid19</a></td>\n<td>The COVID-19 Infectious Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/idoden\">idoden</a></td>\n<td>Dengue Fever Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/inbio\">inbio</a></td>\n<td>Invasion Biology Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/inchi\">inchi</a></td>\n<td>International Chemical Identifier</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/interlex\">interlex</a></td>\n<td>InterLex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/iobc\">iobc</a></td>\n<td>Interlinking Ontology for Biological Concepts</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ito\">ito</a></td>\n<td>Intelligence Task Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/jcrb\">jcrb</a></td>\n<td>Japanese Collection of Research Bioresources Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lbo\">lbo</a></td>\n<td>Livestock Breed Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ldp\">ldp</a></td>\n<td>Linked Data Platform Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/legacy.capcldb\">legacy.capcldb</a></td>\n<td>Prostate Cancer Cell Line Database</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lexvo.ontology\">lexvo.ontology</a></td>\n<td>Lexvo Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/loc.classschemes\">loc.classschemes</a></td>\n<td>Library of Congress Classification Schemes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/locn\">locn</a></td>\n<td>ISA Programme Location Core Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/log\">log</a></td>\n<td>SWAP Logic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/loinc\">loinc</a></td>\n<td>Logical Observation Identifiers Names and Codes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lpt\">lpt</a></td>\n<td>Livestock Product Trait Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/m4i\">m4i</a></td>\n<td>Metadata4Ing</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/medlineplus\">medlineplus</a></td>\n<td>MedlinePlus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mesh\">mesh</a></td>\n<td>Medical Subject Headings</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/metabobank\">metabobank</a></td>\n<td>MetaboBank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/metpo\">METPO</a></td>\n<td>Microbial Ecophysiological Trait and Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mixs\">MIXS</a></td>\n<td>Minimum Information about any (x) Sequence</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mod\">MOD</a></td>\n<td>PSI-MOD Protein Modifications Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/modsci\">modsci</a></td>\n<td>Modern Science Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/molsim\">MOLSIM</a></td>\n<td>Molecular Simulation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mosaic\">mosaic</a></td>\n<td>MOSAiC Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mro\">MRO</a></td>\n<td>MHC Restriction Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/msc\">msc</a></td>\n<td>Mathematics Subject Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mwo\">mwo</a></td>\n<td>NFDI MatWerk Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nando\">nando</a></td>\n<td>Nanbyo Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nemo2\">nemo2</a></td>\n<td>Neural ElectroMagnetic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nexus\">nexus</a></td>\n<td>NeXus Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nif.cell\">NIF_CELL</a></td>\n<td>NIF Cell</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nlm\">nlm</a></td>\n<td>National Library of Medicine Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/npo\">npo</a></td>\n<td>NanoParticle Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oa\">oa</a></td>\n<td>Web Annotation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oba\">OBA</a></td>\n<td>Ontology of Biological Attributes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/obi\">OBI</a></td>\n<td>Ontology for Biomedical Investigations</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/og\">og</a></td>\n<td>Open Graph protocol</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ogc.sf\">ogc.sf</a></td>\n<td>Open Geospatial Consortium Simple Features Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ohd\">OHD</a></td>\n<td>Oral Health and Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oidc\">oidc</a></td>\n<td>Solid OpenID Connect vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/om\">om</a></td>\n<td>Ontology of units of Measure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omim\">omim</a></td>\n<td>Online Mendelian Inheritance in Man</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omo\">OMO</a></td>\n<td>OBO Metadata Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omrse\">OMRSE</a></td>\n<td>Ontology for Modeling and Representation of Social Entities</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oostt\">OOSTT</a></td>\n<td>Ontology of Organizational Structures of Trauma centers and Trauma systems</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/opb\">opb</a></td>\n<td>Ontology of Physics for Biology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/org\">org</a></td>\n<td>Core organization ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/orphanet.ordo\">orphanet.ordo</a></td>\n<td>Orphanet Rare Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/orth\">orth</a></td>\n<td>Orthology Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/owl\">owl</a></td>\n<td>Web Ontology Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/panet\">panet</a></td>\n<td>Photon and Neutron Experimental Techniques Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/pato\">PATO</a></td>\n<td>Phenotype And Trait Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/phenx\">phenx</a></td>\n<td>PhenX Toolkit</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/phipo\">PHIPO</a></td>\n<td>Pathogen Host Interaction Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/plos\">plos</a></td>\n<td>PLOS Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/prefer\">PREFER</a></td>\n<td>Precision Fermentation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/prov\">prov</a></td>\n<td>PROV Namespace</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qb\">qb</a></td>\n<td>The data cube vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt\">qudt</a></td>\n<td>Quantities, Units, Dimensions, and Types Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/radlex\">radlex</a></td>\n<td>RSNA Informatics RadLex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rcb\">rcb</a></td>\n<td>RIKEN Bioresource Center Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdf\">rdf</a></td>\n<td>Resource Description Framework</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdfa\">rdfa</a></td>\n<td>RDFa Vocabulary for Term and Prefix Assignment, and for Processor Graph Reporting</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdfs\">rdfs</a></td>\n<td>RDF Schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/reproduceme\">reproduceme</a></td>\n<td>REPRODUCE-ME Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/reto\">reto</a></td>\n<td>Regulation of Transcription Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rexo\">rexo</a></td>\n<td>Regulation of Gene Expression Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ro\">RO</a></td>\n<td>Relation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/roleo\">RoleO</a></td>\n<td>Role Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ror\">ror</a></td>\n<td>Research Organization Registry</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rrid\">rrid</a></td>\n<td>Research Resource Identification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rxnorm\">rxnorm</a></td>\n<td>RxNorm</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/salmon\">salmon</a></td>\n<td>Salmon Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/saref.ehaw\">saref.ehaw</a></td>\n<td>SAREF4EHAW: an extension of SAREF for eHealth Ageing Well domain</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sasap\">sasap</a></td>\n<td>The State of Alaska's Salmon and People Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/schema\">schema</a></td>\n<td>Schema.org</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sd\">sd</a></td>\n<td>SPARQL 1.1 Service Description</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sdmx\">sdmx</a></td>\n<td>SDMX-RDF vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sh\">sh</a></td>\n<td>Shapes Constraint Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/shex\">shex</a></td>\n<td>Shape Expression Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/shsh\">shsh</a></td>\n<td>SHACL in SHACL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sioc.core\">sioc.core</a></td>\n<td>Semantically-Interlinked Online Communities Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/skos\">skos</a></td>\n<td>Simple Knowledge Organization System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/skosxl\">skosxl</a></td>\n<td>Simple Knowledge Organization System eXtension for Labels</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/smiles\">smiles</a></td>\n<td>Simplified molecular-input line-entry system</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/solid\">solid</a></td>\n<td>Solid Terms</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sosa\">sosa</a></td>\n<td>Sensor, Observation, Sample, and Actuator Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ssn\">ssn</a></td>\n<td>Semantic Sensor Network Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sstim\">sstim</a></td>\n<td>Sensory Stimulation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/stemmcellbank\">stemmcellbank</a></td>\n<td>CReM iPSC Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sty\">sty</a></td>\n<td>UMLS Semantic Types Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/suzhou.cell\">suzhou.cell</a></td>\n<td>Suzhou Research Institute Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/symp\">SYMP</a></td>\n<td>Symptom Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/tib.bk\">tib.bk</a></td>\n<td>Basic Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/time\">time</a></td>\n<td>Time Ontology in OWL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ubigene\">ubigene</a></td>\n<td>UbiGene</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uniprot\">uniprot</a></td>\n<td>UniProt Protein</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uniprot.core\">uniprot.core</a></td>\n<td>Uniprot Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uo\">UO</a></td>\n<td>Units of measurement ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/upheno\">UPHENO</a></td>\n<td>Unified Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/valuesets\">valuesets</a></td>\n<td>Value Sets</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vandf\">vandf</a></td>\n<td>Veterans Administration National Drug File</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vann\">vann</a></td>\n<td>A vocabulary for annotating vocabulary descriptions</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vcard\">vcard</a></td>\n<td>Virtual Contact File</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vido\">vido</a></td>\n<td>Virus Infectious Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vivo\">vivo</a></td>\n<td>VIVO Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.gene\">vmh.gene</a></td>\n<td>Virtual Metabolic Human gene</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.metabolite\">vmh.metabolite</a></td>\n<td>Virtual Metabolic Human metabolite</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.reaction\">vmh.reaction</a></td>\n<td>Virtual Metabolic Human reaction</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vo\">VO</a></td>\n<td>Vaccine Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/void\">void</a></td>\n<td>Vocabulary of Interlinked Datasets</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vs\">vs</a></td>\n<td>SemWeb Vocab Status ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vso\">vso</a></td>\n<td>Vital Sign Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vt\">VT</a></td>\n<td>Vertebrate trait ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wbphenotype\">WBPhenotype</a></td>\n<td>C. elegans phenotype</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wdrs\">wdrs</a></td>\n<td>Protocol for Web Description Resources (POWDER): POWDER-S Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wgs84\">wgs84</a></td>\n<td>WGS84 Geo Positioning</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xco\">XCO</a></td>\n<td>Experimental condition ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xhv\">xhv</a></td>\n<td>XHTML Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xkos\">xkos</a></td>\n<td>An SKOS extension for representing statistical classifications</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xsd\">xsd</a></td>\n<td>XML Schema Definition</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/zfa\">ZFA</a></td>\n<td>Zebrafish anatomy and development ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/zfs\">ZFS</a></td>\n<td>Zebrafish developmental stages ontology</td>\n</tr>\n</tbody>\n</table>","doi":"https://doi.org/10.59350/mcm9w-28142","guid":"https://cthoyt.com/2026/10/30/semantic-farm-updates","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"k6xmf-5xw84","summary":"This week saw the addition of the Library of Congress Class Schemes registry, an overhaul of the alignment workflow with the Zazuko registry, the addition of 18 new records, and finally the update of 222 records in the Semantic Farm and the Bioregistry.","tags":["NFDI","NFDI4Chem","Bioregistry","Semantic Farm"],"title":"Semantic Farm and Bioregistry Updates - October 30th, 2026","updated_at":1793431807,"url":"https://cthoyt.com/2026/10/30/semantic-farm-updates.html","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17115\">\n<p>In an earlier post, <a href=\"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17041\">I searched</a> for small C-C-C angles, finding one example that was also accompanied by an apparently exceptionally long C-C bond (2.18\u00c5). But this arose from highly unusual bonding giving rise not to a single bond order but one closer to one half! How long can a &#8220;normal&#8221; <em>(i.e</em> single) C-C bond get, a question which has long fascinated chemists.</p>\n<p><!--more--></p>\n<p>A naive search of the CSD is not as straightforward as it seems. Using the simple sub-structure R<sub>3</sub>C-CR<sub>3</sub>\u00a0as the search query gives LIRPEI, DOI:\u00a0<a href=\"https://doi.org/10.5517/CCQ043Y\">10.5517/CCQ043Y</a><span id=\"cite_ITEM-17115-0\" name=\"citation\"><a href=\"#ITEM-17115-0\">[1]</a></span> an apparently unexceptional molecule with a very exceptional C-C distance of 1.87\u00c5. With long bonds one has to be ultra-careful to look at the crystallographic analysis before drawing any conclusions. One class of molecule where this has been done by many groups is the system shown below (red = long bond), with 47 entries and for which\u00a0the longest C-C bond emerges with the value of 1.79\u00c5<span id=\"cite_ITEM-17115-1\" name=\"citation\"><a href=\"#ITEM-17115-1\">[2]</a></span></p>\n<p>&nbsp;</p>\n<p><a href=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg\"><img decoding=\"async\" class=\"aligncenter size-large wp-image-17116\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg\" alt=\"long-bonds\" width=\"200\" /></a></p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17117\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-1024x757.jpg\" alt=\"long-cc\" width=\"450\" height=\"333\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-1024x757.jpg 1024w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-300x222.jpg 300w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-768x568.jpg 768w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" /></p>\n<p>You can view this structure at DOI:\u00a0<a href=\"https://doi.org/10.5517/CCS0R6Q\">10.5517/CCS0R6Q</a><span id=\"cite_ITEM-17115-2\" name=\"citation\"><a href=\"#ITEM-17115-2\">[3]</a></span> and the authors go to some pains to assure us that it is still a closed shell single bond, and not a biradical. That does seem to be the current record holder, but of course we are only talking here about molecules whose crystal structure has been determined.</p>\n<p>I will end with an open question; how SHORT could a &#8220;single&#8221; C-C bond get? Here, a search of the CSD is entirely dominated by crystallographic artefacts, and I am not sure what the value might be.\u00a0</p>\n<h2>References</h2>\n    <ol class=\"kcite-bibliography csl-bib-body\"><li id=\"ITEM-17115-0\">Zhang, Jian., Chen, Shumei., Valle, H.., Wong, M.., Austria, C.., Cruz, M.., and Bu, Xianhui., \"CCDC 655529: Experimental Crystal Structure Determination\", 2008. <a href=\"https://doi.org/10.5517/ccq043y\">https://doi.org/10.5517/ccq043y</a>\n\n</li>\n<li id=\"ITEM-17115-1\">T. Takeda, H. Kawai, R. Herges, E. Mucke, Y. Sawai, K. Murakoshi, K. Fujiwara, and T. Suzuki, \"Negligible diradical character for the ultralong C\u2013C bond in 1,1,2,2-tetraarylpyracene derivatives at room temperature\", <i>Tetrahedron Letters</i>, vol. 50, pp. 3693-3697, 2009. <a href=\"https://doi.org/10.1016/j.tetlet.2009.03.202\">https://doi.org/10.1016/j.tetlet.2009.03.202</a>\n\n</li>\n<li id=\"ITEM-17115-2\">Takeda, T.., Kawai, H.., Herges, R.., Mucke, E.., Sawai, Y.., Murakoshi, K.., Fujiwara, K.., and Suzuki, T.., \"CCDC 715703: Experimental Crystal Structure Determination\", 2010. <a href=\"https://doi.org/10.5517/ccs0r6q\">https://doi.org/10.5517/ccs0r6q</a>\n\n</li>\n</ol>\n\n</div> <!-- kcite-section 17115 -->","doi":"https://doi.org/10.59350/wrgzm-zpe42","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17115","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1480464000,"reference":[{"id":"https://doi.org/10.5517/ccq043y","unstructured":"Zhang, J., Chen, S., Valle, H., Wong, M., Austria, C., Cruz, M., &amp; Bu, X. (2008). <i>CCDC 655529: Experimental Crystal Structure Determination</i> [Dataset]. Cambridge Crystallographic Data Centre."},{"id":"https://doi.org/10.1016/j.tetlet.2009.03.202","unstructured":"Takeda, T., Kawai, H., Herges, R., Mucke, E., Sawai, Y., Murakoshi, K., Fujiwara, K., &amp; Suzuki, T. (2009). Negligible diradical character for the ultralong C\u2013C bond in 1,1,2,2-tetraarylpyracene derivatives at room temperature. <i>Tetrahedron Letters</i>, <i>50</i>(26), 3693\u20133697."},{"id":"https://doi.org/10.5517/ccs0r6q","unstructured":"Takeda, T., Kawai, H., Herges, R., Mucke, E., Sawai, Y., Murakoshi, K., Fujiwara, K., &amp; Suzuki, T. (2010). <i>CCDC 715703: Experimental Crystal Structure Determination</i> [Dataset]. Cambridge Crystallographic Data Centre."}],"rid":"mkxr8-kcr84","summary":"In an earlier post, I searched for small C-C-C angles, finding one example that was also accompanied by an apparently exceptionally long C-C bond (2.18\u00c5). But this arose from highly unusual bonding giving rise not to a single bond order but one closer to one half!","tags":["Crystal_structure_mining","Interesting Chemistry","Aviation","Bond Order","Carbon\u2013carbon Bond"],"title":"Long C-C bonds.","updated_at":1793398736,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17115","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17107\">\n<p>Another conference, a <a href=\"http://www.opencon2016.org/opencon_2016_cambridge\">Cambridge satellite</a> meeting of <a href=\"http://www.opencon2016.org/updates\">OpenCon</a>, and I quote here its mission: &#8220;OpenCon is a platform for the next generation to learn about Open Access, Open Education, and Open Data, develop critical skills, and catalyze action toward a more open system of research and education&#8221; targeted at\u00a0students and early career academic professionals. But they do allow a few &#8220;late career&#8221; professionals to attend as well!</p>\n<p><!--more--></p>\n<p>I could only attend the morning session, for which the keynote speaker was Erin McKiernan<a href=\"http://orcid.org/0000-0002-9430-5221\"><img loading=\"lazy\" decoding=\"async\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/orcid.png\" alt=\"orcid\" width=\"16\" height=\"16\" /></a> The presentation was entitled\u00a0<em>How open science helps researchers succeed</em><strong><em>,\u00a0</em></strong>presented as an exploration of an article written by Erin and colleagues with the same name and published<em>\u00a0</em>in\u00a0eLife<span id=\"cite_ITEM-17107-0\" name=\"citation\"><a href=\"#ITEM-17107-0\">[1]</a></span> Erin has created a support page at <a href=\"http://whyopenresearch.org\">http://whyopenresearch.org</a>\u00a0to augment the presentation and it&#8217;s well worth a visit.</p>\n<p>One striking point made was the assertion that\u00a0<em>Open publications get more citations!</em>\u00a0<br />\n <img decoding=\"async\" src=\"https://elife-publishing-cdn.s3.amazonaws.com/16800/elife-16800-fig1-v2.jpg\" alt=\"Open publications get more citations\" width=\"450\" /></p>\n<p>As\u00a0with many metrics of the impacts of the science publication processes, a citation itself lacks the context of why it was made (<a href=\"http://www.ch.imperial.ac.uk/rzepa/blog/?p=14527\">see this post</a> for further discussion), but the expectation is that a citation is &#8220;good&#8221;. From my perspective as a chemist, I did wonder why molecular science was missing from the graphic above.\u00a0Do open chemistry publications also get more citations?</p>\n<p>Which brings me to another point made during the talk, the increasingly controversial aspect of (journal) impact factors and the pressure placed on early career researchers to publish only in those with &#8220;high&#8221; impact factors, and for their careers to be assessed at least in part based on these and the anticipated &#8220;h-index&#8221;. The audience was indeed encouraged to go visit\u00a0<a href=\"http://www.ascb.org/Dora/\">http://www.ascb.org/Dora/</a> (Declaration on Research Assessment, or\u00a0<em>Putting science into the assessment of research</em>). Have you signed it yet?</p>\n<p>Another manifestation of the modern trend to analyse impact metrics is the site\u00a0<a href=\"http://impactstory.org/\">Impactstory.org</a>. This is a scripted resource that starts from your ORCID identifier and (optionally) your Twitter account (yes, apparently Tweets matter!) to derive a more complex alternative metric of a individual&#8217;s impacts. I had not tried this one before and so I submitted my ORCID and my Twitter account, and watched as the system went off to <a href=\"http://orcid.scopusfeedback.com\">http://orcid.scopusfeedback.com</a>\u00a0(Scopus is an Elsevier product) to attempt to create my profile. It ground for quite a while, reporting initially that I had no publications! This was followed by an unexpected error; I did not get my impact back! But this experiment served to highlight one aspect that was discussed at the meeting; data and other research objects. The graphic above refers only to the citation of journal articles, it does not yet include the citation of data. However ORCID <strong>DOES</strong> include data and research objects as <strong>works</strong>. \u00a0And because the granularity of my data and research objects is very fine (one molecule = one work), I have quite a few. In fact ~200,000! ORCID gets to about 8000 before it gives up. I suspect\u00a0http://orcid.scopusfeedback.com queries ORCID, gets back ~8000 entries and crashes. No doubt the programmer tasked with\u00a0implementing this resource did not anticipate that any individual could accumulate 8000+ entries! Or probably factor in that the vast majority of these would of course not be journal articles but data. If the site gets back to me about the crash I experienced, I will update here.</p>\n<p>Simon Deakin was the next speaker with (open) data as the focus and the worries many researchers have in being scooped by others who have re-used your open data without proper attributions. The discussion teased out that if data is properly deposited, it will indeed have full associated metadata and in particular a date stamp that could help protect an author&#8217;s interests.</p>\n<p>It was really good to meet so many early career researchers who espouse the open ethos. Perhaps, in 20 years time, \u00a0another graphic akin to the one above might demonstrate that open researchers get more promotions!</p>\n<h2>References</h2>\n    <ol class=\"kcite-bibliography csl-bib-body\"><li id=\"ITEM-17107-0\">E.C. McKiernan, P.E. Bourne, C.T. Brown, S. Buck, A. Kenall, J. Lin, D. McDougall, B.A. Nosek, K. Ram, C.K. Soderberg, J.R. Spies, K. Thaney, A. Updegrove, K.H. Woo, and T. Yarkoni, \"How open science helps researchers succeed\", <i>eLife</i>, vol. 5, 2016. <a href=\"https://doi.org/10.7554/elife.16800\">https://doi.org/10.7554/elife.16800</a>\n\n</li>\n</ol>\n\n</div> <!-- kcite-section 17107 -->","doi":"https://doi.org/10.59350/mrxjj-bj641","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17107","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/orcid.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1480032000,"reference":[{"id":"https://doi.org/10.7554/elife.16800","unstructured":"McKiernan, E. C., Bourne, P. E., Brown, C. T., Buck, S., Kenall, A., Lin, J., McDougall, D., Nosek, B. A., Ram, K., Soderberg, C. K., Spies, J. R., Thaney, K., Updegrove, A., Woo, K. H., &amp; Yarkoni, T. (2016). How open science helps researchers succeed. <i>eLife</i>, <i>5</i>."}],"rid":"aw2r2-znp37","summary":"Another conference, a Cambridge satellite meeting of OpenCon, and I quote here its mission: \"OpenCon is a platform for the next generation to learn about Open Access, Open Education, and Open Data, develop critical skills, and catalyze action toward a more open system of research and education\" targeted at students and early career academic professionals.","tags":["Chemical IT","General","Academia","Author","Chemist"],"title":"OpenCon (2016)","updated_at":1793398732,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17107","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17089\">\n<p>Chloroform, often in the deuterated form CDCl<sub>3</sub>, is a very common solvent for NMR and other types of spectroscopy. Quantum mechanics\u00a0is increasingly used to calculate such spectra to aid assignment and the solvent is here normally simulated as a continuum rather than by explicit inclusion of one or more chloroform molecules. But what are the features of the hydrogen bonds that form from chloroform to other acceptors? Here I do a quick search for the common characteristics of such interactions.</p>\n<p><!--more--></p>\n<ol>\n<li>This first search (R &lt; 0.05, no errors, no disorder) is for interactions from the CH&#8230; O, and is a plot of that distance against the angle subtended at the oxygen.\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-17090\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg\" alt=\"clcho-rt\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg 725w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt-300x201.jpg 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" /></p>\n<p>Note that there are not that many crystalline examples. The &#8220;hotspot&#8221; is at a distance of ~2.3\u00c5, but real examples down to 1.9\u00c5 exist. The angle subtended at the oxygen is close to 120\u00b0 (the angle subtended at the hydrogen is always close to 180\u00b0). The plot below constrains the search to data collected below 140K to reduce the thermal noise in the measurements, with the hotspot shortening slightly to 2.2\u00c5.\u00a0<img decoding=\"async\" class=\"aligncenter size-full wp-image-17091\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140.jpg\" alt=\"clcho-140\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140.jpg 723w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140-300x213.jpg 300w\" sizes=\"(max-width: 723px) 100vw, 723px\" /></p>\n</li>\n<li>The next search is for interactions to N rather than O (T &lt; 140K). There are rather fewer hits, but again with similar features.<img decoding=\"async\" class=\"aligncenter size-full wp-image-17094\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140.jpg\" alt=\"clchn-140\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140.jpg 719w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140-300x187.jpg 300w\" sizes=\"(max-width: 719px) 100vw, 719px\" /></li>\n<li>Finally, an attempt to see if there is a correlation between the C-H length and the H&#8230;O length.\u00a0<img decoding=\"async\" class=\"aligncenter size-full wp-image-17095\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO.jpg\" alt=\"ch-vs-co\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO.jpg 723w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO-300x218.jpg 300w\" sizes=\"(max-width: 723px) 100vw, 723px\" />\n<p>This has odd characteristics, which suggests that in most cases the C-H distance is not measured from the diffraction data but simply &#8220;idealised&#8221; (and which therefore renders this plot meaningless). Unless its been added recently, it is not possible to specify in the search how the hydrogen positions have been refined, if at all and hence to restrict the search only to those structures where the C-H distance is meaningful.</p>\n</li>\n</ol>\n<p>In the last ten years or so, great progress has been made in assigning experimental spectra with the help of quantum calculations. This is true of chemical shifts in NMR, but especially so for chiroptical measurements such as ORP, ECD and VCD. Given that explicit hydrogen bonds can introduce anisotropy into the otherwise isotropic solvent continuum, it might be worth including perhaps one chloroform molecule into these calculations, especially if the \u00a0CH&#8230;O distance is &lt;2\u00c5 (which suggests it is fairly strong). If nothing else, chloroform is rather big and might exert effects based on dispersion attractions or steric repulsions as well as the H-bonding.</p>\n<!-- kcite active, but no citations found -->\n</div> <!-- kcite-section 17089 -->","doi":"https://doi.org/10.59350/ayyem-vdb86","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17089","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1479081600,"rid":"phk9e-eeb84","summary":"Chloroform, often in the deuterated form CDCl3, is a very common solvent for NMR and other types of spectroscopy. Quantum mechanics is increasingly used to calculate such spectra to aid assignment and the solvent is here normally simulated as a continuum rather than by explicit inclusion of one or more chloroform molecules.","tags":["Crystal_structure_mining","Chemical Shifts","Chloroform","Deuterated Chloroform","Deuterated Methanol"],"title":"Hydrogen bonding to chloroform.","updated_at":1793398728,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17089","version":"v1"}}],"items":[{"authors":[{"contributor_roles":[],"family":"Swain","given":"Jonathan","url":"https://orcid.org/0000-0003-4457-1481"}],"blog":{"authors":[{"name":"Jon Swain","url":"https://orcid.org/0000-0003-4457-1481"}],"community_id":"13f55986-f209-443c-ae0d-2f9f3f521e5a","created":1788652800,"current_feed_url":null,"description":"I am a cheminformatician and data scientist, originally from the UK, but often found in Aotearoa (New Zealand). I'm interested in using data science and machine learning to solve problems in drug discovery.","doi":"https://doi.org/10.59350/jonswain","favicon":"https://rogue-scholar.org/api/communities/13f55986-f209-443c-ae0d-2f9f3f521e5a/logo","feed_format":"application/atom+xml","feed_url":"https://jonswain.github.io/feed.xml","filter":null,"generator":"Jekyll","home_page_url":"https://jonswain.github.io/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"jonswain","status":"active","subfield":"3002","title":"Jon Swain","updated":1793494800,"use_api":null},"blog_name":"Jon Swain","blog_slug":"jonswain","content_html":"<p><img alt=\"Morg2SMILES: generative recovery of SMILES from Morgan fingerprints\" class=\"img-responsive center-image\" src=\"https://jonswain.github.io/images/morg2smiles/social-card.png\"/></p>\n<p>This is not actually a blog post on generative recovery of SMILES strings from Morgan fingerprints. It's about agentic coding, dressed up as a post about generative models.</p>\n<p>The output was an 8M-parameter model, trained for 25.5 hours on my laptop, which generates a molecule with the correct fingerprint for <strong>97.3% of unseen Morgan fingerprints within 20 guesses</strong>, and <strong>90.8% on the first guess</strong>, with 98.1% SMILES validity. A nearest-neighbour baseline on the same molecules scores 0.0% exact match (by design, since test fingerprints are excluded from the training set), showing that this model isn't just memorising the training set.</p>\n<p>The fun part is that I didn't write a single line of code myself.</p>\n<h2 id=\"inspired-by-nispo\">Inspired by NISPO</h2>\n<p>I was recently sent a link to <a href=\"https://github.com/oxpig/nispo\">NISPO</a> (<em>Nomenclature Inference for Structures, Powered by OPSIN</em>), a library released by Nicholas Runcie, Fergus Imrie, and Charlotte Deane at OPIG (Oxford Protein Informatics Group, what a great acronym!). What caught my eye is that the entire library is AI-generated. From the repository's README file:</p>\n<blockquote>\n<p>This repository was developed using OpenAI Codex. The codebase is AI-generated and was created through an autonomous self-iteration process: Codex repeatedly ran the benchmark, inspected failures, updated the implementation, and reran the benchmark until high OPSIN round-trip accuracy was achieved.</p>\n</blockquote>\n<p>I thought this was a really cool idea. <a href=\"https://github.com/dan2097/opsin\">OPSIN</a> (<em>Open Parser for Systematic IUPAC Nomenclature</em>) was originally developed by Daniel Lowe and colleagues at the University of Cambridge, and these days the webservice is hosted by the EMBL-EBI (the European Bioinformatics Institute). It's a really useful tool if you need to convert an IUPAC name to a structure. I've used it before in pipelines to extract chemical entities from literature.</p>\n<p>But what if you need to do the reverse? What if you have a chemical structure and you need the IUPAC name for your paper? (Yes, I guess you could just use ChemDraw, but what if you don't have a licence?) That's where NISPO comes in. Because OPSIN is a cheap, deterministic function, it can be used as an oracle for an agentic loop. The authors took structures from PubChem, had NISPO generate a name for each, and used OPSIN to parse that name back into a structure. The round-trip accuracy, the fraction of names that parse back to the original structure, became the objective the agent iterated against. With the benchmark and oracle in place, Codex did the rest without human intervention.</p>\n<blockquote>\n<p>Whilst preparing this I saw <a href=\"https://baoilleach.blogspot.com/2026/10/assessing-open-source-iupac-name.html\">this blog post</a> from Noel O'Boyle on open-source IUPAC name generators. <a href=\"https://github.com/lamalab-org/openclatura\">OpenClatura</a> and <a href=\"https://chemrxiv.org/doi/full/10.26434/chemrxiv.15009769/v1\">Orthonym</a> also do the same thing.</p>\n</blockquote>\n<h2 id=\"running-a-fingerprint-backwards\">Running a fingerprint backwards</h2>\n<p>This got me thinking: are there any other cheap, deterministic functions that would be useful (or even not that useful) to invert? Morgan fingerprints are an obvious candidate, with one big difference: they're hashed and usually folded, so they throw information away. Different molecules can share the same fingerprint, and different substructures can share the same bit due to bit collisions.</p>\n<p>Two things make this a good fit for an autonomous loop, and they are the same two that made NISPO possible:</p>\n<ul>\n<li><strong>It's easy to check if the answer is right.</strong> RDKit recomputes any candidate's fingerprint and compares it bit-for-bit against the target. There's no need for a proxy metric or human judgement.</li>\n<li><strong>Guesses are cheap.</strong> The oracle is free to call, so the model can generate k candidates and let the oracle filter them. This is measured using <code class=\"language-plaintext highlighter-rouge\">recovery@k</code>: the fraction of fingerprints for which at least one of k guesses is an exact match.</li>\n</ul>\n<p>Unlike NISPO and OpenClatura, which are <em>rule-based</em> packages, I wanted to train a neural network while borrowing the same loop-plus-oracle approach.</p>\n<p>Why might anyone care? Honestly, I thought it would be fun. A better answer is privacy: fingerprints are treated as a safe, \"anonymised\" way to share chemical data, on the assumption that hashing and folding throw away enough to make the molecule unrecoverable. If a small model trained for a day on my laptop can recover over 97% of them within 20 guesses, that assumption doesn't really hold up.</p>\n<blockquote>\n<p>This isn't an entirely novel idea; there are a few examples in the literature like <a href=\"https://pubs.rsc.org/sc/article/11/38/10378/705770/Neuraldecipher-reverse-engineering-extended\"><em>Neuraldecipher</em> (Le et al., <em>Chem. Sci.</em> 2020)</a> or <a href=\"https://link.springer.com/article/10.1186/s13321-023-00693-0\">Ucak et al. (2023)</a>.</p>\n</blockquote>\n<h2 id=\"is-claude-better-at-coding-than-me-spoiler-yes\">Is Claude better at coding than me? (Spoiler: Yes)</h2>\n<p><a href=\"https://github.com/jonswain/morg-to-smiles/\">I first tried this idea</a> a little while ago, without any AI assistance, and also without much success. This seemed like the perfect time to try it again, using the same idea as NISPO. I iterated with Claude Code in Plan Mode a few times to work out how to describe exactly what I wanted, then I largely left it to make decisions on its own. On days or weekends where I wasn't planning to use my computer, I would open up Claude and tell it \"I'm about to log off for XX hours, do whatever you think would be most useful for the project\". The results were far more impressive than I managed on my own.</p>\n<p>Twenty-four days, 159 commits, and 119 hours of training spread over 22 runs. All on an Apple M2 laptop, with no cloud GPU at any point. Nine of those sessions started with me handing the machine over for the night, or longer, and Claude left the write-ups in <a href=\"https://github.com/jonswain/morg2smiles/tree/main/docs\"><code class=\"language-plaintext highlighter-rouge\">docs/overnight-*.md</code></a>. At the end of the project, I got Claude to create a <a href=\"https://github.com/jonswain/morg2smiles/blob/main/docs/report.md\">full report</a> on the process.</p>\n<h3 id=\"initial-planning\">Initial planning</h3>\n<p>I used Plan Mode with Claude to describe what I wanted to build, explaining that the idea was inspired by NISPO, and gave it a link to my old attempt. Once the first model had trained, Claude went back and read that old repo properly. It called my attempt \"a reasonable-looking VAE\" and listed three failures, in its words:</p>\n<ol>\n<li>\"It had no oracle. It selected checkpoints on validation loss and reported mean Tanimoto similarity at generation time. Neither answers 'did we get the molecule back?'\"</li>\n<li>\"It generated one candidate, by greedy argmax. For a task whose natural form is 'generate k, keep what the oracle accepts', that's a self-imposed recovery@1, the hardest version of the metric.\"</li>\n<li>\"The fingerprint reached the decoder only as the GRU's initial hidden state. One 256-d vector, squeezed through a stochastic 128-d latent, expected to survive up to 242 decoding steps.\"</li>\n</ol>\n<h3 id=\"overnight-sessions\">Overnight sessions</h3>\n<p>From here I took a step back. I mostly allowed Claude to make decisions, occasionally suggesting things when I thought the direction wasn't quite correct. Each night followed the same routine. I specified it for the first couple of sessions, then Claude kept to it without being asked:</p>\n<ul>\n<li>Wrote a plan with time estimates against each item.</li>\n<li>Ordered the jobs so the ones everything else depended on ran first.</li>\n<li>Chained them in a shell script with a hard deadline and per-stage clock guards, so an overrunning job got skipped rather than running into the morning.</li>\n<li>Then wrote up the results, including the things that went wrong, in a dated document ending with a next-steps note for whenever I next sat down.</li>\n</ul>\n<h3 id=\"where-i-needed-to-step-in\">Where I needed to step in</h3>\n<p>During this process I started to wonder if this is what being a PhD supervisor feels like. After six nights, Claude appeared to be having a lot of fun and was exploring a lot of different things like an overexcited PhD student. I wondered if this would drag on without finding a natural conclusion (and I wanted my laptop back at weekends), so I prompted Claude to start thinking about a conclusion: training a final model on the entire ChEMBL dataset.</p>\n<p>At the end of the project I wanted Claude to create a final report that described the entire process and the results. The first draft read as if it was written for someone very involved in the project, with lots of undefined terms and not enough explanation (like a first draft of a PhD thesis?). To fix this I decided to run an internal peer review. I asked Claude to generate two sub-agents (Reviewer 1 and the dreaded Reviewer 2), give them access to the report and repository, but no prior knowledge of the project. They were to flag where things were ambiguous, suggest improvements, and give general feedback. The original agent was allowed to push back on the feedback, and through a few iterations these worked together to produce the final report.</p>\n<p>Some of the blocking errors Reviewer 2 found were introduced by the changes Reviewer 1 had suggested (conflicting reviewers sounds familiar), with each review pass removing more errors than it added while still introducing new ones.</p>\n<h2 id=\"final-thoughts-and-conclusions\">Final thoughts and conclusions</h2>\n<ul>\n<li><strong>Fingerprint collisions were much less common than I expected.</strong> This surprised me the most. With the first subset of 11,669 molecules, 99.97% had unique fingerprints (ECFPs, radius 2, binary, folded to 2,048 bits). Even over the entire 2M compound ChEMBL dataset, only 2.01% of molecules share a fingerprint with another. This is fairly consistent up until about 40 heavy atoms, where fingerprint clashes become much more common. Above 50 heavy atoms, this rises to more than 8%.</li>\n<li><strong>Claude likes planning more experiments.</strong> Left to its own devices, it always seemed to find another question that needed just one more run. Eventually I asked for a plan to a <em>finished</em> project and this was successful at focusing the project. If I were repeating this process, I would define this at the start, and spend more time planning the steps to reach it before letting Claude loose.</li>\n<li><strong>Claude still isn't great at arithmetic (and kept mixing up its own metrics).</strong> Two of the evaluation scripts defined the k-guess budget differently (k distinct valid molecules vs. k raw proposals including duplicates and invalid strings), and one of the errors Reviewer 2 caught was Claude subtracting numbers across those two conventions: the exact same mistake the repo had already documented five times. More reviews did not help, so eventually Claude wrote a test that recomputes every number in the report from the saved data, fixing it on its first run.</li>\n</ul>\n<p>Below, I've included Claude's own summary of the architecture, nightly experiments, and results as an appendix (the tetrapeptide collision example in particular is interesting).</p>\n<hr/>\n<h2 id=\"appendix-what-claude-made-in-claudes-own-words\">Appendix: What Claude made (in Claude's own words)</h2>\n<p><em>(Taken from the repository's <code class=\"language-plaintext highlighter-rouge\">README.md</code>, where Claude writes in the first person, sometimes on my behalf and sometimes as itself.)</em></p>\n<h3 id=\"data-and-metric\">Data and metric</h3>\n<p><strong>Data.</strong> ChEMBL 35, standardised and deduplicated, stereochemistry stripped, restricted to twelve common elements and 3\u201364 heavy atoms, in shards of 10k / 100k / 1M / full (1,986,551 molecules total: 1,881,996 training + 104,555 validation). The first three are nested, drawn in order from one fixed shuffle, so a molecule held out of the 100k shard is usually <em>inside</em> the 1M shard's training set. The full shard breaks that chain deliberately: it is built excluding the smaller shards' held-out molecules, so one evaluation set can be clean for every model at once. It is therefore not a superset of the 1M shard, which I had assumed until a collision group that shrank between the two proved otherwise.</p>\n<p><strong>Fingerprint.</strong> Morgan, radius 2, binary, folded to 2,048 bits, which sets about 50 bits on an average molecule.</p>\n<p><strong>The metric.</strong> <code class=\"language-plaintext highlighter-rouge\">recovery@k</code> on the <code class=\"language-plaintext highlighter-rouge\">fp_unseen</code> slice: the fraction of held-out fingerprints, absent from training, for which at least one of k distinct guesses reproduces the fingerprint exactly. Two details matter more than they look:</p>\n<ul>\n<li><strong>One slot buys a distinct <em>molecule</em>, not a distinct string.</strong> Two spellings of one molecule are one guess. An early version deduplicated by string and reported \"18 of 20 exact matches\" for aspirin that were 18 spellings of the same molecule.</li>\n<li><strong>An invalid string is not a guess at all.</strong> RDKit rejects it locally and for free, so no caller spending oracle queries would ever spend one on it.</li>\n</ul>\n<h3 id=\"model-architecture\">Model architecture</h3>\n<p>A fingerprint is a <strong>set</strong>, so it's encoded as one. Each set bit becomes a token (a bit embedding plus a count embedding), with no positional encoding, and a transformer encoder over that short sequence (about 50 tokens, not 2,048) produces the cross-attention memory for a causal SMILES decoder. The decoder can then attend to the specific atom environments that imply each atom it emits. This is permutation-invariant by construction, spends no compute on the 98% of bits that are zero, and serves binary, count, folded and unfolded fingerprints through one code path.</p>\n<p>4 encoder + 4 decoder layers, <code class=\"language-plaintext highlighter-rouge\">d_model</code> 256, 8 heads, <code class=\"language-plaintext highlighter-rouge\">d_ff</code> 1024, 7,963,767 parameters, an atom-level SMILES tokeniser, 128-token cap. The vocabulary is built from whichever shard the model trains on, so it is 119 tokens for the final model and 113 for the overnight one, which is why two otherwise identical configs differ slightly in parameter count.</p>\n<p>Training uses <strong>SMILES randomisation</strong>: a fresh random traversal of each molecule every epoch. The fingerprint is always computed from the canonical molecule, so the input is unchanged while the target varies, which stops the decoder collapsing onto one string and gives the sampling diversity <code class=\"language-plaintext highlighter-rouge\">recovery@k</code> rewards. It also seems to be why 30 epochs of a 90k-molecule shard showed no overfitting at all: every epoch is a fresh target string.</p>\n<h3 id=\"nightly-work\">Nightly work</h3>\n<p>Nine sessions over twenty-four days. The column worth reading is \"what came out\nof it\", which is rarely the same as what the night was for.</p>\n<table>\n<thead>\n<tr>\n<th>#</th>\n<th>date</th>\n<th>session</th>\n<th>what it was for</th>\n<th>what came out of it</th>\n<th>did I step in?</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>\u2014</td>\n<td>10-08</td>\n<td>4.2 h</td>\n<td>Phase 1: can a conditional decoder do this at all?</td>\n<td><code class=\"language-plaintext highlighter-rouge\">recovery@20</code> 0.5367 against a baseline of exactly 0.0000. Go/no-go passed by its whole margin.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>1</td>\n<td>10-09</td>\n<td>15 h</td>\n<td>Where is the ceiling: data, compute, or model size?</td>\n<td>\"10\u00d7 data is worth +30.4 points\". <strong>Wrong</strong>: the two runs differed in compute as well.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>2</td>\n<td>10-10</td>\n<td>16 h</td>\n<td>The control night 1 was missing</td>\n<td><strong>+24.9 points from compute alone</strong> on a fixed corpus, so night 1's headline was wrong regardless. Also the realisation that at a fixed step budget, corpus size and repetition rate are the same variable.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>3</td>\n<td>10-14</td>\n<td>6 h</td>\n<td>The 10.5% still being missed, and count fingerprints</td>\n<td><strong>2 of 206 failures are fingerprint collisions</strong>, so it is a capability limit and not an information one. <strong>Consensus ranking is worth +22 points.</strong> Counts: no gain.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>4</td>\n<td>10-15</td>\n<td>12 h</td>\n<td>The error bar the project had never had</td>\n<td>sd 0.75 points between seeds, so <strong>gaps under 1.6 points are not evidence</strong>. T=0.6 is worth +1.99 points, all of it on large molecules.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>5</td>\n<td>10-16</td>\n<td>15 h</td>\n<td>Why large molecules fail</td>\n<td>The cliff is <strong>combinatorial</strong>: the decoder proposes ~20 molecules at ~0.65 Tanimoto whatever the size, and recovery asks whether that cloud contains an exact preimage.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>6</td>\n<td>10-17/19</td>\n<td>35 h</td>\n<td>Model size, and what moves the budget exponent</td>\n<td><strong>It was training length, not model size</strong>. Night 5's headline had named a variable that never moved. The step law is 3.1\u00d7 steeper than the budget law.</td>\n<td><strong>yes</strong>, this is where I asked for a plan to a finished project</td>\n</tr>\n<tr>\n<td>7</td>\n<td>10-20</td>\n<td>6 h</td>\n<td>What a bigger corpus is actually worth</td>\n<td><strong>+22.09 points per doubling of molecules</strong>, measured directly at last. The convex version I had been carrying was falsified by twelve standard errors.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>8</td>\n<td>10-24/25</td>\n<td>19 h</td>\n<td>Does training length stop paying?</td>\n<td><strong>Yes, and the test built to detect it could not.</strong> The level test passed comfortably while the slope fell 0.911 \u2192 0.701.</td>\n<td>no</td>\n</tr>\n<tr>\n<td>9</td>\n<td>10-30/31</td>\n<td>28 h</td>\n<td>The final run</td>\n<td>Full ChEMBL, six passes. Beat its own written-down prediction on every hard band, by more the harder the band.</td>\n<td><strong>yes</strong>, I asked for the report, then for the peer review</td>\n</tr>\n</tbody>\n</table>\n<p>Three of those nine nights exist only to correct the previous one's headline.\nNights 2, 6 and 7 are each a retraction with a measurement attached, and I did not\nask for any of them.</p>\n<h3 id=\"headline-performance\">Headline performance</h3>\n<p>The final model, trained on all of ChEMBL, scored on the common protocol every\nnight used: 2,000 held-out molecules, 1,956 of them with fingerprints appearing\nnowhere in any training set, 20 guesses, sampling temperature T=0.6.</p>\n<ul>\n<li>Model: <strong>7.96M-parameter</strong> transformer, a set encoder over the fingerprint's set bits feeding a causal SMILES decoder</li>\n<li>Data: all <strong>1,881,996</strong> ChEMBL 35 training molecules, six passes, 88,218 steps, <strong>25.5 hours</strong> on an M2</li>\n<li><code class=\"language-plaintext highlighter-rouge\">recovery@20</code>: <strong>97.3%</strong>  \u00b7  <code class=\"language-plaintext highlighter-rouge\">recovery@1</code>: <strong>90.8%</strong></li>\n<li>Returns the <em>original</em> molecule, not merely one with a matching fingerprint: <strong>96.6%</strong> within 20, <strong>88.2%</strong> first guess</li>\n<li><strong>98.1%</strong> of the strings it generates parse as valid molecules</li>\n<li>Retrieval baseline (a nearest-neighbour search over every training fingerprint, not a neural method): <strong>0.0%</strong>, by construction, on the same queries</li>\n</ul>\n<p>The earlier overnight model, trained in one night on half the corpus (<code class=\"language-plaintext highlighter-rouge\">small_1m</code>),\nmanaged 91.6% within 20 and 77.3% on the first guess. Training on\neverything for a day bought <strong>+5.7 points at 20 guesses and +13.5 on the\nfirst</strong>.</p>\n<p>Three things in there are worth more than the headline.</p>\n<p><strong>The first guess is where the gain went.</strong> <code class=\"language-plaintext highlighter-rouge\">recovery@20</code> had nearly run out of\nroom, so almost all the improvement landed where there was space.</p>\n<p><strong>It is confident enough to stop guessing.</strong> Given 20 slots (drawn from 40 raw\nsamples at 2\u00d7 oversampling) it proposes only <strong>7.8 distinct molecules</strong>, filling\nunder 40% of its own budget, against 12.6 for the overnight model and 21.3 for\nthe 100k one before it. Better models explore less,\nwhich is a trap if you are measuring them: any constant tuned to how many\ncandidates a model produces will quietly mis-handle a better one.</p>\n<p><strong>The free tricks get less free as the model improves.</strong> Consensus ranking was\nworth +22.2 points of first-guess recovery on the overnight model; on this one, at\nthe same temperature, it is worth <strong>+12.9</strong>. Cooling from T=1.0 to T=0.6 was\nworth +2.0 points at 20 guesses; here it is worth <strong>+0.6</strong>. Both still help, and\nboth are fading, which is what you would expect of tricks that buy better\nordering of the same candidates rather than better candidates.</p>\n<h4 id=\"where-it-still-fails\">Where it still fails</h4>\n<p>The common protocol is 63% molecules under 30 heavy atoms, so 97.3% on it mostly\nmeasures the easy end. Scored on the hard half instead, with sixty guesses:</p>\n<ul>\n<li><strong>30\u201364 heavy atoms</strong> (2,321 held-out fingerprints): <strong>95.8%</strong> within 60, <strong>85.9%</strong> first guess</li>\n<li><strong>50\u201364 heavy atoms</strong> (893 held-out fingerprints): <strong>76.2%</strong> within 60, against 24.6% before the final run</li>\n<li>50\u201364 is the only size band where the successes are concentrated rather than spread out. <strong>18.9% of those queries draw no correct answer at all</strong> in 60 guesses, while the ones it does solve come back right several times over</li>\n</ul>\n<p>That last line is the whole of what is left. It is not that large molecules are\nuniformly harder; it is that about a fifth of them are unreachable and the rest\nare fine.</p>\n<picture>\n<source media=\"(prefers-color-scheme: dark)\" srcset=\"/images/morg2smiles/size-cliff-dark.png\"/>\n<img alt=\"Recovery against heavy-atom count for the final model: recovery@20 falls from 100% below 15 heavy atoms to 83% at 50-64, and recovery@1 from 98% to 63%\" src=\"https://jonswain.github.io/images/morg2smiles/size-cliff-light.png\" width=\"100%\"/>\n</picture>\n<p>The same model across the whole size range. <code class=\"language-plaintext highlighter-rouge\">recovery@20</code> runs from 100% below\n15 heavy atoms to <strong>82.9%</strong> at 50\u201364, and first-guess recovery from 98.2% to\n<strong>63.4%</strong>. For comparison, the overnight model fell to 46% and 27% over the same\nrange, so training on everything did not flatten the cliff but did push it a\nlong way back.</p>\n<p>The shape is what matters, and it survived everything: more data, more training,\na larger model, better decoding. The rightmost point is 41 molecules, so read it\nas \"about four in five\" rather than as 82.93%, and note the curve is not\nperfectly monotone, since 35\u201339 comes in slightly above 30\u201334 on a couple of\nhundred queries each. The cliff is not subtle enough for that to matter.</p>\n<h3 id=\"things-claude-says-it-didnt-expect\">Things Claude says it didn't expect</h3>\n<ul>\n<li><strong>Counts carry more information and it does not reach recovery.</strong> Count\nfingerprints record how many times each environment occurs, not just whether\nit does, so they cut ambiguity 4.4\u00d7 across the corpus. I expected a recovery\ngain. Recovery went <em>down</em> 4.18 points. What counts actually buy is precision\nin what recovery <em>means</em>: a quarter fewer of their \"recoveries\" are a\ndifferent molecule that happens to share the fingerprint.</li>\n<li><strong>Ranking the guesses is free and large.</strong> Order the candidates by how many of\nthe model's own samples spell the same molecule, with no extra oracle calls and\nno extra sampling, and first-guess recovery rises <strong>+22.2 points</strong> on the overnight\nmodel. Sampling the same answer by several routes turns out to be a good\nconfidence signal. The gain fades as the model improves, to <strong>+12.9</strong> on the\nfinal model at the same temperature, because a model already right on its\nfirst attempt leaves less for re-ordering to fix.</li>\n<li><strong>Cooling the sampler helped, and only for big molecules.</strong> On the overnight model,\nT=0.6 instead of 1.0 is worth +7.5 points above 35 heavy atoms and +0.75\nbelow. The mechanism is a cancellation, which is why it was never going to be\nlarge: cooling raises the share of valid strings and lowers the number of\ndistinct molecules proposed, and the invalid strings it removes come back as\nvalid <em>wrong</em> answers rather than right ones. On the final model the\nwhole-protocol gain is +0.6 points.</li>\n<li><strong>Ambiguity is not flat in molecule size, and it grows with the corpus.</strong>\nAcross all 1,986,551 filtered ChEMBL molecules (including held-out splits), 2.01% share a fingerprint with another, but\nthat runs from 1.50% below 24 heavy atoms to <strong>8.00% at 50\u201359 and 8.88% above\n60</strong>. It also rose from 1.40% when measured on half the corpus, and the growth\nexponent fell from 0.87 to 0.49 between those two steps, so extrapolating it\nis unsafe in both directions.</li>\n<li><strong>The failures are a size cliff, and it is combinatorial rather than\ninformational.</strong> This is the finding I would keep if I could keep one. It is\n<em>not</em> that large fingerprints are ambiguous: of 206 failures, exactly <strong>2</strong>\nwere a different molecule sharing the fingerprint. The input almost always\ndetermines the answer and the model cannot reach it. At every size the decoder\nproposes a cloud of plausible molecules of roughly fixed size, around 0.65\nTanimoto from the target, and recovery asks whether that cloud happens to\ncontain an exact preimage, which gets exponentially less likely as molecules\ngrow. The sharper version is that above 50 heavy atoms the successes are\n<em>concentrated</em>: a fifth of those queries return nothing at all in sixty\nguesses, while the ones that work return several right answers each. More\nguesses mostly re-find molecules already found.</li>\n</ul>\n<h3 id=\"model-performance\">Model performance</h3>\n<p>One common protocol: 2,000 held-out molecules, 1,956 of them fingerprint-unseen, in no model's training set, fixed seed, sampled at T=1.0 so every night's rows stay comparable.</p>\n<p>Rows are ordered by <code class=\"language-plaintext highlighter-rouge\">rec@20</code>, which is also the order the project discovered\nthem in, and the ordering is itself the finding: ChEMBL-full at 8,508 steps sits\n<em>below</em> the 1M shard at 21,117, despite having twice the data. Corpus size and\ntraining length move together unless you force them apart, and four of this\nproject's retractions came from not noticing. Read it as pairs instead: at equal\nsteps more data wins, and at equal data more steps wins by more.</p>\n<table>\n<thead>\n<tr>\n<th>\u00a0</th>\n<th>training molecules</th>\n<th>steps</th>\n<th>rec@1</th>\n<th>rec@20</th>\n<th>validity</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>8M, ChEMBL full, 6 passes</strong></td>\n<td>1,881,996</td>\n<td>88,218</td>\n<td><strong>0.9044</strong></td>\n<td><strong>0.9673</strong></td>\n<td>0.973</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 1M</td>\n<td>900,917</td>\n<td>21,117</td>\n<td>0.7526</td>\n<td>0.8962</td>\n<td>0.921</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 100k, long</td>\n<td>90,682</td>\n<td>21,117</td>\n<td>0.6764</td>\n<td>0.8476</td>\n<td>0.908</td>\n</tr>\n<tr>\n<td>8M, ChEMBL full</td>\n<td>1,881,996</td>\n<td>8,508</td>\n<td>0.5700</td>\n<td>0.7444</td>\n<td>0.827</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 1M, short</td>\n<td>900,917</td>\n<td>8,508</td>\n<td>0.4407</td>\n<td>0.6401</td>\n<td>0.795</td>\n</tr>\n<tr>\n<td>8M, ChEMBL 100k</td>\n<td>90,682</td>\n<td>8,508</td>\n<td>0.3793</td>\n<td>0.5992</td>\n<td>0.790</td>\n</tr>\n<tr>\n<td>retrieval baseline</td>\n<td>\u2014</td>\n<td>\u2014</td>\n<td>0.0000</td>\n<td>0.0000</td>\n<td>1.000</td>\n</tr>\n</tbody>\n</table>\n<p>The table is at T=1.0 because changing it would break comparability with every earlier night. At the adopted T=0.6 the top row reads 0.9075 and 0.9729, which are the headline figures above; the second row reads 0.7730 and 0.9162.</p>\n<table>\n<tbody>\n<tr>\n<td>Two laws came out of this that I didn't expect to be able to state so cleanly. The recovery <em>deficit</em> is a power law in the number of guesses, <code class=\"language-plaintext highlighter-rouge\">1 \u2212 rec(k) = A\u00b7k^\u2212b</code>, straight to</td>\n<td>r</td>\n<td>\u2265 0.991 over a twelvefold range of k, and the exponent falls with molecule size, so big molecules start lower on the curve <em>and</em> gain less per doubling of budget. Inverting the fits prices brute force exactly: k=128 takes 35\u201339 heavy atoms to 90% recovery, while above 50 atoms the same target needs 10\u2077 guesses. The deficit is also a power law in training steps, with an exponent about <strong>3.1\u00d7</strong> larger than the budget one in every size band, which gives a crossover: below roughly ten thousand queries on this model, buy more guesses, and above it train longer. The threshold moves with the model, though. On the final run it is nearer sixty thousand, because training got cheaper per point faster than guessing did.</td>\n</tr>\n</tbody>\n</table>\n<p>The full numbers, with domains and error bars, are in <a href=\"https://github.com/jonswain/morg2smiles/blob/main/docs/results.md\"><code class=\"language-plaintext highlighter-rouge\">docs/results.md</code></a>.</p>\n<h3 id=\"try-it-yourself\">Try it yourself</h3>\n<div class=\"language-bash highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>conda <span class=\"nb\">env </span>create <span class=\"nt\">-f</span> environment.yml <span class=\"o\">&amp;&amp;</span> conda activate morg2smiles\npip <span class=\"nb\">install</span> <span class=\"nt\">-e</span> <span class=\"nb\">.</span>\nmorg2smiles invert <span class=\"s2\">\"CC(=O)Oc1ccccc1C(=O)O\"</span> <span class=\"nt\">--checkpoint</span> checkpoints/small_full_6p/best.pt <span class=\"nt\">--k</span> 20\n</code></pre></div></div>\n<div class=\"language-console highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"go\">    =  c1(OC(=O)C)ccccc1C(O)=O\n</span></code></pre></div></div>\n<p>Aspirin comes back on the first attempt, and the model saw only the bits. One\nline, not twenty: given a budget of 20 the final model proposed a single distinct\nmolecule here, because it has no doubt. The <code class=\"language-plaintext highlighter-rouge\">=</code> marks an exact fingerprint match;\nanything without one shows its Tanimoto to the target instead.</p>\n<p>Now the same command on a tetrapeptide, Phe-Leu-Tyr-Gly (<code class=\"language-plaintext highlighter-rouge\">OC(CNC(=O)C(Cc1ccc(O)cc1)NC(=O)C(NC(=O)C(Cc1ccccc1)N)CC(C)C)=O</code>), 36 heavy atoms and well\nup the cliff:</p>\n<div class=\"language-console highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"go\">    =  C(C(NC(=O)C(NC(C(N)Cc1ccccc1)=O)Cc1ccc(O)cc1)C(=O)NCC(=O)O)C(C)C\n    =  C(C(NC(C(=O)NCC(O)=O)CC(C)C)=O)(NC(C(N)Cc1ccc(O)cc1)=O)Cc1ccccc1\n    =  OC(CNC(=O)C(Cc1ccc(O)cc1)NC(=O)C(NC(=O)C(Cc1ccccc1)N)CC(C)C)=O\n    =  CC(CC(C(NC(C(=O)NCC(O)=O)Cc1ccccc1)=O)NC(C(N)Cc1ccc(O)cc1)=O)C\n    =  C(C(CC(C)C)NC(C(Cc1ccccc1)NC(C(Cc1ccc(O)cc1)NC(=O)C(Cc1ccc(O)cc1)N)=O)=O)(=O)NCC(O)=O\n    =  c1ccc(CC(C(NCC(=O)O)=O)NC(C(Cc2ccc(O)cc2)NC(C(CC(C)C)NC(C(N)Cc2ccc(O)cc2)=O)=O)=O)cc1\n 0.88  c1cc(O)ccc1CC(C(=O)NC(Cc1ccccc1)C(NCC(=O)O)=O)NC(C(N)CC(C)C)=O\n 0.85  O=C(NC(C(NCC(=O)O)=O)Cc1ccc(O)cc1)C(Cc1ccccc1)NC(C(N)Cc1ccc(O)cc1)=O\n</span></code></pre></div></div>\n<p><strong>Six exact matches, and they are six different molecules.</strong> I canonicalised them\nto check: all six have a fingerprint identical to the query's, one of them is the\noriginal peptide, and the other five are not. They are mostly residue\npermutations, which is the obvious failure mode for a descriptor built from local\natom environments: reordering a peptide's residues barely changes the set of\nneighbourhoods it contains. Two of the six are not even the same <em>size</em> as the\nquery, at 48 heavy atoms against 36: they are pentapeptides with a duplicated\ntyrosine residue (+12 heavy atoms), which sets zero new bits in a binary Morgan\nfingerprint because all of its radius-2 environments are already present.</p>\n<p>That is the collision result made concrete. The fingerprint of a 36-atom peptide\ndoes not determine its sequence and does not determine its atom count. It is also\nthe one place where this model's \"failures\" are not failures: asked to invert an\nunderdetermined fingerprint, returning six molecules that all satisfy it exactly\nis the right answer.</p>\n<p>One caveat on reproducing that block, which bit this project elsewhere. <strong>The\ncommand is not seeded</strong>, so you will not get those strings. Running it again gave\nseven distinct exact matches instead of six, with sizes 36, 44, 47 and 48, and\nnot one SMILES in common with the run above. What is stable is the finding: the\noriginal is recovered, several distinct molecules share its fingerprint, and some\nof them are much larger than it. The count is a property of the sample. This is\nthe same unseeded-evaluation problem that once made two scorings of one\ncheckpoint differ by 2.2 points, which is why every number elsewhere in this post\ncomes from a seeded protocol and not from this command.</p>\n<p>Repo: <a href=\"https://github.com/jonswain/morg2smiles\">jonswain/morg2smiles</a>, MIT licensed. The prior art (NISPO, OpenClatura, and my own earlier unassisted attempt) is in the README's prior-art section.</p>","doi":"https://doi.org/10.59350/srwee-de037","guid":"https://jonswain.github.io/morg2smiles","image":"https://jonswain.github.io/images/morg2smiles/social-card.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793491200,"rid":"npz0e-4sw12","summary":"This is not actually a blog post on generative recovery of SMILES strings from Morgan fingerprints. It's about agentic coding, dressed up as a post about generative models.","tags":["Ai","Cheminformatics","Data-science","Machine-learning","Software-projects"],"title":"Morg2SMILES: Generative Recovery of SMILES Strings from Morgan Fingerprints","updated_at":1793518209,"url":"https://jonswain.github.io/morg2smiles/","version":"v1"},{"authors":[{"contributor_roles":[],"family":"Eden","given":"Terence"}],"content_html":"<p>All humans can be divided in two groups - those that love categorising things, and those that like criticising other people's categorisations.</p>\n\n<p>It seems that <a href=\"https://www.amydevitt.com/genre-colored-glasses/the-psychology-of-genre\">humans have an in-built desire to put things in firm categories</a>. This causes a great deal of arguments.  Let's have an argument today!</p>\n\n<p>Here's an excerpt from a recent IOPC press release:</p>\n\n<blockquote><h3 id=\"misconduct-proceedings-to-follow-social-media-investigations\"><a href=\"#misconduct-proceedings-to-follow-social-media-investigations\">Misconduct proceedings to follow social media investigations</a></h3>\n\n<p>A total of five police officers from different forces will face misconduct action after two separate investigations by the Independent Office for Police Conduct into <strong>social media messages</strong> \u2026</p>\n\n<p>\u2026 we looked at allegations that seven officers from several forces breached standards of professional behaviour when they used <strong>the Signal messaging platform</strong> to share information \u2026</p>\n\n<p>The IOPC is continuing to investigate the conduct of five officers \u2026 who allegedly sent discriminatory messages as part of <strong>a WhatsApp group</strong> \u2026</p>\n\n<p><a href=\"https://webarchive.nationalarchives.gov.uk/ukgwa/20211103011510/https://policeconduct.gov.uk/news/misconduct-proceedings-follow-social-media-investigations-linked-wayne-couzens\">Independent Office for Police Conduct</a></p></blockquote>\n\n<p>(Emphasis added.)</p>\n\n<p>The first thing to note is that this discussion of what counts as Social Media is utterly trivial compared to the matters being discussed by the IOPC. Please take a moment to think about how you can tackle sexist and abusive behaviour.</p>\n\n<p>When I read the headline, I automatically thought the officers had been accused of sharing things publicly. But that doesn't seem to be the case.</p>\n\n<p>Are Signal and WhatsApp forms of Social Media?  Let's see what people on the Social Media platform of Twitter have to say:</p>\n\n<blockquote class=\"social-embed\" id=\"social-embed-1451813997255274498\" lang=\"en\" itemscope=\"\" itemtype=\"https://schema.org/SocialMediaPosting\"><header class=\"social-embed-header\" itemprop=\"author\" itemscope=\"\" itemtype=\"https://schema.org/Person\"><a href=\"https://twitter.com/edent\" class=\"social-embed-user\" itemprop=\"url\"><img class=\"social-embed-avatar social-embed-avatar-circle\" src=\"data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA\" alt=\"\" itemprop=\"image\"><div class=\"social-embed-user-names\"><p class=\"social-embed-user-names-name\" itemprop=\"name\">Terence Eden is on Mastodon</p>@edent</div></a><img class=\"social-embed-logo\" alt=\"Twitter\" src=\"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E\"></header><section class=\"social-embed-text\" itemprop=\"articleBody\">Are messenger apps - like WhatsApp &amp; Signal - \"social media\"?<hr class=\"social-embed-hr\"><label for=\"poll_1_count\">Yes - because\u2026: (52)</label><br><meter class=\"social-embed-meter\" id=\"poll_1_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"15.8\">52</meter><br><label for=\"poll_2_count\">No - because\u2026: (193)</label><br><meter class=\"social-embed-meter\" id=\"poll_2_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"58.7\">193</meter><br><label for=\"poll_3_count\">Well, it depends\u2026: (84)</label><br><meter class=\"social-embed-meter\" id=\"poll_3_count\" min=\"0\" max=\"100\" low=\"33\" high=\"66\" value=\"25.5\">84</meter><br></section><hr class=\"social-embed-hr\"><footer class=\"social-embed-footer\"><a href=\"https://twitter.com/edent/status/1451813997255274498\"><span aria-label=\"2 likes\" class=\"social-embed-meta\">\u2764\ufe0f 2</span><span aria-label=\"17 replies\" class=\"social-embed-meta\">\ud83d\udcac 17</span><span aria-label=\"0 reposts\" class=\"social-embed-meta\">\ud83d\udd01 0</span><time datetime=\"2021-10-23T07:33:25.000Z\" itemprop=\"datePublished\">07:33 - Sat 23 October 2021</time></a></footer></blockquote>\n\n<p>My instinct was to say that they are <em>not</em> Social Media. One-to-one messaging may count as socialising, but it isn't SM!</p>\n\n<p>But, of course, all those private messaging platforms have a group chat function.  Is a family chat on Signal part of SM? What about organising your pub quiz team on WhatsApp? They are, in a sense, private. You have to be invited to join.</p>\n\n<p>Just like some of the groups on Facebook. The world's biggest social media platform\u2026</p>\n\n<p>What about Telegram? They have <a href=\"https://telegramchannels.me/groups\">thousands of open groups anyone can join</a>.</p>\n\n<p>Argh! This is all so confusing!</p>\n\n<p>Let's take a step back and see what we mean by \"media\" - without the social.</p>\n\n<p>TV, magazines, newspapers, radio. They're a monologue. A team of professionals create a message and then broadcast it. There's no right of reply. There is a high barrier to entry.</p>\n\n<p>The letters section in a newspaper is an early form of Social Media - but even that is highly curated.</p>\n\n<p>Social Media - newsgroups, blogs, email lists - are a dialogue. Or perhaps a polylogue. Multiple people - often amateurs - publish their messages and replies. There is little to no moderation. There are few barriers to entry.</p>\n\n<p>Early email lists are a good example of this. Archived on the web so anyone can read. Conversations are not curated. Anyone can join in.</p>\n\n<p>I think what's tripping me up is that I expect Social Media to be <em>public</em>. Anyone can read a newsgroup or blog. Anyone can comment or reply.</p>\n\n<p>But private groups - on any platform - don't fit my woolly definition of what I think \"media\" is.</p>\n\n<p>Twitter <em>is</em> social media.  Twitter Direct messages are <em>not</em>.</p>\n\n<p>Telegram chats are <em>not</em> social media. Telegram groups <em>are</em>.</p>\n\n<p>Public Slack channels <em>are</em> social media. Private work groups are <em>not</em>.</p>\n\n<p>Wikipedia is <em>not</em> social media. The discussion pages <em>are</em>.</p>\n\n<p>Does that make sense?</p>\n\n<p>As I said at the start - this is a trivial discussion. I don't say this to cast aspersions on the ongoing investigations. I'm just curious as to what systems - or facets of systems - <em>feel</em> like social media.</p>\n\n<p>The alleged behaviour of these officers is wrong. It would be wrong if it were via email, Facebook Messenger, or in-person locker-room chat. But, what intrigues me is how we instinctively categorise things - and the consequences that has on our discourse.  Would your first reaction to the above article have been different if the headline had said \"an investigation into <em>private messages</em>\"?</p>\n\n<p>The language we use shapes the opinions of those around us. I think it is helpful to be as precise as possible when discussing contentious issues.</p><img src=\"https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=40801&HTTP_REFERER=DOI\" alt width=1 height=1 loading=eager>","doi":"https://doi.org/10.59350/7kjke-6d727","guid":"https://shkspr.mobi/blog/?p=40801","image":"https://shkspr.mobi/blog/wp-content/uploads/2017/10/Screenshot-2017-10-25-edent-SuperTinySocialIcons-fs8.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1635638400,"rid":"t68fe-v2c77","summary":"All humans can be divided in two groups - those that love categorising things, and those that like criticising other people's categorisations. It seems that humans have an in-built desire to put things in firm categories. This causes a great deal of arguments. Let's have an argument today!","tags":["/etc/","Social Media"],"title":"What is \"Social Media\"?","updated_at":1793435451,"url":"https://shkspr.mobi/blog/2021/10/what-is-social-media/","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/02jz4aj89","name":"Maastricht University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen","url":"https://orcid.org/0000-0001-7542-0286"}],"community_id":"7f57028e-9d03-489c-b3b4-3d60de06bc9e","created":1710288000,"current_feed_url":"https://chem-bla-ics.linkedchemistry.info/feed.json","description":"Chemblaics (pronounced chem-bla-ics) is the science that uses open science and computers to solve problems in chemistry, biochemistry and related fields.","doi":"https://doi.org/10.59350/chem_bla_ics","favicon":"https://rogue-scholar.org/api/communities/7f57028e-9d03-489c-b3b4-3d60de06bc9e/logo","feed_format":"application/feed+json","feed_url":"https://chem-bla-ics.linkedchemistry.info/archive.json","filter":null,"generator":"Jekyll","home_page_url":"https://chem-bla-ics.linkedchemistry.info","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"chem_bla_ics","status":"active","subfield":"1606","title":"chem-bla-ics","updated":1793404800,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Fourteen years ago we <a href=\"https://chem-bla-ics.linkedchemistry.info/2013/10/05/programming-in-life-sciences-1-six-day.html\">started</a> the\nProgramming in the Life Sciences (<a href=\"https://chem-bla-ics.linkedchemistry.info/tag/pra3006\">PRA3006</a>).\nThe course is designed as a practical, because there surely is theory, but programming is also\nskills. Originally it was zooming in on pharmacology and the <a href=\"https://en.wikipedia.org/wiki/OpenPHACTS\">Open PHACTS</a> webservices\n(see <a href=\"https://chem-bla-ics.linkedchemistry.info/2013/12/06/programming-in-life-sciences-12-first.html\">this</a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2013/12/06/programming-in-life-sciences-13-another.html\">this</a>,\nand <a href=\"https://chem-bla-ics.linkedchemistry.info/2015/01/11/programming-in-life-sciences-21-2014.html\">this post</a>).\nBy now, the focus is on <a href=\"https://tgx-um.github.io/PRA3006-SPARQL/\">life sciences SPARQL endpoints</a>.</p>\n<p>Over the years, not all, but a good number of students have made their project available on GitHub, each with a separate\nbiologically-oriented research question. In this post, I collect a number of them. Because webservices change, some\ncode may not work anymore, but the overview of questions the students were able to study or even answer is\ninteresting in itself. Some years students worked in small teams, some years alone.</p>\n<ul>\n<li>2019: <a href=\"https://github.com/fennakadir/pils\">pathways associated with 2338 different diseases</a> (Wikidata)</li>\n<li>2020: <a href=\"https://github.com/alexanderleonidas/PRA3006-Programming-in-the-Life-Sciences\">increased risks for drugs for people with certain diseases</a> (Bio2Rdf)</li>\n<li>2021: <a href=\"https://github.com/Alex-AI-code/PRA3006\">relation of drug and drug doses and cancer</a> (Wikidata)</li>\n<li>2022: <a href=\"https://github.com/Snrts/PRA3006-Project_Repository\">interactions of drugs psychiatric conditions</a> (Wikidata)</li>\n<li>2023: <a href=\"https://github.com/LauryneGlub/PRA3006-Project11\">liver steatosis adverse outcome pathway network</a> (ChEMBL RDF)</li>\n<li>2023: <a href=\"https://github.com/Thammarak7/Case_DMD_PRA3006_Project\">the molecular mechanisms involved in Duchenne Muscular Dystrophy</a> (ChEMBL RDF)</li>\n<li>2024: <a href=\"https://github.com/reneecarr/PRA3006-Group-8/tree/main\">dopaminergic pathways of the drugs used to treat Parkinson's disease</a> (Wikidata)</li>\n<li>2024: <a href=\"https://github.com/Baxby-UM/PRA3006\">the dying blue: phylogenetic tree of marine species</a> (custom SPARQL endpoint)</li>\n<li>2024: <a href=\"https://github.com/matlaofmalta/PRA3006\">global prevalence of dementia and associated symptoms and treatments</a> (<a href=\"https://matlaofmalta.github.io/PRA3006/\">demo</a>; Wikidata)</li>\n<li>2025: <a href=\"https://github.com/eszter-csenteri/PRA3006-g7\">exploring protein targets of radiopharmaceuticals</a> (<a href=\"https://eszter-csenteri.github.io/PRA3006-g7/\">demo</a>; ChEMBL RDF)</li>\n</ul>\n<p>I will add some more, including in brackets which SPARQL endpoint was used.</p>","doi":"https://doi.org/10.59350/tyyke-w9649","guid":"https://doi.org/10.59350/tyyke-w9649","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"a118b-7dm89","summary":"Fourteen years ago we started the Programming in the Life Sciences (PRA3006). The course is designed as a practical, because there surely is theory, but programming is also skills. Originally it was zooming in on pharmacology and the Open PHACTS webservices (see this, this, and this post). By now, the focus is on life sciences SPARQL endpoints.","tags":["Pra3006","Sparql","Wikidata","Wikipathways","Chembl"],"title":"Programming in the Life Sciences #24: past research questions","updated_at":1793431939,"url":"https://chem-bla-ics.linkedchemistry.info/2026/10/30/pils24-past-research-questions.html","version":"v1"},{"authors":[{"contributor_roles":[],"family":"Lu","given":"Linna"}],"blog":{"authors":null,"community_id":"db0d8909-9e37-46d0-b16c-0551f575e86b","created":1749772800,"current_feed_url":null,"description":"Das Blog der TIB \u2013 Leibniz-Informationszentrum Technik und Naturwissenschaften und Universit\u00e4tsbibliothek","doi":"https://doi.org/10.65527/tib","favicon":"https://rogue-scholar.org/api/communities/db0d8909-9e37-46d0-b16c-0551f575e86b/logo","feed_format":"application/atom+xml","feed_url":"https://blog.tib.eu/feed/atom/","filter":null,"generator":"WordPress","home_page_url":"https://blog.tib.eu/","issn":null,"language":"deu","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.65527","relative_url":null,"secure":true,"slug":"tib","status":"active","subfield":"1802","title":"TIB-Blog","updated":1793348116,"use_api":true},"blog_name":"TIB-Blog","blog_slug":"tib","content_html":"<p>Der Herbst hat Einzug gehalten und das Ende der Erntezeit eingel\u00e4utet. Das Enterdankfest wurde dieses Jahr am 4. Oktober gefeiert. Traditionell f\u00e4llt dieses Fest auf den ersten Sonntag im Oktober. Die Retrodigitalisierung der TIB hat dies zum Anlass genommen, Werke zu den Themen Landwirtschaft, deren technischen Ger\u00e4te, Ern\u00e4hrung und Nahrungsmittel herauszusuchen und damit einen kleinen Einblick in die Vergangenheit zu geben.</p>\n<p>&nbsp;</p>\n<h2>Die Landwirtschaft und ihre Hilfsgewerbe (1. Band, 1874)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1882267915/6/\">In diesem Buch</a> wird die Landwirtschaft zur Zeit der Wiener Weltausstellung 1873 umfassend dargestellt. Behandelt werden unter anderen die Themen landwirtschaftlicher Pflanzenanbau und Viehzucht, Malzbereitung, Bierbrauerei, Branntwein-Brauerei, Zuckerfabrikation, \u00d6lgewinnung, landwirtschaftliche Ger\u00e4te und Maschinen.</p>\n<p><strong>Bierbrauerei:</strong> Auf dem Bild ist eine Maischmaschine zur Herstellung von Bier dargestellt.</p>\n<figure id=\"attachment_34863\" aria-describedby=\"caption-attachment-34863\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34863\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000301.jpg\" alt=\"\" width=\"600\" height=\"404\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000301.jpg 636w, https://blog.tib.eu/wp-content/uploads/2026/10/00000301-300x202.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000301-280x189.jpg 280w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34863\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 285</figcaption></figure>\n<p><strong>Bodenbearbeitungsger\u00e4te:</strong> Abgebildet sind zwei englische Pfl\u00fcge.</p>\n<figure id=\"attachment_34864\" aria-describedby=\"caption-attachment-34864\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34864\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000386.jpg\" alt=\"\" width=\"600\" height=\"444\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000386.jpg 943w, https://blog.tib.eu/wp-content/uploads/2026/10/00000386-300x222.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000386-768x568.jpg 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34864\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 364</figcaption></figure>\n<p><strong>Bodenbearbeitungsger\u00e4te:</strong> Dargestellt sind zwei Pferdehacken. Pferdehacken werden von Pferden gezogen um den Boden zwischen den Pflanzenreihen aufzulockern und das Unkraut zu entfernen.</p>\n<figure id=\"attachment_34865\" aria-describedby=\"caption-attachment-34865\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34865\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000396-943x1024.jpg\" alt=\"\" width=\"600\" height=\"652\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000396-943x1024.jpg 943w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396-276x300.jpg 276w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396-768x834.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000396.jpg 1043w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34865\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 374</figcaption></figure>\n<p><strong>M\u00e4hmaschinen:</strong> Abgebildet ist die Getreide-M\u00e4hemaschine von der Johnston Harvester Company.</p>\n<figure id=\"attachment_34866\" aria-describedby=\"caption-attachment-34866\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34866\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000435-1024x793.jpg\" alt=\"\" width=\"600\" height=\"465\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000435-1024x793.jpg 1024w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435-300x232.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435-768x595.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000435.jpg 1220w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34866\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 413</figcaption></figure>\n<p><strong>Locomobile:</strong> Locomobile werden mit Dampf betrieben und stellen einen Vorl\u00e4ufer des Traktors dar.</p>\n<figure id=\"attachment_34868\" aria-describedby=\"caption-attachment-34868\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34868\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000470-1024x728.jpg\" alt=\"\" width=\"600\" height=\"427\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000470-1024x728.jpg 1024w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470-300x213.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470-768x546.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000470.jpg 1358w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34868\" class=\"wp-caption-text\">Die Landwirtschaft und ihre Hilfsgewerbe, Seite 448</figcaption></figure>\n<p>&nbsp;</p>\n<h2>Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau (3. Band, 1896)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1882267915/6/\">Der Band</a> behandelt die Bereiche der Ern\u00e4hrung, N\u00e4hrstoffe, Nahrungsmittel, Gesetze und das Thema Fleischbeschau.</p>\n<p><strong>Die Milch:</strong> In der Abbildung ist ein Modell eines Milchk\u00fchlers zu sehen.</p>\n<figure id=\"attachment_34860\" aria-describedby=\"caption-attachment-34860\" style=\"width: 601px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34860\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000170-842x1024.jpg\" alt=\"\" width=\"601\" height=\"731\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000170-842x1024.jpg 842w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170-247x300.jpg 247w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170-768x934.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000170.jpg 974w\" sizes=\"auto, (max-width: 601px) 100vw, 601px\" /><figcaption id=\"caption-attachment-34860\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 153</figcaption></figure>\n<p><strong>Das Kalb und das Schaf:</strong> Dieser Teil des Buches behandelt das Thema Fleisch und bezeichnet die Fleischst\u00fccke vom Kalb und Schaf.</p>\n<figure id=\"attachment_34861\" aria-describedby=\"caption-attachment-34861\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34861\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000226-629x1024.jpg\" alt=\"\" width=\"600\" height=\"977\" /><figcaption id=\"caption-attachment-34861\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 209</figcaption></figure>\n<p><strong>Organisation der Fleischbeschau:</strong> In dem Kapitel geht es um das Abkochen von Bakterien und Mikroben. Bandw\u00fcrmer (Finnen) werden in einem Kessel abget\u00f6tet. Abgebildet ist der Becker-Ullmann'scher Kochapparat.</p>\n<figure id=\"attachment_34867\" aria-describedby=\"caption-attachment-34867\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34867\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-878x1024.jpg\" alt=\"\" width=\"600\" height=\"700\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-878x1024.jpg 878w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-257x300.jpg 257w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch-768x896.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/000004701Fleisch.jpg 906w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34867\" class=\"wp-caption-text\">Nahrungsmittel, Ern\u00e4hrung, Fleischbeschau, Seite 445</figcaption></figure>\n<p><strong>\u00a0</strong></p>\n<h2>Die Ern\u00e4hrung des deutschen Volkes (1947)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1833340523/8/\">Das Buch</a> gibt einen Einblick in die Ern\u00e4hrung des Menschen, wie viel N\u00e4hrstoffe ben\u00f6tigt werden und welche Lebensmittel wichtig f\u00fcr die Ern\u00e4hrung sind.</p>\n<p><strong>Forderungen an die deutsche Trocknungsindustrie:</strong> Dargestellt ist der Wassergehalt von einigen Lebensmitteln.</p>\n<figure id=\"attachment_34869\" aria-describedby=\"caption-attachment-34869\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34869\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser.jpg\" alt=\"\" width=\"600\" height=\"429\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser.jpg 997w, https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser-300x215.jpg 300w, https://blog.tib.eu/wp-content/uploads/2026/10/00000490Wasser-768x549.jpg 768w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34869\" class=\"wp-caption-text\">Die Ern\u00e4hrung des deutschen Volkes, Seite 469</figcaption></figure>\n<p>&nbsp;</p>\n<h2>Lebensmittel und ihre Bedeutung f\u00fcr die Ern\u00e4hrung (3. Band, 1912)</h2>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1891258478/10/\">In dem Werk</a> werden die tierischen und pflanzlichen Nahrungsmittel n\u00e4her beleuchtet. Zudem werden alkoholische Getr\u00e4nke behandelt.</p>\n<p><strong>Charakteristische Wirkungen von Teerfarben:</strong> In der Tabelle werden ungiftige, giftige oder verd\u00e4chtige Farbstoffe aufgef\u00fchrt.</p>\n<figure id=\"attachment_34862\" aria-describedby=\"caption-attachment-34862\" style=\"width: 600px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-34862\" src=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000277-655x1024.jpg\" alt=\"\" width=\"600\" height=\"938\" srcset=\"https://blog.tib.eu/wp-content/uploads/2026/10/00000277-655x1024.jpg 655w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-192x300.jpg 192w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-768x1201.jpg 768w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277-983x1536.jpg 983w, https://blog.tib.eu/wp-content/uploads/2026/10/00000277.jpg 1051w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" /><figcaption id=\"caption-attachment-34862\" class=\"wp-caption-text\">Lebensmittel und ihre Bedeutung f\u00fcr die Ern\u00e4hrung, Seite 260</figcaption></figure>\n<p>&nbsp;</p>\n<h3>Weitere Titel zum Schm\u00f6kern:</h3>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1675667853/6/\">Die restlose Verwertung des Schlachtblutes f\u00fcr die menschliche Ern\u00e4hrung </a>(1939)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1675686475/4/\">Die restlose Verwertung der Industriehefen f\u00fcr die menschliche Ern\u00e4hrung </a>(1939)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1757667288/8/\">Wie k\u00f6nnen wir Deutschlands Ern\u00e4hrung vom Ausland unabh\u00e4ngig machen?</a> (1921)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1666629227/6/\">Vitamine in frischen und konservierten Nahrungsmittel </a>(1940)</p>\n<p><a href=\"https://goobi.tib.eu/viewer/image/1680693484/8/\">Die Nahrungsmittel, Genu\u00dfmittel und Gebrauchsgegenst\u00e4nde, ihre Gewinnung, Beschaffenheit und Zusammensetzung</a> (2. Band, 1920)</p>\n<p><strong>\u00a0</strong></p>","doi":"https://doi.org/10.65527/942a2-bsd83","guid":"https://blog.tib.eu/?p=34859","image":"https://blog.tib.eu/wp-content/uploads/2026/10/00000226-e1793348111698.jpg","language":"de","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"z5kmh-nph98","summary":"Der Herbst hat Einzug gehalten und das Ende der Erntezeit eingel\u00e4utet. Das Enterdankfest wurde dieses Jahr am 4. Oktober gefeiert. Traditionell f\u00e4llt dieses Fest auf den ersten Sonntag im Oktober.","tags":["Vom Papier Zum Pixel","BIBLIOTHEKSWELT","Geschichte","Landwirtschaft","Ern\u00e4hrung"],"title":"Landwirtschaft und Nahrung neu entdeckt in der Retrodigitalisierung","updated_at":1793431818,"url":"https://blog.tib.eu/2026/10/30/landwirtschaft-und-nahrung-neu-entdeckt-in-der-retrodigitalisierung/","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/0153tk833","name":"University of Virginia"}],"contributor_roles":[],"family":"Turner","given":"Stephen","url":"https://orcid.org/0000-0001-9140-9028"}],"blog":{"authors":[{"name":"Stephen D. Turner","url":"https://orcid.org/0000-0001-9140-9028"}],"community_id":"382941a7-2ffa-41df-8bbb-5f772188517f","created":1780876800,"current_feed_url":null,"description":"A practicing data scientist's take on AI, genomics, biosecurity, and the ways AI is reshaping how science gets done. Weekly updates from the field. Occasional notes on programming.","doi":"https://doi.org/10.59350/stephenturner","favicon":"https://rogue-scholar.org/api/communities/382941a7-2ffa-41df-8bbb-5f772188517f/logo","feed_format":"application/rss+xml","feed_url":"https://blog.stephenturner.us/feed","filter":null,"generator":"Substack","home_page_url":"https://blog.stephenturner.us","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"stephenturner","status":"active","subfield":"1311","title":"Paired Ends","updated":1793358941,"use_api":true},"blog_name":"Paired Ends","blog_slug":"stephenturner","content_html":"<p><a href=\"https://securebio.substack.com/p/the-myth-of-the-tacit-knowledge-barrier\">The Myth of the \"Tacit Knowledge\" Barrier: Lab Inexperience Is Not a Security Strategy</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Allison Jia&quot;,&quot;id&quot;:258160933,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da276047-c872-4b33-b90b-11ecf1bfa60d_144x144.png&quot;,&quot;uuid&quot;:&quot;8fb74546-e357-4cbd-885a-19c4c7913e5e&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Becca Chandler Bostock&quot;,&quot;id&quot;:393498823,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!IKZ5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc37cc0d4-979b-49de-aec0-e99f4f806c6c_3997x3997.jpeg&quot;,&quot;uuid&quot;:&quot;c66cd135-bcf7-4773-8c38-c51a0c162d84&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Nelly Mak&quot;,&quot;id&quot;:402614042,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7b17d141-5d86-4a00-9710-3347916c94b5_4276x4276.jpeg&quot;,&quot;uuid&quot;:&quot;9f589484-0048-4ecc-bb2b-a45e487e876a&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Eleanor Marshall&quot;,&quot;id&quot;:494480600,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c4204b13-c8ec-4885-b090-e4a9a29e87bc_800x800.jpeg&quot;,&quot;uuid&quot;:&quot;dc5da458-b348-4eef-a84f-6d92f10c4bc9&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Jake Yukich&quot;,&quot;id&quot;:61705360,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!nimn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F453245e9-b038-4e86-9843-1e2600b05baa_1029x1029.png&quot;,&quot;uuid&quot;:&quot;3eed862d-8a78-45ca-8dfe-d7056c5be454&quot;}\" data-component-name=\"MentionToDOM\"></span>, <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Jasper G\u00f6tting&quot;,&quot;id&quot;:45699676,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd7f85b01-efbc-4677-b946-e08b0221c13b_854x854.jpeg&quot;,&quot;uuid&quot;:&quot;bbc4b23a-ba3e-4667-9c57-02aa8ec357cd&quot;}\" data-component-name=\"MentionToDOM\"></span>, and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Seth Donoughe&quot;,&quot;id&quot;:5563935,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/48042a58-d6c7-4b86-85ca-9ca46c4e9e7f_1024x1024.jpeg&quot;,&quot;uuid&quot;:&quot;07d0aa39-e0b0-4059-a7d2-96616c521d83&quot;}\" data-component-name=\"MentionToDOM\"></span> at <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;SecureBio&quot;,&quot;id&quot;:332259962,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4f0b3b1-8e61-46f7-b977-555d48277171_965x965.png&quot;,&quot;uuid&quot;:&quot;ca9aa653-4172-47f1-ad7e-a1baa11be7ae&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>We estimate that many other skills required for virus production, such as mammalian cell culture techniques or viral infection and recovery protocols, can also be learned in days and practiced to competence within a few weeks. Importantly, competence does not mean perfection; non-experts may still obtain usable results with imperfect technique.</p><p>[\u2026]</p><p>We do not claim that anyone who learns basic lab skills will immediately be well-equipped to develop bioweapons. However, plenty of dangerous pathogens already exist in nature and require only basic lab techniques to culture and propagate. Because the simplest paths to harm require less sophistication than we might imagine, treating lab inexperience as a categorical barrier under the guise of \"tacit knowledge\" understates risk. In fact, history has demonstrated that novice bioweaponeers are not bottlenecked by lab skills.</p></blockquote><p><a href=\"https://www.gov.uk/government/news/introducing-the-ai-biosecurity-lab\">Introducing the AI Biosecurity Lab</a> (UK Cabinet Office)</p><blockquote><p>The AI Biosecurity Lab will be the world's first dedicated AI biosecurity organisation. Backed by \u00a3100 million of government funding, and up to \u00a3200 million in company commitments from OpenAI and Anthropic, it will develop technical capabilities that help the UK better understand, prevent, detect and respond to biological threats, building on the UK's broader Biological Security Strategy.</p></blockquote><p><a href=\"https://www.science.org/doi/10.1126/science.ael7324\">AI biosecurity must include agriculture</a>, by Jonathan Feldman, Tal Feldman, and Pardis Sabeti in <em>Science</em></p><blockquote><p>Advances in biological artificial intelligence (AI) have brought biosecurity to the center of public debate, and the US Congress is now considering the Biosecurity Modernization and Innovation Act. Yet this debate, like biosecurity more broadly, remains focused largely on human health and overlooks the importance of pathogens that affect crops and livestock. The United States and governments worldwide should prioritize crop and livestock protection by minimizing the likelihood of deliberate pathogen attacks and making the targets less vulnerable to harm. </p></blockquote><p><a href=\"https://www.wired.com/story/hugging-face-new-ai-biology-model-chat-with-dna/\">Hugging Face's New AI Model Lets You Chat With DNA</a>, by Emily Mullin</p><blockquote><p><a href=\"https://huggingface.co/HuggingFaceBio/Carbon-X\">Carbon-X</a> integrates both DNA and natural language in a conversational interface. Think of it like a ChatGPT for DNA. The team started with an existing language model and expanded its vocabulary to read DNA in groups of six letters. They then continued training on 300 billion chunks of data, or tokens, that combined DNA sequences, English text, and examples linking DNA to biological descriptions. The DNA sequences came from mammals (including humans), other vertebrates, invertebrates, plants, fungi, and protozoa. Tunstall says the team didn't train the model on viruses because they didn't want it to be used for potentially dangerous applications.</p></blockquote><p><a href=\"https://blog.bluedot.org/p/hiring-for-the-field\">If you are awesome at technical work</a>, do talent, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Chris Strahle&quot;,&quot;id&quot;:133644283,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!NLxb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad70c18d-288f-4c13-b0b5-61e9073f93c8_96x96.jpeg&quot;,&quot;uuid&quot;:&quot;7e13bc5b-6daf-4a8b-8e07-2e5343f75ed8&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>Right now, the number of people working on reducing biological existential risk is pretty small, with fewer than 200 people working on it full time. [\u2026] Going forward, we will need many, many more talented contributors, especially problem owners who deeply care about the issue, who exercise good judgment, and who will take personal responsibility for agentically bending the universe towards a solution. [\u2026] I expect that many of the best candidates for biosecurity field building, much like myself, really enjoy technical work. With the field scaling, I expect that you will have multiple competing offers to do technical work and it will be painful to turn those down. But I honestly believe that right now, talent is the most important bottleneck in the field. Being the technical person that orients exceptional people in the field may well be the most impactful thing for you to do.</p></blockquote><p><a href=\"https://gcbrupdates.substack.com/p/gcbr-organization-updates-october-df3\">GCBR Organization Updates, October 2026</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Anemone Franz&quot;,&quot;id&quot;:102975147,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/57d3aa6e-07d0-4a12-879b-6d3b58330534_1849x1849.jpeg&quot;,&quot;uuid&quot;:&quot;278ec693-6780-4bd6-b8a3-535d769ead05&quot;}\" data-component-name=\"MentionToDOM\"></span> and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Tessa Alexanian&quot;,&quot;id&quot;:10906983,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6f40871-9707-4c8c-8176-4909cac25a64_500x500.jpeg&quot;,&quot;uuid&quot;:&quot;d04053c6-236a-410f-a4af-479c411786c3&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>In this issue:</p><ul><li><p>We welcome a new organization to our newsletter: RAND CAST;</p></li><li><p>CLTR's recommendations for the new UK Government on frontier AI risk and biosecurity, including mandatory synthesis screening;</p></li><li><p>MBDF's report that the new U.S. policy barring \"dangerous gain-of-function\" research explicitly includes mirror organisms;</p></li><li><p>Coefficient Giving's biosecurity grantmaking, now at more than $250 million committed this year, up from $65 million in 2025;</p></li><li><p>RAND CAST's defense-in-depth strategy for AI-era biosecurity and new evaluation results on open-weight model misuse risks.</p></li></ul></blockquote><p><a href=\"https://journals.plos.org/plosbiology/article?id=10.1371/journal.pbio.3004075\">What is biology research for?</a> by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Ran Blekhman&quot;,&quot;id&quot;:43380939,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab848573-8f92-4346-9fe5-9ee0c05d2d43_804x804.jpeg&quot;,&quot;uuid&quot;:&quot;833c3326-7ec6-4662-93e9-65875af6dfff&quot;}\" data-component-name=\"MentionToDOM\"></span> in <em>PLOS Biology</em></p><blockquote><p>Put bluntly, it is now straightforward to generate a plausible scientific paper without doing any actual research. Scientists have to come to terms with what this means: the paper, the artifact of research that the biology research community has used to assess, fund, hire, and promote for a century, has come loose from the science it was meant to represent.</p></blockquote><p><a href=\"https://lh3.github.io/2026/10/27/lets-talk-about-ai-review\">Let's talk about AI review</a>, by Heng Li</p><blockquote><p>I am still concerned that journals do not have an effective way to enforce their AI policies. If a reviewer denies AI usage, the editorial office has no way to confirm given that all AI detectors have false positives. The latest AI also seems to mimic human writing style better. It will be more challenging to tell what text is AI generated just based on its tone and style. I predict some researchers will continue using AI for review despite of journal policies, just as some students will continue using AI for homework despite of class rules. AI won't be stopped by policies, or by humanity.</p></blockquote><p><a href=\"https://www.science.org/content/article/could-your-chatbot-tip-scientific-rival-it-s-possible-researchers-say\">Could your chatbot tip off a scientific rival?</a> by Tom Howarth</p><blockquote><p>Even with an enterprise account, however, \"no training\" doesn't always mean \"no use.\" California State University's <a href=\"https://calmatters.org/wp-content/uploads/2026/02/CSU-OpenAI-Services-Agreement-.pdf\">contract with OpenAI</a>, shared by CalMatters, lets the company \"process information derived from [customers] that has been deidentified, anonymized, and/or aggregated.\" King suggests researchers check the fine print of their institution's AI deals.</p></blockquote><p><a href=\"https://www.nytimes.com/2026/10/12/opinion/ai-biosecurity.html?unlocked_article_code=1.IlE._Tyj.lr2c4hBPD5vz&amp;smid=url-share\">We Aren't Ready for the New Age of Biological Threats</a>, by Jeff Coller</p><blockquote><p>Of all the ways people say artificial intelligence could kill us all, one feels more realistic and palpable than the rest: the potential for A.I. to accelerate the development of a biological weapon. [\u2026] the government needs a permanent Operation Warp Speed for biosecurity, with the scope and budget of a national defense measure. The program we are talking about might sit unused for decades before the day it matters, but we will be grateful it exists when that day arrives. Congress has to be willing to pay for this, and only a statute will keep it alive over multiple presidential administrations. [\u2026] We do not defend against nuclear weapons with treaties alone. We built warning systems, hardened command structures and a stockpile, all premised on the possibility that restraint fails. Here we have no binding rules and no defense, only assurances from companies racing against one another. Whether A.I. agents and the companies building them can be controlled is an unsettled question. We need to be ready for whatever the answer is.</p></blockquote><p><a href=\"https://arjunrajlab.substack.com/p/build-bricks-not-dashboards\">Build bricks, not dashboards</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Arjun Raj&quot;,&quot;id&quot;:193849277,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7060e32f-dd05-47b9-ab8c-92c61987c92b_1827x1827.jpeg&quot;,&quot;uuid&quot;:&quot;477995f0-cabf-4726-87e8-71d0013c57cc&quot;}\" data-component-name=\"MentionToDOM\"></span> </p><blockquote><p>I think that building the next layer of knowledge requires building bricks, not dashboards. What makes something a brick? To me, a brick is something that changes not just what is possible now, but what is possible next. A new conceptual framework, or a new, well-tested package that solves an important problem robustly. Making a brick requires synthesis, focus, and careful, deep thought. A bunch of half-baked dashboards, semi-playable video games, and minor scientific connections are not going to get us to the next step. I suggest we spend our efforts and tokens towards building these foundations instead of fluff. </p></blockquote><p><a href=\"https://blog.bluedot.org/p/biosecurity-strategy\">Biosecurity Strategy</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;O.H. Scharfman&quot;,&quot;id&quot;:356854846,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/900f7509-5af2-4480-84fd-0585143b2cb6_2310x2310.jpeg&quot;,&quot;uuid&quot;:&quot;494814e6-46b4-4e18-bd1c-f57eda93fa45&quot;}\" data-component-name=\"MentionToDOM\"></span> and <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Chris Strahle&quot;,&quot;id&quot;:529347919,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/445c0931-4a99-4d1b-abe7-1c56ac14b75f_512x512.jpeg&quot;,&quot;uuid&quot;:&quot;d9f5f5de-5737-4262-8778-5feb1bb6fcc6&quot;}\" data-component-name=\"MentionToDOM\"></span>: </p><blockquote><p>Two compounding technological trends are rapidly democratizing dual-use biotechnology: the cost of bioengineering is falling, and AI models are getting better at biology. [\u2026] AI uplift, the ability of AI to assist in queries regarding benchwork or scientific strategy, will enable increased access to offensive capabilities. Capabilities that were once the exclusive domain of state programs will become within reach of small, under-resourced teams or individual actors. This increases the likelihood of a deliberate attack significantly.</p></blockquote><p><a href=\"https://research.google/blog/analyzing-technical-documents-with-deep-review/\">Analyzing technical documents with Deep Review</a> (Google)</p><blockquote><p>Today, we're excited to announce the public release of <a href=\"https://research.google/deepreview/\">Deep Review</a>, an agentic AI system engineered to provide rigorous feedback and technical verification on complex documents. Initially designed for computer science academic paper analysis, the system's capabilities have expanded to review documents across many domains, such as legal and finance. It can be used as both an iterative improvement tool during the drafting process and a tool for the scientific process verification, claims, and evaluation during the review process.</p></blockquote><p><a href=\"https://nextflow.com/blog/introducing-nextflow-frontier/\">Introducing Nextflow Frontier</a>, by Evan Floden</p><blockquote><p>We designed Nextflow Frontier for scientists. Give Nextflow Frontier a problem and a clear way to measure success. The system formulates ideas about potential solution pathways, turns these ideas into fully executable Nextflow pipelines, and then runs these \"experiments\" - often thousands of them - in parallel. It scores and analyzes the results. Then it learns and refines its approaches, and runs again. It can run autonomously for many days while staying fully guidable, verifiable and transparent.</p></blockquote><p><a href=\"https://www.seangoedecke.com/llms-reward-expertise/\">LLMs reward expertise</a>, by Sean Goedecke</p><blockquote><p>The usefulness of domain knowledge suggests that human expertise will continue to be useful even as models get stronger. For many tasks, the human is the bottleneck, not the model, because the difficult part is in communicating to the model exactly what kind of solution the human wants. The information is \"in the model\" already, but it takes a very smart human to pull it out.</p></blockquote><p><a href=\"https://www.nejm.org/doi/full/10.1056/NEJMp2609409\">Not Available in Your Country</a>, by Christos Kotanidis in <em>NEJM</em></p><blockquote><p>Our morning board round was over, and on our way to the cafeteria for the traditional coffee break, one of the fourth-year medical students shadowing me that day turned and asked, \"Why does tacrolimus cause a tremor?\" [\u2026] My artificial intelligence (AI) deflection was immediate. Just as a child turns to a parent for help when clueless or faced with uncertainty, I reflexively took my phone out of my pocket, smiled, and replied, \"Let's see what AI thinks.\" The app seemed to be working \u2014 I was still logged in \u2014 and I typed the question eagerly, spoiled into expecting the instant eureka moment, a coherent answer with all the relevant references and context. Instead, I was stunned by a stark rejection, in big, bold lettering: <em>\"Not available in your country.\" </em>[\u2026] Over the ensuing weeks, I found myself stuck in the anger stage of grief (if you believe in that sort of thing) over a machine, an AI agent, a nonhuman entity. I had lost my own pocket medical expert that I so cherished. We had learned so much together, we had made informed decisions together, we had improved my patients' care together. And now it was gone.</p></blockquote><p><a href=\"https://www.nature.com/articles/d41586-026-03135-7\">AI biohazard hype must not divert attention from the real risks we face now</a>, by Saskia Popescu</p><blockquote><p>Meanwhile, efforts to strengthen biosecurity and biosafety in the United States are affected by the ebb and flow of public interest, prioritization and politicization. The country has still not reauthorized the Pandemic and All-Hazards Preparedness Act, which was enacted in 2006 and is a crucial part of biopreparedness. The current administration lacks a coherent strategy for biosecurity and biodefence [\u2026] it has also dissolved the National Counterproliferation and Biosecurity Center, fumbled its response to the Bundibugyo virus through aggressive border and quarantine orders, and overseen leadership turnover in White House biodefence and health security, leaving crucial gaps [\u2026] The FBI Weapons of Mass Destruction directorate was rolled back into the counterterrorism division, and the Countering Weapons of Mass Destruction Office in the Department of Homeland Security was dissolved, translating to a broader reduction in efforts to reduce these threats [\u2026] The anthrax attacks were a horrific demonstration of biological risks. Ignoring the realities of biothreats and vulnerabilities would be a disservice to those who died and to those affected, and the 25 years of work to strengthen US biodefence and resilience since. I'm proud that the United States has made significant investments in biodefence and of its ability to be frank about failures, but as a nation it consistently struggles to translate acknowledgment of risk and weakness into sustainable, operational change.</p></blockquote><p><a href=\"https://www.theatlantic.com/science/2026/10/anthropic-artificial-intelligence-science-biology/688878/\">AI's Real Gift to Science</a>, by Hana Kiros</p><blockquote><p>In other words, Anthropic made a big deal about a finding that\u2014although achieved in a novel, Claude-led way\u2014may not lead to any biomedical advances, and that the company knew may not lead to any biomedical advances. Ironically, in making such grandiose statements, the company and other AI boosters obscured what Claude does appear to have accomplished: It sorted through reams of biological data that would have taken scientists much longer to analyze, if they could have at all. This capacity might not be a miracle, but for scientists facing mountains of data that have surpassed their capacity for analysis, it's still meaningful.</p></blockquote><p><a href=\"https://www.technologyreview.com/2026/09/15/1144129/ai-models-need-more-data-about-biology-and-openai-is-paying-to-create-it/\">AI models need more data about biology, and OpenAI is paying to create it</a>, by Antonio Regalado</p><blockquote><p>Today the OpenAI Foundation, the nonprofit parent of OpenAI, said it would fund her idea as part of a new effort it calls Public Data for Health, which aims to help artificial intelligence make big leaps in medicine by paying to create \"high-quality scientific datasets.\" [\u2026] \"We're starting grantmaking when we think the best way to achieve that mission is to make grants to external nonprofits, research institutions, and other third parties,\" Trefethen said in an interview. He says the foundation hopes to give away $1 billion by the end of the year. </p></blockquote><p><a href=\"https://rworks.dev/posts/r-managers\">{renv}, {rix}, rv, uvr, ir: An explosion of R package and environment managers</a>, by Isabella Velasquez</p><blockquote><p>While they're all about tracking or isolating dependencies, they operate at a different \"levels\" from each other. TL;DR:</p><ul><li><p>{rix} snapshots the entire system environment</p></li><li><p>{renv}, rv, and uvr manage R package dependencies within a single R project</p></li><li><p>ir handles dependencies for a single R script rather than a project</p></li></ul></blockquote><p><a href=\"https://cran.r-project.org/web/views/PackageDevelopment.html\">CRAN Task View: Package Development and Maintenance</a>, by Llu\u00eds Revilla and Heather Turner</p><blockquote><p>To assist package developers, this task view collates contributed packages with reference to relevant sections of <a href=\"https://cran.r-project.org/doc/manuals/r-release/R-exts.html\">WRE</a>, highlighting relevant functionality from base/recommended packages before alternative/supplementary tools.</p></blockquote><p><a href=\"https://www.insidehighered.com/opinion/views/2026/09/29/ai-slop-coming-university-library-near-you-opinion\">AI Slop Coming to University Library Near You</a>, by Daniel M. Gross</p><blockquote><p>As a faculty member at the University of California, Irvine, I was recently shocked to learn that AI slop had breached our carefully curated\u2014and expensive\u2014library holdings. Most shocking was that the incursion wasn't marginal. It came from the heart of our holdings: Springer Nature. Apparently, since May 2021, Springer Nature has been publishing <a href=\"https://group.springernature.com/gp/group/media/press-releases/advances-its-machine-generated-tools-with-ai-based-lit-overviews/19129322\">\"AI-based\" literature reviews</a>, book-length texts that the publisher describes as incorporating \"a mixture of human-written text and machine-generated literature overviews.\" [\u2026] For librarians, the message is this: University research faculty care deeply about you in your role as the most immediate gatekeepers for what counts as knowledge. It's time for a new collaboration along these lines when the stakes appear, for us both, profound. For others, the message is to consider seriously what alternatives are left if the universities and their libraries fade.</p></blockquote><p><a href=\"https://www.anthropic.com/research/self-replicating-ai\">Anthropic: AI models may be capable of self-replicating without access to a datacenter</a></p><blockquote><p>Our experiments suggest that small AI models may be months away from being capable enough to self-replicate on commercial internet-of-things (IoT) devices, like smart ovens and off-brand Android TV boxes. A replicator like this would be challenging to shut down, since there's no centralized point to shut off</p></blockquote><p><a href=\"https://blekhman.substack.com/p/why-i-am-not-reading-your-ai-generated\">Why I am not reading your AI-generated email</a>, by <span class=\"mention-wrap\" data-attrs=\"{&quot;name&quot;:&quot;Ran Blekhman&quot;,&quot;id&quot;:43380939,&quot;type&quot;:&quot;user&quot;,&quot;url&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab848573-8f92-4346-9fe5-9ee0c05d2d43_804x804.jpeg&quot;,&quot;uuid&quot;:&quot;9bedcd1d-61fa-42d3-b498-fc5142203066&quot;}\" data-component-name=\"MentionToDOM\"></span><a class=\"footnote-anchor\" data-component-name=\"FootnoteAnchorToDOM\" id=\"footnote-anchor-1\" href=\"#footnote-1\" target=\"_self\">1</a></p><blockquote><p>Writing an email takes effort. That effort itself is a signal that the writer thought about what they wanted to say and decided it was relevant. They thought - even for a few minutes - about why they are a good fit for the lab, how their career would flourish here, what they can contribute. An email that was generated with AI completely eliminates this signal. It tells me the sender spent approximately zero time on this communication. I do not think it is unreasonable to respond in kind.</p></blockquote><p><a href=\"https://www.anthropic.com/news/2026-usage-policy-update\">Addressing abusive behavior toward our models</a> (Anthropic 2026 Usage Policy update)</p><blockquote><p>We've added a prohibition on sustained and needless abusive or cruel behavior toward our models. The policy update is meant to apply only in extreme cases, where users repeatedly act cruelly toward our models, with no discernible purpose. It does not apply to common versions of user frustration, pushback, dark creative themes, or model testing and research.</p></blockquote><p><a href=\"https://www.businessinsider.com/ai-researchers-smoking-ai-cure-cancer-palantir-cto-2026-10\">AI Researchers Smoke, Betting AI Will Cure Cancer</a>, by Thibault Spirlet</p><blockquote><p>Forget sleepmaxxing and cold plunging: smoking is the new lifestyle flex among AI researchers. At least, that's according to Palantir CTO Shyam Sankar, who said some AI researchers are taking up smoking to signal their belief that AI will eventually cure cancer. \"So many AI researchers have started smoking as a way of signaling to other researchers how much they believe in AI,\" Sankar said in an interview on CBS News' \"Face the Nation\" on Sunday.</p></blockquote><p><a href=\"https://www.nature.com/articles/d41586-026-03151-7\">China picks first researchers for 15-year mega grants</a>, by Mohana Basu</p><blockquote><p>During those 15 years, we will not conduct any short-cycle, short-term target assessments. We will assess only one thing: whether you are there in the laboratory.</p></blockquote><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://blog.stephenturner.us/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://blog.stephenturner.us/subscribe?\"><span>Subscribe now</span></a></p><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;afe04759-ccf4-4f2d-90c9-6b3ca9fca0fb&quot;,&quot;caption&quot;:&quot;I don't like mandatory AI disclosures. And it's awkward because I require them from my students. If you've been reading here lately you also know that I'm trying to drastically reduce how much writing I delegate to AI. Writing helps me think. I lose something when I turn that over to Claud\u2026&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;I'm Skeptical of AI Disclosures&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-17T09:40:55.598Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f4d03c3-076e-4a2f-9245-8bf06b762044_1108x583.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-disclosures&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:220671995,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:7,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;02be1cb4-b494-4490-95a8-ef34fbcae5a4&quot;,&quot;caption&quot;:&quot;Some days I buy into the AI as Normal Technology argument that Arvind Narayanan and Sayash Kapoor popularized in their essay by the same title.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Anthropic is not pitching Normal Technology&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-27T08:45:12.477Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!giS4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c59d001-2906-4c57-a3d4-f8fb5198b1f9_1203x639.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/anthropic-s1-prospectus&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:222305199,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;6da7ed7d-3690-45d4-9e67-5776e1c4d3a2&quot;,&quot;caption&quot;:&quot;Before anything else: I write this as a tenured professor who loves this job. Academia has been good to me, and I plan to spend the rest of my career here. So this essay isn't a criticism or indictment. Quite the contrary. I only bother critiquing the people and institutions I act\u2026&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;What Counts as Impact?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-19T12:15:23.360Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Phqy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31a09790-6158-400f-bb27-023aba2e406b_1128x596.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/what-counts-as-impact&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:220965022,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:3,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;ab242fa4-5f93-4324-ab46-5c1cff51bea9&quot;,&quot;caption&quot;:&quot;Back in March I wrote paper with a few colleagues about AI's place in peer review. The preprint is here, and I wrote a short post about it here.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI Reviews Might Beat Human Peer Reviews&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-24T15:22:32.790Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!tXow!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe5bdb46e-3d4e-4a19-a0fc-32a89d0b3c33_1105x580.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-peer-reviews-beat-humans&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:221835700,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:3,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;7c295752-729a-47c5-8fb2-264babe6a3b3&quot;,&quot;caption&quot;:&quot;Normally at the end of every month I offer a list of links to papers, articles, blog posts, etc. This month I'll add a few podcast recommendations. Three podcasts, one episode from each.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Podcast Recommendations Oct 2026&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-25T12:06:54.696Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/31df1c51-4314-4a73-9214-4e2fb00ea1cd_1484x779.jpeg&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/podcast-recs-dtascience-uvadatapoints-aiexchange&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:222023708,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><div class=\"digest-post-embed\" data-attrs=\"{&quot;nodeId&quot;:&quot;c72cafe1-fe34-44c8-bd5d-6097a43b7c5a&quot;,&quot;caption&quot;:&quot;There's a funny thing that happens to me from time to time. I randomly stumble across an essay or a paper that resonates with me, sometimes one that I can't stop thinking about for days. Then I come to find out the author is a colleague here at my own University of Virginia in the building next door who I never knew of.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;lg&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;AI in the workplace vs. AI in education&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:1536121,&quot;name&quot;:&quot;Stephen D. Turner&quot;,&quot;bio&quot;:&quot;https://stephenturner.us/&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!WGQE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1706730-c948-4acf-9c45-b14b4e3da1b9_651x651.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-10-11T10:18:47.559Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!lH-e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff254a632-4d6b-4a48-97f1-03af66430266_1343x1064.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://blog.stephenturner.us/p/ai-workplace-education&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:219841835,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:1,&quot;publication_id&quot;:161890,&quot;publication_name&quot;:&quot;Paired Ends&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!hfDI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F894081de-334e-4173-8a0c-e64762c2c838_1030x1030.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}\"></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://blog.stephenturner.us/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://blog.stephenturner.us/subscribe?\"><span>Subscribe now</span></a></p><p><em>Cover image: Der Sturz des Ikarus (circa 1940), Oskar Laske (Austrian, 1874-1951)</em></p><div class=\"footnote\" data-component-name=\"FootnoteToDOM\"><a id=\"footnote-1\" href=\"#footnote-anchor-1\" class=\"footnote-number\" contenteditable=\"false\" target=\"_self\">1</a><div class=\"footnote-content\"><p>Editorial note: I had begun writing my own I-don't-read-AI-email policy when Ran published this essay, verbalizing much more clearly some of the reasons why not. His essay helped me clarify my own policy at <a href=\"https://stephenturner.us/aiemail\">stephenturner.us/aiemail</a>, which is linked from my contact page at <a href=\"https://stephenturner.us/contact\">stephenturner.us/contact</a>.</p></div></div>","doi":"https://doi.org/10.59350/5q0dk-5vx42","guid":"216556222","image":"https://substack-post-media.s3.amazonaws.com/public/images/8286a00f-80b6-4096-98aa-5eb3b2041fb1_1245x654.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"seatc-b9j84","summary":"Tacit knowledge, AI and biosecurity, field building, chat with DNA, Nextflow, AI in academia and science, R package development, peer review","tags":["Papers","Biosecurity","R","Nextflow","AI"],"title":"October 2026 links","updated_at":1793431812,"url":"https://blog.stephenturner.us/p/october-2026-links","version":"v1"},{"authors":[{"contributor_roles":[],"family":"Lakens","given":"Daniel"}],"blog":{"authors":null,"community_id":"5c1dc37c-5dba-4707-8c14-587fa89f6807","created":1753833600,"current_feed_url":null,"description":"A blog on statistics, methods, philosophy of science, and open science. Understanding 20% of statistics will improve 80% of your inferences.","doi":"https://doi.org/10.59350/daniellakens","favicon":"https://rogue-scholar.org/api/communities/5c1dc37c-5dba-4707-8c14-587fa89f6807/logo","feed_format":"application/atom+xml","feed_url":"https://daniellakens.blogspot.com/feeds/posts/default","filter":null,"generator":"Blogger","home_page_url":"https://daniellakens.blogspot.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"daniellakens","status":"active","subfield":"3205","title":"The 20% Statistician","updated":1793354047,"use_api":null},"blog_name":"The 20% Statistician","blog_slug":"daniellakens","content_html":"<div style=\"max-width: 100%; overflow-wrap: anywhere;\"><div style=\"max-width: 100%; overflow-wrap: anywhere;\"><div style=\"max-width: 100%; overflow-wrap: anywhere;\"><p>When authors share their data and analysis code, the idea is that anyone should be able to run that code on that data and get the results reported in the paper. But sharing data and code in a way that results are reproducible is difficult, and researchers have often not received training in how to share data and code. As a consequence, there are often basic mistakes in public repositories that stand in the way of computationally reproducible results. Automated checks can help researchers identify and fix these mistakes, such as not sharing all files that are loaded in code, using absolute instead of relative file-paths, using values that are not computed in the code that is shared, changing file names so they no longer match the code, or not loading all libraries.</p><p>Checking whether data and code is reproducible is tedious. It also often requires repeated back and forths between the person performing the checks, and the researchers sharing data and code. Ideally, checks do not just focus on whether code runs, but also whether all results in a manuscript are reproduced by the code, but this takes a lot of time.</p><p><a href=\"https://www.scienceverse.org/metacheck_book/\" target=\"_blank\">Metacheck</a>'s <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">reproducibility_check</code> module attempts to perform all these checks automatically. When it succeeds, researchers and/or reviewers, data managers, or editors know that data and code is shared in a reproducible manner, and they do not need to perform manual checks. This saves everyone time, and leads to data and code repositories that are more useful for science. Our reproducibility check module is completely code-based. It uses no AI (although modules it builds on, such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">data_check</code>, can optionally use a large language model, by setting <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">llm_use(TRUE)</code>, to better understand the files in a repository, such as which files belong to which study), and it can run locally on your computer without sending information to an external server.</p><div class=\"separator\" style=\"clear: both; text-align: center;\"><a href=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s128/metacheck-logo.png\" imageanchor=\"1\" style=\"margin-left: 1em; margin-right: 1em;\"><img border=\"0\" data-original-height=\"128\" data-original-width=\"111\" height=\"128\" src=\"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s1600/metacheck-logo.png\" width=\"111\"/></a></div><br/><p>If I say so myself, it is pretty damn cool. It is one of the rare experiences where I honestly thought something could not be done, but where I surprised myself because it actually works.</p><p>This post shows the module at work on two versions of the same small study: one where every reported result can be reproduced, and one where several cannot.</p><h2 id=\"computationally-reproducing-a-simple-stroop-experiment\">Computationally reproducing a simple Stroop experiment</h2><p>Both papers analyse the same classroom data from my introduction to psychology and technology course. Students named the ink color of words that matched the color (the word \"red\" printed in red) and of words that did not (the word \"red\" printed in green), and reported the time they needed in seconds. Both papers report four results: the mean and standard deviation of the reaction times in each condition, the correlation between the reaction times in the two conditions, a paired <em>t</em>-test for the Stroop effect, and a comparison of the Stroop effect between the students tested in 2013 and in 2014.</p><ul><li>The <strong>good</strong> paper, <a class=\"uri\" href=\"https://github.com/Lakens/stroop_effect_paper\">https://github.com/Lakens/stroop_effect_paper</a>, computes every reported number in its analysis code. The manuscript is a Quarto document, so the text prints these numbers directly from the analysis.</li><li>The <strong>bad</strong> paper, <a class=\"uri\" href=\"https://github.com/Lakens/stroop_effect_paper_bad\">https://github.com/Lakens/stroop_effect_paper_bad</a>, has several common mistakes deliberately built in. The results were typed into the text by hand, the shared data contain a value the authors removed before their own analysis without saying so, some reported results are not computed by the code at all, and the code stops with an error before it reaches the last analysis.</li></ul><h2 id=\"running-the-code-locally-or-using-our-server-on-surf\">Running the code locally, or using our server on SURF</h2><p>The reproducibility check runs code that other people wrote. That is not without risk. A script can delete files, read files that have nothing to do with the project, or send information over the internet, by accident or on purpose. By default, <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">execute = TRUE</code> runs each script in a separate R process on your own computer. This prevents a script that crashes from taking your own R session down with it, but the script can still reach every file on your computer, and the internet. That is fine for the two repositories in this post, which I wrote myself, but not for code from a repository you have not created, as a bad actor might insert problematic code.</p><p>For such code, add <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">sandbox = \"docker\"</code>. <a href=\"https://www.docker.com/\">Docker</a> is a program that runs software in a <em>container</em>: a closed environment on your computer, separated from the rest of the system. Metacheck runs every script in its own container, and has set up these containers so that the code can do as little harm as possible:</p><ul><li>The container has no internet connection while the code runs. Only the step before it, which installs the packages the code needs, is connected to the internet, and in that step none of the paper's own code runs.</li><li>The code runs on a copy of the repository's files, in a temporary folder. That folder is the only place on your computer it can write to, and the files on the rest of your computer are not visible inside the container.</li><li>The code runs as an ordinary user without administrator rights, cannot obtain extra rights, and can start only a limited number of processes.</li><li>Each script is stopped after a time limit, 10 minutes by default.</li></ul><p>No sandbox makes running unknown code completely safe: a flaw in Docker itself could in principle still be exploited. But these settings close off the usual ways in which a script can do damage. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-reproducibility-check.html#two-ways-to-run-the-code\">Reproducibility Check</a> chapter lists the exact settings, and compares them with running code without Docker.</p><p>Running the check in Docker takes some preparation, and disk space. You need Docker Desktop (on Windows and macOS) or Docker Engine (on Linux), and the space Docker Desktop itself needs. The first time you run the check, Docker downloads Metacheck's image for R code: R, Quarto, and the roughly 750 R packages that occurred in a scan of thousands of R files shared with psychology papers, together about 4.9 GB. Python code runs in a second image of about 2.7 GB. Because most packages a paper needs are already in the image, they do not have to be installed again for every paper, which makes the check much faster (but at the expense of a large docker image that you install once). The chapter explains <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-reproducibility-check.html#the-pre-built-docker-image-and-why-it-exists\">how the image was built</a>.</p><p>If you do not use R, the <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html#docker-installation\">Docker installation</a> runs Metacheck's website on your own computer, with the same checks. It needs about 1.7 GB of disk space and a computer with 8 GB of memory, plus Docker. There, the code of a repository runs inside Metacheck's own container: it cannot reach the files on your computer, but unlike in the sandbox described above, it can use the internet. The packages the code needs are downloaded while the check runs. Running the check on your own computer also means that an unpublished manuscript never leaves it, which matters for editors and reviewers who may not upload a submission to an external server.</p><p>The easiest way to try the check is our server on SURF Research Cloud, which runs on the servers of SURF, the cooperative of the Dutch universities, in the Netherlands. You need nothing but a web browser. On <a href=\"https://metacheckserve.metacheck.src.surf-hosted.nl/\">Metacheck's website</a>, upload a PDF under <em>Run Metacheck on a Paper</em> and tick <em>Also run the code in the paper's repository</em>, or, under <em>Run Metacheck on a Repository</em>, choose a folder or a .zip file, or paste a link to an online repository such as GitHub or OSF. Uploaded files are deleted as soon as they have been read, and the report is kept on the server for one hour, so save it if you want to keep it.</p><p>The server's capacity is shared by everyone who uses it, so it is meant for checking a paper or a repository now and then. If you want to check many papers, run Metacheck on your own computer, or <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html#your-own-server-on-surf-research-cloud\">build your own server on SURF Research Cloud</a>, which researchers at Dutch institutions can do through their institution or with a free NWO grant. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/get-started.html\">Setting up Metacheck</a> chapter describes all these options.</p><h2 id=\"running-the-reproducibility-check-in-r.\">Running the reproducibility check in R.</h2><p>I will illustrate the reproducibility check module in R. Metacheck reads a paper from its PDF. We download both PDFs from GitHub, and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">convert()</code> turns each into a structured file that <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">read()</code> loads into R. If you want to follow along in the Metacheck website, download the two papers from <a href=\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper/main/output/analysis.pdf\">here</a> and <a href=\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/analysis.pdf\">here</a>.</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">download.file(\n  \"https://raw.githubusercontent.com/Lakens/stroop_effect_paper/main/output/analysis.pdf\",\n  destfile = \"good_paper.pdf\", mode = \"wb\"\n)\ndownload.file(\n  \"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/analysis.pdf\",\n  destfile = \"bad_paper.pdf\", mode = \"wb\"\n)\npaper &lt;- read(convert(file_path = \"good_paper.pdf\", save_path = \".\"))\nbad_paper &lt;- read(convert(file_path = \"bad_paper.pdf\", save_path = \".\"))</code></pre></div><p>Both papers link to their repository. The <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-repo-check.html\">repo_check</a> module in Metacheck supports over 270 data repositories, and can automatically download files from these repositories.</p><p>Running the module is a single line. By default, <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">reproducibility_check</code> only inspects the code without running it. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">execute = TRUE</code> is needed to actually run the full computational reproducibility check:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good &lt;- module_run(paper, \"reproducibility_check\", execute = TRUE)\nmo_good$traffic_light</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; [1] \"green\"</code></pre></div></div><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_good$summary_text)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; \n#&gt; -  We assessed AND ran 2 R code files for reproducibility (each in an isolated subprocess).\n#&gt; -  2 files appear runnable so far (parses, inputs resolve, placeable in the run order).\n#&gt; -  2 of 2 scripts ran without error when executed.\n#&gt; -  5 installable dependencies detected.\n#&gt; - 39 statistics stored from the extracted output; 11 of 11 reported tests matched (100%).</code></pre></div></div><p>The light is green: every script ran without an error, and every result reported in the manuscript was among the results the code produced when it ran. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_good$table</code> lists each script and what happened when it was run:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good$table[, c(\"file_name\", \"outcome\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;                 file_name outcome\n#&gt; analysis.qmd analysis.qmd  ran_ok\n#&gt; clean_data.R clean_data.R  ran_ok</code></pre></div></div><p><code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">clean_data.R</code> turns the raw data file into the processed data file, and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">analysis.qmd</code> is the manuscript, whose code chunks contain the analysis. The repository also contains <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">renv/activate.R</code>, a script the <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">renv</code> package adds to a project to set up its package library. The module does not check the contents of this folder, because it knows it is not part of the analysis.</p><p><code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_good$match_table</code> shows, for each result reported in the paper, whether it was found in the output of the code, and in which analysis:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_good$match_table[, c(\"reported\", \"found\", \"confidence\", \"analysis\")] |&gt;\n  knitr::kable()</code></pre><div class=\"cell-output-display\"><div style=\"max-width: 100%; overflow-x: auto;\"><table style=\"border-collapse: collapse; font-size: 0.85em; margin: 1em 0px; max-width: 100%; table-layout: auto; width: auto;\"><thead><tr><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">reported</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">found</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">confidence</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">analysis</th></tr></thead><tbody><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=15.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=23</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.78</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">r=0.37 t=4.53 df=129 p=&lt;0.001</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Pearson's product-moment correlation</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=18.04 df=130 p=&lt;0.001</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Paired t-test</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohen's dz=1.58</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">d_z</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=7.77</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=8.13</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=-0.42 df=120.37 p=0.673</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Welch Two Sample t-test</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohen's d=-0.07</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">Cohens_d</td></tr></tbody></table></div></div></div></div><p>A result is not compared as single numbers, but as a whole: the <em>t</em>-value, the degrees of freedom, and the <em>p</em>-value of one test have to appear together in the output of one analysis. Any single number will sooner or later turn up somewhere in a large output by coincidence, but several numbers of one test appearing together in one analysis will not.</p><blockquote style=\"background: rgb(243, 249, 243); border-left: 4px solid rgb(76, 175, 80); margin: 1em 0px; padding: 4px 12px;\"><p><strong>Making your own results findable</strong></p><p>The module can only find a result if the code produces it while it runs, in a form the module recognises. In the good paper, every reported number is computed in a code chunk, and the text of the manuscript only rounds these values. A number that is computed only inside the text, by an inline R expression in Quarto or R Markdown, is not part of the code that is run, so it cannot be found.</p><p>The module recognises the results of test functions such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">t.test()</code> and <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">cor.test()</code>, of summaries such as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">sapply(stroop_data[, c(\"congruent\", \"incongruent\")], mean)</code>, and of effect sizes from the <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">effectsize</code> package, also when they are stored in a variable (<code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">ttest_result &lt;- t.test(...)</code>). A number computed by hand, such as a Cohen's <em>d</em> computed as <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mean(diff) / sd(diff)</code>, is found when the code prints it, but not when it is only stored in a variable.</p></blockquote><p>A green light means that the numbers in the paper follow from the shared code and data. It does not mean that the analysis was the right one to perform.</p><p>Now let's see what the module returns if we run it on the bad paper:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad &lt;- module_run(bad_paper, \"reproducibility_check\", execute = TRUE)\nmo_bad$traffic_light</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; [1] \"red\"</code></pre></div></div><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_bad$summary_text)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; \n#&gt; -  We assessed AND ran 1 R code file for reproducibility (each in an isolated subprocess).\n#&gt; -  1 file appears runnable so far (parses, inputs resolve, placeable in the run order).\n#&gt; -  0 of 1 script ran without error when executed.\n#&gt; -  3 installable dependencies detected.\n#&gt; - 10 statistics stored from the extracted output; 2 of 6 reported tests matched (33.3%).</code></pre></div></div><p>The light is red, because the analysis code stopped with an error:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$table[, c(\"file_name\", \"outcome\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;                 file_name outcome\n#&gt; analysis.qmd analysis.qmd errored</code></pre></div><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">cat(mo_bad$run_results$error)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt; ! in callr subprocess.\n#&gt; Caused by error in `eval(predvars, data, env)`:\n#&gt; ! object 'stroop_effect' not found</code></pre></div></div><p>The code compares the Stroop effect between the two years using a column <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">stroop_effect</code>, but no line of the code creates that column. The authors presumably created it in their R console while they worked, so the code ran on their own computer, but it cannot run for anyone else. This is one of the most common reasons shared code fails.</p><p>Before the code was run, the module also changed one line of it. <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">mo_bad$modifications</code> lists every change:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mods &lt;- mo_bad$modifications\nmods[mods$change_type == \"setwd_removed\", c(\"change_type\", \"detail\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;     change_type                                detail\n#&gt; 2 setwd_removed C:/Users/dlakens/Desktop/stroop_study</code></pre></div></div><p>The code starts with <code style=\"overflow-wrap: anywhere; white-space: pre-wrap;\">setwd(\"C:/Users/dlakens/Desktop/stroop_study\")</code>, which sets the folder R works in to a folder that only exists on the author's computer. The module skips this line, and reports that it did, because it would stop the code on any other computer.</p><p>Now the comparison between the paper and the output:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$match_table[, c(\"reported\", \"found\", \"confidence\", \"analysis\")] |&gt;\n  knitr::kable()</code></pre><div class=\"cell-output-display\"><div style=\"max-width: 100%; overflow-x: auto;\"><table style=\"border-collapse: collapse; font-size: 0.85em; margin: 1em 0px; max-width: 100%; table-layout: auto; width: auto;\"><thead><tr><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">reported</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">found</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">confidence</th><th style=\"border-bottom: 2px solid rgb(153, 153, 153); overflow-wrap: anywhere; padding: 4px 6px; text-align: left; word-break: break-word;\">analysis</th></tr></thead><tbody><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=18.04 df=130 p=0.25 Cohen's dz=0.25</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">t=-0.42 df=120.37 p=0.673</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=15.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">mean by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">SD=4.1</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">TRUE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">full</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">sd by group</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">M=23 SD=4.78</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr><tr><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">r=0.37</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">FALSE</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">none</td><td style=\"border-bottom: 1px solid rgb(221, 221, 221); overflow-wrap: anywhere; padding: 4px 6px; word-break: break-word;\">NA</td></tr></tbody></table></div></div></div><p>Only the mean and standard deviation of the congruent condition were found. Each of the other results is missing for a different reason:</p><ul><li><p><strong>The incongruent mean and standard deviation</strong> (<em>M</em> = 23.0, <em>SD</em> = 4.78) are not in the output. The output contains the statistics the code did compute:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">mo_bad$stat_output[[1]]$long[, c(\"analysis\", \"statistic\", \"value\")]</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;         analysis       statistic                value\n#&gt; 1  mean by group            mean     15.1102878787879\n#&gt; 2  mean by group            mean      22.080446969697\n#&gt; 3    sd by group              sd     4.08488216267072\n#&gt; 4    sd by group              sd       11.63934788467\n#&gt; 5  Paired t-test               t     6.77356838604279\n#&gt; 6  Paired t-test              df                  131\n#&gt; 7  Paired t-test               p 3.84360296105763e-10\n#&gt; 8  Paired t-test mean difference     6.97015909090909\n#&gt; 9  Paired t-test        conf.low     4.93450571703671\n#&gt; 10 Paired t-test       conf.high     9.00581246478147</code></pre></div></div><p>The incongruent mean is 22.08, with a standard deviation of 11.64. The reason is in the data. One participant has a reaction time of -99 in the incongruent condition:</p><div class=\"cell\"><pre class=\"r cell-code\" style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">bad_data &lt;- read.csv(\"https://raw.githubusercontent.com/Lakens/stroop_effect_paper_bad/main/stroop.csv\")\nsummary(bad_data$Incongruent)</code></pre><div class=\"cell-output cell-output-stdout\"><pre style=\"background: rgb(245, 245, 245); overflow-wrap: anywhere; padding: 8px; white-space: pre-wrap; word-break: break-word;\"><code style=\"overflow-wrap: anywhere;\">#&gt;    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. \n#&gt;  -99.00   19.27   22.64   22.08   26.10   35.13</code></pre></div></div><p>-99 is a code for a missing value, not a reaction time. The authors removed this participant before computing the results in their paper, but the code they shared does not, so it analyses -99 as if it were a reaction time.</p></li><li><p><strong>The paired <em>t</em>-test</strong>, <em>t</em>(130) = 18.04, is not found for the same reason: the shared code analyses all 132 participants, including the -99, and gets <em>t</em>(131) = 6.77. The reported <em>p</em> = .25 and Cohen's <em>d<sub>z</sub></em> = 0.25 would not have matched in any case, because neither is consistent with a <em>t</em>-value of 18.04 (the <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-stat-check.html\">StatCheck</a> and <a href=\"https://scienceverse.github.io/metacheck_book/chapters/mod-stat-effect-size.html\">Effect Sizes</a> modules flag both from the text alone).</p></li><li><p><strong>The correlation</strong>, <em>r</em> = 0.37, is reported, but no line of the code computes it.</p></li><li><p><strong>The comparison between the years</strong>, <em>t</em>(120.37) = -0.42, <em>p</em> = .673, has exactly the numbers the good paper reports, so it is probably correct. But the code stopped with an error before it reached this test, so it cannot be verified from what the authors shared.</p></li></ul><p>The three <em>p</em>-values about accuracy (<em>p</em> = .07, <em>p</em> = .34, and <em>p</em> = .000) are not in the table at all. The module only checks a <em>p</em>-value that is reported together with its test statistic. Had they been checked, they would not have been found either: the repository contains no accuracy data.</p><h2 id=\"open-for-feedback\">Open for feedback</h2><p>Making this software was a challenge. We have validated the code by running it on more than 3000 scientific papers, with hundreds of folders of data and code, across dozens of data repositories. But there will be bugs. Software this complex, that tries to process the almost infinite ways in which researchers can share data and code, is bound to run into bugs. When thousands of people try this out, for some it will fail on their very first try (while for many others, it will run fine). If you find a bug, please raise an issue on the Metacheck github page. You need to share the data or code files that lead to the problem with us, or we can't fix the problem. If you can't share the data and code, you can ask an AI agent to analyze the problem, which might be enough to solve it as well. If the tool lacks features you would like to have, let us know, and we will do our best to build them in.</p></div></div>","doi":"https://doi.org/10.59350/swn8y-zfe39","guid":"tag:blogger.com,1999:blog-987850932434001559.post-7242569431721523819","image":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_GSIpKoGu_2i2ynFqcw8eTQyu2yZS-ylVFzdohnxqoFyJ569VJojal3BOe9DeeHHwHE5nbY6W4cOe2HqSUP0F3UdzcmJLbUDGbE37oI2tTJZguF-vH3ikSJKstdtALtbP6f9JLoUbxbSyBEflMqonNaU_-wh92K_oMEJv7HZTJYddoVsmtksqGta318M/s72-c/metacheck-logo.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"kr36y-xp247","summary":"When authors share their data and analysis code, the idea is that anyone should be able to run that code on that data and get the results reported in the paper. But sharing data and code in a way that results are reproducible is difficult, and researchers have often not received training in how to share data and code.","tags":["Metacheck"],"title":"Automatic computational reproducibility checks with Metacheck","updated_at":1793431809,"url":"https://daniellakens.blogspot.com/2026/10/automatic-computational-reproducibility.html","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/04xfq0f34","name":"RWTH Aachen University"}],"contributor_roles":[],"family":"Hoyt","given":"Charles Tapley","url":"https://orcid.org/0000-0003-4423-4370"}],"blog":{"authors":null,"community_id":"da4ef2af-5fad-46b2-8195-d77db0141ad6","created":1716422400,"current_feed_url":null,"description":"Unraveling complex biology with biological knowledge graphs. Content licensed under CC BY 4.0.","doi":"https://doi.org/10.59350/cthoyt","favicon":"https://rogue-scholar.org/api/communities/da4ef2af-5fad-46b2-8195-d77db0141ad6/logo","feed_format":"application/atom+xml","feed_url":"https://cthoyt.com/feed.xml","filter":null,"generator":"Jekyll","home_page_url":"https://cthoyt.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"cthoyt","status":"active","subfield":"1312","title":"Biopragmatics","updated":1793374800,"use_api":null},"blog_name":"Biopragmatics","blog_slug":"cthoyt","content_html":"<p>This week saw the addition of the\n<a href=\"https://semantic.farm/metaregistry/loc.classschemes\">Library of Congress Class Schemes</a>\nregistry, an overhaul of the alignment workflow with the\n<a href=\"https://semantic.farm/metaregistry/zazuko\">Zazuko</a> registry, the addition of 18\nnew records, and finally the update of 222 records in the\n<a href=\"https://semantic.farm\">Semantic Farm</a> and the\n<a href=\"https://bioregistry.io\">Bioregistry</a>.</p>\n<h2 id=\"external-alignment\">External Alignment</h2>\n<p>The Semantic Farm/Bioregistry ingests content from 36 external resources both to\nreduce curation burden but also to increase its coverage of resources across a\nvariety of domains and disciplines.</p>\n<h3 id=\"adding-library-of-congress-classification-schemes\">Adding Library of Congress Classification Schemes</h3>\n<p>The United States Library of Congress (LOC) Classification Schemes covers\nvarious classification systems across the natural sciences, humanities, and\nlibrary sciences, such as the\n<a href=\"https://semantic.farm/mesh\">Medical Subject Headings (MeSH)</a>,\n<a href=\"https://semantic.farm/iconclass\">Iconclass</a>, and\n<a href=\"https://semantic.farm/ddc\">Dewey Decimal Classification (DDC)</a>. I implemented\nan alignment workflow that ingests its entries and semi-automatically maps them\nto Semantic Farm/Bioregistry records based on lexical matching of prefixes in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2156\">biopragmatics/bioregistry#2156</a>.</p>\n<p>Compared to other external registries, LOC Classification Schemes is information\npoor - it only contains prefixes and names for its records, whereas external\nregistries like Identifiers.org have higher minimum metadata standards. A\ncomparison of metadata standards across all 36 external registries is available\n<a href=\"https://semantic.farm/related\">here</a> and is automatically updated when new ones\n(like LOC) are added!</p>\n<h3 id=\"updating-zazuko\">Updating Zazuko</h3>\n<p><a href=\"https://zazuko.com\">Zazuko</a> is a company that builds semantic web technologies\nand solutions. It develops several of its own controlled vocabularies and\nontologies to support its work, and importantly hosts\n<a href=\"https://prefix.zazuko.com\">https://prefix.zazuko.com</a>, a unique frontend to many key semantic web\ncontrolled vocabularies and ontologies.</p>\n<p>I recently found that they host metadata about the resources they index that\nisn't available through its API, but rather through RDF files in N-tuples format\non their GitHub repository (e.g., for\n<a href=\"https://raw.githubusercontent.com/zazuko/rdf-vocabularies/refs/heads/master/ontologies/cube/meta.nt\">Cube schema</a>).\nTherefore, I updated the alignment workflow in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2144\">biopragmatics/bioregistry#2144</a>\nto parse key metadata such as names and descriptions. Given this new context, I\nwas motivated to curate the remaining information for dozens of these resources\nin order to meet the Semantic Farm/Bioregistry's minimum metadata standards for\nnew records.</p>\n<p>There are countless opportunities for ingesting new records from external\nrecords, which are perfect for new curators who are interested to get involved.\nIf that sounds like you, have a look at\n<a href=\"https://github.com/biopragmatics/bioregistry/blob/main/docs/curation-import-external.md\">this curation guide</a>.</p>\n<h2 id=\"new-records\">New Records</h2>\n<p>The Semantic Farm/Bioregistry enables the community to submit new records to\nbest cover their resources and resources they use. This week had two external\ncontributions that were accepted (with several under review):</p>\n<ul>\n<li><a href=\"https://semantic.farm/fairmap\">FAIR Mappings Schema (fairmap)</a> was\ncontributed by <a href=\"https://orcid.org/0000-0002-7356-1779\">Nico Matentzoglu</a> as\npart of the ongoing work of the\n<a href=\"https://mapping-commons.github.io/rda-fair-mappings/\">RDA FAIR Mappings Working Group</a>\nin\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2147\">biopragmatics/bioregistry#2147</a>.</li>\n<li><a href=\"https://semantic.farm/seipid\">Scholarly Entity International Persistent Identifier Infrastructure (seipid)</a>\nwas contributed by <a href=\"https://orcid.org/0000-0001-6939-2856\">Nasir Razzaq</a> on\nbehalf of his firm <a href=\"https://xrc.xpertno.com\">Xpertno Research Center</a> in\nPakistan in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2148\">biopragmatics/bioregistry#2148</a></li>\n</ul>\n<p>I contributed <a href=\"https://semantic.farm/xh11d\">XHTML Datatypes (xh11d)</a>, then\ncurated mappings from the LinkML core metamodel types to <code class=\"language-plaintext highlighter-rouge\">xh11d</code> in\n<a href=\"https://github.com/linkml/linkml-model/pull/289\">linkml/linkml-model#289</a>,\ngiving <a href=\"https://linkml.io\">LinkML</a> a better grounding to previously established\nsemantic web standards.</p>\n<p><a href=\"https://semantic.farm/udc\">Universal Decimal Classification (UDC)</a> was added in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2153\">biopragmatics/bioregistry#2153</a>\nin order to complete the mapping from Dublin Core Terms\n<a href=\"https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#section-4\">encoding schemes</a>\nto corresponding records in the Semantic Farm/Bioregistry. The other eight\nschemes listed already had corresponding records.</p>\n<p>The remaining new records were all ingested from\n<a href=\"https://semantic.farm/metaregistry/zazuko\">Zazuko</a> and appropriately enriched\nto meet minimum metadata requirements for the Semantic Farm/Bioregistry in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2144\">biopragmatics/bioregistry#2144</a>.</p>\n<table>\n<thead>\n<tr>\n<th>Prefix</th>\n<th>Name</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://semantic.farm/b59\">b59</a></td>\n<td>barnard59</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.meta\">cube.meta</a></td>\n<td>Cube Schema meta data extension</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.relation\">cube.relation</a></td>\n<td>Cube Schema relation vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cube.schema\">cube.schema</a></td>\n<td>Cube schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/duv\">duv</a></td>\n<td>Dataset Usage Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fairmap\">fairmap</a></td>\n<td>FAIR Mappings Schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.constant\">qudt.constant</a></td>\n<td>QUDT VOCAB Physical Constants Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.currency\">qudt.currency</a></td>\n<td>QUDT VOCAB Currency Units Release 3.0.0</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.dimensionvector\">qudt.dimensionvector</a></td>\n<td>QUDT VOCAB Dimension Vectors Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.discipline\">qudt.discipline</a></td>\n<td>QUDT Disciplines Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.prefix\">qudt.prefix</a></td>\n<td>QUDT VOCAB Decimal Prefixes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.quantitykind\">qudt.quantitykind</a></td>\n<td>QUDT Quantity Kind Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.sou\">qudt.sou</a></td>\n<td>QUDT VOCAB Systems of Units Release 3.1.10</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt.unit\">qudt.unit</a></td>\n<td>QUDT VOCAB Units of Measure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rr\">rr</a></td>\n<td>R2RML vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/seipid\">seipid</a></td>\n<td>Scholarly Entity International Persistent Identifier Infrastructure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/udc\">udc</a></td>\n<td>Universal Decimal Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xh11d\">xh11d</a></td>\n<td>XHTML Datatypes</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"updated-records\">Updated Records</h2>\n<p>There were 238 updates, which came from a combination of alignment to LOC Class\nSchemes, enrichment from metadata from Zazuko, and other updates ingested from\nexternal registries.</p>\n<p>Of those updates, only one was done as a stand-alone contribution. I updated the\nrecord for the\n<a href=\"https://semantic.farm/gainesville.core\">Gainesville Core Ontology</a> record in\n<a href=\"https://github.com/biopragmatics/bioregistry/issues/2152\">biopragmatics/bioregistry#2152</a>\nto ensure that it links to a downloadable OWL file in preparation for the\n<a href=\"https://nfdi4chem.de/event/5th-ontologies4chem-workshop/\">Ontologies4Chem</a>\nconference next week.</p>\n<table>\n<thead>\n<tr>\n<th>Updated Prefix</th>\n<th>Name</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><a href=\"https://semantic.farm/ac\">ac</a></td>\n<td>Activity Streams</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/acl\">acl</a></td>\n<td>Basic Access Control ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/afo\">afo</a></td>\n<td>Allotrope Merged Ontology Suite</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/agricola\">agricola</a></td>\n<td>Agricultural Online Access</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ahol\">ahol</a></td>\n<td>Animal Health Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/aio\">aio</a></td>\n<td>The Artificial Intelligence Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/apo\">APO</a></td>\n<td>Ascomycete phenotype ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/apollosv\">APOLLO_SV</a></td>\n<td>Apollo Structured Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/atc\">atc</a></td>\n<td>Anatomical Therapeutic Chemical Classification System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/atol\">atol</a></td>\n<td>Animal Trait Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bao\">bao</a></td>\n<td>BioAssay Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bcio\">bcio</a></td>\n<td>The Behaviour Change Intervention Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bervo\">BERVO</a></td>\n<td>Biological and Environmental Research Variable Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bibo\">bibo</a></td>\n<td>The Bibliographic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biodivthes\">biodivthes</a></td>\n<td>Biodiversity Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biolink\">biolink</a></td>\n<td>BioLink Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biomodels.teddy\">biomodels.teddy</a></td>\n<td>Terminology for Description of Dynamics</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/biotop\">biotop</a></td>\n<td>BioTop</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/birnlex\">birnlex</a></td>\n<td>Biomedical Informatics Research Network Lexicon</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/bko\">bko</a></td>\n<td>SBGN Bricks data and ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cc\">cc</a></td>\n<td>Creative Commons Rights Expression Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ccf\">ccf</a></td>\n<td>Human Reference Atlas Common Coordinate Framework Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cco\">cco</a></td>\n<td>Cell Cycle Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ccon\">ccon</a></td>\n<td>Cerrado Concepts Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cellosaurus\">cellosaurus</a></td>\n<td>Cellosaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cert\">cert</a></td>\n<td>The Cert Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chebi\">CHEBI</a></td>\n<td>Chemical Entities of Biological Interest</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chemfont.chemical\">chemfont.chemical</a></td>\n<td>ChemFOnt chemical</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chemrof\">ChEMROF</a></td>\n<td>Chemical Entity Materials and Reactions Ontological Framework</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chmo\">CHMO</a></td>\n<td>Chemical Methods Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/chr\">CHR</a></td>\n<td>Chromosome Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cidoc.crm\">cidoc.crm</a></td>\n<td>CIDOC Conceptual Reference Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cl\">CL</a></td>\n<td>Cell Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cmc.umg\">cmc.umg</a></td>\n<td>Cell Model Catalogue G\u00f6ttingen</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cmpo\">cmpo</a></td>\n<td>Cellular Microscopy Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cnt\">cnt</a></td>\n<td>Representing Content in RDF</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/covid19\">covid19</a></td>\n<td>SARS-CoV-2</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/cryoem\">cryoem</a></td>\n<td>Cryo Electron Microscopy ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/csp\">csp</a></td>\n<td>Computer Retrieval of Information on Science Projects Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/csvw\">csvw</a></td>\n<td>CSV on the Web Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ctcae\">ctcae</a></td>\n<td>Common Terminology Criteria for Adverse Events</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/datacite\">DataCite</a></td>\n<td>DataCite Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dbo\">dbo</a></td>\n<td>DBPedia Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dc\">dc</a></td>\n<td>Dublin Core Elements (1.1)</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcam\">dcam</a></td>\n<td>Dublin Core Metadata Initiative Abstract Model</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcat\">dcat</a></td>\n<td>Data Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcmitype\">dcmitype</a></td>\n<td>DCMI Type Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dcterms\">dcterms</a></td>\n<td>Dublin Core Metadata Initiative Terms</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ddc\">ddc</a></td>\n<td>Dewey Decimal Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ddi\">ddi</a></td>\n<td>Data Documentation Initiative Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dermo\">dermo</a></td>\n<td>Human Dermatological Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dicom\">dicom</a></td>\n<td>Digital Imaging and Communications in Medicine ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/doap\">doap</a></td>\n<td>Description of a Project</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/doid\">DOID</a></td>\n<td>Human Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dpo\">DPO</a></td>\n<td>Drosophila Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dqv\">dqv</a></td>\n<td>Data Quality Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dron\">DRON</a></td>\n<td>The Drug Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/dsw\">dsw</a></td>\n<td>Darwin Semantic Web Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/earl\">earl</a></td>\n<td>Evaluation and Report Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecg\">ecg</a></td>\n<td>Electrocardiogram Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecocore\">ECOCORE</a></td>\n<td>An ontology of core ecological entities</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecso\">ecso</a></td>\n<td>The Ecosystem Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ecto\">ECTO</a></td>\n<td>Environmental conditions, treatments and exposures ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/edda\">edda</a></td>\n<td>EDDA Study Designs Taxonomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/efo\">EFO</a></td>\n<td>Experimental Factor Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/envo\">ENVO</a></td>\n<td>Environment Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/envthes\">envthes</a></td>\n<td>Thesaurus for long-term ecological research, monitoring, experiments</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/eol\">eol</a></td>\n<td>Environment Ontology for Livestock</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/epso\">epso</a></td>\n<td>Epilepsy and Seizure Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/evorao\">evorao</a></td>\n<td>EVORA Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/exif\">exif</a></td>\n<td>Exif data description vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fabio\">fabio</a></td>\n<td>The FRBR-aligned Bibliographic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/faldo\">faldo</a></td>\n<td>Feature Annotation Location Description Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbbt\">FBbt</a></td>\n<td>Drosophila gross anatomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbcv\">FBcv</a></td>\n<td>FlyBase Controlled Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbdv\">FBdv</a></td>\n<td>Drosophila development</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fbsp\">FBSP</a></td>\n<td>Fly taxonomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/flopo\">FLOPO</a></td>\n<td>Flora Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fma\">FMA</a></td>\n<td>Foundational Model of Anatomy</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/foaf\">foaf</a></td>\n<td>Friend of a Friend</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/foodon\">FOODON</a></td>\n<td>The Food Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fplx\">fplx</a></td>\n<td>FamPlex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/frbr\">FRBR</a></td>\n<td>Functional Requirements for Bibliographic Records</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/fypo\">FYPO</a></td>\n<td>Fission Yeast Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gainesville.core\">gainesville.core</a></td>\n<td>Gainesville Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/galen\">galen</a></td>\n<td>GALEN</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geonames.ontology\">geonames.ontology</a></td>\n<td>GeoNames Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql\">geosparql</a></td>\n<td>GeoSPARQL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql.function\">geosparql.function</a></td>\n<td>GeoSPARQL Function</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/geosparql.rule\">geosparql.rule</a></td>\n<td>GeoSPARQL Rule</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gexo\">gexo</a></td>\n<td>Gene Expression Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gfo\">gfo</a></td>\n<td>General Formal Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gist\">gist</a></td>\n<td>gist ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/go\">GO</a></td>\n<td>Gene Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gpml\">gpml</a></td>\n<td>WikiPathways GPML Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gr\">gr</a></td>\n<td>GoodRelations</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gramene.growthstage\">GRO</a></td>\n<td>Gramene Growth Stage Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/grddl\">grddl</a></td>\n<td>Gleaning Resource Descriptions from Dialects of Languages</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/gs1\">gs1</a></td>\n<td>GS1 Web Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hcpcs\">hcpcs</a></td>\n<td>Healthcare Common Procedure Coding System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hgnc\">hgnc</a></td>\n<td>HUGO Gene Nomenclature Committee</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hl7\">hl7</a></td>\n<td>HL7 External Code System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hoip\">hoip</a></td>\n<td>Homeostasis imbalance process ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hp\">HP</a></td>\n<td>Human Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/hydra\">hydra</a></td>\n<td>The Hydra Core Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icaltzd\">icaltzd</a></td>\n<td>iCalendar with Time Zone</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd10cm\">icd10cm</a></td>\n<td>International Classification of Diseases, 10th Revision, Clinical Modification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd10pcs\">icd10pcs</a></td>\n<td>International Classification of Diseases, 10th Revision, Procedure Coding System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd9\">icd9</a></td>\n<td>International Classification of Diseases, 9th Revision</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icd9cm\">icd9cm</a></td>\n<td>International Classification of Diseases, 9th Revision, Clinical Modification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/icf\">icf</a></td>\n<td>International Classification of Functioning, Disability and Health</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/iconclass\">iconclass</a></td>\n<td>Iconclass Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/idocovid19\">idocovid19</a></td>\n<td>The COVID-19 Infectious Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/idoden\">idoden</a></td>\n<td>Dengue Fever Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/inbio\">inbio</a></td>\n<td>Invasion Biology Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/inchi\">inchi</a></td>\n<td>International Chemical Identifier</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/interlex\">interlex</a></td>\n<td>InterLex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/iobc\">iobc</a></td>\n<td>Interlinking Ontology for Biological Concepts</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ito\">ito</a></td>\n<td>Intelligence Task Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/jcrb\">jcrb</a></td>\n<td>Japanese Collection of Research Bioresources Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lbo\">lbo</a></td>\n<td>Livestock Breed Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ldp\">ldp</a></td>\n<td>Linked Data Platform Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/legacy.capcldb\">legacy.capcldb</a></td>\n<td>Prostate Cancer Cell Line Database</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lexvo.ontology\">lexvo.ontology</a></td>\n<td>Lexvo Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/loc.classschemes\">loc.classschemes</a></td>\n<td>Library of Congress Classification Schemes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/locn\">locn</a></td>\n<td>ISA Programme Location Core Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/log\">log</a></td>\n<td>SWAP Logic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/loinc\">loinc</a></td>\n<td>Logical Observation Identifiers Names and Codes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/lpt\">lpt</a></td>\n<td>Livestock Product Trait Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/m4i\">m4i</a></td>\n<td>Metadata4Ing</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/medlineplus\">medlineplus</a></td>\n<td>MedlinePlus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mesh\">mesh</a></td>\n<td>Medical Subject Headings</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/metabobank\">metabobank</a></td>\n<td>MetaboBank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/metpo\">METPO</a></td>\n<td>Microbial Ecophysiological Trait and Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mixs\">MIXS</a></td>\n<td>Minimum Information about any (x) Sequence</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mod\">MOD</a></td>\n<td>PSI-MOD Protein Modifications Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/modsci\">modsci</a></td>\n<td>Modern Science Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/molsim\">MOLSIM</a></td>\n<td>Molecular Simulation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mosaic\">mosaic</a></td>\n<td>MOSAiC Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mro\">MRO</a></td>\n<td>MHC Restriction Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/msc\">msc</a></td>\n<td>Mathematics Subject Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/mwo\">mwo</a></td>\n<td>NFDI MatWerk Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nando\">nando</a></td>\n<td>Nanbyo Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nemo2\">nemo2</a></td>\n<td>Neural ElectroMagnetic Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nexus\">nexus</a></td>\n<td>NeXus Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nif.cell\">NIF_CELL</a></td>\n<td>NIF Cell</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/nlm\">nlm</a></td>\n<td>National Library of Medicine Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/npo\">npo</a></td>\n<td>NanoParticle Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oa\">oa</a></td>\n<td>Web Annotation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oba\">OBA</a></td>\n<td>Ontology of Biological Attributes</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/obi\">OBI</a></td>\n<td>Ontology for Biomedical Investigations</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/og\">og</a></td>\n<td>Open Graph protocol</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ogc.sf\">ogc.sf</a></td>\n<td>Open Geospatial Consortium Simple Features Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ohd\">OHD</a></td>\n<td>Oral Health and Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oidc\">oidc</a></td>\n<td>Solid OpenID Connect vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/om\">om</a></td>\n<td>Ontology of units of Measure</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omim\">omim</a></td>\n<td>Online Mendelian Inheritance in Man</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omo\">OMO</a></td>\n<td>OBO Metadata Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/omrse\">OMRSE</a></td>\n<td>Ontology for Modeling and Representation of Social Entities</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/oostt\">OOSTT</a></td>\n<td>Ontology of Organizational Structures of Trauma centers and Trauma systems</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/opb\">opb</a></td>\n<td>Ontology of Physics for Biology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/org\">org</a></td>\n<td>Core organization ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/orphanet.ordo\">orphanet.ordo</a></td>\n<td>Orphanet Rare Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/orth\">orth</a></td>\n<td>Orthology Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/owl\">owl</a></td>\n<td>Web Ontology Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/panet\">panet</a></td>\n<td>Photon and Neutron Experimental Techniques Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/pato\">PATO</a></td>\n<td>Phenotype And Trait Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/phenx\">phenx</a></td>\n<td>PhenX Toolkit</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/phipo\">PHIPO</a></td>\n<td>Pathogen Host Interaction Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/plos\">plos</a></td>\n<td>PLOS Thesaurus</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/prefer\">PREFER</a></td>\n<td>Precision Fermentation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/prov\">prov</a></td>\n<td>PROV Namespace</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qb\">qb</a></td>\n<td>The data cube vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/qudt\">qudt</a></td>\n<td>Quantities, Units, Dimensions, and Types Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/radlex\">radlex</a></td>\n<td>RSNA Informatics RadLex</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rcb\">rcb</a></td>\n<td>RIKEN Bioresource Center Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdf\">rdf</a></td>\n<td>Resource Description Framework</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdfa\">rdfa</a></td>\n<td>RDFa Vocabulary for Term and Prefix Assignment, and for Processor Graph Reporting</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rdfs\">rdfs</a></td>\n<td>RDF Schema</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/reproduceme\">reproduceme</a></td>\n<td>REPRODUCE-ME Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/reto\">reto</a></td>\n<td>Regulation of Transcription Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rexo\">rexo</a></td>\n<td>Regulation of Gene Expression Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ro\">RO</a></td>\n<td>Relation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/roleo\">RoleO</a></td>\n<td>Role Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ror\">ror</a></td>\n<td>Research Organization Registry</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rrid\">rrid</a></td>\n<td>Research Resource Identification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/rxnorm\">rxnorm</a></td>\n<td>RxNorm</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/salmon\">salmon</a></td>\n<td>Salmon Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/saref.ehaw\">saref.ehaw</a></td>\n<td>SAREF4EHAW: an extension of SAREF for eHealth Ageing Well domain</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sasap\">sasap</a></td>\n<td>The State of Alaska's Salmon and People Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/schema\">schema</a></td>\n<td>Schema.org</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sd\">sd</a></td>\n<td>SPARQL 1.1 Service Description</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sdmx\">sdmx</a></td>\n<td>SDMX-RDF vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sh\">sh</a></td>\n<td>Shapes Constraint Language</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/shex\">shex</a></td>\n<td>Shape Expression Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/shsh\">shsh</a></td>\n<td>SHACL in SHACL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sioc.core\">sioc.core</a></td>\n<td>Semantically-Interlinked Online Communities Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/skos\">skos</a></td>\n<td>Simple Knowledge Organization System</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/skosxl\">skosxl</a></td>\n<td>Simple Knowledge Organization System eXtension for Labels</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/smiles\">smiles</a></td>\n<td>Simplified molecular-input line-entry system</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/solid\">solid</a></td>\n<td>Solid Terms</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sosa\">sosa</a></td>\n<td>Sensor, Observation, Sample, and Actuator Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ssn\">ssn</a></td>\n<td>Semantic Sensor Network Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sstim\">sstim</a></td>\n<td>Sensory Stimulation Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/stemmcellbank\">stemmcellbank</a></td>\n<td>CReM iPSC Catalog</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/sty\">sty</a></td>\n<td>UMLS Semantic Types Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/suzhou.cell\">suzhou.cell</a></td>\n<td>Suzhou Research Institute Cell Bank</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/symp\">SYMP</a></td>\n<td>Symptom Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/tib.bk\">tib.bk</a></td>\n<td>Basic Classification</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/time\">time</a></td>\n<td>Time Ontology in OWL</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/ubigene\">ubigene</a></td>\n<td>UbiGene</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uniprot\">uniprot</a></td>\n<td>UniProt Protein</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uniprot.core\">uniprot.core</a></td>\n<td>Uniprot Core Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/uo\">UO</a></td>\n<td>Units of measurement ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/upheno\">UPHENO</a></td>\n<td>Unified Phenotype Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/valuesets\">valuesets</a></td>\n<td>Value Sets</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vandf\">vandf</a></td>\n<td>Veterans Administration National Drug File</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vann\">vann</a></td>\n<td>A vocabulary for annotating vocabulary descriptions</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vcard\">vcard</a></td>\n<td>Virtual Contact File</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vido\">vido</a></td>\n<td>Virus Infectious Disease Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vivo\">vivo</a></td>\n<td>VIVO Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.gene\">vmh.gene</a></td>\n<td>Virtual Metabolic Human gene</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.metabolite\">vmh.metabolite</a></td>\n<td>Virtual Metabolic Human metabolite</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vmh.reaction\">vmh.reaction</a></td>\n<td>Virtual Metabolic Human reaction</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vo\">VO</a></td>\n<td>Vaccine Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/void\">void</a></td>\n<td>Vocabulary of Interlinked Datasets</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vs\">vs</a></td>\n<td>SemWeb Vocab Status ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vso\">vso</a></td>\n<td>Vital Sign Ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/vt\">VT</a></td>\n<td>Vertebrate trait ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wbphenotype\">WBPhenotype</a></td>\n<td>C. elegans phenotype</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wdrs\">wdrs</a></td>\n<td>Protocol for Web Description Resources (POWDER): POWDER-S Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/wgs84\">wgs84</a></td>\n<td>WGS84 Geo Positioning</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xco\">XCO</a></td>\n<td>Experimental condition ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xhv\">xhv</a></td>\n<td>XHTML Vocabulary</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xkos\">xkos</a></td>\n<td>An SKOS extension for representing statistical classifications</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/xsd\">xsd</a></td>\n<td>XML Schema Definition</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/zfa\">ZFA</a></td>\n<td>Zebrafish anatomy and development ontology</td>\n</tr>\n<tr>\n<td><a href=\"https://semantic.farm/zfs\">ZFS</a></td>\n<td>Zebrafish developmental stages ontology</td>\n</tr>\n</tbody>\n</table>","doi":"https://doi.org/10.59350/mcm9w-28142","guid":"https://cthoyt.com/2026/10/30/semantic-farm-updates","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1793318400,"rid":"k6xmf-5xw84","summary":"This week saw the addition of the Library of Congress Class Schemes registry, an overhaul of the alignment workflow with the Zazuko registry, the addition of 18 new records, and finally the update of 222 records in the Semantic Farm and the Bioregistry.","tags":["NFDI","NFDI4Chem","Bioregistry","Semantic Farm"],"title":"Semantic Farm and Bioregistry Updates - October 30th, 2026","updated_at":1793431807,"url":"https://cthoyt.com/2026/10/30/semantic-farm-updates.html","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17115\">\n<p>In an earlier post, <a href=\"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17041\">I searched</a> for small C-C-C angles, finding one example that was also accompanied by an apparently exceptionally long C-C bond (2.18\u00c5). But this arose from highly unusual bonding giving rise not to a single bond order but one closer to one half! How long can a &#8220;normal&#8221; <em>(i.e</em> single) C-C bond get, a question which has long fascinated chemists.</p>\n<p><!--more--></p>\n<p>A naive search of the CSD is not as straightforward as it seems. Using the simple sub-structure R<sub>3</sub>C-CR<sub>3</sub>\u00a0as the search query gives LIRPEI, DOI:\u00a0<a href=\"https://doi.org/10.5517/CCQ043Y\">10.5517/CCQ043Y</a><span id=\"cite_ITEM-17115-0\" name=\"citation\"><a href=\"#ITEM-17115-0\">[1]</a></span> an apparently unexceptional molecule with a very exceptional C-C distance of 1.87\u00c5. With long bonds one has to be ultra-careful to look at the crystallographic analysis before drawing any conclusions. One class of molecule where this has been done by many groups is the system shown below (red = long bond), with 47 entries and for which\u00a0the longest C-C bond emerges with the value of 1.79\u00c5<span id=\"cite_ITEM-17115-1\" name=\"citation\"><a href=\"#ITEM-17115-1\">[2]</a></span></p>\n<p>&nbsp;</p>\n<p><a href=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg\"><img decoding=\"async\" class=\"aligncenter size-large wp-image-17116\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg\" alt=\"long-bonds\" width=\"200\" /></a></p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-17117\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-1024x757.jpg\" alt=\"long-cc\" width=\"450\" height=\"333\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-1024x757.jpg 1024w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-300x222.jpg 300w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-cc-768x568.jpg 768w\" sizes=\"auto, (max-width: 450px) 100vw, 450px\" /></p>\n<p>You can view this structure at DOI:\u00a0<a href=\"https://doi.org/10.5517/CCS0R6Q\">10.5517/CCS0R6Q</a><span id=\"cite_ITEM-17115-2\" name=\"citation\"><a href=\"#ITEM-17115-2\">[3]</a></span> and the authors go to some pains to assure us that it is still a closed shell single bond, and not a biradical. That does seem to be the current record holder, but of course we are only talking here about molecules whose crystal structure has been determined.</p>\n<p>I will end with an open question; how SHORT could a &#8220;single&#8221; C-C bond get? Here, a search of the CSD is entirely dominated by crystallographic artefacts, and I am not sure what the value might be.\u00a0</p>\n<h2>References</h2>\n    <ol class=\"kcite-bibliography csl-bib-body\"><li id=\"ITEM-17115-0\">Zhang, Jian., Chen, Shumei., Valle, H.., Wong, M.., Austria, C.., Cruz, M.., and Bu, Xianhui., \"CCDC 655529: Experimental Crystal Structure Determination\", 2008. <a href=\"https://doi.org/10.5517/ccq043y\">https://doi.org/10.5517/ccq043y</a>\n\n</li>\n<li id=\"ITEM-17115-1\">T. Takeda, H. Kawai, R. Herges, E. Mucke, Y. Sawai, K. Murakoshi, K. Fujiwara, and T. Suzuki, \"Negligible diradical character for the ultralong C\u2013C bond in 1,1,2,2-tetraarylpyracene derivatives at room temperature\", <i>Tetrahedron Letters</i>, vol. 50, pp. 3693-3697, 2009. <a href=\"https://doi.org/10.1016/j.tetlet.2009.03.202\">https://doi.org/10.1016/j.tetlet.2009.03.202</a>\n\n</li>\n<li id=\"ITEM-17115-2\">Takeda, T.., Kawai, H.., Herges, R.., Mucke, E.., Sawai, Y.., Murakoshi, K.., Fujiwara, K.., and Suzuki, T.., \"CCDC 715703: Experimental Crystal Structure Determination\", 2010. <a href=\"https://doi.org/10.5517/ccs0r6q\">https://doi.org/10.5517/ccs0r6q</a>\n\n</li>\n</ol>\n\n</div> <!-- kcite-section 17115 -->","doi":"https://doi.org/10.59350/wrgzm-zpe42","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17115","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/long-bonds.svg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1480464000,"reference":[{"id":"https://doi.org/10.5517/ccq043y","unstructured":"Zhang, J., Chen, S., Valle, H., Wong, M., Austria, C., Cruz, M., &amp; Bu, X. (2008). <i>CCDC 655529: Experimental Crystal Structure Determination</i> [Dataset]. Cambridge Crystallographic Data Centre."},{"id":"https://doi.org/10.1016/j.tetlet.2009.03.202","unstructured":"Takeda, T., Kawai, H., Herges, R., Mucke, E., Sawai, Y., Murakoshi, K., Fujiwara, K., &amp; Suzuki, T. (2009). Negligible diradical character for the ultralong C\u2013C bond in 1,1,2,2-tetraarylpyracene derivatives at room temperature. <i>Tetrahedron Letters</i>, <i>50</i>(26), 3693\u20133697."},{"id":"https://doi.org/10.5517/ccs0r6q","unstructured":"Takeda, T., Kawai, H., Herges, R., Mucke, E., Sawai, Y., Murakoshi, K., Fujiwara, K., &amp; Suzuki, T. (2010). <i>CCDC 715703: Experimental Crystal Structure Determination</i> [Dataset]. Cambridge Crystallographic Data Centre."}],"rid":"mkxr8-kcr84","summary":"In an earlier post, I searched for small C-C-C angles, finding one example that was also accompanied by an apparently exceptionally long C-C bond (2.18\u00c5). But this arose from highly unusual bonding giving rise not to a single bond order but one closer to one half!","tags":["Crystal_structure_mining","Interesting Chemistry","Aviation","Bond Order","Carbon\u2013carbon Bond"],"title":"Long C-C bonds.","updated_at":1793398736,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17115","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17107\">\n<p>Another conference, a <a href=\"http://www.opencon2016.org/opencon_2016_cambridge\">Cambridge satellite</a> meeting of <a href=\"http://www.opencon2016.org/updates\">OpenCon</a>, and I quote here its mission: &#8220;OpenCon is a platform for the next generation to learn about Open Access, Open Education, and Open Data, develop critical skills, and catalyze action toward a more open system of research and education&#8221; targeted at\u00a0students and early career academic professionals. But they do allow a few &#8220;late career&#8221; professionals to attend as well!</p>\n<p><!--more--></p>\n<p>I could only attend the morning session, for which the keynote speaker was Erin McKiernan<a href=\"http://orcid.org/0000-0002-9430-5221\"><img loading=\"lazy\" decoding=\"async\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/orcid.png\" alt=\"orcid\" width=\"16\" height=\"16\" /></a> The presentation was entitled\u00a0<em>How open science helps researchers succeed</em><strong><em>,\u00a0</em></strong>presented as an exploration of an article written by Erin and colleagues with the same name and published<em>\u00a0</em>in\u00a0eLife<span id=\"cite_ITEM-17107-0\" name=\"citation\"><a href=\"#ITEM-17107-0\">[1]</a></span> Erin has created a support page at <a href=\"http://whyopenresearch.org\">http://whyopenresearch.org</a>\u00a0to augment the presentation and it&#8217;s well worth a visit.</p>\n<p>One striking point made was the assertion that\u00a0<em>Open publications get more citations!</em>\u00a0<br />\n <img decoding=\"async\" src=\"https://elife-publishing-cdn.s3.amazonaws.com/16800/elife-16800-fig1-v2.jpg\" alt=\"Open publications get more citations\" width=\"450\" /></p>\n<p>As\u00a0with many metrics of the impacts of the science publication processes, a citation itself lacks the context of why it was made (<a href=\"http://www.ch.imperial.ac.uk/rzepa/blog/?p=14527\">see this post</a> for further discussion), but the expectation is that a citation is &#8220;good&#8221;. From my perspective as a chemist, I did wonder why molecular science was missing from the graphic above.\u00a0Do open chemistry publications also get more citations?</p>\n<p>Which brings me to another point made during the talk, the increasingly controversial aspect of (journal) impact factors and the pressure placed on early career researchers to publish only in those with &#8220;high&#8221; impact factors, and for their careers to be assessed at least in part based on these and the anticipated &#8220;h-index&#8221;. The audience was indeed encouraged to go visit\u00a0<a href=\"http://www.ascb.org/Dora/\">http://www.ascb.org/Dora/</a> (Declaration on Research Assessment, or\u00a0<em>Putting science into the assessment of research</em>). Have you signed it yet?</p>\n<p>Another manifestation of the modern trend to analyse impact metrics is the site\u00a0<a href=\"http://impactstory.org/\">Impactstory.org</a>. This is a scripted resource that starts from your ORCID identifier and (optionally) your Twitter account (yes, apparently Tweets matter!) to derive a more complex alternative metric of a individual&#8217;s impacts. I had not tried this one before and so I submitted my ORCID and my Twitter account, and watched as the system went off to <a href=\"http://orcid.scopusfeedback.com\">http://orcid.scopusfeedback.com</a>\u00a0(Scopus is an Elsevier product) to attempt to create my profile. It ground for quite a while, reporting initially that I had no publications! This was followed by an unexpected error; I did not get my impact back! But this experiment served to highlight one aspect that was discussed at the meeting; data and other research objects. The graphic above refers only to the citation of journal articles, it does not yet include the citation of data. However ORCID <strong>DOES</strong> include data and research objects as <strong>works</strong>. \u00a0And because the granularity of my data and research objects is very fine (one molecule = one work), I have quite a few. In fact ~200,000! ORCID gets to about 8000 before it gives up. I suspect\u00a0http://orcid.scopusfeedback.com queries ORCID, gets back ~8000 entries and crashes. No doubt the programmer tasked with\u00a0implementing this resource did not anticipate that any individual could accumulate 8000+ entries! Or probably factor in that the vast majority of these would of course not be journal articles but data. If the site gets back to me about the crash I experienced, I will update here.</p>\n<p>Simon Deakin was the next speaker with (open) data as the focus and the worries many researchers have in being scooped by others who have re-used your open data without proper attributions. The discussion teased out that if data is properly deposited, it will indeed have full associated metadata and in particular a date stamp that could help protect an author&#8217;s interests.</p>\n<p>It was really good to meet so many early career researchers who espouse the open ethos. Perhaps, in 20 years time, \u00a0another graphic akin to the one above might demonstrate that open researchers get more promotions!</p>\n<h2>References</h2>\n    <ol class=\"kcite-bibliography csl-bib-body\"><li id=\"ITEM-17107-0\">E.C. McKiernan, P.E. Bourne, C.T. Brown, S. Buck, A. Kenall, J. Lin, D. McDougall, B.A. Nosek, K. Ram, C.K. Soderberg, J.R. Spies, K. Thaney, A. Updegrove, K.H. Woo, and T. Yarkoni, \"How open science helps researchers succeed\", <i>eLife</i>, vol. 5, 2016. <a href=\"https://doi.org/10.7554/elife.16800\">https://doi.org/10.7554/elife.16800</a>\n\n</li>\n</ol>\n\n</div> <!-- kcite-section 17107 -->","doi":"https://doi.org/10.59350/mrxjj-bj641","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17107","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/orcid.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1480032000,"reference":[{"id":"https://doi.org/10.7554/elife.16800","unstructured":"McKiernan, E. C., Bourne, P. E., Brown, C. T., Buck, S., Kenall, A., Lin, J., McDougall, D., Nosek, B. A., Ram, K., Soderberg, C. K., Spies, J. R., Thaney, K., Updegrove, A., Woo, K. H., &amp; Yarkoni, T. (2016). How open science helps researchers succeed. <i>eLife</i>, <i>5</i>."}],"rid":"aw2r2-znp37","summary":"Another conference, a Cambridge satellite meeting of OpenCon, and I quote here its mission: \"OpenCon is a platform for the next generation to learn about Open Access, Open Education, and Open Data, develop critical skills, and catalyze action toward a more open system of research and education\" targeted at students and early career academic professionals.","tags":["Chemical IT","General","Academia","Author","Chemist"],"title":"OpenCon (2016)","updated_at":1793398732,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17107","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/041kmwe10","name":"Imperial College London"}],"contributor_roles":[],"family":"Rzepa","given":"Henry","url":"https://orcid.org/0000-0002-8635-8390"}],"blog":{"authors":[{"name":"Henry Rzepa","url":"https://orcid.org/0000-0002-8635-8390"}],"community_id":"8fb94c86-e95f-41cf-aac2-a2877ffc1b5f","created":1693094400,"current_feed_url":null,"description":"Chemistry with a twist","doi":"https://doi.org/10.59350/rzepa","favicon":"https://rogue-scholar.org/api/communities/8fb94c86-e95f-41cf-aac2-a2877ffc1b5f/logo","feed_format":"application/atom+xml","feed_url":"https://www.ch.ic.ac.uk/rzepa/blog/?feed=atom","filter":null,"generator":"WordPress","home_page_url":"https://www.ch.ic.ac.uk/rzepa/blog","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"rzepa","status":"active","subfield":"1606","title":"Henry Rzepa's Blog","updated":1793273213,"use_api":true},"blog_name":"Henry Rzepa's Blog","blog_slug":"rzepa","content_html":"<div class=\"kcite-section\" kcite-section-id=\"17089\">\n<p>Chloroform, often in the deuterated form CDCl<sub>3</sub>, is a very common solvent for NMR and other types of spectroscopy. Quantum mechanics\u00a0is increasingly used to calculate such spectra to aid assignment and the solvent is here normally simulated as a continuum rather than by explicit inclusion of one or more chloroform molecules. But what are the features of the hydrogen bonds that form from chloroform to other acceptors? Here I do a quick search for the common characteristics of such interactions.</p>\n<p><!--more--></p>\n<ol>\n<li>This first search (R &lt; 0.05, no errors, no disorder) is for interactions from the CH&#8230; O, and is a plot of that distance against the angle subtended at the oxygen.\n<p><img decoding=\"async\" class=\"aligncenter size-full wp-image-17090\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg\" alt=\"clcho-rt\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg 725w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt-300x201.jpg 300w\" sizes=\"(max-width: 725px) 100vw, 725px\" /></p>\n<p>Note that there are not that many crystalline examples. The &#8220;hotspot&#8221; is at a distance of ~2.3\u00c5, but real examples down to 1.9\u00c5 exist. The angle subtended at the oxygen is close to 120\u00b0 (the angle subtended at the hydrogen is always close to 180\u00b0). The plot below constrains the search to data collected below 140K to reduce the thermal noise in the measurements, with the hotspot shortening slightly to 2.2\u00c5.\u00a0<img decoding=\"async\" class=\"aligncenter size-full wp-image-17091\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140.jpg\" alt=\"clcho-140\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140.jpg 723w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-140-300x213.jpg 300w\" sizes=\"(max-width: 723px) 100vw, 723px\" /></p>\n</li>\n<li>The next search is for interactions to N rather than O (T &lt; 140K). There are rather fewer hits, but again with similar features.<img decoding=\"async\" class=\"aligncenter size-full wp-image-17094\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140.jpg\" alt=\"clchn-140\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140.jpg 719w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHN-140-300x187.jpg 300w\" sizes=\"(max-width: 719px) 100vw, 719px\" /></li>\n<li>Finally, an attempt to see if there is a correlation between the C-H length and the H&#8230;O length.\u00a0<img decoding=\"async\" class=\"aligncenter size-full wp-image-17095\" src=\"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO.jpg\" alt=\"ch-vs-co\" width=\"450\" srcset=\"https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO.jpg 723w, https://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/CH-vs-CO-300x218.jpg 300w\" sizes=\"(max-width: 723px) 100vw, 723px\" />\n<p>This has odd characteristics, which suggests that in most cases the C-H distance is not measured from the diffraction data but simply &#8220;idealised&#8221; (and which therefore renders this plot meaningless). Unless its been added recently, it is not possible to specify in the search how the hydrogen positions have been refined, if at all and hence to restrict the search only to those structures where the C-H distance is meaningful.</p>\n</li>\n</ol>\n<p>In the last ten years or so, great progress has been made in assigning experimental spectra with the help of quantum calculations. This is true of chemical shifts in NMR, but especially so for chiroptical measurements such as ORP, ECD and VCD. Given that explicit hydrogen bonds can introduce anisotropy into the otherwise isotropic solvent continuum, it might be worth including perhaps one chloroform molecule into these calculations, especially if the \u00a0CH&#8230;O distance is &lt;2\u00c5 (which suggests it is fairly strong). If nothing else, chloroform is rather big and might exert effects based on dispersion attractions or steric repulsions as well as the H-bonding.</p>\n<!-- kcite active, but no citations found -->\n</div> <!-- kcite-section 17089 -->","doi":"https://doi.org/10.59350/ayyem-vdb86","guid":"http://www.ch.imperial.ac.uk/rzepa/blog/?p=17089","image":"http://www.ch.ic.ac.uk/rzepa/blog/wp-content/uploads/2016/11/ClCHO-rt.jpg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1479081600,"rid":"phk9e-eeb84","summary":"Chloroform, often in the deuterated form CDCl3, is a very common solvent for NMR and other types of spectroscopy. Quantum mechanics is increasingly used to calculate such spectra to aid assignment and the solvent is here normally simulated as a continuum rather than by explicit inclusion of one or more chloroform molecules.","tags":["Crystal_structure_mining","Chemical Shifts","Chloroform","Deuterated Chloroform","Deuterated Methanol"],"title":"Hydrogen bonding to chloroform.","updated_at":1793398728,"url":"https://www.ch.ic.ac.uk/rzepa/blog/?p=17089","version":"v1"}],"out_of":57969,"page":1,"per_page":10,"total-results":57969}
