<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel rdf:about="https://community.wolfram.com">
    <title>Community RSS Feed</title>
    <link>https://community.wolfram.com</link>
    <description>RSS Feed for Wolfram Community showing any discussions tagged with External Programs and Systems sorted by new.</description>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3648303" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3645383" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3642116" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3641365" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3639321" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3635386" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3624083" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3599935" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3597462" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3596983" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3593931" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3589458" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3585501" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3565492" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3564927" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3562391" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3562381" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3561569" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3561485" />
        <rdf:li rdf:resource="https://community.wolfram.com/groups/-/m/t/3554402" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3648303">
    <title>Wolfram&amp;#039;s AI products: Which tool is right for you?</title>
    <link>https://community.wolfram.com/groups/-/m/t/3648303</link>
    <description>Wolfram has developed several features for integrating our technology with LLMs. The major products are [chat notebooks](https://reference.wolfram.com/language/tutorial/ChatNotebooks.html), [Notebook Assistant](https://www.wolfram.com/notebook-assistant-llm-kit/), [LLM functions](https://reference.wolfram.com/language/guide/LLMFunctions.html), [remote MCP server](https://www.wolfram.com/artificial-intelligence/mcp-service/), [the MCPServer paclet](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/MCPServer/), and [AgentOne](https://www.wolfram.com/apis/documentation/cag/wolfram-agent-one-api/). With all these offerings, it is confusing to know which one to use. This notebook should help you figure it out.&#xD;
&#xD;
&amp;gt; **Please comment about your experience with our AI product, we&amp;#039;d love to hear:**&#xD;
&#xD;
- Questions &#xD;
- Suggestions&#xD;
- Use cases&#xD;
- Anything else you&amp;#039;d like to share&#xD;
&#xD;
# Chat Notebook and Notebook Assistant &#xD;
&#xD;
## Who are they for&#xD;
&#xD;
If you are using a notebook and you want AI to help you by writing, fixing, or editing the code, these are the tools for you. [Chat notebooks](https://reference.wolfram.com/language/tutorial/ChatNotebooks.html) and [Notebook Assistant](https://www.wolfram.com/notebook-assistant-llm-kit/) are built right into the notebooks that Wolfram users are familiar with. These are great for quick tasks with a relatively small scale. You can ask them for pure code assistance help or to help solve problems where you think Wolfram will be a helpful tool.&#xD;
&#xD;
## How do I use it&#xD;
&#xD;
To use either chat notebooks or Notebook Assistant, it&amp;#039;s easiest with an [Wolfram Notebook Assistant + LLM Kit subscription](https://www.wolfram.com/notebook-assistant-llm-kit/).&#xD;
&#xD;
In recent versions, all notebooks are essentially chat notebooks. To use Chat notebooks, just insert a ChatInput cell into the body of a notebook (just click between cells and click single quote character). You can ask an LLM about whatever comes above that cell.&#xD;
&#xD;
![enter image description here][1]&#xD;
&#xD;
To use Notebook Assistant, open the sidebar using the button in the toolbar ![enter image description here][2]. Type your question or demand in the input field and send it. The AI will &amp;#034;see&amp;#034; whatever is in the notebook.&#xD;
&#xD;
[![enter image description here][3]][4]&#xD;
&#xD;
There are subtle differences between the responses generated by Notebook Assistant and chat notebooks, because there are differences in the prompting, tools, and context. But I find the interface to be the most important difference. Most of the time I find it useful to have the chat conversation outside of the main notebook, so I use Notebook Assistant more than chat notebook cells. If I want to change the way the AI is working by customizing the LLM model, persona or tools, I use a chat cell. It has a [menu](https://reference.wolfram.com/language/tutorial/ChatNotebooks.html?#1903336254) that makes it easy. But you should try them both and see what works for you. &#xD;
&#xD;
# LLM-based functions&#xD;
&#xD;
## Who are they for&#xD;
&#xD;
If instead of wanting AI to help you create code, you want to create code that uses AI, then LLM-based functions are the right tool for you. There are many related functions: LLMSynthesize, LLMFunction, LLMSubmit, ChatEvaluate, ServiceExecute, etc. Each is well documented, so I won&amp;#039;t go into details here.&#xD;
&#xD;
## How do I use it&#xD;
&#xD;
First you need to think about which service you want to use (OpenAI, Anthropic, Gemini, etc). Whatever service you choose there is a way to do it using these functions. Usually you will need to use the [LLMEvaluator](https://reference.wolfram.com/language/ref/LLMEvaluator.html?q=LLMEvaluator) and [Authentication](https://reference.wolfram.com/language/ref/Authentication) options. The simplest way is to use Wolfram&amp;#039;s [LLMKit subscription](https://www.wolfram.com/notebook-assistant-llm-kit/). Then we take care of everything, your normal Wolfram account will just make it work. &#xD;
&#xD;
    LLMSynthesize[&amp;#034;The sky was &amp;#034;]&#xD;
&#xD;
&amp;gt;    Out[]= &amp;#034;The sky was painted with hues of orange and pink as the sun dipped below the horizon, &#xD;
    casting a warm glow over the world. Wispy clouds drifted lazily, catching the fading light,&#xD;
    while the first stars began to twinkle in the deepening blue. A gentle breeze whispered&#xD;
    through the trees, carrying the sweet scent of blooming flowers.&#xD;
    It was a moment of tranquility, a perfect transition from day to night.&amp;#034;&#xD;
&#xD;
&#xD;
Here is an example using OpenAI:&#xD;
&#xD;
    LLMSynthesize[&amp;#034;The sky was &amp;#034;, &#xD;
    LLMEvaluator -&amp;gt; &amp;lt;|&amp;#034;Model&amp;#034; -&amp;gt; {&amp;#034;OpenAI&amp;#034;, &amp;#034;gpt-5.1&amp;#034;}|&amp;gt;, &#xD;
    Authentication -&amp;gt; SystemCredential[&amp;#034;OPENAI_API_KEY&amp;#034;]]&#xD;
&#xD;
&amp;gt;    Out[]= &amp;#034;...the color of television, tuned to a dead channel.If you&amp;#039;re writing and want options,&#xD;
    here are a few more ways to continue that line:- &amp;#034;The sky was bruised purple,&#xD;
    heavy with unshed rain.&amp;#034;- &amp;#034;The sky was a flat, exhausted gray, like someone had&#xD;
    rubbed all the blue out of it.&amp;#034;- &amp;#034;The sky was the pale white of old bones, washed&#xD;
    clean by years of wind.&amp;#034;Tell me the tone or genre you&amp;#039;re going for (poetic, sci‑fi, horror,&#xD;
    romance, etc.), and I can tailor a bunch of variations.&amp;#034;&#xD;
&#xD;
&#xD;
These functions are extremely customizable, for example, you can add [LLMTool](https://reference.wolfram.com/language/ref/LLMTool) and [LLMPromptGenerator](https://reference.wolfram.com/language/ref/LLMPromptGenerator) features to make your own functions work with the AI.&#xD;
&#xD;
# MCP Service and the MCPServer paclet&#xD;
&#xD;
## Who are they for&#xD;
&#xD;
If you are using an AI tool outside of a Wolfram product, like Cursor, Claude Code, or Antigravity and want to add Wolfram technology to it, you want to use one of our MCP servers. There are multiple ways to do that. &#xD;
&#xD;
If you have a Wolfram desktop product like Mathematica or Wolfram Engine AND are focused on Wolfram Language development, then you should use the [MCPServer paclet](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/MCPServer/). This is the best choice for people building large-scale projects featuring Wolfram Language code.&#xD;
&#xD;
If you do not have a Wolfram desktop product OR if you are more interested in using Wolfram&amp;#039;s tools, like computation and knowledge APIs, for creating non-Wolfram code then you should use the [MCP Service](https://www.wolfram.com/artificial-intelligence/mcp-service/). &#xD;
&#xD;
Most applications support our remote-hosted MCP server, but a few require special authentication protocols so in that case we also have a desktop application for connecting to the remote MCP server.&#xD;
&#xD;
## How do I use the MCPServer paclet&#xD;
&#xD;
First you want a [Wolfram Notebook Assistant + LLM Kit subscription](https://www.wolfram.com/notebook-assistant-llm-kit/). You can use the paclet without it, but it will work much better with the subscription because internally, it will use Wolfram Notebook Assistant + LLM Kit to improve results.&#xD;
&#xD;
Then, follow the instructions in the documentation for the [Wolfram/MCPServer paclet](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/MCPServer/). The paclet contains tools for installing its own configuration into most common applications. For users that are using agentic coding tools, take a look at the [Quick Start for AI Coding Applications](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/MCPServer/tutorial/QuickStartforAICodingApplications.html). For users that are using in chat applications, like Claude Desktop, take a look at [Quick Start for Chat Clients](https://resources.wolframcloud.com/PacletRepository/resources/Wolfram/MCPServer/tutorial/QuickStartforChatClients.html).&#xD;
&#xD;
## How do I use the MCP Service&#xD;
&#xD;
First you need an [MCP Service subscription](https://www.wolfram.com/artificial-intelligence/mcp-service/). This is different than Notebook Assistant + LLM Kit. If you already have Notebook Assistant + LLM Kit, you probably want to use the MCPServer paclet. To make use of the MCP Service, you will also need access to an LLM through your MCP client.&#xD;
&#xD;
Once you have an MCP Service subscription you can follow the instructions for your application [here](https://support.wolfram.com/73463).&#xD;
&#xD;
# AgentOne&#xD;
&#xD;
## Who is it for&#xD;
&#xD;
If you use an LLM directly via an API already and want to swap it out with one that has Wolfram knowledge and computation built into to it, then you use should use the [AgentOne API](https://www.wolfram.com/apis/documentation/cag/wolfram-agent-one-api/). AgentOne is the whole shebang, all prepackaged together into one API that you can use in place of another LLM API.&#xD;
&#xD;
## How do I use AgentOne&#xD;
&#xD;
Contact our [partnerships](mailto:partner-program@wolfram.com) team.&#xD;
&#xD;
# Decision flowchart created with help from Notebook Assistant&#xD;
&#xD;
![enter image description here][5]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=1howdoIuseit.png&amp;amp;userId=20103&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2NotebookAssistant.png&amp;amp;userId=20103&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=3NotebookAssistant.png&amp;amp;userId=20103&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=3NotebookAssistant.png&amp;amp;userId=20103&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=3tg5gzf5.jpg&amp;amp;userId=11733</description>
    <dc:creator>Bob Sandheinrich</dc:creator>
    <dc:date>2026-03-03T11:41:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3645383">
    <title>[Live Q&amp;amp;A] Thinking in Systems, Not Code: Mastering Complex Systems with Ankit Naik</title>
    <link>https://community.wolfram.com/groups/-/m/t/3645383</link>
    <description>How do you tackle complex systems without getting lost in the code? Join us for a live Q&amp;amp;A with Ankit Naik, author of Thinking in Systems, Not Code, a book born from years of practical experience with Modelica, system-level modeling, and systems thinking.&#xD;
&#xD;
Ankit will dive into the ideas behind the book, including how to understand complex, multi-domain systems through structure, feedback, and interactions &amp;#x2013; not just code. Bring your questions! &#xD;
&#xD;
Don&amp;#039;t miss out! Whether you&amp;#039;re interested in system modeling, Modelica or Wolfram System Modeler, or ways to apply systems thinking in real-world projects, this is your opportunity to engage directly with the author.&#xD;
&#xD;
Watch the livestream tomorrow, February 26th at 9 AM CST on the [Wolfram R&amp;amp;D YouTube channel][1]!&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
&amp;gt; Order the book here: https://a.co/d/07FFxRUd&#xD;
&#xD;
&#xD;
  [1]: https://youtube.com/live/vnDNQ4YzyeE&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=MasteringComplexsystems.jpg&amp;amp;userId=20103</description>
    <dc:creator>Keren Garcia</dc:creator>
    <dc:date>2026-02-25T15:19:30Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3642116">
    <title>Wolfram Language interface to the Zenodo API</title>
    <link>https://community.wolfram.com/groups/-/m/t/3642116</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/94468e5b-8ecb-4865-bb51-250a8cf5e270</description>
    <dc:creator>Arnoud Buzing</dc:creator>
    <dc:date>2026-02-19T20:52:58Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3641365">
    <title>How can I import a doc directly into Mathematica from a URL that requires authentication</title>
    <link>https://community.wolfram.com/groups/-/m/t/3641365</link>
    <description>I&amp;#039;ve been downloading documents to my local drive from an archive that requires authentication in the form of UserAgent name and email and Host URL. I&amp;#039;ve been using URLDownload to do this.&#xD;
&#xD;
    URLDownload[&#xD;
      HTTPRequest[&#xD;
       urlOfRemoteFile, &amp;lt;|&amp;#034;UserAgent&amp;#034; -&amp;gt; &amp;#034;firstName lastName emailAddress&amp;#034;, &#xD;
        &amp;#034;Host&amp;#034; -&amp;gt; &amp;#034;hostURL&amp;#034;|&amp;gt;],&#xD;
      pathToLocalDirectory&amp;#034;];&#xD;
&#xD;
But is it possible to use Import or some other function to load the contents of the file directly into a Mathematica notebook *without* having to save the file locally? I&amp;#039;ve tinkered with Import but can&amp;#039;t get the authentication right.&#xD;
&#xD;
Any hint would be appreciated.</description>
    <dc:creator>Gregory Lypny</dc:creator>
    <dc:date>2026-02-18T18:17:49Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3639321">
    <title>Notebook Assistant fails to correctly develop a discrete Fast Fourier Transform (FFT)</title>
    <link>https://community.wolfram.com/groups/-/m/t/3639321</link>
    <description>I thought I would test Notebook Assistant (NA) on something I actually thought it could do accurately.  I have attached the Chat Notebook. I wanted it to develop code for a discrete FFT to multiply two large numbers. This is a well worn path. There is an enormous amount of code that was presumably part of the training set for ChatGPT so I thought it would spit out useful code. As background when I worked in Defence Science in Australia 50 years ago I was working with FFTs regularly for various things. The Great Internet Mersenne Prime Search (GIMPS) used a highly efficient assembly language FFT written by George Woltman that underpinned the massive calculations involved in that project.  As you can see Notebook Assistant went to the Automatic Teller of Talent to make a withdrawal and found it had insufficient funds.  I  then gave it a Mathematica module I had written years ago which I knew worked and let it convince itself that my code worked.  I asked what version of ChatGPT ir was and it was only version 4 so I asked  ChatGPT 5,2 (which begs the question of why Wolfram is charging the same price for Version 2 in NA) whether my code worked and it said &amp;#034;no&amp;#034;. After some Socratic badinage it admitted it was wrong and worked out why. I asked Claude Sonnet 4.5 whether my code would work and  got a provisional thumbs up for &amp;#034;small&amp;#034; numbers but not ones of at least 1000 digits so I challenged it and it produced 2 1000 digits numbers which it multiplied using Python&amp;#039;s architecture and got the same answer as my code - see attached pdf of the chat.&#xD;
&#xD;
Anyone doing serious stuff needs to be very careful with these LLMs. I have found  NA useful for what I consider &amp;#034;hole digging&amp;#034; type issues that do not require really sophisticated analysis. I have actually used ChatGPT on some reasonably sophisticated analytical problems and it has provided useful insights but you have to be very careful and check every step. Commercially I can&amp;#039;t see why Wolfram can charge for ChatGPT version 4 in NA rather than the latest version - I&amp;#039;m paying twice and I may actually drop NA although the convenience of NA is seductive.&#xD;
&#xD;
When you see breathless articles about Claude Sonnet 4.6 producing 100,000 lines of compiler code there is a disconnect between that and the sort of reality that I experienced on a really well worn problem.</description>
    <dc:creator>Peter Haggstrom</dc:creator>
    <dc:date>2026-02-12T23:27:52Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3635386">
    <title>Leveling up RAG: implementing hybrid search and reranking</title>
    <link>https://community.wolfram.com/groups/-/m/t/3635386</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/7562725e-a650-4548-92c3-d0f8d90730f6</description>
    <dc:creator>Roee Ziv</dc:creator>
    <dc:date>2026-02-06T09:48:55Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3624083">
    <title>Sending queries from Wolfram Mathematica to IBM quantum processing units</title>
    <link>https://community.wolfram.com/groups/-/m/t/3624083</link>
    <description>![Sending queries from Wolfram Mathematica to IBM quantum processing units][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=ChatGPTImageJan24,2026,11_40_09AM.png&amp;amp;userId=1539902&#xD;
  [2]: https://www.wolframcloud.com/obj/aa16b1e4-1e60-49e6-b718-514f5e65fe71</description>
    <dc:creator>Mohammad Bahrami</dc:creator>
    <dc:date>2026-01-24T19:42:06Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3599935">
    <title>Using DatabaseReference for SAP HANA database</title>
    <link>https://community.wolfram.com/groups/-/m/t/3599935</link>
    <description>Hello all,&#xD;
&#xD;
my name is Dirk and I had the chance to attend the online training &amp;#034;Mastering Relational &#xD;
Databases with Wolfram Language and SQL&amp;#034; held by Dimitar Krastev some weeks ago.&#xD;
&#xD;
And during my x-mas break I wanted to apply some of the steps provided in the training &#xD;
to access a SQL DB. In my case it this SQL DB is a HANA DB from SAP. Nothing fancy from the perspective to access it with ODBC or JDBC in python or R.&#xD;
&#xD;
In the past I accessed a SAP DB by using the DatabaseLink but now I would like to understand how to use &amp;#034;DatabaseReference&amp;#034; with SQL (ExternalEvaluate) and EntittyStore (EntityValue).&#xD;
&#xD;
Maybe someone can help me by some hints?&#xD;
&#xD;
The issue is it is said in the training material:  &#xD;
**... To create a database reference, we can use the built-in DatabaseReference function. &#xD;
Note: if you are using a server-based database, simply replace the File handler with the URL of your database:**&#xD;
&#xD;
I made several attempts to get it up and running but without success.&#xD;
&#xD;
To start with I added to the notebook:&#xD;
&#xD;
        Needs[&amp;#034;JLink`&amp;#034;]&#xD;
        AddToClassPath[&amp;#034;/home/dirk/.Wolfram/DatabaseResources/ngdbc.jar&amp;#034;]&#xD;
&#xD;
When using &#xD;
&#xD;
    DatabaseReference[URL[&amp;#034;jdbc:sap://MATHEMATICA:&amp;lt;MySecretPassword&amp;gt;@hxehost:39015/HXE&amp;#034;]]&#xD;
&#xD;
The error message is:&#xD;
&#xD;
**Invalid reference specification:**   &#xD;
**jdbc:sap://MATHEMATICA:&amp;lt;MySecretPassword&amp;gt;@hxehost:39015/HXE**&#xD;
&#xD;
When using:&#xD;
&#xD;
    DatabaseReference[URL[&amp;#034;sap://MATHEMATICA:&amp;lt;MySecretPassword&amp;gt;@hxehost:39015/HXE&amp;#034;]]&#xD;
or&#xD;
&#xD;
    DatabaseReference[&amp;#034;sap://MATHEMATICA:&amp;lt;MySecretPassword&amp;gt;@hxehost:39015/HXE&amp;#034;]&#xD;
I get a DatabaseReference with an ID and everything looks fine.&#xD;
&#xD;
Unfortunately this does not seems to be the case. &#xD;
&#xD;
Because when trying to proceed with:  &#xD;
&#xD;
    RegisterExternalEvaluator[&amp;#034;SQL&amp;#034; -&amp;gt; conn]&#xD;
&#xD;
The response is:&#xD;
&#xD;
**Invalid backend &amp;#034;sap&amp;#034;. Possible choices are: PostgreSQL,SQLite,MySQL,Oracle,MicrosoftSQL.**&#xD;
&#xD;
I assume that SAP HANA is not a considered DB in Wolfram universe yet by looking into &amp;#034;Connection.m&amp;#034;:&#xD;
&#xD;
    SystemOpen@&#xD;
    FileNameJoin[{$InstallationDirectory, &amp;#034;SystemFiles&amp;#034;, &amp;#034;Links&amp;#034;, &#xD;
    &amp;#034;Databases&amp;#034;, &amp;#034;Databases&amp;#034;, &amp;#034;Schema&amp;#034;, &amp;#034;Connection.m&amp;#034;}]&#xD;
&#xD;
In case I´m using:&#xD;
&#xD;
    RegisterExternalEvaluator[&amp;#034;SQL-JDBC&amp;#034; -&amp;gt; conn]&#xD;
&#xD;
The respons is:  &#xD;
**JDBC::classnotfound**   &#xD;
And when I´m following the documentation I´m back in the old world with DatabaseLink.&#xD;
&#xD;
Can someone please tell me what are the appropriate key words to be used in the association and what needs to be considered to avoid the &amp;#034;JDBC::classnotfound&amp;#034; error please? &#xD;
&#xD;
The outdated approach by using &#xD;
&#xD;
    conn = OpenSQLConnection[] &#xD;
&#xD;
is working. Unfortunately this was not what I was looking for.&#xD;
&#xD;
How can I overcome this? Is there a possibility for this when using SAP HANA DB?&#xD;
&#xD;
Thank you for your help in advance. &#xD;
&#xD;
Br.,  &#xD;
Dirk&#xD;
&#xD;
P.S. For HANA DB it is common to use  &#xD;
Driver Name: HANA  &#xD;
Class Name: com.sap.db.jdbc.Driver  &#xD;
URL template: jdbc:sap://{host}[:{port}]</description>
    <dc:creator>Di O</dc:creator>
    <dc:date>2026-01-01T17:19:48Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3597462">
    <title>Fun simulation of balls bouncing in a gravity circle</title>
    <link>https://community.wolfram.com/groups/-/m/t/3597462</link>
    <description>[ The end goes crazy #ball #simulation #hipnotic #adhd #vision #eyes ][1]&#xD;
&#xD;
I asked chatgpt to code this simulation in **Wolfram L** but the simulation didn&amp;#039;t turn out as nicely as in the vid. Can someone, with or without the help of AI, code it? Obviously this is just random and fun, and more of a test of AI capabilities. Happy Xmas everyone!&#xD;
&#xD;
  [1]: https://www.youtube.com/shorts/ZrJkIlB9qD8</description>
    <dc:creator>Raspi Rascal</dc:creator>
    <dc:date>2025-12-26T11:18:26Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3596983">
    <title>Create a table in an SQLite database</title>
    <link>https://community.wolfram.com/groups/-/m/t/3596983</link>
    <description>See notebook below.  When I run this program snippet cell by cell it creates the database, but when I try to create a table it says that the table is already exist, although I trashed the whole database from the previous run and emptied the trashcan.  &#xD;
See also the image of the program after the run and also the filesystem knowledge about the database - containing 0 bytes.  &#xD;
So I am really intrigued where this Exchange table is that exists before I try to create it.  I am also wondering if it is exists then why the `RelationalDatabase[]` command is not able to find it.&#xD;
Ignore the `CreateFile` warning, that if from a previous run.  See attached screenshot of the program at runtime.&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/6d2455e0-9d26-44d6-b615-5930dd83cfea</description>
    <dc:creator>Janos Lobb</dc:creator>
    <dc:date>2025-12-25T02:52:12Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3593931">
    <title>Our computational validation of an external framework in WPP hypergraph systems</title>
    <link>https://community.wolfram.com/groups/-/m/t/3593931</link>
    <description>Previous work has proposed mapping external theoretical frameworks onto WPP hypergraph dynamics (e.g., Malicse 2025), but to my knowledge none have operationalized such mappings as measurable causal graph observables and run validation experiments.  &#xD;
This paper reports the first such attempt: testing whether Energetic First Principles (E1P), a structural framework for process dynamics, appears in WPP hypergraph evolution.  &#xD;
Method: E1P&amp;#039;s four-phase cycle was operationalized as causal graph observables&amp;#x2014;branching events (CC), merging events (AC), cumulative open branches (CA), inverse activity (AA)&amp;#x2014;and tested across 15 hypergraph rewriting rules.  &#xD;
Results:&#xD;
&#xD;
Phase ordering (CC → CA → AC): 9/9 CI rules ✓  &#xD;
CA accumulation → drainage: 9/9 CI rules ✓  &#xD;
Merge rate consistency across evaluation orders: 9/9 CI rules ✓  &#xD;
Discrete τ threshold at ~87%: No rules in 1-85% range  &#xD;
Four-class taxonomy emerges: Generative CI, Conservative CI, FixedPoint, CV&#xD;
&#xD;
Implication: E1P phase structure appears to be discovered structure within CI dynamics, not imposed interpretation. This suggests external frameworks can be empirically validated in WPP&amp;#x2014;not just proposed.  &#xD;
Full paper with methodology, data tables, and reproducibility details:  &#xD;
https://doi.org/10.5281/zenodo.17979892  &#xD;
Interested in whether others have attempted similar operationalizations, or observed comparable phase patterns in CI rule evolution.&#xD;
&#xD;
Note: This is empirical validation, not derivation of physical constants. The claims are limited to observable phase patterns in causal graphs&amp;#x2014;not cosmological correspondence. All results reproducible in Mathematica 14.0+ with SetReplace.&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/a93df282-9b3d-4893-b13c-71b80c7ee82d</description>
    <dc:creator>Catalin Leescu</dc:creator>
    <dc:date>2025-12-18T17:41:53Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3589458">
    <title>Dancing light at the bottom of a pool (AI-generated caustic waves)</title>
    <link>https://community.wolfram.com/groups/-/m/t/3589458</link>
    <description>![Dancing light at the bottom of a pool (AI-generated caustic waves)][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=CausticWavesWolfram-optimize.gif&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/f9911248-6329-47d1-87c0-a1abb625ed8a</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2025-12-11T18:16:17Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3585501">
    <title>A school of swimming jellyfish: trigonometric and boolean rendering</title>
    <link>https://community.wolfram.com/groups/-/m/t/3585501</link>
    <description>![A school of swimming jellyfish: trigonometric and boolean rendering ][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=fishyjelly2-ezgif.com-optimize.gif&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/1650c140-fea8-42bf-ac77-ba7cd9a0a725</description>
    <dc:creator>Vitaliy Kaurov</dc:creator>
    <dc:date>2025-12-04T11:45:25Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3565492">
    <title>From arithmetic to phase transitions: how multiplication, temperature, and game theory reveal LLMs</title>
    <link>https://community.wolfram.com/groups/-/m/t/3565492</link>
    <description>![From arithmetic to phase transitions: how multiplication, temperature, and game theory reveal LLM behavior][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2352FromArithmeticSkilltoPhaseTransitions.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/3bba7d3d-497e-4e8d-b1f0-9ac8fab0e755</description>
    <dc:creator>Marco Thiel</dc:creator>
    <dc:date>2025-10-25T22:47:31Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3564927">
    <title>Reconstructing the classic ASCII donut in Wolfram language using FunctionCompile</title>
    <link>https://community.wolfram.com/groups/-/m/t/3564927</link>
    <description>![Reconstructing the classic ASCII Donut in Wolfram language using FunctionCompile][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2025-10-24_13-06-43-optimize.gif&amp;amp;userId=11733&#xD;
  [2]: https://www.wolframcloud.com/obj/411c629d-2ae2-473a-98eb-05916e6e362d</description>
    <dc:creator>Shenghui Yang</dc:creator>
    <dc:date>2025-10-24T18:53:51Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3562391">
    <title>AI assisted access of Garmin FIT data via Python interface</title>
    <link>https://community.wolfram.com/groups/-/m/t/3562391</link>
    <description>&amp;amp;[Wolfram Notebook][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/d5e6a993-0d86-4c39-91b4-64b5395231f5</description>
    <dc:creator>Robert Rimmer</dc:creator>
    <dc:date>2025-10-18T21:19:05Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3562381">
    <title>How to make updated Python external evaluation work with Wolfram?</title>
    <link>https://community.wolfram.com/groups/-/m/t/3562381</link>
    <description>&amp;amp;[PythonQuestion][1]&#xD;
&#xD;
&#xD;
  [1]: https://www.wolframcloud.com/obj/a5b3c6b0-799d-4f65-a96d-1023951580fb</description>
    <dc:creator>Robert Rimmer</dc:creator>
    <dc:date>2025-10-18T19:12:47Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3561569">
    <title>Access and visualize Garmin FIT data: nocturnal oxygen saturation, hike activity and GPS</title>
    <link>https://community.wolfram.com/groups/-/m/t/3561569</link>
    <description>![Access and visualize Garmin FIT data: nocturnal oxygen saturation, hike activity and GPS][1]&#xD;
&#xD;
&amp;amp;[Wolfram Notebook][2]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=AccessGarminFITdata.png&amp;amp;userId=20103&#xD;
  [2]: https://www.wolframcloud.com/obj/d850ec9f-3211-42e9-b588-52137915717f</description>
    <dc:creator>Robert Rimmer</dc:creator>
    <dc:date>2025-10-16T18:53:49Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3561485">
    <title>How to successfully install ffmpeg on Windows 11 and use it in Mathematica 14.3?</title>
    <link>https://community.wolfram.com/groups/-/m/t/3561485</link>
    <description>[How to install FFmpeg on Windows 10][1]&#xD;
&#xD;
I followed the instructions on the webpage exactly as shown, but it shows that the installation was not successful after completion. What is the reason and how can I resolve it?&#xD;
&#xD;
[FFmpeg][2]&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
The version of FFmpeg used is the latest version as shown on the webpage above.&#xD;
&#xD;
&#xD;
The final result is still like this:&#xD;
&#xD;
![enter image description here][4]&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com/groups/-/m/t/2177967&#xD;
  [2]: https://github.com/BtbN/FFmpeg-Builds/releases&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2025-10-16_203955.png&amp;amp;userId=3529132&#xD;
  [4]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2025-10-16_204335.png&amp;amp;userId=3529132</description>
    <dc:creator>Wen Dao</dc:creator>
    <dc:date>2025-10-16T12:45:16Z</dc:date>
  </item>
  <item rdf:about="https://community.wolfram.com/groups/-/m/t/3554402">
    <title>Recreation of World of Goo or bridge construction game with WLJS</title>
    <link>https://community.wolfram.com/groups/-/m/t/3554402</link>
    <description>![Recreation of World of Goo or bridge construction game with WLJS][1]&#xD;
&#xD;
&#xD;
Based on original article: https://wljs.io/blog/2025/08/22/goo/&#xD;
&#xD;
Here we shall try to model a system of interconnected bonds using the Verlet method. Then, we&amp;#039;ll add some visuals to make it feel like a game.&#xD;
&#xD;
#Motion Equations&#xD;
&#xD;
The system of connected points must obey Newton&amp;#039;s laws and kinematic equations as well. To integrate them in real-time, Euler&amp;#039;s method, RK (Runge-Kutta), or Verlet methods can be used. We will go for the Verlet method since it will be easier to apply constraints of the bonds in the future:&#xD;
&#xD;
$$x_{n+1} = 2x_n - x_{n-1} + \frac{f_n}{m} \delta t^2$$&#xD;
&#xD;
We can try to apply it for the simples case, when $\mathbf{f}_n = -m\mathbf{x} / |\mathbf{x}|^4$ is sort of a gravity force caused by a red star in the center&#xD;
&#xD;
    estimateX[n_Integer, initialV_ : 0.01] := &#xD;
      FixedPoint[&#xD;
       Function[&#xD;
        x, {2 x[[1]] - x[[2]] - 0.001  ((x[[1]])/(Power[Norm[x[[1]]], 4])),&#xD;
          x[[1]], x[[2]]}], {{-1.0, 2 initialV 0.01}, {-1.0, &#xD;
         initialV 0.01}, {-1.0, 0}}, n];&#xD;
&#xD;
Now let&amp;#039;s plot our solutions for different initial conditions:&#xD;
&#xD;
    Table[{v, Table[estimateX[n, v][[1]], {n, 1, 100}]}, {v,0,4}];&#xD;
    % // Transpose;&#xD;
    ListLinePlot[&#xD;
      %[[2]]&#xD;
    , PlotStyle -&amp;gt; AbsoluteDashing[{3}]  &#xD;
    , PlotRange -&amp;gt; 2{{-1,1}, {-1,1}}&#xD;
    , PlotLegends -&amp;gt; (StringTemplate[&amp;#034;v = ``&amp;#034;][#]&amp;amp;/@ %[[1]])&#xD;
    , Epilog -&amp;gt; {Red, Disk[{0,0}, 0.1]} &#xD;
    , Frame -&amp;gt; True&#xD;
    , AspectRatio -&amp;gt; 1&#xD;
    ]&#xD;
&#xD;
![enter image description here][2]&#xD;
&#xD;
*The case of v=3 must be related to the orbital velocity of a star*&#xD;
&#xD;
To see it animated we should repeat the calculations for every frame&#xD;
&#xD;
    With[{initialV = 3.0}, &#xD;
     Module[{point = {{-1.0, 2 initialV 0.01}, {-1.0, &#xD;
          initialV 0.01}, {-1.0, 0}}}, &#xD;
      EventHandler[&amp;#034;frameXXX&amp;#034;, Function[Null, point[[3]] = point[[2]];&#xD;
        point[[2]] = point[[1]];&#xD;
        point[[1]] = &#xD;
         2 point[[2]] - &#xD;
          point[[3]] - ((point[[1]])/(Power[Norm[point[[1]]], 4])) 0.001;&#xD;
        point = point; (*to trigger an update*)]];&#xD;
      Graphics[{Point[point // Offload], &#xD;
        AnimationFrameListener[point // Offload, &amp;#034;Event&amp;#034; -&amp;gt; &amp;#034;frameXXX&amp;#034;]}, &#xD;
       PlotRange -&amp;gt; 2 {{-1, 1}, {-1, 1}}, &#xD;
       Epilog -&amp;gt; {Red, Disk[{0, 0}, 0.1]}, AspectRatio -&amp;gt; 1]]]&#xD;
&#xD;
![enter image description here][3]&#xD;
&#xD;
#Constraints Algorithm&#xD;
&#xD;
The simplest and well-known approach for solving the bonds problem is approximating it with springs with finite or infinite stiffness. As it follows from [Wikipedia article][4]:&#xD;
&#xD;
&amp;gt; ![enter image description here][5]&#xD;
&#xD;
where s is an effective stiffness constant: s=1 represents an infinitely stiff spring (hard bond), and s&amp;lt;1 represents a soft bond.&#xD;
&#xD;
&amp;gt; Verlet integration is useful because it directly relates the force to the position, rather than solving the problem using velocities.&#xD;
&#xD;
Note: Constraints Algorithm is applied on the vertices **after** Verlet integration has been performed.&#xD;
&#xD;
Let&amp;#039;s draft a function, that takes the following arguments and process the data efficiently:&#xD;
&#xD;
- list of vertices&#xD;
 - list of indices of fixed vertices&#xD;
 - list of bonds:  &#xD;
        - index A  &#xD;
        - index B  &#xD;
        - initial length  &#xD;
        - stiffness&#xD;
&#xD;
And it should output a new list of vertices:&#xD;
&#xD;
    processVertices[vertices_List, fixed_List, bonds_List] := &#xD;
     Module[{coords = vertices[[1]], coords2 = vertices[[2]], &#xD;
       coords3 = vertices[[3]]}, Do[coords3 = coords2;&#xD;
       coords2 = coords;&#xD;
       Module[{integrated = &#xD;
          2 coords2 - coords3 + Table[{0, -1}, Length[coords]] 0.001}, &#xD;
        MapThread[&#xD;
         Function[{i, j, l, s}, &#xD;
          With[{d = integrated[[i]] - integrated[[j]]}, {norm = &#xD;
             Norm[d]}, {m = 0.5 s Min[(l/(norm + 0.001) - 1), 0.1]&#xD;
            (*avoid blowing up the system*)}, integrated[[i]] += m d;&#xD;
           integrated[[j]] -= m d;]], RandomSample[bonds] // Transpose];&#xD;
        Map[Function[index, integrated[[index]] = coords[[index]];], &#xD;
         fixed];&#xD;
        coords = integrated;];, {2 5}];&#xD;
      {coords, coords2, coords3}]&#xD;
&#xD;
Note: For the stability it is recommended to apply constraints in random order&#xD;
&#xD;
Let us try it on some basic example:&#xD;
&#xD;
    bridge = Join @@ Table[{{i, 75}, {i + 5, 55}}, {i, 1, 100, 10}];&#xD;
    bonds = Join[Table[{i, i + 1}, {i, 1, Length[bridge] - 1, 2}], &#xD;
       Table[{i, i + 2}, {i, 1, Length[bridge] - 2, 2}], &#xD;
       Table[{i + 1, i + 3}, {i, 1, Length[bridge] - 3, 2}]];&#xD;
    bonds = Map[&#xD;
       Join[#, {Norm[bridge[[#[[1]]]] - bridge[[#[[2]]]]], 0.7} // N] &amp;amp;, &#xD;
       bonds];&#xD;
    &#xD;
    plotBridge[bridge_] := &#xD;
      Graphics[{MapThread[{bridge[[#1]], bridge[[#2]]} &amp;amp;, &#xD;
          bonds // Transpose] // Line, Point[bridge], ColorData[97][6], &#xD;
        MapIndexed[Text[#2[[1]], #1] &amp;amp;, bridge]}, &#xD;
       PlotRange -&amp;gt; {{0, 100}, {0, 100}}, &amp;#034;Controls&amp;#034; -&amp;gt; False];&#xD;
    &#xD;
    plotBridge[bridge]&#xD;
&#xD;
![enter image description here][7]&#xD;
&#xD;
Let&amp;#039;s run the simulation for a few iterations and plot the final result, while keeping [1,2] vertices fixed at the original positions&#xD;
&#xD;
    Module[{bridgeState = {bridge, bridge, bridge}},&#xD;
      Do[&#xD;
        bridgeState = processVertices[bridgeState, {1,2,19,20}, bonds];&#xD;
      , {10}];&#xD;
    &#xD;
      Show[plotBridge[bridge], plotBridge[bridgeState[[1]]]]&#xD;
    ]&#xD;
&#xD;
![enter image description here][8]&#xD;
&#xD;
Great! At least it did not collapse :) It would be great to see it live. For this we apply the same strategy with `Offload` technique&#xD;
&#xD;
    Module[{bridgeState, lines, points, frame = CreateUUID[]}, &#xD;
     EventHandler[frame, &#xD;
      Function[Null, &#xD;
       bridgeState = processVertices[bridgeState, {1, 2, 19, 20}, bonds];&#xD;
       lines = &#xD;
        MapThread[{bridgeState[[1, #1]], bridgeState[[1, #2]]} &amp;amp;, &#xD;
         bonds // Transpose];]];&#xD;
     bridgeState = {bridge, bridge, bridge};&#xD;
     lines = &#xD;
      MapThread[{bridgeState[[1, #1]], bridgeState[[1, #2]]} &amp;amp;, &#xD;
       bonds // Transpose];&#xD;
     points = bridge;&#xD;
     Show[plotBridge[bridge], &#xD;
      Graphics[{ColorData[97][9], Point[points // Offload], &#xD;
        Line[lines // Offload], &#xD;
        AnimationFrameListener[lines // Offload, &amp;#034;Event&amp;#034; -&amp;gt; frame]}]]]&#xD;
&#xD;
![enter image description here][10]&#xD;
&#xD;
#Preparing Graphics&#xD;
&#xD;
The original inspiration was a puzzle video game developed and published by 2D Boy - **The World of Goo**. It was first released in 2008. In the game, players must use balls of goo to build structures, such as bridges, towers and etc.&#xD;
&#xD;
We start from the background, and add some blur to it:&#xD;
&#xD;
    background = Blur[&#xD;
![enter image description here][11]&#xD;
&#xD;
    , 10];&#xD;
&#xD;
    clouds = {&#xD;
![enter image description here][12],&#xD;
![enter image description here][13]&#xD;
&#xD;
    };&#xD;
&#xD;
#Rendering&#xD;
&#xD;
Rendering the scene using retained mode with pure raster graphics is more efficient, especially when applying special effects.&#xD;
&#xD;
For this reason we use Javascript Canvas API, which is mapped 1:1 to `Canvas2D` library&#xD;
&#xD;
    Needs[&amp;#034;Canvas2D`&amp;#034;-&amp;gt;&amp;#034;ctx`&amp;#034;] // Quiet; &#xD;
&#xD;
Let&amp;#039;s define a helper function for rendering bonds:&#xD;
&#xD;
    drawBonds[context_, vert_, edges_, &#xD;
       fixed_, {width_, height_}] := (ctx`BeginPath[context];&#xD;
       ctx`SetLineWidth[context, 4];&#xD;
       ctx`SetStrokeStyle[context, &amp;#034;#2C6C75&amp;#034;];&#xD;
       Do[ctx`MoveTo[context, {0, height} - {-1, 1} vert[[p[[1]]]]];&#xD;
        ctx`LineTo[context, {0, height} - {-1, 1} vert[[p[[2]]]]];, {p, &#xD;
         edges}];&#xD;
       ctx`Stroke[context];&#xD;
       ctx`SetFillStyle[context, &amp;#034;#1C4E28&amp;#034;];&#xD;
       (ctx`BeginPath[context];&#xD;
          ctx`Arc[context, {0, height} - {-1, 1} #, 6, 0, 2.0 Pi];&#xD;
          ctx`Fill[context];) &amp;amp; /@ vert;&#xD;
       ctx`SetFillStyle[context, RGBColor[0.9, 0.4, 0.4] // Darker];&#xD;
       (ctx`BeginPath[context];&#xD;
          ctx`Arc[context, {0, height} - {-1, 1} vert[[#]], 4, 0, 2.0 Pi];&#xD;
          ctx`Fill[context];) &amp;amp; /@ fixed;);&#xD;
&#xD;
Here we use the same bridge section and render it using our new raster renderer:&#xD;
&#xD;
    Module[{&#xD;
      ctx = ctx`Canvas2D[]&#xD;
    },&#xD;
      drawBonds[ctx, 5 bridge, bonds, {1,2,19,20}, {500,500}];&#xD;
      ctx`Dispatch[ctx];&#xD;
      Image[ctx, ImageResolution-&amp;gt;{500,500}]&#xD;
    ]&#xD;
&#xD;
![enter image description here][14]&#xD;
&#xD;
As a basic visual effect, we can add a trailing effect to the cursor, similar to how it was done in the original game (to some extent):&#xD;
&#xD;
    drawPointer[context_, trail_, edges_, {width_, height_}] := (&#xD;
      ctx`BeginPath[context];&#xD;
      ctx`SetLineWidth[context, 2];&#xD;
      ctx`SetStrokeStyle[context, RGBColor[0.4, 0.6, 0.9]//Darker];&#xD;
    &#xD;
      Do[&#xD;
        ctx`MoveTo[context, {0, height} - {-1, 1} t[[1]]];&#xD;
        ctx`LineTo[context, {0, height} - {-1, 1} t[[2]]];&#xD;
      , {t, edges}];&#xD;
    &#xD;
      ctx`Stroke[context];&#xD;
      ctx`SetFillStyle[context, RGBColor[0.4, 0.9, 0.6]//Darker];&#xD;
    &#xD;
      Do[&#xD;
        ctx`BeginPath[context];&#xD;
        ctx`Arc[context, {0, height} - {-1, 1} trail[[i]], 6.0/i, 0, 2.0 Pi];&#xD;
        ctx`Fill[context];&#xD;
      , {i, Length[trail]}];&#xD;
    );&#xD;
&#xD;
   -&#xD;
&#xD;
    Module[{&#xD;
      ctx = ctx`Canvas2D[],&#xD;
      trail = Table[{0,0}, {10}],&#xD;
      frame = CreateUUID[],&#xD;
      target = {0,0},&#xD;
      state = Table[bridge // N, {3}]&#xD;
    },&#xD;
      EventHandler[frame, Function[Null,&#xD;
        ctx`ClearRect[ctx, {0,0}, {500,500}];&#xD;
        drawBonds[ctx, 5 state[[1]], bonds, {1,2,19,20}, {500,500}];&#xD;
        drawPointer[ctx, trail, {}, {500,500}];&#xD;
        ctx`Dispatch[ctx];  &#xD;
    &#xD;
        trail = RotateRight[trail, 1];&#xD;
        trail[[1]] = target;&#xD;
    &#xD;
        state = processVertices[state, {1,2,19,20}, bonds];&#xD;
      ]];&#xD;
      &#xD;
      EventHandler[Image[ctx, &#xD;
        ImageResolution-&amp;gt;{500,500},&#xD;
        Epilog-&amp;gt;AnimationFrameListener[ctx, &amp;#034;Event&amp;#034;-&amp;gt;frame]&#xD;
      ], {&#xD;
        &amp;#034;mousemove&amp;#034;-&amp;gt;Function[xy,&#xD;
          target = {0,500} + {1,-1} xy;&#xD;
      ]}]&#xD;
    ]&#xD;
&#xD;
#Utils&#xD;
&#xD;
For adding more bonds to the structure of a bridge, we need to find the shortest links (maximum 2) to the cursor position. Here is a little function for this purpose:&#xD;
&#xD;
    findConnections[vertx_, p_, th_: 2.0] := &#xD;
      With[{a = &#xD;
         MapIndexed[Function[{val, i}, &#xD;
           With[{n = Norm[p - val]}, &#xD;
            If[n &amp;lt; th, {i[[1]], n}, Nothing]]], vertx]}, &#xD;
       If[Length[a] == 0, {}, &#xD;
        If[Length[a] &amp;gt; 2, &#xD;
         TakeSmallestBy[a, Function[v, v[[2]]], 2], a][[All, 1]]]]&#xD;
&#xD;
It is far from the optimal solution, since it naively checks all vertices available.&#xD;
&#xD;
#Wrapping up&#xD;
&#xD;
As the last step, we add a click listener to append new vertices and bonds to the system. For the visuals, we also add a background image and moving clouds in a simple linear pattern:&#xD;
&#xD;
    With[{&#xD;
      frame = CreateUUID[],&#xD;
      ctx = ctx`Canvas2D[],&#xD;
      fixed = NotebookStore[&amp;#034;contemporaneously-be4&amp;#034;]&#xD;
    }, Module[{&#xD;
      p, pointer, trail, target, nearbyVertices, bonds, &#xD;
      offset, targetOffset, cloudsPos, cloudsImages&#xD;
    }, &#xD;
      p = NotebookStore[&amp;#034;audience-36d&amp;#034;];&#xD;
      bonds = NotebookStore[&amp;#034;huckster-6b8&amp;#034;];&#xD;
      &#xD;
      nearbyVertices = {};&#xD;
      cloudsPos = NotebookStore[&amp;#034;circumvention-9f5&amp;#034;];&#xD;
      &#xD;
      cloudsImages = RandomChoice[clouds, 5];&#xD;
      &#xD;
    &#xD;
      pointer = {250,250};&#xD;
      offset = 0.0;&#xD;
      targetOffset = -150;&#xD;
      target = pointer;&#xD;
      trail = Table[pointer, {10}];&#xD;
      &#xD;
      EventHandler[frame, Function[Null,&#xD;
        &#xD;
        (* clear and translate the screen buffer *)&#xD;
        ctx`ClearRect[ctx, {0,0}, {500,500}];&#xD;
        ctx`Translate[ctx, {0, offset}];&#xD;
    &#xD;
        (* background *)&#xD;
        ctx`DrawImage[ctx, background, {0,0}];&#xD;
        MapThread[ctx`DrawImage[ctx, #1, #2]&amp;amp;, {cloudsImages, cloudsPos}];&#xD;
    &#xD;
        (* draw bridge *)&#xD;
        drawBonds[ctx, p[[1]], bonds, fixed, {500,500}];&#xD;
    &#xD;
        &#xD;
        (* draw a cursor *)&#xD;
        drawPointer[ctx, trail, {trail[[1]], p[[1, #]]} &amp;amp;/@ nearbyVertices, {500,500}];&#xD;
    &#xD;
        (* reset transformation and flip the buffers *)&#xD;
        ctx`Translate[ctx, {0, -offset}];&#xD;
        ctx`Dispatch[ctx];&#xD;
    &#xD;
        (* trail computations *)&#xD;
        pointer = 0.35 (target + {0,1} offset) + 0.65 pointer;&#xD;
        trail = RotateRight[trail, 1];&#xD;
        trail[[1]] = pointer;&#xD;
    &#xD;
        (* animation of clouds *)&#xD;
        cloudsPos = Map[If[#[[1]] &amp;gt; 500, {-150, #[[2]]}, # + {1,0}]&amp;amp;, cloudsPos];&#xD;
    &#xD;
        (* camera animation *)&#xD;
        If[target[[2]]  &amp;lt; 100 &amp;amp;&amp;amp; targetOffset &amp;gt; -200, targetOffset-=6.0];&#xD;
        If[target[[2]]  &amp;gt; 500-100 &amp;amp;&amp;amp; targetOffset &amp;lt; 0, targetOffset+=6.0];&#xD;
    &#xD;
        offset = offset + 0.1 (targetOffset - offset);&#xD;
    &#xD;
        (* perform Verlet *)&#xD;
        p = processVertices[p, fixed, bonds];&#xD;
      ]];&#xD;
    &#xD;
      EventHandler[Image[ctx, ImageResolution-&amp;gt;{500,500}, Epilog-&amp;gt;{&#xD;
        AnimationFrameListener[ctx, &amp;#034;Event&amp;#034;-&amp;gt;frame]&#xD;
      }], {&#xD;
        &amp;#034;click&amp;#034; -&amp;gt; Function[xy,&#xD;
          p[[1]] = Append[p[[1]], pointer];&#xD;
          p[[2]] = Append[p[[2]], pointer];&#xD;
          p[[3]] = Append[p[[3]], pointer];&#xD;
          With[{length = Length[p[[1]]]}, &#xD;
            bonds = Join[bonds, Table[&#xD;
              {length, i, Norm[pointer - p[[1, i]]], 0.3}&#xD;
            , {i, nearbyVertices}]];&#xD;
          ];&#xD;
        ],&#xD;
        &amp;#034;mousemove&amp;#034; -&amp;gt; Function[xy,&#xD;
          target = {0, 500} - {-1, 1} xy;&#xD;
          (* scan for vertices near the cursor *)&#xD;
          nearbyVertices = findConnections[p[[1]], pointer, 60];&#xD;
        ]&#xD;
      }]&#xD;
    ]]&#xD;
&#xD;
This wasn&amp;#039;t that hard, was it? It is amazing how powerful Wolfram Language becomes once bridged with web-tech sandbox tools&#xD;
&#xD;
&amp;amp;[Embedded Video][15]&#xD;
&#xD;
Note: If you are reading this from a web page and not from the WLJS Notebook:&#xD;
&#xD;
Some resources were kept within the notebook storage. Download the original notebook from the heading section to have all images and precalculated vertices.&#xD;
&#xD;
&#xD;
  [1]: https://community.wolfram.com//c/portal/getImageAttachment?filename=world_of_goo2-cc9f5a7ba0a7819e544b1825a7054c5b%281%29.gif&amp;amp;userId=20103&#xD;
  [2]: https://community.wolfram.com//c/portal/getImageAttachment?filename=fig1.png&amp;amp;userId=20103&#xD;
  [3]: https://community.wolfram.com//c/portal/getImageAttachment?filename=1623Fig2_3.gif&amp;amp;userId=20103&#xD;
  [4]: https://en.wikipedia.org/wiki/Verlet_integration&#xD;
  [5]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig3.png&amp;amp;userId=20103&#xD;
  [6]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig3.jpg&amp;amp;userId=20103&#xD;
  [7]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig4.png&amp;amp;userId=20103&#xD;
  [8]: https://community.wolfram.com//c/portal/getImageAttachment?filename=8936Fig5.png&amp;amp;userId=20103&#xD;
  [9]: https://community.wolfram.com//c/portal/getImageAttachment?filename=fig1.png&amp;amp;userId=20103&#xD;
  [10]: https://community.wolfram.com//c/portal/getImageAttachment?filename=2638Fig6.gif&amp;amp;userId=20103&#xD;
  [11]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig7.png&amp;amp;userId=20103&#xD;
  [12]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig8.png&amp;amp;userId=20103&#xD;
  [13]: https://community.wolfram.com//c/portal/getImageAttachment?filename=Fig9.png&amp;amp;userId=20103&#xD;
  [14]: https://community.wolfram.com//c/portal/getImageAttachment?filename=10912Fig10.png&amp;amp;userId=20103&#xD;
  [15]: https://www.wolframcloud.com/obj/6b15b219-367d-4064-a1fb-70234b202185</description>
    <dc:creator>Kirill Vasin</dc:creator>
    <dc:date>2025-10-02T16:13:59Z</dc:date>
  </item>
</rdf:RDF>

