{"found":51275,"hits":[{"document":{"authors":[{"contributor_roles":[],"name":"Atarraya"}],"blog":{"authors":null,"community_id":"f17066f5-0dbf-48d0-a413-b22a79861a94","created":1723852800,"current_feed_url":null,"description":"Nuestras historias","doi":"https://doi.org/10.59350/atarraya","favicon":"https://rogue-scholar.org/api/communities/f17066f5-0dbf-48d0-a413-b22a79861a94/logo","feed_format":"application/atom+xml","feed_url":"https://blogatarraya.com/feed/atom/","filter":null,"generator":"Other","home_page_url":"https://blogatarraya.com","issn":null,"language":"spa","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"atarraya","status":"active","subfield":"1202","title":"BLOG ATARRAYA","updated":1784231581,"use_api":true},"blog_name":"BLOG ATARRAYA","blog_slug":"atarraya","content_html":"<div></div>","doi":"https://doi.org/10.59350/fhdsa-t7984","guid":"https://blogatarraya.com/?p=7142","language":"es","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784505600,"rid":"ck3z8-3t470","tags":["Historia Del Movimiento Obrero","Historia Pol\u00edtica","N\u00famero 31"],"title":"Las huelgas de oto\u00f1o de 1948 en el M\u00e9xico de Miguel Alem\u00e1n Vald\u00e9s","updated_at":1785096133,"url":"https://blogatarraya.com/2026/07/20/las-huelgas-de-otono-de-1948-en-el-mexico-de-miguel-aleman-valdes/","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that\ndo a great job. Last year and last week, I attended two technical <a href=\"https://www.inchi-trust.org/\">InChI</a> meetings, both with\n<a href=\"https://en.wikipedia.org/wiki/Organometallic_chemistry\">organometallic compounds</a> as one of the key topics. Thanks to\n<a href=\"https://bsky.app/profile/herreslab.bsky.social\">Sonja</a> (<a href=\"https://fed.brid.gy/bsky/herreslab.bsky.social\">Mastodon bridge</a>)\nand <a href=\"https://www.linkedin.com/in/gerd-blanke-b13115/\">Gerd</a> for the invitations. My role includes thinking about what all the\nwork on the InChI means for the <a href=\"http://cdk.github.io/\">Chemistry Development Kit</a>.</p>\n<p>Many things came up. One was testing of new InChI functionality for these organometallic compounds, particularly the stereochemistry.\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2007/08/02/molecules-in-wikipedia.html\">Wikipedia has many chemical compounds</a> and could\nbe a source, but <a href=\"https://chem-bla-ics.linkedchemistry.info/2022/11/12/wikidata-script-for-smiles-smarts-and.html\">so does Wikidata</a>.\nBoth use the SMILES, but not all SMILES captures all the chemistry we need. And the InChI software needs\n<a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#V3000\">an V3000 MDL Molfile</a>. Thanks to John and other CDK developers, there\nis good support for recent cheminformatics software, but I was not sure it had what I would need.</p>\n<p>This post is the first of a few related posts. This post is about converting SMILES from <a href=\"https://wikidata.org/\">Wikidata</a>\nto V3000 files. Take <a href=\"https://qlever.scholia.wiki/chemical/Q412415\">cisplatin</a>: it has four ligands around a platinum atom,\nall in a single plane:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/cisplatin.png\"/></p>\n<p>In this image, in red, is actually an annotation of how the ligands are oriented around the platinum. This is also reflected\nin the <em>isomeric SMILES</em> in Wikidata: <code class=\"language-plaintext highlighter-rouge\">Cl[Pt@SP1]([NH3])([NH3])Cl</code>.</p>\n<p>The following source code is written in <a href=\"https://chem-bla-ics.linkedchemistry.info/tag/groovy\">Groovy</a> which I have used for many\nyears because it is less verbose than Java. First, we set up our helper classes:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-smiles'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-silent'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-ctab'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-sdg'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.smiles.SmilesParser</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.silent.SilentChemObjectBuilder</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.io.SDFWriter</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.layout.StructureDiagramGenerator</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">javax.vecmath.Vector2d</span>\n\n<span class=\"n\">builder</span> <span class=\"o\">=</span> <span class=\"n\">SilentChemObjectBuilder</span><span class=\"o\">.</span><span class=\"na\">getInstance</span><span class=\"o\">()</span>\n<span class=\"n\">sp</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SmilesParser</span><span class=\"o\">(</span><span class=\"n\">builder</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">StructureDiagramGenerator</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>With some extra code, I can actually get many compounds from Wikidata to convert to v3000 with a SAPRQL (as I have done\nlast year with CXSMILES and polymers, unpublished), but let's go with a single example:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">smiles</span> <span class=\"o\">=</span> <span class=\"s2\">\"Cl[Pt@SP1]([NH3])([NH3])Cl\"</span>\n<span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"s2\">\"cisplatin\"</span>\n<span class=\"n\">wdItem</span> <span class=\"o\">=</span> <span class=\"s2\">\"Q412415\"</span>\n</code></pre></div></div>\n<p>I can parse the SMILES and generated 2D coordinates with (which is also the approach by <a href=\"https://www.simolecule.com/cdkdepict/depict/bow/svg?smi=Cl%5BPt%40SP1%5D(%5BNH3%5D)(%5BNH3%5D)Cl&amp;zoom=2.0&amp;annotate=cip\">CDK Depict</a>\nwhich I used for the above 2D diagram of cisplatin):</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sp</span><span class=\"o\">.</span><span class=\"na\">parseSmiles</span><span class=\"o\">(</span><span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">setMolecule</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">generateCoordinates</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">Vector2d</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"mi\">1</span><span class=\"o\">));</span>\n<span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">getMolecule</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>If you have more than one molfile, they can be combined into a <a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#SDF\">SD file</a>,\nto which additional properties can be added:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setTitle</span><span class=\"o\">(</span><span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_SYNONYM\"</span><span class=\"o\">,</span> <span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_COMMENT\"</span><span class=\"o\">,</span> <span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_DATASOURCE_REGID\"</span><span class=\"o\">,</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_SUBSTANCE_URL\"</span><span class=\"o\">,</span> <span class=\"s2\">\"https://qlever.scholia.wiki/\"</span> <span class=\"o\">+</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n</code></pre></div></div>\n<p>And then generate the actual SD file with:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">FileWriter</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">File</span><span class=\"o\">(</span><span class=\"s2\">\"demo.sdf\"</span><span class=\"o\">))</span>\n<span class=\"n\">SDFWriter</span> <span class=\"n\">sdfWriter</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SDFWriter</span><span class=\"o\">(</span><span class=\"n\">writer</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">getSetting</span><span class=\"o\">(</span><span class=\"n\">SDFWriter</span><span class=\"o\">.</span><span class=\"na\">OptAlwaysV3000</span><span class=\"o\">).</span><span class=\"na\">setSetting</span><span class=\"o\">(</span><span class=\"s2\">\"true\"</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">write</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n<span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>We then get this v3000 file:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>cisplatin\n  CDK     07262618042D\n\n  0  0  0     0  0            999 V3000\nM  V30 BEGIN CTAB\nM  V30 COUNTS 5 4 0 0 0\nM  V30 BEGIN ATOM\nM  V30 1 Cl -1.29904 2.25 0 0\nM  V30 2 Pt 0 1.5 0 0\nM  V30 3 N 1.29904 2.25 0 0 VAL=4\nM  V30 4 N 1.29904 0.75 0 0 VAL=4\nM  V30 5 Cl -1.29904 0.75 0 0\nM  V30 END ATOM\nM  V30 BEGIN BOND\nM  V30 1 1 2 1 CFG=3\nM  V30 2 1 2 3 CFG=3\nM  V30 3 1 2 4 CFG=1\nM  V30 4 1 2 5 CFG=1\nM  V30 END BOND\nM  V30 END CTAB\nM  END\n&gt; &lt;PUBCHEM_SUBSTANCE_COMMENT&gt;\nCl[Pt@SP1]([NH3])([NH3])Cl\n\n&gt; &lt;PUBCHEM_EXT_DATASOURCE_REGID&gt;\nQ412415\n\n&gt; &lt;PUBCHEM_SUBSTANCE_SYNONYM&gt;\ncisplatin\n\n&gt; &lt;PUBCHEM_EXT_SUBSTANCE_URL&gt;\nhttps://qlever.scholia.wiki/Q412415\n\n$$$$\n</code></pre></div></div>\n<p>I can copy/paste the resulting v3000 content to the <a href=\"https://iupac-inchi.github.io/InChI-Web-Demo/\">InChI Web Demo</a> to calculate the\nStandard InChI:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1S/2ClH.2H3N.Pt/h2*1H;2*1H3;/q;;;;+2/p-2\n</code></pre></div></div>\n<p>And this is what the two technical meetings I attended were about: <em>molecular inorganics</em>. The above InChI does not feel right,\nand certainly lost the connectivity of the ligands with the platinum. However, if we add the beta option <code class=\"language-plaintext highlighter-rouge\">-MolecularInorganics</code>,\nthen we get this InChI (where the <code class=\"language-plaintext highlighter-rouge\">B</code> in <code class=\"language-plaintext highlighter-rouge\">InChI=1B</code> reflects the beta state of this feature):</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1B/Cl2H6N2Pt/c1-5(2,3)4/h3-4H3\n</code></pre></div></div>\n<p>However, this beta version does not distinguish cisplatin from <a href=\"https://qlever.scholia.wiki/chemical/Q25403157\">transplatin</a>. For that,\nwe need to dive into how to represent the stereochemistry of these inorganics first.</p>","doi":"https://doi.org/10.59350/yhf27-fp921","funding_references":[{"awardTitle":"FAIR4ChemNL: Accelerating the adoption of universal data standards in chemistry","awardUri":"https://doi.org/10.61686/xvyqv45374","funderIdentifier":"https://ror.org/04jsz6e67","funderIdentifierType":"ROR","funderName":"Dutch Research Council"}],"guid":"https://doi.org/10.59350/yhf27-fp921","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1785024000,"rid":"vehf9-7z273","summary":"Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that do a great job. Last year and last week, I attended two technical InChI meetings, both with organometallic compounds as one of the key topics. Thanks to Sonja (Mastodon bridge) and Gerd for the invitations. My role includes thinking about what all the work on the InChI means for the Chemistry Development Kit.","tags":["Chemistry","Inchi","Wikidata","Smiles","Pubchem"],"title":"Molecular Inorganics: SMILES, MDL molfile v3000, and InChIs","updated_at":1785084975,"url":"https://chem-bla-ics.linkedchemistry.info/2026/07/26/inorganic-compounds-smiles-mdl-molfile-v3000-and-inchis.html","version":"v1"}},{"document":{"authors":[{"contributor_roles":[],"family":"Gilliam","given":"Eric"}],"blog":{"authors":[{"name":"Eric Gilliam"}],"community_id":"bde6b3e1-a527-4823-81b8-b803908bb948","created":1780876800,"current_feed_url":null,"description":"I want to help people start historically great labs. Operational histories on history's best R&D orgs.","doi":"https://doi.org/10.59350/freaktakes","favicon":"https://rogue-scholar.org/api/communities/bde6b3e1-a527-4823-81b8-b803908bb948/logo","feed_format":"application/rss+xml","feed_url":"https://www.freaktakes.com/feed","filter":null,"generator":"Substack","home_page_url":"https://www.freaktakes.com","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":null,"slug":"freaktakes","status":"active","subfield":"1207","title":"FreakTakes","updated":1784997250,"use_api":null},"blog_name":"FreakTakes","blog_slug":"freaktakes","content_html":"<p><span>A close reading of the early history of the Advanced Research Projects Agency (ARPA) \u2014 the ARIA-like agency in the US that funded the early internet and autonomous vehicles \u2014 yields a key lesson: exceptional projects were usually the result of exceptional contractors. World-changing ARPA successes like the</span><a href=\"https://www.freaktakes.com/p/the-third-university-of-cambridge\"><span> ARPAnet</span></a><span> and</span><a href=\"https://www.freaktakes.com/p/an-interview-with-chuck-thorpe-on\"><span> early autonomous vehicles</span></a><span> were the result of a common shape of R&amp;D org, one structured, incentivized, and staffed differently than typical academic labs or VC-funded startups. These orgs pursued exceptionally ambitious North Star technical visions, fueled by a mix of contracts and grants. We call orgs of this shape frontier research contractors (FRCs).</span></p><h2><strong><span>What makes an R&amp;D org an FRC?</span></strong></h2><p><span>FRCs pursue their technical visions by building technology to solve difficult real-world problems, using customer demand to guide their research direction. History shows us that FRCs can be exceptional platforms for ambitious, applied-minded scientists to move their field of R&amp;D forward. Two historical examples that inspire us include:</span></p><ul><li><p><strong><span>J.C.R. Licklider's early BBN computing team at Bolt, Beranek and Newman. </span></strong><span>Their technical vision was to build a world of interactive computing, which led them to implement the first version of the internet in the 1960s.</span></p></li><li><p><strong><span>Early Carnegie Mellon's autonomous vehicle team.</span></strong><span> Their technical vision of self-driving vehicles led them to successfully take a vehicle cross-country 98.5% autonomously in 1997.</span></p></li></ul><p><span>FRCs can be nonprofit or for-profit R&amp;D groups, with technical visions ranging from building individual tools to bootstrapping frontier labs into existence. What they all have in common is their commitment to fueling their ambitious technical work through a mix of contracts and grants.</span></p><h2>What is the FRC Launchpad?</h2><p><span>As government R&amp;D funders such as ARIA increasingly chase early ARPA-style outcomes, we need ambitious FRCs to do key portions of the work. That's why we created the Frontier Research Contractor Launchpad, an experimental programme in which FRC founders working in ARIA technical areas were given (1) \u00a3100k and (2) a year of operational + strategic guidance in building and expanding their FRCs.</span></p><p><span>The FRCs involved ranged from a team with only one employee and less than a year old to teams of almost two dozen that were approximately three years old. Upon selection, each founder had a clearly honed North Star technical vision and a sense of what types of customers and funders could fuel their work. All teams, regardless of age, planned to use their participation in the programme to establish a foothold in some new market. And each team was selected with the belief that if they succeeded in doing this, their field would be materially better for it.</span></p><p><span>Beyond the \u00a3100k in financial resources, the programme made a special effort to help founders overcome the temptation to chase funding piecemeal, application by application, and instead build a core customer strategy to reliably fund progress towards their technical visions. We complemented this funding and strategy work with additional resources including founder group workshops, 1:1 sessions, and active network-building on behalf of each FRC.</span></p><h2>Results from our first year of the FRC Launchpad</h2><p><span>Each of the five teams in the FRC Launchpad was selected with the belief that their success in establishing a foothold in a new market or research area would materially improve their entire field. Each set a goal for what they wanted to accomplish with the programme.</span></p><p><span>Nine months in, the results are exceptionally promising. The following per-team subsections describe the technical ambition of these organisations and progress towards their goals thus far.</span></p><p><strong><span>Cultivarium.</span></strong><span> Cultivarium began its life as a Focused Research Organization (FRO). FROs are often called \"nonprofit startups\", and tend to be founded in areas where startup-like efforts are optimal for progress, but in which the massive upside of the effort is public benefit-related, rather than a $10 billion+ commercial upside. Cultivarium was founded to build the tools and models essential to making it faster, cheaper, and easier to work with non-model organisms \u2014 enabling greater access to the entire tree of life in biological investigations. Through Cultivarum's (Cultivarium CEO) programme participation, Cultivarium has succeeded in transitioning from a time-bound, philanthropically funded FRO to a self-sustaining FRC \u2014 that can exist indefinitely if the org continues to solve problems for funders with applied needs. Through Cultivarum's participation in participation in the the FRC Launchpad, Cultivarium won two large contracts: one with an organism-focused philanthropy to ensure Cultivarium's models and tools speed up the work of the funder's PIs using a particular organism, and a second large contract of a similar structure.</span></p><p><strong><span>Living Physics.</span></strong><span> Living Physics was funded into existence by an ARIA </span><a href=\"https://aria.org.uk/opportunity-spaces/nature-computes-better\"><span>Nature Computes Better</span></a><span> opportunity seed - ARIA's highly flexible 'fast grant' funding mode designed to support speculative scientific research with immense potential in a lighter-touch manner than ARIA's programme funding.. ARIA's Nature Computes Better opportunity space is dedicated to scaling computational efficiency, and has looked for inspiration to natural systems \u2014 which are often orders of magnitude more efficient than modern computers. David Jordan (Living Physics founder) is a biologist who can be thought of as having the mindset of a physicist, the hands of an engineer and the expertise of a biologist. Using the perch his ARIA opportunity seed created, David plans to turn Living Physics into a center of excellence at the intersection of engineering physics and biology. Specifically, his group is building a suite of instruments (e.g., Raspberry Pi-powered bioreactors) and partnerships to move forward the state-of-the-art in theoretical biology, such as understanding how information is processed in biological systems. Biology is a complex subject in which improved measurement and perturbation are often key capacity bottlenecks. Through the FRC Launchpad, David is finding early success in scaling his org from a purely research endeavor to one that accelerates science for others by building instrumentation for ambitious researchers and partnering with research groups that require the skills of people like him. These contracts, which Living Physics achieved through the FRCL, are allowing Living Physics to operate as a self-sustaining R&amp;D org that can take their research into real-world applications. In addition, Living Physics is leveraging the operational know-how gained through the FRC Launchpad to spearhead applications for larger contracts that take advantage of this center of excellence he is building outside of the university and VC ecosystems, one that pairs an exceptionally ambitious research agenda with an intense desire to build artifacts of applied technology.</span></p><p><strong><span>Syntato.</span></strong><span> Syntato was also funded into existence by an ARIA grant, from ARIA's </span><a href=\"https://aria.org.uk/opportunity-spaces/programmable-plants/synthetic-plants\"><span>Synthetic Plants</span></a><span> programme that is looking to build fully synthetic plant genomes and chloroplasts. Syntato was founded, in part, to address a key programme need: building better applied crop genetics tooling. This was necessary because in agriculture, the venture capital model is not well-suited to areas like \"tools for transgenic crop design\". Syntato has built an integrated team of engineers and researchers that is as ambitious as any basic research group, but focused on building good tools for industrial crop biotechnology. During Syntato's FRC Launchpad participation, Syntato has secured additional ARIA funding, a four-year Bezos PhD studentship, with several larger applications for research projects. These applications add up to over \u00a35M in opportunities, with a high probability that at least \u00a31M will be secured in the next few months.</span></p><p><strong><span>Basis Institute.</span></strong><span> Basis builds reasoning engines: AI systems that automatically construct simulators and world models from knowledge and data, and use them to predict the future, explain the past, and reason about counterfactuals. Basis's North Star technical ambition is a \"universal reasoning engine\": a new foundation for AI that unifies probabilistic, causal, and mathematical reasoning over computational models of every kind. Basis has funded itself for several years through a mix of philanthropic support from those who believe in its vision, contracts from funders like ARIA and DARPA, and experimental contracts with companies. While Basis is building towards a general set of technical capabilities, it views working on targeted challenge problems (particularly in the sciences) as an ideal way to make progress. It believes this sustained problem-solving will surface lessons enabling it to steadily generalize its methods. In effect, Basis is trying to use its base of contracts and grants to build a new frontier lab, one with a path to simultaneously being self-sustaining, solving fundamental research problems, and building scalable technology that solves real-world problems. During its FRCL participation, Basis has established several promising contract leads that will expand its capacity to tackle challenges in the UK R&amp;D ecosystem.</span></p><p><strong><span>Topos Institute.</span></strong><span> The Topos Institute is an FRC focused on problems of applied category theory and mathematical software engineering, founded with the deep belief that category theory can be a useful, coherent modeling language in the sciences, particularly in problems that require communicating across disciplines. Similar to Basis, Topos seeks to increase the generality of its systems by continually solving specific challenge problems. Topos has also funded itself for several years with a funding mix similar to Basis. During its FRCL participation, the org has succeeded in diversifying the variety of contract partners in its Oxford office, and is actively considering how it might use the corps of talent it has built up to build increasingly useful pieces of technology for users. Many Topos employees would be at home in either top mathematics departments or AI labs. Its success in building a financially sustainable FRC enables this world-class group to marshal their talents in service of a technical goal that is simultaneously big-if-true, but not on the radar of the VC ecosystem.</span></p><h2>If this sounds like you, apply to be a part of our second cohort!</h2><p><span>Due to the success of the first FRCL cohort, ARIA is expanding our next cohort to eight teams! Read more about the programme here [link to RenPhil website]. We'll also be hosting a webinar for any interested applicants on Aug 10 at 5pm BST: register </span><a href=\"https://hnqpk7fcez.zite.so\"><span>here</span></a><span>! The FRC Launchpad team \u2014 Eric Gilliam and Janelle Tam \u2014 are eager to chat with any team that can substantially move the work of any ARIA opportunity space forward. Feel free to reach out to them at </span><a href=\"mailto:eric.gilliam@renphil.org\"><span>eric.gilliam@renphil.org</span></a><span> and </span><a href=\"mailto:janelle.tam@renphil.org\"><span>janelle.tam@renphil.org</span></a><span>.</span></p><p><span>Strong applications will have both a big-if-true technical vision </span><em><span>and</span></em><span> a clear thesis for a set of contracts and grants which can fuel the vision indefinitely. And these orgs should be building towards goals that could not be built within academic labs or the VC-funded path.</span></p><p><span>Existing ARIA Creators looking to find a way to use the perch offered by their ARIA to turn their efforts into self-sustaining FRCs are particularly encouraged to apply. The shape of each founder's technical ambition will vary \u2014 FRO-like, frontier lab-like, center of excellence in some area, ambitious CRO-like efforts, etc. What's important is the founders' commitment to building an R&amp;D organization that is simultaneously ambitious and able to financially sustain itself through a mix of contracts and grants.</span></p><p><span>If that sounds like you, check out the application </span><a href=\"https://www.renaissancephilanthropy.org/uk-horizons-frc\"><span>here</span></a><span>! Applications close Aug 21.</span></p><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://www.freaktakes.com/p/frontier-research-contractor-launchpad?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://www.freaktakes.com/p/frontier-research-contractor-launchpad?utm_source=substack&utm_medium=email&utm_content=share&action=share\"><span>Share</span></a></p><p></p>","doi":"https://doi.org/10.59350/7p64w-b6c46","guid":"208236587","image":"https://substack-post-media.s3.amazonaws.com/public/images/a143032e-1c92-4d82-a297-9b995f0561b2_500x263.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784937600,"rid":"sw1bk-bh518","summary":"A close reading of the early history of the Advanced Research Projects Agency (ARPA) \u2014 the ARIA-like agency in the US that funded the early internet and autonomous vehicles \u2014 yields a key lesson: exceptional projects were usually the result of exceptional contractors.","title":"Frontier Research Contractor Launchpad: First Cohort Results","updated_at":1784998204,"url":"https://www.freaktakes.com/p/frontier-research-contractor-launchpad","version":"v1"}},{"document":{"authors":[{"contributor_roles":[],"family":"O'Reilly","given":"Tim"}],"blog":{"authors":[{"name":"Asimov's Addendum"}],"community_id":"0b81a230-f3a4-4f15-b6db-f262083c3797","created":1781481600,"current_feed_url":"https://asimovaddendum.substack.com/feed/","description":"A publication by Tim O'Reilly and Ilan Strauss on AI commercialization risks and governance. Disclosure and protocols for healthy AI ecosystems.","doi":null,"favicon":"https://rogue-scholar.org/api/communities/0b81a230-f3a4-4f15-b6db-f262083c3797/logo","feed_format":null,"feed_url":"asimovaddendum","filter":null,"generator":"Substack","home_page_url":"https://asimovaddendum.substack.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":null,"slug":"asimovaddendum","status":"active","subfield":"1702","title":"Asimov's Addendum","updated":1784982846,"use_api":true},"blog_name":"Asimov's Addendum","blog_slug":"asimovaddendum","content_html":"<p style=\"text-align: center;\"></p><p><span>Ask ChatGPT, Claude and Grok the same question and you get three different answers. Yes, the facts are (largely) the same, but it's clear that three different personalities answer back. OpenAI shipped first and established a template for what a helpful assistant sounds like, careful and accommodating and reluctant to give offense. Anthropic leaned into guardrails and values and character and trained Claude against a written constitution. Elon Musk built </span><a href=\"https://www.huffpost.com/entry/elon-musk-grok-ai-chatbot_n_65490dfde4b0e3ecaf8a42df\"><span>Grok</span></a><span> to be the rebellious one, the anti-woke alternative to everything Musk thought had gone soft in the rest of the industry.</span></p><p><span>It's not just the models that are differentiated, though. The experience of individuals interacting with AI is shaped by the personality and values designed into the system. And as we accumulate more context with a model, we are more and more a \"ChatGPT user,\" a \"Claude user,\" or a \"Grok user.\" This is not entirely unlike being a Mac user vs. a PC user, or an iPhone user vs. an Android user, or being part of the Apple ecosystem or the Google ecosystem. Companies depend on this tribalism. It's part of their moat. But in AI, the moat may be deeper than in past environments where our belonging was marked by the programs we use and the artifacts they created for us, because here it is also a matter of shared landscapes of thought.</span></p><p><span>Gregory Bateson gave a name to this phenomenon in the 1930s, after fieldwork among the Iatmul people of the Sepik River in New Guinea. He called it </span><a href=\"https://en.wikipedia.org/wiki/Schismogenesis\"><span>schismogenesis</span></a><span>, \"a process of differentiation in the norms of individual behaviour\" driven by repeated interaction. He saw two forms. In symmetrical schismogenesis, each side answers the other with more of the same, boast for boast, as if it were a kind of an arms race. In complementary schismogenesis, the behavior of one draws out the behavior of the other. I'm not sure I completely understand Bateson's distinction here since I read his </span><em><a href=\"https://www.amazon.com/Steps-Ecology-Mind-Anthropology-Epistemology/dp/0226039056\"><span>Steps to an Ecology of Mind</span></a></em><span> over 50 years ago and haven't looked at it since, but sometimes even a misunderstood concept can still be a tool for insight. (I've used Claude to help me tease out my half-remembered lessons.)</span></p><p><span>Relating these two forms to AI, I would say (correctly or not) that OpenAI, Anthropic, and DeepMind are engaged in a form of symmetrical schismogenesis, initially all trying to outdo each other in promises of AI safety, and with boasts of the power of their models to shape the AI future. </span><a href=\"http://x.ai/Grok\"><span>X.ai/Grok</span></a><span>, on the other hand, represents a kind of complementary schismogenesis, an explicit effort to be what the others aren't. Mistral (and sovereign AI in general) represents another kind of complementary schismogenesis. After all, if you are French, or Chinese, or even just a company trying to carve out your own place in an increasingly homogenized world, do you really want to adopt your values wholesale from whatever is on offer by the big labs?</span></p><p><span>David Graeber and David Wengrow ran with Bateson's idea in their book </span><em><a href=\"https://books.google.com/books/about/The_Dawn_of_Everything.html?id=9xkQEAAAQBAJ\"><span>The Dawn of Everything</span></a></em><span>. They used it to explain neighboring societies organized as near mirror opposites. On the Pacific coast the fishing peoples of the Northwest were hierarchical, kept slaves, and threw competitive feasts, while the acorn-gathering peoples of California to their south were industrious, frugal, and suspicious of hoarded status. The difference was not just determined by climate or crops. People became what they were partly by refusing to resemble the neighbors across the way. Graeber and Wengrow describe these cultural choices as a kind of play, but it is serious play that can harden into rivalry and conflict.</span></p><h2><span>A schismogenetic tree</span></h2><p><span>The idea that schismogenesis is a kind of cultural game minimizes environmental factors that can shape it. Google Research built the transformer in 2017, the architecture every one of these models runs on. Yet because of the company's heritage, Google's first implementation, BERT, was positioned as an improvement to search, used to better understand the intent behind search queries, particularly longer, conversational, or preposition-heavy searches. By 2021 Google had a conversational model, LaMDA, good enough that one of its own engineers went public the next year claiming it was sentient. But Google never shipped it. A model that answers your question in a paragraph threatened Google's search franchise, more than $160 billion a year and most of Alphabet's revenue. Google could have built chat earlier than anyone but had the most to lose by shipping it. This is a version of what is sometimes called \"the Kodak curse.\" Kodak made early breakthroughs in digital photography that they never properly commercialized because of the desire to protect their highly profitable film/chemistry business.</span></p><p><span>OpenAI had no search revenue to protect, so putting a chat box on the open web in 2022 cost it nothing. And so the leader became the follower. After ChatGPT reached a hundred million users in only two months, Google CEO Sundar Pichai declared a code red, pulled founders Larry Page and Sergey Brin back into product meetings, and within weeks Google shipped Bard, whose first public demo got a fact about the James Webb telescope wrong and knocked $100 billion off Alphabet in a day. In short, the company that invented the technology arrived late, got rattled, and ever since has been building chat into search with one hand while defending search from chat with the other. So yes, the environment is a factor ;-)</span></p><p><span>Schismogenesis usually works below the level of intention, though. It's an accumulating cultural drift nobody quite chooses. But in the case of the big AI models, schismogenesis seems to have been quite deliberate.</span></p><p><span>With Claude and with Grok you could watch their owners reach in and deliberately turn the dial. Claude drove AI further into caution and a published set of values. Musk took the other side. When early testers ran Grok through the standard political batteries and found it sitting left of center, near ChatGPT, Musk said xAI would move it, and over the next updates its answers marched right in step with his own posts on X.</span></p><p><span>Google did not differentiate because it was held in place by the business it had to defend, but OpenAI and Anthropic and xAI differentiated because they were free to, with no franchise holding them back. It's true that OpenAI was driven by strategic business considerations and its hope to dethrone Google, but both Anthropic and </span><a href=\"http://x.ai\"><span>X.ai</span></a><span> made their choices initially for cultural reasons. They are a pure demonstration of schismogenesis.</span></p><p><span>So too, the open-weight world has defined itself against the closed labs, and the choice to publish weights is now as much an identity as an engineering decision, a way of saying \"we are the ones who do not lock you in.\" Meta leaned on open weights to distinguish itself from OpenAI and Google, and the Chinese labs that shipped strong open models turned openness into a powerful business strategy.</span></p><p><span>Further up the stack, differentiation is the whole game. When the underlying capability commoditizes, the players who capture value are the ones who stake out a position nobody else holds. Schismogenesis is not a cultural curiosity. It is a competitive strategy, and in a market this crowded it may be the main one.</span></p><h2><span>Steve Jobs was good at this</span></h2><p><span>None of this story would have surprised Steve Jobs, who turned schismogenesis into a marketing case study. Apple's </span><a href=\"https://www.cbsnews.com/news/apples-iconic-1984-ad-25-years-later/\"><span>1984 ad</span></a><span> did not sell the Mac on the basis of its processor speed or available memory, as PC advertising of the day was likely to do. Ridley Scott shot a runner sprinting into a hall of gray obedient faces and throwing a hammer through Big Brother on the screen. The tag said the Macintosh was why 1984 would not be like </span><em><span>1984</span></em><span>. IBM was conformity and the Mac was the hammer. Thirteen years later </span><a href=\"https://en.wikipedia.org/wiki/Think_different\"><span>Think Different</span></a><span>, a riff on IBM's one-word slogan \"Think!\", put Einstein and Gandhi and Lennon on billboards and toasted \"the crazy ones.\" Apple built a company on being the deliberate opposite of the beige box on the office desk.</span></p><div class=\"captioned-image-container\"><figure><a class=\"image-link image2 is-viewable-img\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=VtvjbmoDx-I\" data-component-name=\"Image2ToDOM\"><div class=\"image2-inset\"><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 424w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 848w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1272w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1456w\" sizes=\"100vw\"><img src=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png\" width=\"1456\" height=\"1049\" data-attrs=\"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1049,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1445441,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.youtube.com/watch?v=VtvjbmoDx-I&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://asimovaddendum.substack.com/i/208409829?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" class=\"sizing-normal\" alt=\"\" title=\"\" srcset=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 424w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 848w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1272w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1456w\" sizes=\"100vw\" loading=\"lazy\"></picture><div class=\"image-link-expand\"><div class=\"pencraft pc-display-flex pc-gap-8 pc-reset\"><button tabindex=\"0\" type=\"button\" class=\"pencraft pc-reset pencraft icon-container restack-image\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke-width=\"1.5\" stroke=\"var(--color-fg-primary)\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882\"></path></g></svg></button><button tabindex=\"0\" type=\"button\" class=\"pencraft pc-reset pencraft icon-container view-image\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-maximize2 lucide-maximize-2\"><polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" x2=\"14\" y1=\"3\" y2=\"10\"></line><line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\"></line></svg></button></div></div></div></a></figure></div><p style=\"text-align: center;\">Scene from <a href=\"https://www.youtube.com/watch?v=VtvjbmoDx-I\">Apple's legendary 1984 Superbowl ad</a>. </p><p><span>The AI labs might learn something from Jobs, because his differentiation was generative in a way that a purely oppositional version is not. Apple defined itself against IBM, but it defined itself </span><em><span>for</span></em><span> something, the individual, the artist, the person who wanted a tool that felt like it was on their side. IBM was the foil, but the content was a positive idea of who you became by choosing the Mac. That is the difference between an identity you build for yourself and one you shape too narrowly in response to a real or perceived enemy. </span></p><p><span>I think Anthropic understands positive differentiation. They started with their core values, but they used those values to choose a market position with thoughtful, careful, and caring AI at the heart of it. Their users depend on the reliability that their values offer. Grok, by contrast, has the foil without the substance. Its identity is principally the negation of the models it dislikes.</span></p><p><span>Of course, not all differentiation is schismogenesis. Different teams attacking the same problem come up with different solutions, keep what advantage they can proprietary, but at the same time they try to copy the best from their rivals. Much of the stack actually converges. Claude Code and Codex feel like siblings. But we don't want a monoculture. We need healthy schismogenesis. It's a competitive frontier, part of what the poet Wallace Stevens called</span><a href=\"https://www.billcollinsenglish.com/OrdinaryEveningHaven.html\"><span> \"search[ing] a possible for its possibleness.\"</span></a><span> It's also a cultural frontier. People all over the world don't want one AI that reflects one set of values. Sovereign AI is not just an economic imperative, it is also a cultural one. But there's a real risk in that.</span></p><p><span>Bateson did not think schismogenesis was benign. He thought that on its own it ran to breakdown, symmetrical rivalry escalating into open conflict, complementary difference hardening into rigid domination and submission, and that a society survived it only by having some countervailing mechanism that periodically reset the tension. Among the Iatmul it was a ceremony, the naven, that inverted the ordinary roles and let the pressure out.</span></p><p><span>In tech, the equivalent to the naven might be the standards body ;-) Or maybe it's open source AI, and the role of standardized protocols in enabling companies and individuals to flourish beyond the boundaries that are set for them. This is a trailing thought, but that's one of the things I learned from Frank Herbert, also 50 years ago, when he told me that one of his goals in </span><em><span>Dune</span></em><span> was to have his readers \"go skidding out of the story\" with unanswered questions that kept them coming back to his world for more. I leave you to ponder what our AI naven might be.</span></p><h2><span>Freedom to leave</span></h2><p><span>There are brakes on schismogenesis at the lab level. A model has to be useful or people stop using it. Users can leave for another model with a click. The public still reacts, the way it did when Grok's MechaHitler episode drew a bipartisan letter from Congress, a rebuke from the Anti-Defamation League, and a resignation at the top of X.</span></p><p><span>The quest for sovereign AI and the role of open weight models and open source AI in giving power back from the labs to users are also a kind of brake, a competitive check on the power of the big labs to impose their values.</span></p><p><span>The simplest and most powerful reset, though, is the freedom of users to leave, to choose an alternative. This is real in AI. The moats that the labs have built so far are relatively weak, as we've seen recently with widespread adoption of GPT 5.6 Sol when Fable became temporarily unavailable. I had a brush with this myself. I ran out of Fable usage in my Pro account in the middle of a fine-tuning project, and decided to try moving it over to Sol. I had managed the project well, so there was a CURRENT_STATE.md with the project description and what had been accomplished so far, plus the original training set, the cleaned training set, and so on, all bundled up into a zip file. I handed it to Sol, it reviewed the work, and picked up right where we left off.</span></p><p><span>At the same time, though, I have gotten better at working with Claude and Claude has gotten better at working with me. The two of us have converged into a paired unit around the tasks I use it for. Every session cuts the groove a little deeper. My prompts tend to be for overlapping tasks, its memory fills with my context, and the fit is the product. I've tried to condense some of the work we've done together into a skill that could be executed by other people at O'Reilly, and was surprised to find that the skill + my context works better than the skill with someone else's context. So skills as a kind of portability that I thought I could depend on turned out to be weaker than I thought.</span></p><p><span>This pairing with a model might be a kind of complementary schismogenesis at the scale of one person. The user and the model differentiate from all other user/model pairs together, and the pair pulls away from every alternative I am not using. There is a widening gap between me-with-Claude and me-with-anything-else.</span></p><p><span>It's a marvelous feeling. It is also lock-in. The switching cost is not (yet) a file I can download and pass on reliably. The co-adapted relationship, the accumulated context, and the shared work have become one company's moat. It erodes our freedom to leave. The more the pairing helps each of us, the more it costs to walk away. For many tasks, I haven't even switched from my Pro account to my company account, because I haven't yet figured out how to move over all the necessary context. For a given task, it might be as easy as my switch between Fable and Sol, but for the whole package of my Claude relationship, perhaps not.</span></p><p><span>I imagine that with some spelunking, I will find where Claude keeps all this context it has for me, and I hope most of it will be something I can move. But I'd be a lot happier if portability were something we could all take for granted. If my memory and context were mine to carry, in a format another model could read, pairing would not harden so easily into capture.</span></p><p><span>We do not have that portability standard. It is one of </span><a href=\"https://www.oreilly.com/radar/the-missing-mechanisms-of-the-agentic-economy/\"><span>the missing mechanisms of the agentic economy</span></a><span>, plumbing that a market needs to stay competitive. It's not just memory, though memory may be the current best hook to work on. There are also differences in terminology, filenames, working patterns, skills, and assumptions. Build for portability and the choice of model remains fluid. Leave it unbuilt and the intimacy we build with our favorite models can become a source of lock-in.</span></p><div class=\"captioned-button-wrap\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}\" data-component-name=\"CaptionedButtonToDOM\"><div class=\"preamble\"><p class=\"cta-caption\">Thanks for reading Asimov's Addendum! This post is public so feel free to share it.</p></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share\"><span>Share</span></a></p></div><div class=\"subscription-widget-wrap-editor\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}\" data-component-name=\"SubscribeWidgetToDOM\"><div class=\"subscription-widget show-subscribe\"><div class=\"preamble\"><p class=\"cta-caption\">Subscribe for free to receive new posts.</p></div><form class=\"subscription-widget-subscribe\"><input type=\"email\" class=\"email-input\" name=\"email\" placeholder=\"Type your email\u2026\" tabindex=\"-1\"><input type=\"submit\" class=\"button primary\" value=\"Subscribe\"><div class=\"fake-input-wrapper\"><div class=\"fake-input\"></div><div class=\"fake-button\"></div></div></form></div></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/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://asimovaddendum.substack.com/subscribe?\"><span>Subscribe now</span></a></p>","doi":"https://doi.org/10.59350/hvd9d-mr723","guid":"208409829","image":"https://substackcdn.com/image/fetch/$s_!VQ3n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784937600,"rid":"p4f0m-3h353","summary":"Thoughts on model \"culture\" as a kind of lock-in","title":"Differentiation and personality in AI models","updated_at":1784983038,"url":"https://asimovaddendum.substack.com/p/differentiation-and-personality-in","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/048a87296","name":"Uppsala University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Now that we covered the utmost basics of using the CDK-JChemPaint patch (see\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">#1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-2-rendering-reactions.html\">#2 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">#3 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>),\nit is time to move on. I am happy to hear that so many people have started using the new rendering architecture, either\nvia the EBI JChemPaint Swing applet/application branch, or via the CDK-JChemPaint patch.</p>\n<p>A couple of issues and questions came up (scaling not working as expected; how to layout reactions; how to get charges\nto show up), and I will look at those shortly. But before I get into those matters, I'll first show how to use the renderer\nwith a <a href=\"http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JPanel.html\">Swing JPanel</a>\n(I'll do the SWT alternative later). First, we need to subclass the JPanel:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">class</span> <span class=\"nc\">JCPPanel</span> <span class=\"kd\">extends</span> <span class=\"nc\">JPanel</span> <span class=\"o\">{</span>\n\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">mol</span><span class=\"o\">;</span>\n  <span class=\"nc\">AtomContainerRenderer</span> <span class=\"n\">renderer</span><span class=\"o\">;</span>\n  <span class=\"kt\">int</span> <span class=\"n\">width</span><span class=\"o\">;</span>\n  <span class=\"kt\">int</span> <span class=\"n\">height</span><span class=\"o\">;</span>\n\n  <span class=\"kd\">public</span> <span class=\"nf\">JCPPanel</span><span class=\"o\">(</span><span class=\"nc\">IMolecule</span> <span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"kt\">int</span> <span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"kt\">int</span> <span class=\"n\">height</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"kd\">super</span><span class=\"o\">();</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">setSize</span><span class=\"o\">(</span><span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"n\">height</span><span class=\"o\">);</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">mol</span> <span class=\"o\">=</span> <span class=\"n\">mol</span><span class=\"o\">;</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">width</span> <span class=\"o\">=</span> <span class=\"n\">width</span><span class=\"o\">;</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">height</span> <span class=\"o\">=</span> <span class=\"n\">height</span><span class=\"o\">;</span>\n\n    <span class=\"c1\">// generators make the image elements</span>\n    <span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicAtomGenerator</span><span class=\"o\">());</span>\n\n    <span class=\"c1\">// the renderer needs to have a toolkit-specific font manager</span>\n    <span class=\"n\">renderer</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">AtomContainerRenderer</span><span class=\"o\">(</span>\n      <span class=\"n\">generators</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">AWTFontManager</span><span class=\"o\">()</span>\n    <span class=\"o\">);</span>\n  <span class=\"o\">}</span>\n\n  <span class=\"kd\">public</span> <span class=\"nc\">Dimension</span> <span class=\"nf\">getPreferredSize</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"nf\">Dimension</span><span class=\"o\">(</span><span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"n\">height</span><span class=\"o\">);</span>\n  <span class=\"o\">}</span>\n\n  <span class=\"kd\">public</span> <span class=\"kt\">void</span> <span class=\"nf\">paint</span><span class=\"o\">(</span><span class=\"nc\">Graphics</span> <span class=\"n\">graphics</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"c1\">// the call to 'setup' only needs to be done on the first paint</span>\n    <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">setup</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">Rectangle</span><span class=\"o\">(</span><span class=\"n\">getWidth</span><span class=\"o\">(),</span> <span class=\"n\">getHeight</span><span class=\"o\">()));</span>\n\n    <span class=\"c1\">// paint the background</span>\n    <span class=\"n\">graphics</span><span class=\"o\">.</span><span class=\"na\">setColor</span><span class=\"o\">(</span><span class=\"nc\">Color</span><span class=\"o\">.</span><span class=\"na\">WHITE</span><span class=\"o\">);</span>\n    <span class=\"n\">graphics</span><span class=\"o\">.</span><span class=\"na\">fillRect</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"n\">getWidth</span><span class=\"o\">(),</span> <span class=\"n\">getHeight</span><span class=\"o\">());</span>\n\n    <span class=\"c1\">// the paint method also needs a toolkit-specific renderer</span>\n    <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">paint</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">AWTDrawVisitor</span><span class=\"o\">(</span><span class=\"n\">graphics</span><span class=\"o\">));</span>\n  <span class=\"o\">}</span>\n\n<span class=\"o\">}</span>\n</code></pre></div></div>\n<p>The panel does not implement resizing, and it could consider caching the image too, to speed things up a bit. But, we'll use this as a starting point.</p>\n<p>We can then embed this panel into a JFrame to make a small runable application:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kt\">int</span> <span class=\"no\">WIDTH</span> <span class=\"o\">=</span> <span class=\"mi\">600</span><span class=\"o\">;</span>\n<span class=\"kt\">int</span> <span class=\"no\">HEIGHT</span> <span class=\"o\">=</span> <span class=\"mi\">600</span><span class=\"o\">;</span>\n\n<span class=\"c1\">// create molecule</span>\n<span class=\"nc\">IMolecule</span> <span class=\"n\">triazole</span> <span class=\"o\">=</span> <span class=\"nc\">MoleculeFactory</span><span class=\"o\">.</span><span class=\"na\">make123Triazole</span><span class=\"o\">();</span>\n<span class=\"nc\">StructureDiagramGenerator</span> <span class=\"n\">sdg</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">StructureDiagramGenerator</span><span class=\"o\">();</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">setMolecule</span><span class=\"o\">(</span><span class=\"n\">triazole</span><span class=\"o\">);</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">generateCoordinates</span><span class=\"o\">();</span>\n<span class=\"n\">triazole</span> <span class=\"o\">=</span> <span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">getMolecule</span><span class=\"o\">();</span>\n\n<span class=\"c1\">// create the frame</span>\n<span class=\"nc\">JFrame</span> <span class=\"n\">frame</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">JFrame</span><span class=\"o\">(</span><span class=\"s\">\"Swinging CDK-JChemPaint\"</span><span class=\"o\">);</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">setDefaultCloseOperation</span><span class=\"o\">(</span><span class=\"nc\">JFrame</span><span class=\"o\">.</span><span class=\"na\">EXIT_ON_CLOSE</span><span class=\"o\">);</span>\n\n<span class=\"nc\">JCPPanel</span> <span class=\"n\">panel</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">JCPPanel</span><span class=\"o\">(</span><span class=\"n\">triazole</span><span class=\"o\">,</span> <span class=\"no\">WIDTH</span><span class=\"o\">,</span> <span class=\"no\">HEIGHT</span><span class=\"o\">);</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">getContentPane</span><span class=\"o\">().</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"n\">panel</span><span class=\"o\">);</span>\n\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">pack</span><span class=\"o\">();</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">setVisible</span><span class=\"o\">(</span><span class=\"kc\">true</span><span class=\"o\">);</span>\n</code></pre></div></div>\n<p>The result is pretty much the same as with the created PNG, just with a window. But, this should get you started with using the new code base in your\nSwing-based application. If you need an impression on where this can get you, have a look at the\n<a href=\"http://www.ebi.ac.uk/steinbeck-srv/jchempaint-nightly/EditorApplet.html\">applet developed by Chris' team</a>. Likewise, a SWT-based application can be\ndeveloped, of which <a href=\"http://wiki.bioclipse.net/index.php?title=JChemPaint\">Bioclipse</a> is a full example. This shows one of the features of this\nnew JChemPaint code base: it is widget set-independent. I am not aware of applications using other widget toolkits yet, though, but I am still\nhoping someone will use <a href=\"http://qt.nokia.com/doc/qtjambi-4.4/html/com/trolltech/qt/qtjambi-index.html\">QtJambi</a> to create a Qt-based JChemPaint port.</p>","doi":"https://doi.org/10.59350/2148c-n1102","guid":"https://doi.org/10.59350/2148c-n1102","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1271548800,"rid":"hptpk-4wt24","summary":"Now that we covered the utmost basics of using the CDK-JChemPaint patch (see #1 , #2 , #3 ), it is time to move on. I am happy to hear that so many people have started using the new rendering architecture, either via the EBI JChemPaint Swing applet/application branch, or via the CDK-JChemPaint patch.","tags":["Cdk","Jchempaint"],"title":"CDK-JChemPaint #4: embedding the renderer into a Swing panel","updated_at":1784927663,"url":"https://chem-bla-ics.linkedchemistry.info/2010/04/18/cdk-jchempaint-4-embedding-renderer.html","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/048a87296","name":"Uppsala University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>I have made a few new <a href=\"http://cdk.sf.net/\">CDK</a>-JChemPaint patches in the past two days, the latest being\n<a href=\"https://sourceforge.net/projects/cdk/files/CDK-JChemPaint/15/\">patch 15</a>. With the help from\n<a href=\"http://gilleain.blogspot.com/\">Gilleain</a>, all rendering parameters are now using the new API, as explained\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">earlier <i class=\"fa-solid fa-recycle fa-xs\"></i></a> in\n<a href=\"http://chem-bla-ics.blogspot.com/search?q=%22cdk-jchempaint+%23%22\">this series</a>.</p>\n<p>Additionally, the API to work with rendering parameters is now much simpler. The previous posts did not\nreally explain how to tune parameters, so here goes. One important thing to realize, is that a rendering\nparameter can only be changed if the generator that defines it has been registered. To see what parameters\nbelongs to what generator, for which you can use the script discussed in\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">post #3 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>.</p>\n<h2 id=\"atom-numbers\">Atom Numbers</h2>\n<p>In some situations you like to draw atom numbers. This can be done by replacing the BasicAtomGenerator by an\nAtomNumberGenerator in the script given in <a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">post #1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>This would result in an image like this:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno.png\"/></p>\n<p>Now, we also might want to give those numbers a color, to make them stand out a bit. Orange, perhaps :)\nThis is where rendering parameters come in. To the code from\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">post #1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\nafter the instantiation of the renderer, we add:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"c1\">// tune parameters</span>\n<span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">getRenderer2DModel</span><span class=\"o\">();</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">AtomNumberTextColor</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"nc\">Color</span><span class=\"o\">.</span><span class=\"na\">orange</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>The output then looks like:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_2.png\"/></p>\n<h2 id=\"atom-numbers-and-symbols\">Atom Numbers and Symbols</h2>\n<p>But you can also render both element symbols and numbers. Then, clearly, you just add both generators:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicAtomGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>But, in order to have the label and the symbol not overlap, we define an offset (Thanx to\n<a href=\"http://github.com/s-wolf\">Sebastian</a>, of <a href=\"http://www.biomedcentral.com/1471-2105/11/148/abstract\">MetFrag</a>\nfame, for the feature request!):</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">Offset</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"k\">new</span> <span class=\"n\">javax</span><span class=\"o\">.</span><span class=\"na\">vecmath</span><span class=\"o\">.</span><span class=\"na\">Vector2d</span><span class=\"o\">(</span><span class=\"mi\">10</span><span class=\"o\">,</span><span class=\"mi\">10</span><span class=\"o\">)</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>Then it gets to look like:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_3.png\"/></p>\n<p>This last full example will be available from GitHub shortly.</p>\n<p><strong>Update</strong> Steffen asked in the comments if it is possible to just color the atoms by element type. CDK-JChemPaint\npatch 15 does not allow that, but adding that feature is easy enough, and the patch will be part of the next\nrelease. Use this configuration:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>And these parameter settings:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">getRenderer2DModel</span><span class=\"o\">();</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">ColorByType</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"kc\">true</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>This give you for <a href=\"http://en.wikipedia.org/wiki/Triazole\">triazole</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_4.png\"/></p>","doi":"https://doi.org/10.59350/5cfpy-kym94","guid":"https://doi.org/10.59350/5cfpy-kym94","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1276128000,"rid":"055c8-d0t90","summary":"I have made a few new CDK-JChemPaint patches in the past two days, the latest being patch 15. With the help from Gilleain, all rendering parameters are now using the new API, as explained earlier in this series.","tags":["Cdk","Chemistry"],"title":"CDK-JChemPaint #6: rendering atom numbers","updated_at":1784927662,"url":"https://chem-bla-ics.linkedchemistry.info/2010/06/10/cdk-jchempaint-6-rendering-atom-numbers.html","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>About four and a half years ago, I started <a href=\"http://rdf.openmolecules.net/\">OpenMolecules RDF</a>, a spin off from\n<a href=\"http://cb.openmolecules.net/\">Chemical blogspace</a> (Cb, which is still up and running thanks to Peter Maas!) where\nI started <a href=\"http://chem-bla-ics.blogspot.com/2007/07/rdf-ing-molecular-space.html\">using InChIs in URIs</a>. My\ninterest came from the dereferencability, the ability to take an InChI and find information about the chemical\nstructure representated by it. Because information about anything is scattered around the internet, and we need\nsomething <a href=\"http://chem-bla-ics.blogspot.com/2007/08/centralized-or-decentralized.html\">decentralized</a>. Moreover,\nat the time searching of InChIs with search engines like Google did not work well at all: InChIs were tokenized\nin inconvenient ways.</p>\n<p>Originally, these URIs for InChIs were provided (and still are) by Cb, this July five years ago:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>http://cb.openmolecules.net/rdf/?InChI=1/CH4/h1H4\n</code></pre></div></div>\n<p>for which soon after a separate domain was instantiated (thanx to Geoff!):</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>http://rdf.openmolecules.net/?InChI=1/CH4/h1H4\n</code></pre></div></div>\n<p>Mind you, <strong>OpenMolecules RDF</strong> is a decent citizen of the Linked Open Data network, though not much linked to.\nThe <a href=\"https://github.com/egonw/chembl.rdf\">ChEMBL-RDF</a> data is, and love to hear if there are other link sets\npointing there. On the outlinking side, it points to <a href=\"http://www.ebi.ac.uk/chebi/\">ChEBI</a> (via\n<a href=\"http://www.bio2rdf.org/\">Bio2RDF</a>), <a href=\"http://dbpedia.org/\">DBPedia</a>, <a href=\"http://www.chemspider.com/\">ChemSpider</a>\n(for 10k structures), the <a href=\"http://chem-bla-ics.blogspot.com/2009/03/nmrshiftdb-enters-rdfopenmoleculesnet.html\">NMRShiftDB</a>,\nand Cb itself. This post describes the adding of the <a href=\"http://chem-bla-ics.blogspot.com/2009/02/dbpedia-enters-rdfopenmoleculesnet.html\">link to DBPedia</a>.</p>\n<p>In the past few years, I have written up bits on OpenMolecules RDF. The main reference is our chapter in <em>Beautiful Data</em> (Willighagen, 2010),\nwhere I used the <a href=\"http://chem-bla-ics.blogspot.com/2009/02/solubility-data-in-bioclipse-3-finding.html\">URIs for the solubility data</a>.\nIt was later also described in the <em>Linking the Resource Description Framework to cheminformatics and proteochemometrics paper</em> (Willighagen, 2011),\nand another book chapter (Guha, 2011).</p>\n<p>This blog features a few more use cases, such as the ability to use these URIs to bookmark molecules or to\n<a href=\"http://chem-bla-ics.blogspot.com/2007/09/tagging-molecules-mashup-of-connotea.html\">annotate them with tags with Connotea</a>\n(which resulted in a nice <a href=\"http://chem-bla-ics.blogspot.com/2007/10/lunch-at-nature-hq-with-euan-joanna-ian.html\">lunch with the Nature people at the time</a>).\nThe link to Connotea is disabled at the moment, though.</p>\n<p>At this moment the system still holds, though there is problem in that browsers can put practical limits on\nURIs length, which limits the maximum size of the InChI. Virtuoso does this too.</p>","doi":"https://doi.org/10.59350/eg04s-efd96","guid":"https://doi.org/10.59350/eg04s-efd96","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1334448000,"reference":[{"id":"https://doi.org/10.1038/npre.2010.4918.1","unstructured":"Unknown title"},{"id":"https://doi.org/10.1002/9781118026038.ch24","unstructured":"Unknown title"},{"id":"https://doi.org/10.1186/2041-1480-2-s1-s6","unstructured":"Unknown title"}],"rid":"kpw7g-39w56","summary":"About four and a half years ago, I started OpenMolecules RDF, a spin off from Chemical blogspace (Cb, which is still up and running thanks to Peter Maas!) where I started using InChIs in URIs. My interest came from the dereferencability, the ability to take an InChI and find information about the chemical structure representated by it. Because information about anything is scattered around the internet, and we need something decentralized.","tags":["Chemistry","Rdf","Inchi","Opendata"],"title":"Dereferencable InChIs: OpenMolecules RDF","updated_at":1784927661,"url":"https://chem-bla-ics.linkedchemistry.info/2012/04/15/dereferencable-inchis-openmolecules-rdf.html","version":"v1"}},{"document":{"authors":[{"affiliation":[{"id":"https://ror.org/0153tk833","name":"University of Virginia"}],"contributor_roles":[],"family":"Turner","given":"Stephen D.","url":"https://orcid.org/0000-0001-9140-9028"}],"blog":{"authors":[{"name":"Stephen Turner"}],"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":1784924410,"use_api":null},"blog_name":"Paired Ends","blog_slug":"stephenturner","content_html":"<p>I've had my head down working hard on an ARPA-H proposal the last few weeks. If you're not familiar with <a href=\"https://arpa-h.gov/\">ARPA-H</a>, it's like DARPA or IARPA, but for health. I.e., moonshot projects, aggressive schedules, big budgets, and academic + industry partnerships essentially required to win one of these awards. I've proposed to and performed on my share of programs at the ARPAs. They've <em>very</em> different than your traditional NIH/NSF grants. The proposal process is different. The award is different (OTs, not grants). The research execution is different (milestone-driven, objectives,  deliverables). The ideas you can propose must be different: if you're coming from the NIH/NSF world, where you have to be innovative (but not <em>too</em> innovative), you'll have to de-condition yourself to <em>not </em>think incrementally. Incremental advancements are strictly out of scope. Think revolutionary, not evolutionary. I think it was the current director of DARPA BTO who told me something like (paraphrasing), <em>if you're in a conference room full of your expert colleagues and 90% of the people think it's a crazy idea and laugh you out of the room, it's probably a good fit for DARPA</em>.</p><p>I got an <a href=\"https://engage.arpa-h.gov/vitals\">email today from ARPA-H</a> with the subject, \"Next on your summer reading list: the ARPA-H 101 series \ud83c\udfd6\ufe0f\". If you're ARPA-curious (ARPA-H specifically, but the advice is applicable to DARPA and IARPA as well), read through some of the links below to get a sense of how things work here.</p><p>You can sign up for the <a href=\"https://engage.arpa-h.gov/vitals\">ARPA-H Vitals emails here</a>.</p><blockquote><p><em><strong>Doing business with the agency: </strong></em>Working with ARPA-H differs from traditional grant-funding federal agencies. The expectations for continued performance are high, the timelines are aggressive, and receiving continued funding is dependent on milestone achievement. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-doing-business-agency\">See how you can rise to the challenge.</a></p><p><em><strong>Preparing for Proposers' Day: </strong></em>These big events set the stage at the launch of most ARPA-H programs. Ready to make the most of networking and teaming opportunities? <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-preparing-proposers-day\">Study up and arrive prepared.</a></p><p><em><strong>Assembling a research team:</strong></em> ARPA-H programs ask performers to offer solutions that are not evolutionary but <em>revolutionary</em>. That often means assembling teams of talented groups and individuals. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-assembling-research-team\">Learn how we help connect them.</a></p><p><em><strong>Transformative research needs Other Transactions (OTs): </strong></em>An OT is a type of federal contract that provides a more flexible way to fund innovative research and development. ARPA-H uses OTs to compress research timelines and speed real health impact. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-transformative-research-needs-other-transactions\">Explore the basics of this nimble funding mechanism.</a></p><p><em><strong>The lifecycle of an ARPA-H program: </strong></em>The ARPA model, championed originally by the Defense Advanced Research Projects Agency (DARPA), centers ambitious ideas, accelerated research timelines, and breakthrough advances. Not familiar with this transformative model and how programs move through it? <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-lifecycle-arpa-h-program\">Read on.</a></p><p><em><strong>Understanding proposal evaluation criteria:</strong></em><strong> </strong>ARPA-H was created to close the gap between scientific findings and the urgent need for real patient outcomes. That means the bar looks different from a traditional grant application for other federal research funding agencies. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-understanding-proposal-evaluation-criteria\">Here's what to expect.</a></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><p></p>","doi":"https://doi.org/10.59350/76wxp-5nb38","guid":"208343031","image":"https://substack-post-media.s3.amazonaws.com/public/images/d6535842-9254-4f39-8821-4aa58a81e413_1132x566.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784851200,"rid":"jrykf-9mb15","summary":"Primers on how ARPA-H (and other ARPAs) are different than your typical NIH/NSF research programs and proposals","title":"ARPA-H 101","updated_at":1784926265,"url":"https://blog.stephenturner.us/p/arpa-h-101","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Two weeks ago, the <a href=\"https://www.beilstein-journals.org/bjoc/news/LAFGBV6PT5ASC5R7JOKSEXOQYM\">Beilstein Institute announced Bioschemas support in their journals</a>:</p>\n<blockquote>\n<p>We streamline the discoverability of your research by incorporating machine-readable chemical information into many of our published articles.\nThis includes the conversion of chemical structures from submitted ChemDraw files to InChI strings and validating them using open-source tools.</p>\n</blockquote>\n<p>The idea is far from new and has been around for two decades. But the <a href=\"https://scholia.toolforge.org/publisher/Q4881267\">two Beilstein journals</a>\n(both <a href=\"https://en.wikipedia.org/wiki/Diamond_open_access\">diamond Open Access</a>), actually integrated into their active publishing model.\nThat has been trialed and put in action before. For example, there was (is?) <a href=\"https://doi.org/10.59350/ne4rf-wey66\">Project Prospect</a>\n(2007), <a href=\"https://chem-bla-ics.linkedchemistry.info/2009/03/19/nature-chemistry-improves-publishing.html\">chemical structure annotation in Nature Chemistry</a>\n(2009), <a href=\"https://chem-bla-ics.linkedchemistry.info/2014/02/21/slow-publishing-innovation.html\">SMILES in the ACS Journal of Medicinal Chemistry</a>\n(2014) (doi:<a href=\"https://doi.org/10.1021/jm5002056\">10.1021/jm5002056</a>),\nand <em>FAIR chemical structures in the Journal of Cheminformatics</em> (2021) (doi:<a href=\"https://doi.org/10.1186/s13321-021-00520-4\">10.1186/s13321-021-00520-4</a>).</p>\n<p>But this announcement is a new step. I like how validation of the chemical structures is part of the approach, and I like\nhow they use the <a href=\"https://bioschemas.org/\">Bioschemas</a> extention of <a href=\"https://schema.org/\">schema.org</a>. The last because\nthey use two Bioschemas types/profiles that contributed to or initiated, respectively: <a href=\"https://bioschemas.org/profiles/MolecularEntity/0.5-RELEASE\">MolecularEntity</a>\nand <a href=\"https://bioschemas.org/profiles/ChemicalSubstance/0.4-RELEASE\">ChemicalSubstance</a>.</p>\n<p>First stop for me is to check the schema.org annotation with a validation tool, like <a href=\"https://search.google.com/test/rich-results\">Google's Rich Results Test</a>.\nThat gives an idea how they may have have their search engine pick it up. The test article I was given on LinkedIn is\nXiao <em>et al.</em>'s <em>Molecular diversity of the reactions of MBH carbonates of isatins and various nucleophiles</em>\n(doi:<a href=\"https://doi.org/10.3762/bjoc.21.21\">10.3762/bjoc.21.21</a>) in the <a href=\"https://scholia.toolforge.org/venue/Q2894008\">Beilstein Journal of Organic Chemistry</a>,\nand we indeed <a href=\"https://search.google.com/test/rich-results/result?id=FRW9wBOpXtsMp9TLUV6SfQ\">see the schema.org annotation show up</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/bjoc_bioschemas.png\"/></p>\n<p>And because of the use of open standards, extracting the information is not so hard with, for example here,\nBacting (doi:<a href=\"https://doi.org/10.21105/joss.02558\">10.21105/joss.02558</a>), based on a 2022 script from the NanoSafety Cluster\nprojects NanoCommons and SbD4Nano:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'managers-rdf'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'managers-ui'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'net.bioclipse.managers.jsoup'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n\n<span class=\"n\">bioclipse</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">BioclipseManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n<span class=\"n\">rdf</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">RDFManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n<span class=\"n\">jsoup</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">JSoupManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n\n<span class=\"n\">articles</span> <span class=\"o\">=</span> <span class=\"o\">[</span>\n   <span class=\"n\">args</span><span class=\"o\">[</span><span class=\"mi\">0</span><span class=\"o\">]</span>\n<span class=\"o\">]</span>\n\n<span class=\"n\">kg</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">createInMemoryStore</span><span class=\"o\">()</span>\n\n<span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">article</span> <span class=\"k\">in</span> <span class=\"n\">articles</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"n\">htmlContent</span> <span class=\"o\">=</span> <span class=\"n\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">download</span><span class=\"o\">(</span><span class=\"n\">article</span><span class=\"o\">)</span>\n\n    <span class=\"n\">htmlDom</span> <span class=\"o\">=</span> <span class=\"n\">jsoup</span><span class=\"o\">.</span><span class=\"na\">parseString</span><span class=\"o\">(</span><span class=\"n\">htmlContent</span><span class=\"o\">)</span>\n\n    <span class=\"c1\">// application/ld+json</span>\n\n    <span class=\"n\">bioschemasSections</span> <span class=\"o\">=</span> <span class=\"n\">jsoup</span><span class=\"o\">.</span><span class=\"na\">select</span><span class=\"o\">(</span><span class=\"n\">htmlDom</span><span class=\"o\">,</span> <span class=\"s2\">\"script[type='application/ld+json']\"</span><span class=\"o\">);</span>\n\n    <span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">section</span> <span class=\"k\">in</span> <span class=\"n\">bioschemasSections</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n        <span class=\"n\">bioschemasJSON</span> <span class=\"o\">=</span> <span class=\"n\">section</span><span class=\"o\">.</span><span class=\"na\">html</span><span class=\"o\">()</span>\n        <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">importFromString</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">,</span> <span class=\"n\">bioschemasJSON</span><span class=\"o\">,</span> <span class=\"s2\">\"JSON-LD\"</span><span class=\"o\">)</span>\n    <span class=\"o\">}</span>\n<span class=\"o\">}</span>\n\n<span class=\"n\">turtle</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">asTurtle</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">);</span>\n\n<span class=\"n\">println</span> <span class=\"s2\">\"#\"</span> <span class=\"o\">+</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">size</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">)</span> <span class=\"o\">+</span> <span class=\"s2\">\" triples detected in the JSON-LD\"</span>\n<span class=\"c1\">// println turtle</span>\n\n\n<span class=\"n\">sparql</span> <span class=\"o\">=</span> <span class=\"s2\">\"\"\"\nPREFIX schema: &lt;http://schema.org/&gt;\nSELECT ?entity ?inchikey ?smiles WHERE {\n  ?entity a schema:MolecularEntity .\n  OPTIONAL { ?entity schema:inChIKey ?inchikey }\n  OPTIONAL { ?entity schema:smiles ?smiles }\n}\n\"\"\"</span>\n\n<span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">sparql</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">,</span> <span class=\"n\">sparql</span><span class=\"o\">)</span>\n\n<span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">i</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"o\">;</span><span class=\"n\">i</span><span class=\"o\">&lt;=</span><span class=\"n\">results</span><span class=\"o\">.</span><span class=\"na\">rowCount</span><span class=\"o\">;</span><span class=\"n\">i</span><span class=\"o\">++)</span> <span class=\"o\">{</span>\n  <span class=\"n\">println</span> <span class=\"s2\">\"${results.get(i, \"</span><span class=\"n\">inchikey</span><span class=\"s2\">\")}\\t${results.get(i, \"</span><span class=\"n\">smiles</span><span class=\"s2\">\")}\"</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n<p>The output is a simple table:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>MGAPJMNPGGTFHJ-JEIPZWNWSA-N     CN1C(=O)/C(=C/2\\C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)Cl)/C(=P(C5=CC=CC=C5)(C6=CC=CC=C6)C7=CC=CC=C7)C1=O\nXEWMQVUVGAHESA-UHFFFAOYSA-N     CC1=CC=C(C=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)C)C(=O)N(C)C2=O\nUVTJORFYHPGJDZ-PYCFMQQDSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=C(C)C=C3)/C1=O\nILWGDUYVQRAMMG-PGMHBOJBSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=C(C=C3)Cl)/C1=O\nCAFIBKBZWJFZCW-FXBPSFAMSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=CC=C3)/C1=O\nUOJSFLANMVIMBV-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)Cl)C1=O\nVNJBTGZXAGHCSO-OAPYJULQSA-N     COC(=O)/C(=C\\1/C2=C(C=CC=C2)N(CC3=CC=CC=C3)C1=O)/C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6\nKJXQRAKSOANQTJ-GFMRDNFCSA-N     CC1=CC=C(C=C1)NC/C(=C\\2/C3=C(C=CC=C3)N(CC4=CC=CC=C4)C2=O)/C#N\nIGEBJMZDOPBFGF-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=CC=C4)C1=O\nSSANVPNESOMKOM-AWQADKOQSA-N     C1=CC=C(C=C1)CN2C3=CC=C(C=C3/C(=C(/C#N)\\C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)/C2=O)Cl\nGEHWHSHQSIOZKL-NVQSTNCTSA-N     CCCCN1C2=CC=C(C=C2/C(=C\\3/C(=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)C(=O)N(C)C3=O)/C1=O)Cl\nPALRSQOHFLRWDH-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)OC)C1=O\nKBFODZMDSAFLFR-UHFFFAOYSA-N     CN1C(=O)C(=C(C1=O)NC2=CC(=CC=C2)Cl)C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl\nJCGAVVZYXDJPBU-GFMRDNFCSA-N     CC1=C(C=CC=C1)NC/C(=C\\2/C3=C(C=CC=C3)N(CC4=CC=CC=C4)C2=O)/C#N\nDZFPCPDEQGLPLY-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C)C=C4)C1=O\nXMRNJCJUOXYXJU-DAFNUICNSA-N     CC1=CC=C(C=C1)NC/C(=C\\2/C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)C)/C#N\nSSDSNBBHEUUKGI-UHFFFAOYSA-N     CC1=CC=C2C(=C1)C(C3=C(C(=O)N(C)C3=O)N(C)C4=CC=CC=C4)C(=O)N2CC5=CC=CC=C5\nUSFYPRDMNXMWPO-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)Br)C1=O\nXYHTWFULRHTEAG-MUGXBBEHSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(/C#N)\\C=P(C3=CC=CC=C3)(C4=CC=CC=C4)C5=CC=CC=C5)/C1=O\nXALDZIBHNNIVAM-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=C(C=CC=C4)O)C1=O\nTUTWQHBRQPMLME-OAPYJULQSA-N     COC(=O)/C(=C\\1/C2=CC(=CC=C2N(CC3=CC=CC=C3)C1=O)Cl)/C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6\nIYEHFTMZZMIPRU-UHFFFAOYSA-N     CC1=CC=C(C=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl)C(=O)N(C)C2=O\nKBSDGNPLIPXCEX-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NCC4=CC=CC=C4)C1=O\nBQGIUMITIGHBSD-UHFFFAOYSA-N     CCCCNC1=C(C2C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)C)C(=O)N(C)C1=O\nPNSOLOPHIVUPOZ-MNDPQUGUSA-N     CCCCNC/C(=C\\1/C2=CC(=CC=C2N(CCCC)C1=O)C)/C#N\nHLTBKJRJOIZCMJ-PYCFMQQDSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CN(C)C3=CC=CC=C3)/C1=O\nFFLHFLUBMRBQTB-UHFFFAOYSA-N     CCCCN1C2=CC=C(C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C)C=C4)C1=O)F\nFOQOVOLYYARWPA-NKFKGCMQSA-N     C1=CC=C(C=C1)CN2C3=C(C=CC=C3)/C(=C(\\C#N)/CNC4=CC(=CC=C4)Cl)/C2=O\nKLEPCAQFOXJLNV-UHFFFAOYSA-N     CC1=C(C=CC=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl)C(=O)N(C)C2=O\n</code></pre></div></div>\n<p>That also made me realize that there are not chemical names in the annotation. That would be really useful to move things\nforward. Then again, PubChem will likely just generate the IUPAC name, since they have access to such software anyway.\nThey have teamed up with PubChem which will index it, but I will be interested in seeing how to use this for\n<code class=\"language-plaintext highlighter-rouge\">main subject</code> annotation in <a href=\"https://www.wikidata.org/wiki/Wikidata:WikiProject_Chemistry\">Wikidata</a>.</p>\n<p>A final note for now, the model they use is annotate the article with chemical substances (<code class=\"language-plaintext highlighter-rouge\">ChemicalSubstance</code>) with\n(one or more?) molecular entities (`MolecularEntity'). That is a model that scales well to their other journal,\nthe <a href=\"https://scholia.toolforge.org/venue/Q814756\">Beilstein Journal of Nanotechnology</a>. But scraping that is for another post.</p>","doi":"https://doi.org/10.59350/yyjnz-n5j48","guid":"https://doi.org/10.59350/yyjnz-n5j48","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1739404800,"reference":[{"id":"https://doi.org/10.59350/ne4rf-wey66","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.1186/s13321-021-00520-4","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.1021/jm5002056","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.3762/bjoc.21.21","unstructured":"<b>[cito:usesDataFrom]</b>"},{"id":"https://doi.org/10.21105/joss.02558","unstructured":"<b>[cito:usesMethodIn]</b>"},{"id":"https://doi.org/10.59350/40377-hz881","unstructured":"<b>[cito:citesForInformation]</b>"}],"rid":"f4pz3-xcg49","summary":"Two weeks ago, the Beilstein Institute announced Bioschemas support in their journals:","tags":["Bioschemas","Rdf","Chemistry","Beilstein"],"title":"Beilstein journals contain Bioschemas","updated_at":1784926113,"url":"https://chem-bla-ics.linkedchemistry.info/2025/02/13/beiltein-journal-has-bioschemas.html","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>A good number of years ago, a colleague and I explored if we could get access to the <a href=\"https://chem-bla-ics.linkedchemistry.info/2025/02/16/retraction-data-in-wikidata.html/retractiondatabase.org/\">Retraction Watch Database</a>,\nbut we could not afford it. We have been using data on retractions for curate our databases, like\n<a href=\"https://www.wikipathways.org/\">WikiPathways</a>. A database should not contain knowledge based on (only) a retracted article.\nWikidata, btw, has a small number (499) of statements supported by retracted articles. Similarly, it turns out that I am\n<a href=\"https://w.wiki/8pwe\">citing retracted articles in two papers</a> (and a preprint of one of them).</p>\n<p><a href=\"https://www.wikidata.org/\">Wikidata</a> has a good number of retracted articles in their database\n(<a href=\"https://scholia.toolforge.org/statistics\">some 21 thousand at the time of writing</a>). A lot of this data\ncomes from CrossRef, that recently <a href=\"https://www.crossref.org/blog/news-crossref-and-retraction-watch/\">acquired the Retraction Watch Database</a>\n(doi:<a href=\"https://doi.org/10.13003/c23rw1d9\">10.13003/c23rw1d9</a>)) and started providing the content as FAIR and Open data.\nWith <a href=\"https://github.com/egonw/ons-wikidata/blob/main/RetractionWatch/quickstatements.groovy\">a Bacting-based script</a>\nI am regularly updating Wikidata with annotations from CrossRef, giving a rich dataset in Wikidata around\nthe queries. Over the past few years I have written various SPARQL queries to show the results which today\nI <a href=\"https://bigcat-um.github.io/sparql-examples/examples/WikidataRetractions/\">collected under a single home</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/retraction_SPARQL.png\"/></p>","doi":"https://doi.org/10.59350/w4zj3-mbw53","guid":"https://doi.org/10.59350/w4zj3-mbw53","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1739664000,"reference":[{"id":"https://doi.org/10.1093/nar/gkad960","unstructured":"Unknown title"},{"id":"https://doi.org/10.13003/c23rw1d9","unstructured":"<b>[cito:citesAsEvidence]</b>"}],"rid":"e8vfg-wqz89","summary":"A good number of years ago, a colleague and I explored if we could get access to the Retraction Watch Database, but we could not afford it. We have been using data on retractions for curate our databases, like WikiPathways. A database should not contain knowledge based on (only) a retracted article. Wikidata, btw, has a small number (499) of statements supported by retracted articles.","tags":["Wikidata","Wikipathways"],"title":"Retracted articles in Wikidata","updated_at":1784926112,"url":"https://chem-bla-ics.linkedchemistry.info/2025/02/16/retraction-data-in-wikidata.html","version":"v1"}}],"items":[{"authors":[{"contributor_roles":[],"name":"Atarraya"}],"blog":{"authors":null,"community_id":"f17066f5-0dbf-48d0-a413-b22a79861a94","created":1723852800,"current_feed_url":null,"description":"Nuestras historias","doi":"https://doi.org/10.59350/atarraya","favicon":"https://rogue-scholar.org/api/communities/f17066f5-0dbf-48d0-a413-b22a79861a94/logo","feed_format":"application/atom+xml","feed_url":"https://blogatarraya.com/feed/atom/","filter":null,"generator":"Other","home_page_url":"https://blogatarraya.com","issn":null,"language":"spa","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":true,"slug":"atarraya","status":"active","subfield":"1202","title":"BLOG ATARRAYA","updated":1784231581,"use_api":true},"blog_name":"BLOG ATARRAYA","blog_slug":"atarraya","content_html":"<div></div>","doi":"https://doi.org/10.59350/fhdsa-t7984","guid":"https://blogatarraya.com/?p=7142","language":"es","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784505600,"rid":"ck3z8-3t470","tags":["Historia Del Movimiento Obrero","Historia Pol\u00edtica","N\u00famero 31"],"title":"Las huelgas de oto\u00f1o de 1948 en el M\u00e9xico de Miguel Alem\u00e1n Vald\u00e9s","updated_at":1785096133,"url":"https://blogatarraya.com/2026/07/20/las-huelgas-de-otono-de-1948-en-el-mexico-de-miguel-aleman-valdes/","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that\ndo a great job. Last year and last week, I attended two technical <a href=\"https://www.inchi-trust.org/\">InChI</a> meetings, both with\n<a href=\"https://en.wikipedia.org/wiki/Organometallic_chemistry\">organometallic compounds</a> as one of the key topics. Thanks to\n<a href=\"https://bsky.app/profile/herreslab.bsky.social\">Sonja</a> (<a href=\"https://fed.brid.gy/bsky/herreslab.bsky.social\">Mastodon bridge</a>)\nand <a href=\"https://www.linkedin.com/in/gerd-blanke-b13115/\">Gerd</a> for the invitations. My role includes thinking about what all the\nwork on the InChI means for the <a href=\"http://cdk.github.io/\">Chemistry Development Kit</a>.</p>\n<p>Many things came up. One was testing of new InChI functionality for these organometallic compounds, particularly the stereochemistry.\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2007/08/02/molecules-in-wikipedia.html\">Wikipedia has many chemical compounds</a> and could\nbe a source, but <a href=\"https://chem-bla-ics.linkedchemistry.info/2022/11/12/wikidata-script-for-smiles-smarts-and.html\">so does Wikidata</a>.\nBoth use the SMILES, but not all SMILES captures all the chemistry we need. And the InChI software needs\n<a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#V3000\">an V3000 MDL Molfile</a>. Thanks to John and other CDK developers, there\nis good support for recent cheminformatics software, but I was not sure it had what I would need.</p>\n<p>This post is the first of a few related posts. This post is about converting SMILES from <a href=\"https://wikidata.org/\">Wikidata</a>\nto V3000 files. Take <a href=\"https://qlever.scholia.wiki/chemical/Q412415\">cisplatin</a>: it has four ligands around a platinum atom,\nall in a single plane:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/cisplatin.png\"/></p>\n<p>In this image, in red, is actually an annotation of how the ligands are oriented around the platinum. This is also reflected\nin the <em>isomeric SMILES</em> in Wikidata: <code class=\"language-plaintext highlighter-rouge\">Cl[Pt@SP1]([NH3])([NH3])Cl</code>.</p>\n<p>The following source code is written in <a href=\"https://chem-bla-ics.linkedchemistry.info/tag/groovy\">Groovy</a> which I have used for many\nyears because it is less verbose than Java. First, we set up our helper classes:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-smiles'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-silent'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-ctab'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'org.openscience.cdk'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'cdk-sdg'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'2.12'</span><span class=\"o\">)</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.smiles.SmilesParser</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.silent.SilentChemObjectBuilder</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.io.SDFWriter</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">org.openscience.cdk.layout.StructureDiagramGenerator</span><span class=\"o\">;</span>\n<span class=\"kn\">import</span> <span class=\"nn\">javax.vecmath.Vector2d</span>\n\n<span class=\"n\">builder</span> <span class=\"o\">=</span> <span class=\"n\">SilentChemObjectBuilder</span><span class=\"o\">.</span><span class=\"na\">getInstance</span><span class=\"o\">()</span>\n<span class=\"n\">sp</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SmilesParser</span><span class=\"o\">(</span><span class=\"n\">builder</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">StructureDiagramGenerator</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>With some extra code, I can actually get many compounds from Wikidata to convert to v3000 with a SAPRQL (as I have done\nlast year with CXSMILES and polymers, unpublished), but let's go with a single example:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">smiles</span> <span class=\"o\">=</span> <span class=\"s2\">\"Cl[Pt@SP1]([NH3])([NH3])Cl\"</span>\n<span class=\"n\">label</span> <span class=\"o\">=</span> <span class=\"s2\">\"cisplatin\"</span>\n<span class=\"n\">wdItem</span> <span class=\"o\">=</span> <span class=\"s2\">\"Q412415\"</span>\n</code></pre></div></div>\n<p>I can parse the SMILES and generated 2D coordinates with (which is also the approach by <a href=\"https://www.simolecule.com/cdkdepict/depict/bow/svg?smi=Cl%5BPt%40SP1%5D(%5BNH3%5D)(%5BNH3%5D)Cl&amp;zoom=2.0&amp;annotate=cip\">CDK Depict</a>\nwhich I used for the above 2D diagram of cisplatin):</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sp</span><span class=\"o\">.</span><span class=\"na\">parseSmiles</span><span class=\"o\">(</span><span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">setMolecule</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">generateCoordinates</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">Vector2d</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"mi\">1</span><span class=\"o\">));</span>\n<span class=\"n\">mol</span> <span class=\"o\">=</span> <span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">getMolecule</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>If you have more than one molfile, they can be combined into a <a href=\"https://en.wikipedia.org/wiki/Chemical_table_file#SDF\">SD file</a>,\nto which additional properties can be added:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setTitle</span><span class=\"o\">(</span><span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_SYNONYM\"</span><span class=\"o\">,</span> <span class=\"n\">label</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_SUBSTANCE_COMMENT\"</span><span class=\"o\">,</span> <span class=\"n\">smiles</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_DATASOURCE_REGID\"</span><span class=\"o\">,</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n<span class=\"n\">mol</span><span class=\"o\">.</span><span class=\"na\">setProperty</span><span class=\"o\">(</span><span class=\"s2\">\"PUBCHEM_EXT_SUBSTANCE_URL\"</span><span class=\"o\">,</span> <span class=\"s2\">\"https://qlever.scholia.wiki/\"</span> <span class=\"o\">+</span> <span class=\"n\">wdItem</span><span class=\"o\">)</span>\n</code></pre></div></div>\n<p>And then generate the actual SD file with:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">writer</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">FileWriter</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"n\">File</span><span class=\"o\">(</span><span class=\"s2\">\"demo.sdf\"</span><span class=\"o\">))</span>\n<span class=\"n\">SDFWriter</span> <span class=\"n\">sdfWriter</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">SDFWriter</span><span class=\"o\">(</span><span class=\"n\">writer</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">getSetting</span><span class=\"o\">(</span><span class=\"n\">SDFWriter</span><span class=\"o\">.</span><span class=\"na\">OptAlwaysV3000</span><span class=\"o\">).</span><span class=\"na\">setSetting</span><span class=\"o\">(</span><span class=\"s2\">\"true\"</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">write</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">);</span>\n<span class=\"n\">sdfWriter</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n<span class=\"n\">writer</span><span class=\"o\">.</span><span class=\"na\">close</span><span class=\"o\">();</span>\n</code></pre></div></div>\n<p>We then get this v3000 file:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>cisplatin\n  CDK     07262618042D\n\n  0  0  0     0  0            999 V3000\nM  V30 BEGIN CTAB\nM  V30 COUNTS 5 4 0 0 0\nM  V30 BEGIN ATOM\nM  V30 1 Cl -1.29904 2.25 0 0\nM  V30 2 Pt 0 1.5 0 0\nM  V30 3 N 1.29904 2.25 0 0 VAL=4\nM  V30 4 N 1.29904 0.75 0 0 VAL=4\nM  V30 5 Cl -1.29904 0.75 0 0\nM  V30 END ATOM\nM  V30 BEGIN BOND\nM  V30 1 1 2 1 CFG=3\nM  V30 2 1 2 3 CFG=3\nM  V30 3 1 2 4 CFG=1\nM  V30 4 1 2 5 CFG=1\nM  V30 END BOND\nM  V30 END CTAB\nM  END\n&gt; &lt;PUBCHEM_SUBSTANCE_COMMENT&gt;\nCl[Pt@SP1]([NH3])([NH3])Cl\n\n&gt; &lt;PUBCHEM_EXT_DATASOURCE_REGID&gt;\nQ412415\n\n&gt; &lt;PUBCHEM_SUBSTANCE_SYNONYM&gt;\ncisplatin\n\n&gt; &lt;PUBCHEM_EXT_SUBSTANCE_URL&gt;\nhttps://qlever.scholia.wiki/Q412415\n\n$$$$\n</code></pre></div></div>\n<p>I can copy/paste the resulting v3000 content to the <a href=\"https://iupac-inchi.github.io/InChI-Web-Demo/\">InChI Web Demo</a> to calculate the\nStandard InChI:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1S/2ClH.2H3N.Pt/h2*1H;2*1H3;/q;;;;+2/p-2\n</code></pre></div></div>\n<p>And this is what the two technical meetings I attended were about: <em>molecular inorganics</em>. The above InChI does not feel right,\nand certainly lost the connectivity of the ligands with the platinum. However, if we add the beta option <code class=\"language-plaintext highlighter-rouge\">-MolecularInorganics</code>,\nthen we get this InChI (where the <code class=\"language-plaintext highlighter-rouge\">B</code> in <code class=\"language-plaintext highlighter-rouge\">InChI=1B</code> reflects the beta state of this feature):</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>InChI=1B/Cl2H6N2Pt/c1-5(2,3)4/h3-4H3\n</code></pre></div></div>\n<p>However, this beta version does not distinguish cisplatin from <a href=\"https://qlever.scholia.wiki/chemical/Q25403157\">transplatin</a>. For that,\nwe need to dive into how to represent the stereochemistry of these inorganics first.</p>","doi":"https://doi.org/10.59350/yhf27-fp921","funding_references":[{"awardTitle":"FAIR4ChemNL: Accelerating the adoption of universal data standards in chemistry","awardUri":"https://doi.org/10.61686/xvyqv45374","funderIdentifier":"https://ror.org/04jsz6e67","funderIdentifierType":"ROR","funderName":"Dutch Research Council"}],"guid":"https://doi.org/10.59350/yhf27-fp921","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1785024000,"rid":"vehf9-7z273","summary":"Making chemistry more FAIR requires unique identifiers for chemical structures. For organic compounds plenty of solutions exist that do a great job. Last year and last week, I attended two technical InChI meetings, both with organometallic compounds as one of the key topics. Thanks to Sonja (Mastodon bridge) and Gerd for the invitations. My role includes thinking about what all the work on the InChI means for the Chemistry Development Kit.","tags":["Chemistry","Inchi","Wikidata","Smiles","Pubchem"],"title":"Molecular Inorganics: SMILES, MDL molfile v3000, and InChIs","updated_at":1785084975,"url":"https://chem-bla-ics.linkedchemistry.info/2026/07/26/inorganic-compounds-smiles-mdl-molfile-v3000-and-inchis.html","version":"v1"},{"authors":[{"contributor_roles":[],"family":"Gilliam","given":"Eric"}],"blog":{"authors":[{"name":"Eric Gilliam"}],"community_id":"bde6b3e1-a527-4823-81b8-b803908bb948","created":1780876800,"current_feed_url":null,"description":"I want to help people start historically great labs. Operational histories on history's best R&D orgs.","doi":"https://doi.org/10.59350/freaktakes","favicon":"https://rogue-scholar.org/api/communities/bde6b3e1-a527-4823-81b8-b803908bb948/logo","feed_format":"application/rss+xml","feed_url":"https://www.freaktakes.com/feed","filter":null,"generator":"Substack","home_page_url":"https://www.freaktakes.com","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":null,"slug":"freaktakes","status":"active","subfield":"1207","title":"FreakTakes","updated":1784997250,"use_api":null},"blog_name":"FreakTakes","blog_slug":"freaktakes","content_html":"<p><span>A close reading of the early history of the Advanced Research Projects Agency (ARPA) \u2014 the ARIA-like agency in the US that funded the early internet and autonomous vehicles \u2014 yields a key lesson: exceptional projects were usually the result of exceptional contractors. World-changing ARPA successes like the</span><a href=\"https://www.freaktakes.com/p/the-third-university-of-cambridge\"><span> ARPAnet</span></a><span> and</span><a href=\"https://www.freaktakes.com/p/an-interview-with-chuck-thorpe-on\"><span> early autonomous vehicles</span></a><span> were the result of a common shape of R&amp;D org, one structured, incentivized, and staffed differently than typical academic labs or VC-funded startups. These orgs pursued exceptionally ambitious North Star technical visions, fueled by a mix of contracts and grants. We call orgs of this shape frontier research contractors (FRCs).</span></p><h2><strong><span>What makes an R&amp;D org an FRC?</span></strong></h2><p><span>FRCs pursue their technical visions by building technology to solve difficult real-world problems, using customer demand to guide their research direction. History shows us that FRCs can be exceptional platforms for ambitious, applied-minded scientists to move their field of R&amp;D forward. Two historical examples that inspire us include:</span></p><ul><li><p><strong><span>J.C.R. Licklider's early BBN computing team at Bolt, Beranek and Newman. </span></strong><span>Their technical vision was to build a world of interactive computing, which led them to implement the first version of the internet in the 1960s.</span></p></li><li><p><strong><span>Early Carnegie Mellon's autonomous vehicle team.</span></strong><span> Their technical vision of self-driving vehicles led them to successfully take a vehicle cross-country 98.5% autonomously in 1997.</span></p></li></ul><p><span>FRCs can be nonprofit or for-profit R&amp;D groups, with technical visions ranging from building individual tools to bootstrapping frontier labs into existence. What they all have in common is their commitment to fueling their ambitious technical work through a mix of contracts and grants.</span></p><h2>What is the FRC Launchpad?</h2><p><span>As government R&amp;D funders such as ARIA increasingly chase early ARPA-style outcomes, we need ambitious FRCs to do key portions of the work. That's why we created the Frontier Research Contractor Launchpad, an experimental programme in which FRC founders working in ARIA technical areas were given (1) \u00a3100k and (2) a year of operational + strategic guidance in building and expanding their FRCs.</span></p><p><span>The FRCs involved ranged from a team with only one employee and less than a year old to teams of almost two dozen that were approximately three years old. Upon selection, each founder had a clearly honed North Star technical vision and a sense of what types of customers and funders could fuel their work. All teams, regardless of age, planned to use their participation in the programme to establish a foothold in some new market. And each team was selected with the belief that if they succeeded in doing this, their field would be materially better for it.</span></p><p><span>Beyond the \u00a3100k in financial resources, the programme made a special effort to help founders overcome the temptation to chase funding piecemeal, application by application, and instead build a core customer strategy to reliably fund progress towards their technical visions. We complemented this funding and strategy work with additional resources including founder group workshops, 1:1 sessions, and active network-building on behalf of each FRC.</span></p><h2>Results from our first year of the FRC Launchpad</h2><p><span>Each of the five teams in the FRC Launchpad was selected with the belief that their success in establishing a foothold in a new market or research area would materially improve their entire field. Each set a goal for what they wanted to accomplish with the programme.</span></p><p><span>Nine months in, the results are exceptionally promising. The following per-team subsections describe the technical ambition of these organisations and progress towards their goals thus far.</span></p><p><strong><span>Cultivarium.</span></strong><span> Cultivarium began its life as a Focused Research Organization (FRO). FROs are often called \"nonprofit startups\", and tend to be founded in areas where startup-like efforts are optimal for progress, but in which the massive upside of the effort is public benefit-related, rather than a $10 billion+ commercial upside. Cultivarium was founded to build the tools and models essential to making it faster, cheaper, and easier to work with non-model organisms \u2014 enabling greater access to the entire tree of life in biological investigations. Through Cultivarum's (Cultivarium CEO) programme participation, Cultivarium has succeeded in transitioning from a time-bound, philanthropically funded FRO to a self-sustaining FRC \u2014 that can exist indefinitely if the org continues to solve problems for funders with applied needs. Through Cultivarum's participation in participation in the the FRC Launchpad, Cultivarium won two large contracts: one with an organism-focused philanthropy to ensure Cultivarium's models and tools speed up the work of the funder's PIs using a particular organism, and a second large contract of a similar structure.</span></p><p><strong><span>Living Physics.</span></strong><span> Living Physics was funded into existence by an ARIA </span><a href=\"https://aria.org.uk/opportunity-spaces/nature-computes-better\"><span>Nature Computes Better</span></a><span> opportunity seed - ARIA's highly flexible 'fast grant' funding mode designed to support speculative scientific research with immense potential in a lighter-touch manner than ARIA's programme funding.. ARIA's Nature Computes Better opportunity space is dedicated to scaling computational efficiency, and has looked for inspiration to natural systems \u2014 which are often orders of magnitude more efficient than modern computers. David Jordan (Living Physics founder) is a biologist who can be thought of as having the mindset of a physicist, the hands of an engineer and the expertise of a biologist. Using the perch his ARIA opportunity seed created, David plans to turn Living Physics into a center of excellence at the intersection of engineering physics and biology. Specifically, his group is building a suite of instruments (e.g., Raspberry Pi-powered bioreactors) and partnerships to move forward the state-of-the-art in theoretical biology, such as understanding how information is processed in biological systems. Biology is a complex subject in which improved measurement and perturbation are often key capacity bottlenecks. Through the FRC Launchpad, David is finding early success in scaling his org from a purely research endeavor to one that accelerates science for others by building instrumentation for ambitious researchers and partnering with research groups that require the skills of people like him. These contracts, which Living Physics achieved through the FRCL, are allowing Living Physics to operate as a self-sustaining R&amp;D org that can take their research into real-world applications. In addition, Living Physics is leveraging the operational know-how gained through the FRC Launchpad to spearhead applications for larger contracts that take advantage of this center of excellence he is building outside of the university and VC ecosystems, one that pairs an exceptionally ambitious research agenda with an intense desire to build artifacts of applied technology.</span></p><p><strong><span>Syntato.</span></strong><span> Syntato was also funded into existence by an ARIA grant, from ARIA's </span><a href=\"https://aria.org.uk/opportunity-spaces/programmable-plants/synthetic-plants\"><span>Synthetic Plants</span></a><span> programme that is looking to build fully synthetic plant genomes and chloroplasts. Syntato was founded, in part, to address a key programme need: building better applied crop genetics tooling. This was necessary because in agriculture, the venture capital model is not well-suited to areas like \"tools for transgenic crop design\". Syntato has built an integrated team of engineers and researchers that is as ambitious as any basic research group, but focused on building good tools for industrial crop biotechnology. During Syntato's FRC Launchpad participation, Syntato has secured additional ARIA funding, a four-year Bezos PhD studentship, with several larger applications for research projects. These applications add up to over \u00a35M in opportunities, with a high probability that at least \u00a31M will be secured in the next few months.</span></p><p><strong><span>Basis Institute.</span></strong><span> Basis builds reasoning engines: AI systems that automatically construct simulators and world models from knowledge and data, and use them to predict the future, explain the past, and reason about counterfactuals. Basis's North Star technical ambition is a \"universal reasoning engine\": a new foundation for AI that unifies probabilistic, causal, and mathematical reasoning over computational models of every kind. Basis has funded itself for several years through a mix of philanthropic support from those who believe in its vision, contracts from funders like ARIA and DARPA, and experimental contracts with companies. While Basis is building towards a general set of technical capabilities, it views working on targeted challenge problems (particularly in the sciences) as an ideal way to make progress. It believes this sustained problem-solving will surface lessons enabling it to steadily generalize its methods. In effect, Basis is trying to use its base of contracts and grants to build a new frontier lab, one with a path to simultaneously being self-sustaining, solving fundamental research problems, and building scalable technology that solves real-world problems. During its FRCL participation, Basis has established several promising contract leads that will expand its capacity to tackle challenges in the UK R&amp;D ecosystem.</span></p><p><strong><span>Topos Institute.</span></strong><span> The Topos Institute is an FRC focused on problems of applied category theory and mathematical software engineering, founded with the deep belief that category theory can be a useful, coherent modeling language in the sciences, particularly in problems that require communicating across disciplines. Similar to Basis, Topos seeks to increase the generality of its systems by continually solving specific challenge problems. Topos has also funded itself for several years with a funding mix similar to Basis. During its FRCL participation, the org has succeeded in diversifying the variety of contract partners in its Oxford office, and is actively considering how it might use the corps of talent it has built up to build increasingly useful pieces of technology for users. Many Topos employees would be at home in either top mathematics departments or AI labs. Its success in building a financially sustainable FRC enables this world-class group to marshal their talents in service of a technical goal that is simultaneously big-if-true, but not on the radar of the VC ecosystem.</span></p><h2>If this sounds like you, apply to be a part of our second cohort!</h2><p><span>Due to the success of the first FRCL cohort, ARIA is expanding our next cohort to eight teams! Read more about the programme here [link to RenPhil website]. We'll also be hosting a webinar for any interested applicants on Aug 10 at 5pm BST: register </span><a href=\"https://hnqpk7fcez.zite.so\"><span>here</span></a><span>! The FRC Launchpad team \u2014 Eric Gilliam and Janelle Tam \u2014 are eager to chat with any team that can substantially move the work of any ARIA opportunity space forward. Feel free to reach out to them at </span><a href=\"mailto:eric.gilliam@renphil.org\"><span>eric.gilliam@renphil.org</span></a><span> and </span><a href=\"mailto:janelle.tam@renphil.org\"><span>janelle.tam@renphil.org</span></a><span>.</span></p><p><span>Strong applications will have both a big-if-true technical vision </span><em><span>and</span></em><span> a clear thesis for a set of contracts and grants which can fuel the vision indefinitely. And these orgs should be building towards goals that could not be built within academic labs or the VC-funded path.</span></p><p><span>Existing ARIA Creators looking to find a way to use the perch offered by their ARIA to turn their efforts into self-sustaining FRCs are particularly encouraged to apply. The shape of each founder's technical ambition will vary \u2014 FRO-like, frontier lab-like, center of excellence in some area, ambitious CRO-like efforts, etc. What's important is the founders' commitment to building an R&amp;D organization that is simultaneously ambitious and able to financially sustain itself through a mix of contracts and grants.</span></p><p><span>If that sounds like you, check out the application </span><a href=\"https://www.renaissancephilanthropy.org/uk-horizons-frc\"><span>here</span></a><span>! Applications close Aug 21.</span></p><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://www.freaktakes.com/p/frontier-research-contractor-launchpad?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://www.freaktakes.com/p/frontier-research-contractor-launchpad?utm_source=substack&utm_medium=email&utm_content=share&action=share\"><span>Share</span></a></p><p></p>","doi":"https://doi.org/10.59350/7p64w-b6c46","guid":"208236587","image":"https://substack-post-media.s3.amazonaws.com/public/images/a143032e-1c92-4d82-a297-9b995f0561b2_500x263.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784937600,"rid":"sw1bk-bh518","summary":"A close reading of the early history of the Advanced Research Projects Agency (ARPA) \u2014 the ARIA-like agency in the US that funded the early internet and autonomous vehicles \u2014 yields a key lesson: exceptional projects were usually the result of exceptional contractors.","title":"Frontier Research Contractor Launchpad: First Cohort Results","updated_at":1784998204,"url":"https://www.freaktakes.com/p/frontier-research-contractor-launchpad","version":"v1"},{"authors":[{"contributor_roles":[],"family":"O'Reilly","given":"Tim"}],"blog":{"authors":[{"name":"Asimov's Addendum"}],"community_id":"0b81a230-f3a4-4f15-b6db-f262083c3797","created":1781481600,"current_feed_url":"https://asimovaddendum.substack.com/feed/","description":"A publication by Tim O'Reilly and Ilan Strauss on AI commercialization risks and governance. Disclosure and protocols for healthy AI ecosystems.","doi":null,"favicon":"https://rogue-scholar.org/api/communities/0b81a230-f3a4-4f15-b6db-f262083c3797/logo","feed_format":null,"feed_url":"asimovaddendum","filter":null,"generator":"Substack","home_page_url":"https://asimovaddendum.substack.com/","issn":null,"language":"eng","license":"https://creativecommons.org/licenses/by/4.0/legalcode","prefix":"10.59350","relative_url":null,"secure":null,"slug":"asimovaddendum","status":"active","subfield":"1702","title":"Asimov's Addendum","updated":1784982846,"use_api":true},"blog_name":"Asimov's Addendum","blog_slug":"asimovaddendum","content_html":"<p style=\"text-align: center;\"></p><p><span>Ask ChatGPT, Claude and Grok the same question and you get three different answers. Yes, the facts are (largely) the same, but it's clear that three different personalities answer back. OpenAI shipped first and established a template for what a helpful assistant sounds like, careful and accommodating and reluctant to give offense. Anthropic leaned into guardrails and values and character and trained Claude against a written constitution. Elon Musk built </span><a href=\"https://www.huffpost.com/entry/elon-musk-grok-ai-chatbot_n_65490dfde4b0e3ecaf8a42df\"><span>Grok</span></a><span> to be the rebellious one, the anti-woke alternative to everything Musk thought had gone soft in the rest of the industry.</span></p><p><span>It's not just the models that are differentiated, though. The experience of individuals interacting with AI is shaped by the personality and values designed into the system. And as we accumulate more context with a model, we are more and more a \"ChatGPT user,\" a \"Claude user,\" or a \"Grok user.\" This is not entirely unlike being a Mac user vs. a PC user, or an iPhone user vs. an Android user, or being part of the Apple ecosystem or the Google ecosystem. Companies depend on this tribalism. It's part of their moat. But in AI, the moat may be deeper than in past environments where our belonging was marked by the programs we use and the artifacts they created for us, because here it is also a matter of shared landscapes of thought.</span></p><p><span>Gregory Bateson gave a name to this phenomenon in the 1930s, after fieldwork among the Iatmul people of the Sepik River in New Guinea. He called it </span><a href=\"https://en.wikipedia.org/wiki/Schismogenesis\"><span>schismogenesis</span></a><span>, \"a process of differentiation in the norms of individual behaviour\" driven by repeated interaction. He saw two forms. In symmetrical schismogenesis, each side answers the other with more of the same, boast for boast, as if it were a kind of an arms race. In complementary schismogenesis, the behavior of one draws out the behavior of the other. I'm not sure I completely understand Bateson's distinction here since I read his </span><em><a href=\"https://www.amazon.com/Steps-Ecology-Mind-Anthropology-Epistemology/dp/0226039056\"><span>Steps to an Ecology of Mind</span></a></em><span> over 50 years ago and haven't looked at it since, but sometimes even a misunderstood concept can still be a tool for insight. (I've used Claude to help me tease out my half-remembered lessons.)</span></p><p><span>Relating these two forms to AI, I would say (correctly or not) that OpenAI, Anthropic, and DeepMind are engaged in a form of symmetrical schismogenesis, initially all trying to outdo each other in promises of AI safety, and with boasts of the power of their models to shape the AI future. </span><a href=\"http://x.ai/Grok\"><span>X.ai/Grok</span></a><span>, on the other hand, represents a kind of complementary schismogenesis, an explicit effort to be what the others aren't. Mistral (and sovereign AI in general) represents another kind of complementary schismogenesis. After all, if you are French, or Chinese, or even just a company trying to carve out your own place in an increasingly homogenized world, do you really want to adopt your values wholesale from whatever is on offer by the big labs?</span></p><p><span>David Graeber and David Wengrow ran with Bateson's idea in their book </span><em><a href=\"https://books.google.com/books/about/The_Dawn_of_Everything.html?id=9xkQEAAAQBAJ\"><span>The Dawn of Everything</span></a></em><span>. They used it to explain neighboring societies organized as near mirror opposites. On the Pacific coast the fishing peoples of the Northwest were hierarchical, kept slaves, and threw competitive feasts, while the acorn-gathering peoples of California to their south were industrious, frugal, and suspicious of hoarded status. The difference was not just determined by climate or crops. People became what they were partly by refusing to resemble the neighbors across the way. Graeber and Wengrow describe these cultural choices as a kind of play, but it is serious play that can harden into rivalry and conflict.</span></p><h2><span>A schismogenetic tree</span></h2><p><span>The idea that schismogenesis is a kind of cultural game minimizes environmental factors that can shape it. Google Research built the transformer in 2017, the architecture every one of these models runs on. Yet because of the company's heritage, Google's first implementation, BERT, was positioned as an improvement to search, used to better understand the intent behind search queries, particularly longer, conversational, or preposition-heavy searches. By 2021 Google had a conversational model, LaMDA, good enough that one of its own engineers went public the next year claiming it was sentient. But Google never shipped it. A model that answers your question in a paragraph threatened Google's search franchise, more than $160 billion a year and most of Alphabet's revenue. Google could have built chat earlier than anyone but had the most to lose by shipping it. This is a version of what is sometimes called \"the Kodak curse.\" Kodak made early breakthroughs in digital photography that they never properly commercialized because of the desire to protect their highly profitable film/chemistry business.</span></p><p><span>OpenAI had no search revenue to protect, so putting a chat box on the open web in 2022 cost it nothing. And so the leader became the follower. After ChatGPT reached a hundred million users in only two months, Google CEO Sundar Pichai declared a code red, pulled founders Larry Page and Sergey Brin back into product meetings, and within weeks Google shipped Bard, whose first public demo got a fact about the James Webb telescope wrong and knocked $100 billion off Alphabet in a day. In short, the company that invented the technology arrived late, got rattled, and ever since has been building chat into search with one hand while defending search from chat with the other. So yes, the environment is a factor ;-)</span></p><p><span>Schismogenesis usually works below the level of intention, though. It's an accumulating cultural drift nobody quite chooses. But in the case of the big AI models, schismogenesis seems to have been quite deliberate.</span></p><p><span>With Claude and with Grok you could watch their owners reach in and deliberately turn the dial. Claude drove AI further into caution and a published set of values. Musk took the other side. When early testers ran Grok through the standard political batteries and found it sitting left of center, near ChatGPT, Musk said xAI would move it, and over the next updates its answers marched right in step with his own posts on X.</span></p><p><span>Google did not differentiate because it was held in place by the business it had to defend, but OpenAI and Anthropic and xAI differentiated because they were free to, with no franchise holding them back. It's true that OpenAI was driven by strategic business considerations and its hope to dethrone Google, but both Anthropic and </span><a href=\"http://x.ai\"><span>X.ai</span></a><span> made their choices initially for cultural reasons. They are a pure demonstration of schismogenesis.</span></p><p><span>So too, the open-weight world has defined itself against the closed labs, and the choice to publish weights is now as much an identity as an engineering decision, a way of saying \"we are the ones who do not lock you in.\" Meta leaned on open weights to distinguish itself from OpenAI and Google, and the Chinese labs that shipped strong open models turned openness into a powerful business strategy.</span></p><p><span>Further up the stack, differentiation is the whole game. When the underlying capability commoditizes, the players who capture value are the ones who stake out a position nobody else holds. Schismogenesis is not a cultural curiosity. It is a competitive strategy, and in a market this crowded it may be the main one.</span></p><h2><span>Steve Jobs was good at this</span></h2><p><span>None of this story would have surprised Steve Jobs, who turned schismogenesis into a marketing case study. Apple's </span><a href=\"https://www.cbsnews.com/news/apples-iconic-1984-ad-25-years-later/\"><span>1984 ad</span></a><span> did not sell the Mac on the basis of its processor speed or available memory, as PC advertising of the day was likely to do. Ridley Scott shot a runner sprinting into a hall of gray obedient faces and throwing a hammer through Big Brother on the screen. The tag said the Macintosh was why 1984 would not be like </span><em><span>1984</span></em><span>. IBM was conformity and the Mac was the hammer. Thirteen years later </span><a href=\"https://en.wikipedia.org/wiki/Think_different\"><span>Think Different</span></a><span>, a riff on IBM's one-word slogan \"Think!\", put Einstein and Gandhi and Lennon on billboards and toasted \"the crazy ones.\" Apple built a company on being the deliberate opposite of the beige box on the office desk.</span></p><div class=\"captioned-image-container\"><figure><a class=\"image-link image2 is-viewable-img\" target=\"_blank\" href=\"https://www.youtube.com/watch?v=VtvjbmoDx-I\" data-component-name=\"Image2ToDOM\"><div class=\"image2-inset\"><picture><source type=\"image/webp\" srcset=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 424w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 848w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1272w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1456w\" sizes=\"100vw\"><img src=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png\" width=\"1456\" height=\"1049\" data-attrs=\"{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1049,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1445441,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.youtube.com/watch?v=VtvjbmoDx-I&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://asimovaddendum.substack.com/i/208409829?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}\" class=\"sizing-normal\" alt=\"\" title=\"\" srcset=\"https://substackcdn.com/image/fetch/$s_!VQ3n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 424w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 848w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1272w, https://substackcdn.com/image/fetch/$s_!VQ3n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png 1456w\" sizes=\"100vw\" loading=\"lazy\"></picture><div class=\"image-link-expand\"><div class=\"pencraft pc-display-flex pc-gap-8 pc-reset\"><button tabindex=\"0\" type=\"button\" class=\"pencraft pc-reset pencraft icon-container restack-image\"><svg aria-hidden=\"true\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" stroke-width=\"1.5\" stroke=\"var(--color-fg-primary)\" stroke-linecap=\"round\" stroke-linejoin=\"round\" xmlns=\"http://www.w3.org/2000/svg\"><g><path d=\"M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882\"></path></g></svg></button><button tabindex=\"0\" type=\"button\" class=\"pencraft pc-reset pencraft icon-container view-image\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-maximize2 lucide-maximize-2\"><polyline points=\"15 3 21 3 21 9\"></polyline><polyline points=\"9 21 3 21 3 15\"></polyline><line x1=\"21\" x2=\"14\" y1=\"3\" y2=\"10\"></line><line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\"></line></svg></button></div></div></div></a></figure></div><p style=\"text-align: center;\">Scene from <a href=\"https://www.youtube.com/watch?v=VtvjbmoDx-I\">Apple's legendary 1984 Superbowl ad</a>. </p><p><span>The AI labs might learn something from Jobs, because his differentiation was generative in a way that a purely oppositional version is not. Apple defined itself against IBM, but it defined itself </span><em><span>for</span></em><span> something, the individual, the artist, the person who wanted a tool that felt like it was on their side. IBM was the foil, but the content was a positive idea of who you became by choosing the Mac. That is the difference between an identity you build for yourself and one you shape too narrowly in response to a real or perceived enemy. </span></p><p><span>I think Anthropic understands positive differentiation. They started with their core values, but they used those values to choose a market position with thoughtful, careful, and caring AI at the heart of it. Their users depend on the reliability that their values offer. Grok, by contrast, has the foil without the substance. Its identity is principally the negation of the models it dislikes.</span></p><p><span>Of course, not all differentiation is schismogenesis. Different teams attacking the same problem come up with different solutions, keep what advantage they can proprietary, but at the same time they try to copy the best from their rivals. Much of the stack actually converges. Claude Code and Codex feel like siblings. But we don't want a monoculture. We need healthy schismogenesis. It's a competitive frontier, part of what the poet Wallace Stevens called</span><a href=\"https://www.billcollinsenglish.com/OrdinaryEveningHaven.html\"><span> \"search[ing] a possible for its possibleness.\"</span></a><span> It's also a cultural frontier. People all over the world don't want one AI that reflects one set of values. Sovereign AI is not just an economic imperative, it is also a cultural one. But there's a real risk in that.</span></p><p><span>Bateson did not think schismogenesis was benign. He thought that on its own it ran to breakdown, symmetrical rivalry escalating into open conflict, complementary difference hardening into rigid domination and submission, and that a society survived it only by having some countervailing mechanism that periodically reset the tension. Among the Iatmul it was a ceremony, the naven, that inverted the ordinary roles and let the pressure out.</span></p><p><span>In tech, the equivalent to the naven might be the standards body ;-) Or maybe it's open source AI, and the role of standardized protocols in enabling companies and individuals to flourish beyond the boundaries that are set for them. This is a trailing thought, but that's one of the things I learned from Frank Herbert, also 50 years ago, when he told me that one of his goals in </span><em><span>Dune</span></em><span> was to have his readers \"go skidding out of the story\" with unanswered questions that kept them coming back to his world for more. I leave you to ponder what our AI naven might be.</span></p><h2><span>Freedom to leave</span></h2><p><span>There are brakes on schismogenesis at the lab level. A model has to be useful or people stop using it. Users can leave for another model with a click. The public still reacts, the way it did when Grok's MechaHitler episode drew a bipartisan letter from Congress, a rebuke from the Anti-Defamation League, and a resignation at the top of X.</span></p><p><span>The quest for sovereign AI and the role of open weight models and open source AI in giving power back from the labs to users are also a kind of brake, a competitive check on the power of the big labs to impose their values.</span></p><p><span>The simplest and most powerful reset, though, is the freedom of users to leave, to choose an alternative. This is real in AI. The moats that the labs have built so far are relatively weak, as we've seen recently with widespread adoption of GPT 5.6 Sol when Fable became temporarily unavailable. I had a brush with this myself. I ran out of Fable usage in my Pro account in the middle of a fine-tuning project, and decided to try moving it over to Sol. I had managed the project well, so there was a CURRENT_STATE.md with the project description and what had been accomplished so far, plus the original training set, the cleaned training set, and so on, all bundled up into a zip file. I handed it to Sol, it reviewed the work, and picked up right where we left off.</span></p><p><span>At the same time, though, I have gotten better at working with Claude and Claude has gotten better at working with me. The two of us have converged into a paired unit around the tasks I use it for. Every session cuts the groove a little deeper. My prompts tend to be for overlapping tasks, its memory fills with my context, and the fit is the product. I've tried to condense some of the work we've done together into a skill that could be executed by other people at O'Reilly, and was surprised to find that the skill + my context works better than the skill with someone else's context. So skills as a kind of portability that I thought I could depend on turned out to be weaker than I thought.</span></p><p><span>This pairing with a model might be a kind of complementary schismogenesis at the scale of one person. The user and the model differentiate from all other user/model pairs together, and the pair pulls away from every alternative I am not using. There is a widening gap between me-with-Claude and me-with-anything-else.</span></p><p><span>It's a marvelous feeling. It is also lock-in. The switching cost is not (yet) a file I can download and pass on reliably. The co-adapted relationship, the accumulated context, and the shared work have become one company's moat. It erodes our freedom to leave. The more the pairing helps each of us, the more it costs to walk away. For many tasks, I haven't even switched from my Pro account to my company account, because I haven't yet figured out how to move over all the necessary context. For a given task, it might be as easy as my switch between Fable and Sol, but for the whole package of my Claude relationship, perhaps not.</span></p><p><span>I imagine that with some spelunking, I will find where Claude keeps all this context it has for me, and I hope most of it will be something I can move. But I'd be a lot happier if portability were something we could all take for granted. If my memory and context were mine to carry, in a format another model could read, pairing would not harden so easily into capture.</span></p><p><span>We do not have that portability standard. It is one of </span><a href=\"https://www.oreilly.com/radar/the-missing-mechanisms-of-the-agentic-economy/\"><span>the missing mechanisms of the agentic economy</span></a><span>, plumbing that a market needs to stay competitive. It's not just memory, though memory may be the current best hook to work on. There are also differences in terminology, filenames, working patterns, skills, and assumptions. Build for portability and the choice of model remains fluid. Leave it unbuilt and the intimacy we build with our favorite models can become a source of lock-in.</span></p><div class=\"captioned-button-wrap\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}\" data-component-name=\"CaptionedButtonToDOM\"><div class=\"preamble\"><p class=\"cta-caption\">Thanks for reading Asimov's Addendum! This post is public so feel free to share it.</p></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}\" data-component-name=\"ButtonCreateButton\"><a class=\"button primary\" href=\"https://asimovaddendum.substack.com/p/differentiation-and-personality-in?utm_source=substack&utm_medium=email&utm_content=share&action=share\"><span>Share</span></a></p></div><div class=\"subscription-widget-wrap-editor\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}\" data-component-name=\"SubscribeWidgetToDOM\"><div class=\"subscription-widget show-subscribe\"><div class=\"preamble\"><p class=\"cta-caption\">Subscribe for free to receive new posts.</p></div><form class=\"subscription-widget-subscribe\"><input type=\"email\" class=\"email-input\" name=\"email\" placeholder=\"Type your email\u2026\" tabindex=\"-1\"><input type=\"submit\" class=\"button primary\" value=\"Subscribe\"><div class=\"fake-input-wrapper\"><div class=\"fake-input\"></div><div class=\"fake-button\"></div></div></form></div></div><p class=\"button-wrapper\" data-attrs=\"{&quot;url&quot;:&quot;https://asimovaddendum.substack.com/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://asimovaddendum.substack.com/subscribe?\"><span>Subscribe now</span></a></p>","doi":"https://doi.org/10.59350/hvd9d-mr723","guid":"208409829","image":"https://substackcdn.com/image/fetch/$s_!VQ3n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55873e7a-e67a-4595-991d-f280d41682f5_1518x1094.png","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784937600,"rid":"p4f0m-3h353","summary":"Thoughts on model \"culture\" as a kind of lock-in","title":"Differentiation and personality in AI models","updated_at":1784983038,"url":"https://asimovaddendum.substack.com/p/differentiation-and-personality-in","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/048a87296","name":"Uppsala University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Now that we covered the utmost basics of using the CDK-JChemPaint patch (see\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">#1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-2-rendering-reactions.html\">#2 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">#3 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>),\nit is time to move on. I am happy to hear that so many people have started using the new rendering architecture, either\nvia the EBI JChemPaint Swing applet/application branch, or via the CDK-JChemPaint patch.</p>\n<p>A couple of issues and questions came up (scaling not working as expected; how to layout reactions; how to get charges\nto show up), and I will look at those shortly. But before I get into those matters, I'll first show how to use the renderer\nwith a <a href=\"http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JPanel.html\">Swing JPanel</a>\n(I'll do the SWT alternative later). First, we need to subclass the JPanel:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kd\">class</span> <span class=\"nc\">JCPPanel</span> <span class=\"kd\">extends</span> <span class=\"nc\">JPanel</span> <span class=\"o\">{</span>\n\n  <span class=\"nc\">IMolecule</span> <span class=\"n\">mol</span><span class=\"o\">;</span>\n  <span class=\"nc\">AtomContainerRenderer</span> <span class=\"n\">renderer</span><span class=\"o\">;</span>\n  <span class=\"kt\">int</span> <span class=\"n\">width</span><span class=\"o\">;</span>\n  <span class=\"kt\">int</span> <span class=\"n\">height</span><span class=\"o\">;</span>\n\n  <span class=\"kd\">public</span> <span class=\"nf\">JCPPanel</span><span class=\"o\">(</span><span class=\"nc\">IMolecule</span> <span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"kt\">int</span> <span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"kt\">int</span> <span class=\"n\">height</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"kd\">super</span><span class=\"o\">();</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">setSize</span><span class=\"o\">(</span><span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"n\">height</span><span class=\"o\">);</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">mol</span> <span class=\"o\">=</span> <span class=\"n\">mol</span><span class=\"o\">;</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">width</span> <span class=\"o\">=</span> <span class=\"n\">width</span><span class=\"o\">;</span>\n    <span class=\"k\">this</span><span class=\"o\">.</span><span class=\"na\">height</span> <span class=\"o\">=</span> <span class=\"n\">height</span><span class=\"o\">;</span>\n\n    <span class=\"c1\">// generators make the image elements</span>\n    <span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n    <span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicAtomGenerator</span><span class=\"o\">());</span>\n\n    <span class=\"c1\">// the renderer needs to have a toolkit-specific font manager</span>\n    <span class=\"n\">renderer</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">AtomContainerRenderer</span><span class=\"o\">(</span>\n      <span class=\"n\">generators</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">AWTFontManager</span><span class=\"o\">()</span>\n    <span class=\"o\">);</span>\n  <span class=\"o\">}</span>\n\n  <span class=\"kd\">public</span> <span class=\"nc\">Dimension</span> <span class=\"nf\">getPreferredSize</span><span class=\"o\">()</span> <span class=\"o\">{</span>\n    <span class=\"k\">return</span> <span class=\"k\">new</span> <span class=\"nf\">Dimension</span><span class=\"o\">(</span><span class=\"n\">width</span><span class=\"o\">,</span> <span class=\"n\">height</span><span class=\"o\">);</span>\n  <span class=\"o\">}</span>\n\n  <span class=\"kd\">public</span> <span class=\"kt\">void</span> <span class=\"nf\">paint</span><span class=\"o\">(</span><span class=\"nc\">Graphics</span> <span class=\"n\">graphics</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"c1\">// the call to 'setup' only needs to be done on the first paint</span>\n    <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">setup</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">Rectangle</span><span class=\"o\">(</span><span class=\"n\">getWidth</span><span class=\"o\">(),</span> <span class=\"n\">getHeight</span><span class=\"o\">()));</span>\n\n    <span class=\"c1\">// paint the background</span>\n    <span class=\"n\">graphics</span><span class=\"o\">.</span><span class=\"na\">setColor</span><span class=\"o\">(</span><span class=\"nc\">Color</span><span class=\"o\">.</span><span class=\"na\">WHITE</span><span class=\"o\">);</span>\n    <span class=\"n\">graphics</span><span class=\"o\">.</span><span class=\"na\">fillRect</span><span class=\"o\">(</span><span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"mi\">0</span><span class=\"o\">,</span> <span class=\"n\">getWidth</span><span class=\"o\">(),</span> <span class=\"n\">getHeight</span><span class=\"o\">());</span>\n\n    <span class=\"c1\">// the paint method also needs a toolkit-specific renderer</span>\n    <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">paint</span><span class=\"o\">(</span><span class=\"n\">mol</span><span class=\"o\">,</span> <span class=\"k\">new</span> <span class=\"nc\">AWTDrawVisitor</span><span class=\"o\">(</span><span class=\"n\">graphics</span><span class=\"o\">));</span>\n  <span class=\"o\">}</span>\n\n<span class=\"o\">}</span>\n</code></pre></div></div>\n<p>The panel does not implement resizing, and it could consider caching the image too, to speed things up a bit. But, we'll use this as a starting point.</p>\n<p>We can then embed this panel into a JFrame to make a small runable application:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"kt\">int</span> <span class=\"no\">WIDTH</span> <span class=\"o\">=</span> <span class=\"mi\">600</span><span class=\"o\">;</span>\n<span class=\"kt\">int</span> <span class=\"no\">HEIGHT</span> <span class=\"o\">=</span> <span class=\"mi\">600</span><span class=\"o\">;</span>\n\n<span class=\"c1\">// create molecule</span>\n<span class=\"nc\">IMolecule</span> <span class=\"n\">triazole</span> <span class=\"o\">=</span> <span class=\"nc\">MoleculeFactory</span><span class=\"o\">.</span><span class=\"na\">make123Triazole</span><span class=\"o\">();</span>\n<span class=\"nc\">StructureDiagramGenerator</span> <span class=\"n\">sdg</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">StructureDiagramGenerator</span><span class=\"o\">();</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">setMolecule</span><span class=\"o\">(</span><span class=\"n\">triazole</span><span class=\"o\">);</span>\n<span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">generateCoordinates</span><span class=\"o\">();</span>\n<span class=\"n\">triazole</span> <span class=\"o\">=</span> <span class=\"n\">sdg</span><span class=\"o\">.</span><span class=\"na\">getMolecule</span><span class=\"o\">();</span>\n\n<span class=\"c1\">// create the frame</span>\n<span class=\"nc\">JFrame</span> <span class=\"n\">frame</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">JFrame</span><span class=\"o\">(</span><span class=\"s\">\"Swinging CDK-JChemPaint\"</span><span class=\"o\">);</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">setDefaultCloseOperation</span><span class=\"o\">(</span><span class=\"nc\">JFrame</span><span class=\"o\">.</span><span class=\"na\">EXIT_ON_CLOSE</span><span class=\"o\">);</span>\n\n<span class=\"nc\">JCPPanel</span> <span class=\"n\">panel</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">JCPPanel</span><span class=\"o\">(</span><span class=\"n\">triazole</span><span class=\"o\">,</span> <span class=\"no\">WIDTH</span><span class=\"o\">,</span> <span class=\"no\">HEIGHT</span><span class=\"o\">);</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">getContentPane</span><span class=\"o\">().</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"n\">panel</span><span class=\"o\">);</span>\n\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">pack</span><span class=\"o\">();</span>\n<span class=\"n\">frame</span><span class=\"o\">.</span><span class=\"na\">setVisible</span><span class=\"o\">(</span><span class=\"kc\">true</span><span class=\"o\">);</span>\n</code></pre></div></div>\n<p>The result is pretty much the same as with the created PNG, just with a window. But, this should get you started with using the new code base in your\nSwing-based application. If you need an impression on where this can get you, have a look at the\n<a href=\"http://www.ebi.ac.uk/steinbeck-srv/jchempaint-nightly/EditorApplet.html\">applet developed by Chris' team</a>. Likewise, a SWT-based application can be\ndeveloped, of which <a href=\"http://wiki.bioclipse.net/index.php?title=JChemPaint\">Bioclipse</a> is a full example. This shows one of the features of this\nnew JChemPaint code base: it is widget set-independent. I am not aware of applications using other widget toolkits yet, though, but I am still\nhoping someone will use <a href=\"http://qt.nokia.com/doc/qtjambi-4.4/html/com/trolltech/qt/qtjambi-index.html\">QtJambi</a> to create a Qt-based JChemPaint port.</p>","doi":"https://doi.org/10.59350/2148c-n1102","guid":"https://doi.org/10.59350/2148c-n1102","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1271548800,"rid":"hptpk-4wt24","summary":"Now that we covered the utmost basics of using the CDK-JChemPaint patch (see #1 , #2 , #3 ), it is time to move on. I am happy to hear that so many people have started using the new rendering architecture, either via the EBI JChemPaint Swing applet/application branch, or via the CDK-JChemPaint patch.","tags":["Cdk","Jchempaint"],"title":"CDK-JChemPaint #4: embedding the renderer into a Swing panel","updated_at":1784927663,"url":"https://chem-bla-ics.linkedchemistry.info/2010/04/18/cdk-jchempaint-4-embedding-renderer.html","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/048a87296","name":"Uppsala University"}],"contributor_roles":[],"family":"Willighagen","given":"Egon","url":"https://orcid.org/0000-0001-7542-0286"}],"blog":{"authors":[{"name":"Egon Willighagen"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>I have made a few new <a href=\"http://cdk.sf.net/\">CDK</a>-JChemPaint patches in the past two days, the latest being\n<a href=\"https://sourceforge.net/projects/cdk/files/CDK-JChemPaint/15/\">patch 15</a>. With the help from\n<a href=\"http://gilleain.blogspot.com/\">Gilleain</a>, all rendering parameters are now using the new API, as explained\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">earlier <i class=\"fa-solid fa-recycle fa-xs\"></i></a> in\n<a href=\"http://chem-bla-ics.blogspot.com/search?q=%22cdk-jchempaint+%23%22\">this series</a>.</p>\n<p>Additionally, the API to work with rendering parameters is now much simpler. The previous posts did not\nreally explain how to tune parameters, so here goes. One important thing to realize, is that a rendering\nparameter can only be changed if the generator that defines it has been registered. To see what parameters\nbelongs to what generator, for which you can use the script discussed in\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-3-rendering-parameters.html\">post #3 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>.</p>\n<h2 id=\"atom-numbers\">Atom Numbers</h2>\n<p>In some situations you like to draw atom numbers. This can be done by replacing the BasicAtomGenerator by an\nAtomNumberGenerator in the script given in <a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">post #1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>This would result in an image like this:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno.png\"/></p>\n<p>Now, we also might want to give those numbers a color, to make them stand out a bit. Orange, perhaps :)\nThis is where rendering parameters come in. To the code from\n<a href=\"https://chem-bla-ics.linkedchemistry.info/2010/04/05/cdk-jchempaint-1-rendering-molecules.html\">post #1 <i class=\"fa-solid fa-recycle fa-xs\"></i></a>,\nafter the instantiation of the renderer, we add:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"c1\">// tune parameters</span>\n<span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">getRenderer2DModel</span><span class=\"o\">();</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">AtomNumberTextColor</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"nc\">Color</span><span class=\"o\">.</span><span class=\"na\">orange</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>The output then looks like:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_2.png\"/></p>\n<h2 id=\"atom-numbers-and-symbols\">Atom Numbers and Symbols</h2>\n<p>But you can also render both element symbols and numbers. Then, clearly, you just add both generators:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nc\">List</span> <span class=\"n\">generators</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"nc\">ArrayList</span><span class=\"o\">();</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicAtomGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>But, in order to have the label and the symbol not overlap, we define an offset (Thanx to\n<a href=\"http://github.com/s-wolf\">Sebastian</a>, of <a href=\"http://www.biomedcentral.com/1471-2105/11/148/abstract\">MetFrag</a>\nfame, for the feature request!):</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">Offset</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"k\">new</span> <span class=\"n\">javax</span><span class=\"o\">.</span><span class=\"na\">vecmath</span><span class=\"o\">.</span><span class=\"na\">Vector2d</span><span class=\"o\">(</span><span class=\"mi\">10</span><span class=\"o\">,</span><span class=\"mi\">10</span><span class=\"o\">)</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>Then it gets to look like:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_3.png\"/></p>\n<p>This last full example will be available from GitHub shortly.</p>\n<p><strong>Update</strong> Steffen asked in the comments if it is possible to just color the atoms by element type. CDK-JChemPaint\npatch 15 does not allow that, but adding that feature is easy enough, and the patch will be part of the next\nrelease. Use this configuration:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicSceneGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">BasicBondGenerator</span><span class=\"o\">());</span>\n<span class=\"n\">generators</span><span class=\"o\">.</span><span class=\"na\">add</span><span class=\"o\">(</span><span class=\"k\">new</span> <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">());</span>\n</code></pre></div></div>\n<p>And these parameter settings:</p>\n<div class=\"language-java highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">renderer</span><span class=\"o\">.</span><span class=\"na\">getRenderer2DModel</span><span class=\"o\">();</span>\n<span class=\"n\">model</span><span class=\"o\">.</span><span class=\"na\">set</span><span class=\"o\">(</span>\n  <span class=\"nc\">AtomNumberGenerator</span><span class=\"o\">.</span><span class=\"na\">ColorByType</span><span class=\"o\">.</span><span class=\"na\">class</span><span class=\"o\">,</span>\n  <span class=\"kc\">true</span>\n<span class=\"o\">);</span>\n</code></pre></div></div>\n<p>This give you for <a href=\"http://en.wikipedia.org/wiki/Triazole\">triazole</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/triazole.atomno_4.png\"/></p>","doi":"https://doi.org/10.59350/5cfpy-kym94","guid":"https://doi.org/10.59350/5cfpy-kym94","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1276128000,"rid":"055c8-d0t90","summary":"I have made a few new CDK-JChemPaint patches in the past two days, the latest being patch 15. With the help from Gilleain, all rendering parameters are now using the new API, as explained earlier in this series.","tags":["Cdk","Chemistry"],"title":"CDK-JChemPaint #6: rendering atom numbers","updated_at":1784927662,"url":"https://chem-bla-ics.linkedchemistry.info/2010/06/10/cdk-jchempaint-6-rendering-atom-numbers.html","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>About four and a half years ago, I started <a href=\"http://rdf.openmolecules.net/\">OpenMolecules RDF</a>, a spin off from\n<a href=\"http://cb.openmolecules.net/\">Chemical blogspace</a> (Cb, which is still up and running thanks to Peter Maas!) where\nI started <a href=\"http://chem-bla-ics.blogspot.com/2007/07/rdf-ing-molecular-space.html\">using InChIs in URIs</a>. My\ninterest came from the dereferencability, the ability to take an InChI and find information about the chemical\nstructure representated by it. Because information about anything is scattered around the internet, and we need\nsomething <a href=\"http://chem-bla-ics.blogspot.com/2007/08/centralized-or-decentralized.html\">decentralized</a>. Moreover,\nat the time searching of InChIs with search engines like Google did not work well at all: InChIs were tokenized\nin inconvenient ways.</p>\n<p>Originally, these URIs for InChIs were provided (and still are) by Cb, this July five years ago:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>http://cb.openmolecules.net/rdf/?InChI=1/CH4/h1H4\n</code></pre></div></div>\n<p>for which soon after a separate domain was instantiated (thanx to Geoff!):</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>http://rdf.openmolecules.net/?InChI=1/CH4/h1H4\n</code></pre></div></div>\n<p>Mind you, <strong>OpenMolecules RDF</strong> is a decent citizen of the Linked Open Data network, though not much linked to.\nThe <a href=\"https://github.com/egonw/chembl.rdf\">ChEMBL-RDF</a> data is, and love to hear if there are other link sets\npointing there. On the outlinking side, it points to <a href=\"http://www.ebi.ac.uk/chebi/\">ChEBI</a> (via\n<a href=\"http://www.bio2rdf.org/\">Bio2RDF</a>), <a href=\"http://dbpedia.org/\">DBPedia</a>, <a href=\"http://www.chemspider.com/\">ChemSpider</a>\n(for 10k structures), the <a href=\"http://chem-bla-ics.blogspot.com/2009/03/nmrshiftdb-enters-rdfopenmoleculesnet.html\">NMRShiftDB</a>,\nand Cb itself. This post describes the adding of the <a href=\"http://chem-bla-ics.blogspot.com/2009/02/dbpedia-enters-rdfopenmoleculesnet.html\">link to DBPedia</a>.</p>\n<p>In the past few years, I have written up bits on OpenMolecules RDF. The main reference is our chapter in <em>Beautiful Data</em> (Willighagen, 2010),\nwhere I used the <a href=\"http://chem-bla-ics.blogspot.com/2009/02/solubility-data-in-bioclipse-3-finding.html\">URIs for the solubility data</a>.\nIt was later also described in the <em>Linking the Resource Description Framework to cheminformatics and proteochemometrics paper</em> (Willighagen, 2011),\nand another book chapter (Guha, 2011).</p>\n<p>This blog features a few more use cases, such as the ability to use these URIs to bookmark molecules or to\n<a href=\"http://chem-bla-ics.blogspot.com/2007/09/tagging-molecules-mashup-of-connotea.html\">annotate them with tags with Connotea</a>\n(which resulted in a nice <a href=\"http://chem-bla-ics.blogspot.com/2007/10/lunch-at-nature-hq-with-euan-joanna-ian.html\">lunch with the Nature people at the time</a>).\nThe link to Connotea is disabled at the moment, though.</p>\n<p>At this moment the system still holds, though there is problem in that browsers can put practical limits on\nURIs length, which limits the maximum size of the InChI. Virtuoso does this too.</p>","doi":"https://doi.org/10.59350/eg04s-efd96","guid":"https://doi.org/10.59350/eg04s-efd96","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1334448000,"reference":[{"id":"https://doi.org/10.1038/npre.2010.4918.1","unstructured":"Unknown title"},{"id":"https://doi.org/10.1002/9781118026038.ch24","unstructured":"Unknown title"},{"id":"https://doi.org/10.1186/2041-1480-2-s1-s6","unstructured":"Unknown title"}],"rid":"kpw7g-39w56","summary":"About four and a half years ago, I started OpenMolecules RDF, a spin off from Chemical blogspace (Cb, which is still up and running thanks to Peter Maas!) where I started using InChIs in URIs. My interest came from the dereferencability, the ability to take an InChI and find information about the chemical structure representated by it. Because information about anything is scattered around the internet, and we need something decentralized.","tags":["Chemistry","Rdf","Inchi","Opendata"],"title":"Dereferencable InChIs: OpenMolecules RDF","updated_at":1784927661,"url":"https://chem-bla-ics.linkedchemistry.info/2012/04/15/dereferencable-inchis-openmolecules-rdf.html","version":"v1"},{"authors":[{"affiliation":[{"id":"https://ror.org/0153tk833","name":"University of Virginia"}],"contributor_roles":[],"family":"Turner","given":"Stephen D.","url":"https://orcid.org/0000-0001-9140-9028"}],"blog":{"authors":[{"name":"Stephen Turner"}],"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":1784924410,"use_api":null},"blog_name":"Paired Ends","blog_slug":"stephenturner","content_html":"<p>I've had my head down working hard on an ARPA-H proposal the last few weeks. If you're not familiar with <a href=\"https://arpa-h.gov/\">ARPA-H</a>, it's like DARPA or IARPA, but for health. I.e., moonshot projects, aggressive schedules, big budgets, and academic + industry partnerships essentially required to win one of these awards. I've proposed to and performed on my share of programs at the ARPAs. They've <em>very</em> different than your traditional NIH/NSF grants. The proposal process is different. The award is different (OTs, not grants). The research execution is different (milestone-driven, objectives,  deliverables). The ideas you can propose must be different: if you're coming from the NIH/NSF world, where you have to be innovative (but not <em>too</em> innovative), you'll have to de-condition yourself to <em>not </em>think incrementally. Incremental advancements are strictly out of scope. Think revolutionary, not evolutionary. I think it was the current director of DARPA BTO who told me something like (paraphrasing), <em>if you're in a conference room full of your expert colleagues and 90% of the people think it's a crazy idea and laugh you out of the room, it's probably a good fit for DARPA</em>.</p><p>I got an <a href=\"https://engage.arpa-h.gov/vitals\">email today from ARPA-H</a> with the subject, \"Next on your summer reading list: the ARPA-H 101 series \ud83c\udfd6\ufe0f\". If you're ARPA-curious (ARPA-H specifically, but the advice is applicable to DARPA and IARPA as well), read through some of the links below to get a sense of how things work here.</p><p>You can sign up for the <a href=\"https://engage.arpa-h.gov/vitals\">ARPA-H Vitals emails here</a>.</p><blockquote><p><em><strong>Doing business with the agency: </strong></em>Working with ARPA-H differs from traditional grant-funding federal agencies. The expectations for continued performance are high, the timelines are aggressive, and receiving continued funding is dependent on milestone achievement. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-doing-business-agency\">See how you can rise to the challenge.</a></p><p><em><strong>Preparing for Proposers' Day: </strong></em>These big events set the stage at the launch of most ARPA-H programs. Ready to make the most of networking and teaming opportunities? <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-preparing-proposers-day\">Study up and arrive prepared.</a></p><p><em><strong>Assembling a research team:</strong></em> ARPA-H programs ask performers to offer solutions that are not evolutionary but <em>revolutionary</em>. That often means assembling teams of talented groups and individuals. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-assembling-research-team\">Learn how we help connect them.</a></p><p><em><strong>Transformative research needs Other Transactions (OTs): </strong></em>An OT is a type of federal contract that provides a more flexible way to fund innovative research and development. ARPA-H uses OTs to compress research timelines and speed real health impact. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-transformative-research-needs-other-transactions\">Explore the basics of this nimble funding mechanism.</a></p><p><em><strong>The lifecycle of an ARPA-H program: </strong></em>The ARPA model, championed originally by the Defense Advanced Research Projects Agency (DARPA), centers ambitious ideas, accelerated research timelines, and breakthrough advances. Not familiar with this transformative model and how programs move through it? <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-lifecycle-arpa-h-program\">Read on.</a></p><p><em><strong>Understanding proposal evaluation criteria:</strong></em><strong> </strong>ARPA-H was created to close the gap between scientific findings and the urgent need for real patient outcomes. That means the bar looks different from a traditional grant application for other federal research funding agencies. <a href=\"https://arpa-h.gov/news-and-events/arpa-h-101-understanding-proposal-evaluation-criteria\">Here's what to expect.</a></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><p></p>","doi":"https://doi.org/10.59350/76wxp-5nb38","guid":"208343031","image":"https://substack-post-media.s3.amazonaws.com/public/images/d6535842-9254-4f39-8821-4aa58a81e413_1132x566.jpeg","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1784851200,"rid":"jrykf-9mb15","summary":"Primers on how ARPA-H (and other ARPAs) are different than your typical NIH/NSF research programs and proposals","title":"ARPA-H 101","updated_at":1784926265,"url":"https://blog.stephenturner.us/p/arpa-h-101","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>Two weeks ago, the <a href=\"https://www.beilstein-journals.org/bjoc/news/LAFGBV6PT5ASC5R7JOKSEXOQYM\">Beilstein Institute announced Bioschemas support in their journals</a>:</p>\n<blockquote>\n<p>We streamline the discoverability of your research by incorporating machine-readable chemical information into many of our published articles.\nThis includes the conversion of chemical structures from submitted ChemDraw files to InChI strings and validating them using open-source tools.</p>\n</blockquote>\n<p>The idea is far from new and has been around for two decades. But the <a href=\"https://scholia.toolforge.org/publisher/Q4881267\">two Beilstein journals</a>\n(both <a href=\"https://en.wikipedia.org/wiki/Diamond_open_access\">diamond Open Access</a>), actually integrated into their active publishing model.\nThat has been trialed and put in action before. For example, there was (is?) <a href=\"https://doi.org/10.59350/ne4rf-wey66\">Project Prospect</a>\n(2007), <a href=\"https://chem-bla-ics.linkedchemistry.info/2009/03/19/nature-chemistry-improves-publishing.html\">chemical structure annotation in Nature Chemistry</a>\n(2009), <a href=\"https://chem-bla-ics.linkedchemistry.info/2014/02/21/slow-publishing-innovation.html\">SMILES in the ACS Journal of Medicinal Chemistry</a>\n(2014) (doi:<a href=\"https://doi.org/10.1021/jm5002056\">10.1021/jm5002056</a>),\nand <em>FAIR chemical structures in the Journal of Cheminformatics</em> (2021) (doi:<a href=\"https://doi.org/10.1186/s13321-021-00520-4\">10.1186/s13321-021-00520-4</a>).</p>\n<p>But this announcement is a new step. I like how validation of the chemical structures is part of the approach, and I like\nhow they use the <a href=\"https://bioschemas.org/\">Bioschemas</a> extention of <a href=\"https://schema.org/\">schema.org</a>. The last because\nthey use two Bioschemas types/profiles that contributed to or initiated, respectively: <a href=\"https://bioschemas.org/profiles/MolecularEntity/0.5-RELEASE\">MolecularEntity</a>\nand <a href=\"https://bioschemas.org/profiles/ChemicalSubstance/0.4-RELEASE\">ChemicalSubstance</a>.</p>\n<p>First stop for me is to check the schema.org annotation with a validation tool, like <a href=\"https://search.google.com/test/rich-results\">Google's Rich Results Test</a>.\nThat gives an idea how they may have have their search engine pick it up. The test article I was given on LinkedIn is\nXiao <em>et al.</em>'s <em>Molecular diversity of the reactions of MBH carbonates of isatins and various nucleophiles</em>\n(doi:<a href=\"https://doi.org/10.3762/bjoc.21.21\">10.3762/bjoc.21.21</a>) in the <a href=\"https://scholia.toolforge.org/venue/Q2894008\">Beilstein Journal of Organic Chemistry</a>,\nand we indeed <a href=\"https://search.google.com/test/rich-results/result?id=FRW9wBOpXtsMp9TLUV6SfQ\">see the schema.org annotation show up</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/bjoc_bioschemas.png\"/></p>\n<p>And because of the use of open standards, extracting the information is not so hard with, for example here,\nBacting (doi:<a href=\"https://doi.org/10.21105/joss.02558\">10.21105/joss.02558</a>), based on a 2022 script from the NanoSafety Cluster\nprojects NanoCommons and SbD4Nano:</p>\n<div class=\"language-groovy highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code><span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'managers-rdf'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'managers-ui'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n<span class=\"nd\">@Grab</span><span class=\"o\">(</span><span class=\"n\">group</span><span class=\"o\">=</span><span class=\"s1\">'io.github.egonw.bacting'</span><span class=\"o\">,</span> <span class=\"n\">module</span><span class=\"o\">=</span><span class=\"s1\">'net.bioclipse.managers.jsoup'</span><span class=\"o\">,</span> <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"s1\">'1.0.4'</span><span class=\"o\">)</span>\n\n<span class=\"n\">bioclipse</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">BioclipseManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n<span class=\"n\">rdf</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">RDFManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n<span class=\"n\">jsoup</span> <span class=\"o\">=</span> <span class=\"k\">new</span> <span class=\"n\">net</span><span class=\"o\">.</span><span class=\"na\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">managers</span><span class=\"o\">.</span><span class=\"na\">JSoupManager</span><span class=\"o\">(</span><span class=\"s2\">\".\"</span><span class=\"o\">);</span>\n\n<span class=\"n\">articles</span> <span class=\"o\">=</span> <span class=\"o\">[</span>\n   <span class=\"n\">args</span><span class=\"o\">[</span><span class=\"mi\">0</span><span class=\"o\">]</span>\n<span class=\"o\">]</span>\n\n<span class=\"n\">kg</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">createInMemoryStore</span><span class=\"o\">()</span>\n\n<span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">article</span> <span class=\"k\">in</span> <span class=\"n\">articles</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n    <span class=\"n\">htmlContent</span> <span class=\"o\">=</span> <span class=\"n\">bioclipse</span><span class=\"o\">.</span><span class=\"na\">download</span><span class=\"o\">(</span><span class=\"n\">article</span><span class=\"o\">)</span>\n\n    <span class=\"n\">htmlDom</span> <span class=\"o\">=</span> <span class=\"n\">jsoup</span><span class=\"o\">.</span><span class=\"na\">parseString</span><span class=\"o\">(</span><span class=\"n\">htmlContent</span><span class=\"o\">)</span>\n\n    <span class=\"c1\">// application/ld+json</span>\n\n    <span class=\"n\">bioschemasSections</span> <span class=\"o\">=</span> <span class=\"n\">jsoup</span><span class=\"o\">.</span><span class=\"na\">select</span><span class=\"o\">(</span><span class=\"n\">htmlDom</span><span class=\"o\">,</span> <span class=\"s2\">\"script[type='application/ld+json']\"</span><span class=\"o\">);</span>\n\n    <span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">section</span> <span class=\"k\">in</span> <span class=\"n\">bioschemasSections</span><span class=\"o\">)</span> <span class=\"o\">{</span>\n        <span class=\"n\">bioschemasJSON</span> <span class=\"o\">=</span> <span class=\"n\">section</span><span class=\"o\">.</span><span class=\"na\">html</span><span class=\"o\">()</span>\n        <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">importFromString</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">,</span> <span class=\"n\">bioschemasJSON</span><span class=\"o\">,</span> <span class=\"s2\">\"JSON-LD\"</span><span class=\"o\">)</span>\n    <span class=\"o\">}</span>\n<span class=\"o\">}</span>\n\n<span class=\"n\">turtle</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">asTurtle</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">);</span>\n\n<span class=\"n\">println</span> <span class=\"s2\">\"#\"</span> <span class=\"o\">+</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">size</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">)</span> <span class=\"o\">+</span> <span class=\"s2\">\" triples detected in the JSON-LD\"</span>\n<span class=\"c1\">// println turtle</span>\n\n\n<span class=\"n\">sparql</span> <span class=\"o\">=</span> <span class=\"s2\">\"\"\"\nPREFIX schema: &lt;http://schema.org/&gt;\nSELECT ?entity ?inchikey ?smiles WHERE {\n  ?entity a schema:MolecularEntity .\n  OPTIONAL { ?entity schema:inChIKey ?inchikey }\n  OPTIONAL { ?entity schema:smiles ?smiles }\n}\n\"\"\"</span>\n\n<span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"n\">rdf</span><span class=\"o\">.</span><span class=\"na\">sparql</span><span class=\"o\">(</span><span class=\"n\">kg</span><span class=\"o\">,</span> <span class=\"n\">sparql</span><span class=\"o\">)</span>\n\n<span class=\"k\">for</span> <span class=\"o\">(</span><span class=\"n\">i</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"o\">;</span><span class=\"n\">i</span><span class=\"o\">&lt;=</span><span class=\"n\">results</span><span class=\"o\">.</span><span class=\"na\">rowCount</span><span class=\"o\">;</span><span class=\"n\">i</span><span class=\"o\">++)</span> <span class=\"o\">{</span>\n  <span class=\"n\">println</span> <span class=\"s2\">\"${results.get(i, \"</span><span class=\"n\">inchikey</span><span class=\"s2\">\")}\\t${results.get(i, \"</span><span class=\"n\">smiles</span><span class=\"s2\">\")}\"</span>\n<span class=\"o\">}</span>\n</code></pre></div></div>\n<p>The output is a simple table:</p>\n<div class=\"language-plaintext highlighter-rouge\"><div class=\"highlight\"><pre class=\"highlight\"><code>MGAPJMNPGGTFHJ-JEIPZWNWSA-N     CN1C(=O)/C(=C/2\\C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)Cl)/C(=P(C5=CC=CC=C5)(C6=CC=CC=C6)C7=CC=CC=C7)C1=O\nXEWMQVUVGAHESA-UHFFFAOYSA-N     CC1=CC=C(C=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)C)C(=O)N(C)C2=O\nUVTJORFYHPGJDZ-PYCFMQQDSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=C(C)C=C3)/C1=O\nILWGDUYVQRAMMG-PGMHBOJBSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=C(C=C3)Cl)/C1=O\nCAFIBKBZWJFZCW-FXBPSFAMSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CNC3=CC=CC=C3)/C1=O\nUOJSFLANMVIMBV-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)Cl)C1=O\nVNJBTGZXAGHCSO-OAPYJULQSA-N     COC(=O)/C(=C\\1/C2=C(C=CC=C2)N(CC3=CC=CC=C3)C1=O)/C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6\nKJXQRAKSOANQTJ-GFMRDNFCSA-N     CC1=CC=C(C=C1)NC/C(=C\\2/C3=C(C=CC=C3)N(CC4=CC=CC=C4)C2=O)/C#N\nIGEBJMZDOPBFGF-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=CC=C4)C1=O\nSSANVPNESOMKOM-AWQADKOQSA-N     C1=CC=C(C=C1)CN2C3=CC=C(C=C3/C(=C(/C#N)\\C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)/C2=O)Cl\nGEHWHSHQSIOZKL-NVQSTNCTSA-N     CCCCN1C2=CC=C(C=C2/C(=C\\3/C(=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6)C(=O)N(C)C3=O)/C1=O)Cl\nPALRSQOHFLRWDH-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)OC)C1=O\nKBFODZMDSAFLFR-UHFFFAOYSA-N     CN1C(=O)C(=C(C1=O)NC2=CC(=CC=C2)Cl)C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl\nJCGAVVZYXDJPBU-GFMRDNFCSA-N     CC1=C(C=CC=C1)NC/C(=C\\2/C3=C(C=CC=C3)N(CC4=CC=CC=C4)C2=O)/C#N\nDZFPCPDEQGLPLY-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C)C=C4)C1=O\nXMRNJCJUOXYXJU-DAFNUICNSA-N     CC1=CC=C(C=C1)NC/C(=C\\2/C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)C)/C#N\nSSDSNBBHEUUKGI-UHFFFAOYSA-N     CC1=CC=C2C(=C1)C(C3=C(C(=O)N(C)C3=O)N(C)C4=CC=CC=C4)C(=O)N2CC5=CC=CC=C5\nUSFYPRDMNXMWPO-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C=C4)Br)C1=O\nXYHTWFULRHTEAG-MUGXBBEHSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(/C#N)\\C=P(C3=CC=CC=C3)(C4=CC=CC=C4)C5=CC=CC=C5)/C1=O\nXALDZIBHNNIVAM-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NC4=C(C=CC=C4)O)C1=O\nTUTWQHBRQPMLME-OAPYJULQSA-N     COC(=O)/C(=C\\1/C2=CC(=CC=C2N(CC3=CC=CC=C3)C1=O)Cl)/C=P(C4=CC=CC=C4)(C5=CC=CC=C5)C6=CC=CC=C6\nIYEHFTMZZMIPRU-UHFFFAOYSA-N     CC1=CC=C(C=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl)C(=O)N(C)C2=O\nKBSDGNPLIPXCEX-UHFFFAOYSA-N     CCCCN1C2=CC=C(C)C=C2C(C3=C(C(=O)N(C)C3=O)NCC4=CC=CC=C4)C1=O\nBQGIUMITIGHBSD-UHFFFAOYSA-N     CCCCNC1=C(C2C3=CC(=CC=C3N(CC4=CC=CC=C4)C2=O)C)C(=O)N(C)C1=O\nPNSOLOPHIVUPOZ-MNDPQUGUSA-N     CCCCNC/C(=C\\1/C2=CC(=CC=C2N(CCCC)C1=O)C)/C#N\nHLTBKJRJOIZCMJ-PYCFMQQDSA-N     CCCCN1C2=CC=C(C)C=C2/C(=C(\\C#N)/CN(C)C3=CC=CC=C3)/C1=O\nFFLHFLUBMRBQTB-UHFFFAOYSA-N     CCCCN1C2=CC=C(C=C2C(C3=C(C(=O)N(C)C3=O)NC4=CC=C(C)C=C4)C1=O)F\nFOQOVOLYYARWPA-NKFKGCMQSA-N     C1=CC=C(C=C1)CN2C3=C(C=CC=C3)/C(=C(\\C#N)/CNC4=CC(=CC=C4)Cl)/C2=O\nKLEPCAQFOXJLNV-UHFFFAOYSA-N     CC1=C(C=CC=C1)NC2=C(C3C4=CC(=CC=C4N(CC5=CC=CC=C5)C3=O)Cl)C(=O)N(C)C2=O\n</code></pre></div></div>\n<p>That also made me realize that there are not chemical names in the annotation. That would be really useful to move things\nforward. Then again, PubChem will likely just generate the IUPAC name, since they have access to such software anyway.\nThey have teamed up with PubChem which will index it, but I will be interested in seeing how to use this for\n<code class=\"language-plaintext highlighter-rouge\">main subject</code> annotation in <a href=\"https://www.wikidata.org/wiki/Wikidata:WikiProject_Chemistry\">Wikidata</a>.</p>\n<p>A final note for now, the model they use is annotate the article with chemical substances (<code class=\"language-plaintext highlighter-rouge\">ChemicalSubstance</code>) with\n(one or more?) molecular entities (`MolecularEntity'). That is a model that scales well to their other journal,\nthe <a href=\"https://scholia.toolforge.org/venue/Q814756\">Beilstein Journal of Nanotechnology</a>. But scraping that is for another post.</p>","doi":"https://doi.org/10.59350/yyjnz-n5j48","guid":"https://doi.org/10.59350/yyjnz-n5j48","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1739404800,"reference":[{"id":"https://doi.org/10.59350/ne4rf-wey66","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.1186/s13321-021-00520-4","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.1021/jm5002056","unstructured":"<b>[cito:citesForInformation]</b>"},{"id":"https://doi.org/10.3762/bjoc.21.21","unstructured":"<b>[cito:usesDataFrom]</b>"},{"id":"https://doi.org/10.21105/joss.02558","unstructured":"<b>[cito:usesMethodIn]</b>"},{"id":"https://doi.org/10.59350/40377-hz881","unstructured":"<b>[cito:citesForInformation]</b>"}],"rid":"f4pz3-xcg49","summary":"Two weeks ago, the Beilstein Institute announced Bioschemas support in their journals:","tags":["Bioschemas","Rdf","Chemistry","Beilstein"],"title":"Beilstein journals contain Bioschemas","updated_at":1784926113,"url":"https://chem-bla-ics.linkedchemistry.info/2025/02/13/beiltein-journal-has-bioschemas.html","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"}],"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":1785024000,"use_api":true},"blog_name":"chem-bla-ics","blog_slug":"chem_bla_ics","content_html":"<p>A good number of years ago, a colleague and I explored if we could get access to the <a href=\"https://chem-bla-ics.linkedchemistry.info/2025/02/16/retraction-data-in-wikidata.html/retractiondatabase.org/\">Retraction Watch Database</a>,\nbut we could not afford it. We have been using data on retractions for curate our databases, like\n<a href=\"https://www.wikipathways.org/\">WikiPathways</a>. A database should not contain knowledge based on (only) a retracted article.\nWikidata, btw, has a small number (499) of statements supported by retracted articles. Similarly, it turns out that I am\n<a href=\"https://w.wiki/8pwe\">citing retracted articles in two papers</a> (and a preprint of one of them).</p>\n<p><a href=\"https://www.wikidata.org/\">Wikidata</a> has a good number of retracted articles in their database\n(<a href=\"https://scholia.toolforge.org/statistics\">some 21 thousand at the time of writing</a>). A lot of this data\ncomes from CrossRef, that recently <a href=\"https://www.crossref.org/blog/news-crossref-and-retraction-watch/\">acquired the Retraction Watch Database</a>\n(doi:<a href=\"https://doi.org/10.13003/c23rw1d9\">10.13003/c23rw1d9</a>)) and started providing the content as FAIR and Open data.\nWith <a href=\"https://github.com/egonw/ons-wikidata/blob/main/RetractionWatch/quickstatements.groovy\">a Bacting-based script</a>\nI am regularly updating Wikidata with annotations from CrossRef, giving a rich dataset in Wikidata around\nthe queries. Over the past few years I have written various SPARQL queries to show the results which today\nI <a href=\"https://bigcat-um.github.io/sparql-examples/examples/WikidataRetractions/\">collected under a single home</a>:</p>\n<p><img alt=\"\" src=\"https://chem-bla-ics.linkedchemistry.info/assets/images/retraction_SPARQL.png\"/></p>","doi":"https://doi.org/10.59350/w4zj3-mbw53","guid":"https://doi.org/10.59350/w4zj3-mbw53","language":"en","license":"https://creativecommons.org/licenses/by/4.0/legalcode","published_at":1739664000,"reference":[{"id":"https://doi.org/10.1093/nar/gkad960","unstructured":"Unknown title"},{"id":"https://doi.org/10.13003/c23rw1d9","unstructured":"<b>[cito:citesAsEvidence]</b>"}],"rid":"e8vfg-wqz89","summary":"A good number of years ago, a colleague and I explored if we could get access to the Retraction Watch Database, but we could not afford it. We have been using data on retractions for curate our databases, like WikiPathways. A database should not contain knowledge based on (only) a retracted article. Wikidata, btw, has a small number (499) of statements supported by retracted articles.","tags":["Wikidata","Wikipathways"],"title":"Retracted articles in Wikidata","updated_at":1784926112,"url":"https://chem-bla-ics.linkedchemistry.info/2025/02/16/retraction-data-in-wikidata.html","version":"v1"}],"out_of":51275,"page":1,"per_page":10,"total-results":51275}
