Sunday, June 28, 2026

How to make pentad model? (article by mono)

 


 

 

First, on the simulator screen, draw a rough shape of two connected concentric circles. 

The total number of masses (nodes) must be exactly 50. 

 Open your favorite text editor. 

Press [Ctrl] + [C] on the simulator screen, then press [Ctrl] + [V] in the text editor to paste the model data. 

Modify the beginning of the data as follows: 

 

<environment gravity="0" friction="0.051771318689445726" springyness="576.9543672805263"/> <collisions surface_friction="0.1" surface_reflection="-0.75"/> <wave amplitude="0.15" phase="0.64034754" speed="1.599363952370385"/> Next, add the following section toward the bottom of the data to configure the Springs: <links> <spring a="m0" b="m1" restlength="0"/> <spring a="m1" b="m2" restlength="0"/> <spring a="m2" b="m3" restlength="0"/> <spring a="m3" b="m4" restlength="0"/> <spring a="m4" b="m5" restlength="0"/> <spring a="m5" b="m6" restlength="0"/> <spring a="m6" b="m7" restlength="0"/> <spring a="m7" b="m8" restlength="0"/> <spring a="m8" b="m9" restlength="0"/> <spring a="m9" b="m10" restlength="0"/> <spring a="m10" b="m11" restlength="0"/> ...[snip]... <spring a="m40" b="m41" restlength="0"/> <spring a="m41" b="m42" restlength="0"/> <spring a="m42" b="m43" restlength="0"/> <spring a="m43" b="m44" restlength="0"/> <spring a="m44" b="m45" restlength="0"/> <spring a="m45" b="m46" restlength="0"/> <spring a="m46" b="m47" restlength="0"/> <spring a="m47" b="m48" restlength="0"/> <spring a="m48" b="m49" restlength="0"/> <spring a="m49" b="m0" restlength="0"/> 

 

Then, add the following items right below the springs to configure the Muscles (hang in there!): 

 <muscle a="m0" b="m2" restlength="40" amplitude="1.00000" phase="0"/> <muscle a="m1" b="m3" restlength="40" amplitude="1.00000" phase="0.1"/> <muscle a="m2" b="m4" restlength="40" amplitude="1.00000" phase="0.2"/> <muscle a="m3" b="m5" restlength="40" amplitude="1.00000" phase="0.3"/> <muscle a="m4" b="m6" restlength="40" amplitude="1.00000" phase="0.4"/> <muscle a="m5" b="m7" restlength="40" amplitude="1.00000" phase="0.5"/> <muscle a="m6" b="m8" restlength="40" amplitude="1.00000" phase="0.6"/> <muscle a="m7" b="m9" restlength="40" amplitude="1.00000" phase="0.7"/> <muscle a="m8" b="m10" restlength="40" amplitude="1.00000" phase="0.8"/> <muscle a="m9" b="m11" restlength="40" amplitude="1.00000" phase="0.9"/> <muscle a="m10" b="m12" restlength="40" amplitude="1.00000" phase="0"/> ...[snip]... <muscle a="m40" b="m42" restlength="40" amplitude="1.00000" phase="0"/> <muscle a="m41" b="m43" restlength="40" amplitude="1.00000" phase="0.1"/> <muscle a="m42" b="m44" restlength="40" amplitude="1.00000" phase="0.2"/> <muscle a="m43" b="m45" restlength="40" amplitude="1.00000" phase="0.3"/> <muscle a="m44" b="m46" restlength="40" amplitude="1.00000" phase="0.4"/> <muscle a="m45" b="m47" restlength="40" amplitude="1.00000" phase="0.5"/> <muscle a="m46" b="m48" restlength="40" amplitude="1.00000" phase="0.6"/> <muscle a="m47" b="m49" restlength="40" amplitude="1.00000" phase="0.7"/> <muscle a="m48" b="m0" restlength="40" amplitude="1.00000" phase="0.8"/> <muscle a="m49" b="m1" restlength="40" amplitude="1.00000" phase="0.9"/> </links> 

 And you're done! 

Double-check that the header of your data looks like this: 

 <?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>  <!DOCTYPE sodaconstructor> <model> <comment></comment> <container width="651" height="422"/> <environment gravity="0" friction="0.051771318689445726" springyness="576.9543672805263"/> <collisions surface_friction="0.1" surface_reflection="-0.75"/> <wave amplitude="0.15" phase="0.64034754" speed="1.599363952370385"/> <settings gravitydirection="down" wavedirection="noreverse" autoreverse="on"/> <nodes> <mass id="m0" x="235.98798" y="56.22742" vx="-3.40967" vy="4.40426" fix="0"/> And ensure the footer looks like this: <muscle a="m49" b="m1" restlength="40" amplitude="1.00000" phase="0.9"/> </links> </model> 

Once everything looks correct, click [clear all] in the upper-right corner of the simulator screen. 

Select all text in your text editor and press [Ctrl] + [C]. 

Go back to the simulator screen, press [Ctrl] + [V], and then click [play simulation]. It should now run perfectly!

(by mono) 

Soda Constructor Remake 0.36c

 

I've just got this beauty on my messenger: 

 

pentad model by mono

Play it here: https://maciejmatyka.github.io/lovesoda/0.36cbeta.html 

 

Pentad model xml (just copy and paste):

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE sodaconstructor>
<model>
<comment></comment>
<container width="651" height="422"/>
<environment gravity="0" friction="0.051771318689445726" springyness="576.9543672805263"/>
<collisions surface_friction="0.1" surface_reflection="-0.75"/>
<wave amplitude="0.15" phase="0.64034754" speed="1.599363952370385"/>
<settings gravitydirection="down" wavedirection="noreverse" autoreverse="on"/>
<nodes>
<mass id="m0" x="235.98798" y="56.22742" vx="-3.40967" vy="4.40426" fix="0"/>
<mass id="m1" x="226.69028" y="67.36833" vx="-2.59741" vy="1.76478" fix="0"/>
<mass id="m2" x="218.84897" y="78.55440" vx="0.20384" vy="-0.76372" fix="0"/>
<mass id="m3" x="211.31084" y="90.04806" vx="3.55515" vy="-2.02507" fix="0"/>
<mass id="m4" x="204.35477" y="103.03181" vx="5.84798" vy="-1.24477" fix="0"/>
<mass id="m5" x="199.86262" y="118.65490" vx="5.59037" vy="0.94084" fix="0"/>
<mass id="m6" x="200.72259" y="136.37356" vx="2.52347" vy="2.23049" fix="0"/>
<mass id="m7" x="208.84098" y="153.11385" vx="-1.28486" vy="0.69593" fix="0"/>
<mass id="m8" x="223.10931" y="164.92535" vx="-2.98295" vy="-2.86947" fix="0"/>
<mass id="m9" x="239.90346" y="169.92953" vx="-1.88164" vy="-5.61180" fix="0"/>
<mass id="m10" x="255.88128" y="169.35404" vx="0.15106" vy="-5.55761" fix="0"/>
<mass id="m11" x="269.96576" y="165.85968" vx="1.05415" vy="-2.94232" fix="0"/>
<mass id="m12" x="282.89892" y="161.45946" vx="0.28580" vy="0.75234" fix="0"/>
<mass id="m13" x="295.76302" y="156.61639" vx="-1.67583" vy="3.73859" fix="0"/>
<mass id="m14" x="309.02531" y="150.20602" vx="-3.98341" vy="4.44293" fix="0"/>
<mass id="m15" x="321.83297" y="140.19385" vx="-5.04832" vy="2.51049" fix="0"/>
<mass id="m16" x="331.52441" y="125.33522" vx="-3.31163" vy="-0.33695" fix="0"/>
<mass id="m17" x="334.76031" y="107.01382" vx="0.67125" vy="-1.32547" fix="0"/>
<mass id="m18" x="330.13808" y="89.07734" vx="4.12369" vy="0.56100" fix="0"/>
<mass id="m19" x="319.49602" y="75.15573" vx="4.82711" vy="3.41227" fix="0"/>
<mass id="m20" x="306.24827" y="66.20557" vx="3.14143" vy="4.54888" fix="0"/>
<mass id="m21" x="292.81610" y="60.71394" vx="0.86566" vy="2.96331" fix="0"/>
<mass id="m22" x="279.77815" y="56.63462" vx="-0.69117" vy="-0.46401" fix="0"/>
<mass id="m23" x="266.52893" y="52.97429" vx="-0.85713" vy="-4.01183" fix="0"/>
<mass id="m24" x="252.02853" y="50.38064" vx="0.60273" vy="-5.91338" fix="0"/>
<mass id="m25" x="235.78345" y="51.00624" vx="2.59614" vy="-4.95493" fix="0"/>
<mass id="m26" x="219.23939" y="57.40971" vx="2.84839" vy="-1.62904" fix="0"/>
<mass id="m27" x="205.92131" y="70.40071" vx="0.19904" vy="1.48931" fix="0"/>
<mass id="m28" x="199.20485" y="87.66200" vx="-3.68899" vy="1.96702" fix="0"/>
<mass id="m29" x="199.70540" y="105.17742" vx="-5.91139" vy="0.06515" fix="0"/>
<mass id="m30" x="205.21050" y="120.18677" vx="-5.20302" vy="-1.84037" fix="0"/>
<mass id="m31" x="212.87825" y="132.50630" vx="-2.43025" vy="-1.88892" fix="0"/>
<mass id="m32" x="221.04771" y="143.45507" vx="0.83652" vy="-0.02806" fix="0"/>
<mass id="m33" x="229.63096" y="154.19075" vx="3.04800" vy="2.74511" fix="0"/>
<mass id="m34" x="239.85199" y="164.79771" vx="2.98034" vy="5.14056" fix="0"/>
<mass id="m35" x="253.37393" y="173.82215" vx="0.80599" vy="5.53734" fix="0"/>
<mass id="m36" x="270.52789" y="178.34360" vx="-1.34812" vy="2.99909" fix="0"/>
<mass id="m37" x="288.93436" y="175.63539" vx="-1.03280" vy="-1.07615" fix="0"/>
<mass id="m38" x="304.49549" y="165.58976" vx="1.83876" vy="-3.74579" fix="0"/>
<mass id="m39" x="314.34889" y="151.09997" vx="4.76424" vy="-3.51271" fix="0"/>
<mass id="m40" x="318.66549" y="135.70670" vx="5.31893" vy="-1.55681" fix="0"/>
<mass id="m41" x="319.64749" y="121.22937" vx="3.10592" vy="0.10290" fix="0"/>
<mass id="m42" x="319.42702" y="107.57072" vx="-0.63723" vy="0.50478" fix="0"/>
<mass id="m43" x="318.76780" y="93.84172" vx="-4.07176" vy="-0.44516" fix="0"/>
<mass id="m44" x="316.73894" y="79.25244" vx="-5.44756" vy="-2.42467" fix="0"/>
<mass id="m45" x="311.14179" y="63.99020" vx="-3.94214" vy="-4.03384" fix="0"/>
<mass id="m46" x="299.97451" y="50.20681" vx="-0.70912" vy="-3.26347" fix="0"/>
<mass id="m47" x="283.52772" y="41.50965" vx="1.44949" vy="0.21674" fix="0"/>
<mass id="m48" x="265.03704" y="40.42409" vx="0.70994" vy="4.08676" fix="0"/>
<mass id="m49" x="248.53475" y="46.31858" vx="-1.79898" vy="5.64546" fix="0"/>
</nodes><links><spring a="m0" b="m1" restlength="0"/>
<spring a="m1" b="m2" restlength="0"/>
<spring a="m2" b="m3" restlength="0"/>
<spring a="m3" b="m4" restlength="0"/>
<spring a="m4" b="m5" restlength="0"/>
<spring a="m5" b="m6" restlength="0"/>
<spring a="m6" b="m7" restlength="0"/>
<spring a="m7" b="m8" restlength="0"/>
<spring a="m8" b="m9" restlength="0"/>
<spring a="m9" b="m10" restlength="0"/>
<spring a="m10" b="m11" restlength="0"/>
<spring a="m11" b="m12" restlength="0"/>
<spring a="m12" b="m13" restlength="0"/>
<spring a="m13" b="m14" restlength="0"/>
<spring a="m14" b="m15" restlength="0"/>
<spring a="m15" b="m16" restlength="0"/>
<spring a="m16" b="m17" restlength="0"/>
<spring a="m17" b="m18" restlength="0"/>
<spring a="m18" b="m19" restlength="0"/>
<spring a="m19" b="m20" restlength="0"/>
<spring a="m20" b="m21" restlength="0"/>
<spring a="m21" b="m22" restlength="0"/>
<spring a="m22" b="m23" restlength="0"/>
<spring a="m23" b="m24" restlength="0"/>
<spring a="m24" b="m25" restlength="0"/>
<spring a="m25" b="m26" restlength="0"/>
<spring a="m26" b="m27" restlength="0"/>
<spring a="m27" b="m28" restlength="0"/>
<spring a="m28" b="m29" restlength="0"/>
<spring a="m29" b="m30" restlength="0"/>
<spring a="m30" b="m31" restlength="0"/>
<spring a="m31" b="m32" restlength="0"/>
<spring a="m32" b="m33" restlength="0"/>
<spring a="m33" b="m34" restlength="0"/>
<spring a="m34" b="m35" restlength="0"/>
<spring a="m35" b="m36" restlength="0"/>
<spring a="m36" b="m37" restlength="0"/>
<spring a="m37" b="m38" restlength="0"/>
<spring a="m38" b="m39" restlength="0"/>
<spring a="m39" b="m40" restlength="0"/>
<spring a="m40" b="m41" restlength="0"/>
<spring a="m41" b="m42" restlength="0"/>
<spring a="m42" b="m43" restlength="0"/>
<spring a="m43" b="m44" restlength="0"/>
<spring a="m44" b="m45" restlength="0"/>
<spring a="m45" b="m46" restlength="0"/>
<spring a="m46" b="m47" restlength="0"/>
<spring a="m47" b="m48" restlength="0"/>
<spring a="m48" b="m49" restlength="0"/>
<spring a="m49" b="m0" restlength="0"/>
<muscle a="m0" b="m2" restlength="40" amplitude="1.00000" phase="0"/>
<muscle a="m1" b="m3" restlength="40" amplitude="1.00000" phase="0.1"/>
<muscle a="m2" b="m4" restlength="40" amplitude="1.00000" phase="0.2"/>
<muscle a="m3" b="m5" restlength="40" amplitude="1.00000" phase="0.3"/>
<muscle a="m4" b="m6" restlength="40" amplitude="1.00000" phase="0.4"/>
<muscle a="m5" b="m7" restlength="40" amplitude="1.00000" phase="0.5"/>
<muscle a="m6" b="m8" restlength="40" amplitude="1.00000" phase="0.6"/>
<muscle a="m7" b="m9" restlength="40" amplitude="1.00000" phase="0.7"/>
<muscle a="m8" b="m10" restlength="40" amplitude="1.00000" phase="0.8"/>
<muscle a="m9" b="m11" restlength="40" amplitude="1.00000" phase="0.9"/>
<muscle a="m10" b="m12" restlength="40" amplitude="1.00000" phase="0"/>
<muscle a="m11" b="m13" restlength="40" amplitude="1.00000" phase="0.1"/>
<muscle a="m12" b="m14" restlength="40" amplitude="1.00000" phase="0.2"/>
<muscle a="m13" b="m15" restlength="40" amplitude="1.00000" phase="0.3"/>
<muscle a="m14" b="m16" restlength="40" amplitude="1.00000" phase="0.4"/>
<muscle a="m15" b="m17" restlength="40" amplitude="1.00000" phase="0.5"/>
<muscle a="m16" b="m18" restlength="40" amplitude="1.00000" phase="0.6"/>
<muscle a="m17" b="m19" restlength="40" amplitude="1.00000" phase="0.7"/>
<muscle a="m18" b="m20" restlength="40" amplitude="1.00000" phase="0.8"/>
<muscle a="m19" b="m21" restlength="40" amplitude="1.00000" phase="0.9"/>
<muscle a="m20" b="m22" restlength="40" amplitude="1.00000" phase="0"/>
<muscle a="m21" b="m23" restlength="40" amplitude="1.00000" phase="0.1"/>
<muscle a="m22" b="m24" restlength="40" amplitude="1.00000" phase="0.2"/>
<muscle a="m23" b="m25" restlength="40" amplitude="1.00000" phase="0.3"/>
<muscle a="m24" b="m26" restlength="40" amplitude="1.00000" phase="0.4"/>
<muscle a="m25" b="m27" restlength="40" amplitude="1.00000" phase="0.5"/>
<muscle a="m26" b="m28" restlength="40" amplitude="1.00000" phase="0.6"/>
<muscle a="m27" b="m29" restlength="40" amplitude="1.00000" phase="0.7"/>
<muscle a="m28" b="m30" restlength="40" amplitude="1.00000" phase="0.8"/>
<muscle a="m29" b="m31" restlength="40" amplitude="1.00000" phase="0.9"/>
<muscle a="m30" b="m32" restlength="40" amplitude="1.00000" phase="0"/>
<muscle a="m31" b="m33" restlength="40" amplitude="1.00000" phase="0.1"/>
<muscle a="m32" b="m34" restlength="40" amplitude="1.00000" phase="0.2"/>
<muscle a="m33" b="m35" restlength="40" amplitude="1.00000" phase="0.3"/>
<muscle a="m34" b="m36" restlength="40" amplitude="1.00000" phase="0.4"/>
<muscle a="m35" b="m37" restlength="40" amplitude="1.00000" phase="0.5"/>
<muscle a="m36" b="m38" restlength="40" amplitude="1.00000" phase="0.6"/>
<muscle a="m37" b="m39" restlength="40" amplitude="1.00000" phase="0.7"/>
<muscle a="m38" b="m40" restlength="40" amplitude="1.00000" phase="0.8"/>
<muscle a="m39" b="m41" restlength="40" amplitude="1.00000" phase="0.9"/>
<muscle a="m40" b="m42" restlength="40" amplitude="1.00000" phase="0"/>
<muscle a="m41" b="m43" restlength="40" amplitude="1.00000" phase="0.1"/>
<muscle a="m42" b="m44" restlength="40" amplitude="1.00000" phase="0.2"/>
<muscle a="m43" b="m45" restlength="40" amplitude="1.00000" phase="0.3"/>
<muscle a="m44" b="m46" restlength="40" amplitude="1.00000" phase="0.4"/>
<muscle a="m45" b="m47" restlength="40" amplitude="1.00000" phase="0.5"/>
<muscle a="m46" b="m48" restlength="40" amplitude="1.00000" phase="0.6"/>
<muscle a="m47" b="m49" restlength="40" amplitude="1.00000" phase="0.7"/>
<muscle a="m48" b="m0" restlength="40" amplitude="1.00000" phase="0.8"/>
<muscle a="m49" b="m1" restlength="40" amplitude="1.00000" phase="0.9"/>
</links></model> 

Monday, June 15, 2026

3D Koch Pyramid

 


   video is here (YouTube)

This 3D model is a pyramid that came about by chance when I asked a language model to generalise the 2D Koch curve into a 3D form by recursively dividing an equilateral triangle. Each iteration divides the triangle into five sub-triangles and builds a small pyramid right in the centre of it. Wait a moment to see what’s inside. Interestingly, the shadow cast on the floor looks like a Visk’s fractal. It’s all so confusing :-)

Wednesday, June 10, 2026

Which LLM do you use for coding?

Claude?

GPT5? 

Codex?

Claude Code?

Grok (really?)

... anything else?

pls comment - I get lost a bit and think of how to get along with all that stuff.. 

New address for my website

 https://maciejmatyka.github.io/

 (due to my Universtiy websites maintenance I temporarly moved everything here)

Tuesday, June 9, 2026

Computational Modelling with Single Prompts - new book

LLMs are taking over. We can't escape from that. So, yes, have you ever got lost in the context, with too long conversation, hours spend on trial and error so that your chat actually corrected something but ate its own tail at some point doing wrong what was good at the beginning.. Yup, this is where my story on Single Prompts.

When LLM's appeared I was struggling with the question about the value of our work. What will be valuable. What we can give to each other in this new era. Although this is now in the middle of change and middle of paradigm shift in programming in general, I think there is something. Prompts. New way of writing programs. 

Imagine you want to write a piece of software and instead of starting from scratch you take a prompt at some level of abstraction that gets you to some specific point. It can be a program that you may start developming from. When I've recently came across the idea that Single Prompts will be of some value in the future I immediately thought about modelling, my lovely subject. I've sat down for a few months and yup, there it is, I was lucky to get through three taugh reviews and together with Taylor&Francis we will release the book on prompting just this July!

 

Computational Modelling with Single Prompts, 236 Pages, 135 images, Series in Computational Physics, CRC Press (Taylor and Francis), 2026 (Release July)
Book website: https://www.routledge.com/Computational-Modelling-with-Single-Prompts/Matyka/p/book/9781041223603 

The concept of the book is simple. It covers 65 models from computational physics (from cellular automata, chaos, PDE's, particles, fluids, ants colonies, granular matter modelling of snowflakes, epidemia and even stalagmites growth). Each chapter consists of 1 model, full description (written by myself, no LLM was used here), then algorithm and single, full prompt. The objective of the prompt was, that it creates fully functional implementation in JavaScript for the model. Then, after the code was generated, results are included in the chapter. An exemplary result is on the book cover, in fact it was done using Claude Sonnet chat (I've used several other language models in the book, tested many).

Working on the book was a lot of fun, I've always dreamed of a book on modelling, now I was able to write one (many of the models I've implemented by myself in the past but for many I was not able to find time.. now with LLM's it took much less time!). There are many stories about models in the book, there is a specific reason I've included each of them, there are research ideas associated with many of them. 

Ask me questions about the book here if you like, that may help me drive this blog as well as this new subject is getting me more deeper and deeper.. 

 

Maciej Matyka, 9-06-2026 
maciejmatyka.github.io 

Soda Constructor (Revisited)