Same problem in 2021, only the backup is now over 500MB and the text file is over 5MB.

Adding some tags to help find this thread in case next year is more of the same:

Show thread

I released hgmp-0.1.2, which thanks to a patch from Sylvain Henry now supports ghc-9's new mechanism (ghc-bignum package replaces integer-gmp (and integer-simple) packages).

ghc-9 is still in release candidate phase, not sure when the final version will be out.

hgmp is a Haskell binding to GMP, which is a library for arbitrary precision integer and rational number arithmetic. The Glasgow Haskell Compiler usually uses GMP for it's Integer type, the hgmp package exposes it to the Foreign Function Interface so you can interoperate between GHC's Integer and Rational and other-language libraries' mpz_t and mpq_t.

claude boosted

Open call for female artists to play online @ Sonic Electronics - OFF Iklectik - contact

claude boosted

'web sound space' 

We were discussing yesterday, whether to iterate a sound installation for 'browser format'. I think it's a radically different space (and would be an entirely new piece). Some thoughts:

- personal, intimate space
- noisy space ("between tabs", "between coffee and e-mail")
- framed space, poststamp space. who has their laptop wired up normally to a good sound system?
- volatile space (open a tab, close a tab, forgotten)
- radiophonic space (tending to your computer is not unlike listening to a radio receiver? also: "radio background"; remote connection)
- connected space (when going via a server vs. front-end only)?
- what's the source of time? does it start when you open the tab, does the piece "always exist" and you merely tune in?
- multiphonic space (there can be different tabs running)
- controlled space (mute / unmute)
- what else?

game AI algorithms 

So far this week I've implemented 3 for a that @netzzz devised.

1. randomly pick moves. keep track of the best valid move found. repeat until time limit.

2. methodical exhaustive search of moves ordered by increasing complexity. keep best valid move. continue until time limit.

3. use fancy heuristics to cascade through the space of neighbouring submoves. if time limit is reached give the best valid move found so far.

Algorithm 2 easily beats algorithm 1 with the same time limit.

Algorithm 3 is quite competitive and uses vastly much less CPU time (less than 0.1 seconds for a whole match, while I had the other algorithms using several seconds wall-clock time per move (albeit probably overkill); the algorithms are all parallelized).

If I reduce the time allowance for Algorithm 2 to match Algorithm 3's speed, Algorithm 3 wins very comfortably.

The algorithms are not perfect yet, they can still miss some complex moves in the end game with many flips.

claude boosted

IKLECTIK [off-site] presents,


Wednesday 13 January 2021 | 8.30pm (GMT)

IKLECTIK Youtube ch:

Corpora Aliena is pleased to present an IKLECTIK [off-site] online presentation of Eclectic Electronics – and features leading international and pioneering musicians, composers and sound artists, including: Nnja Riot – Jimmie Peggie – Laura Netz – James L .Malone – and Bernhard Living.

Jimmie Peggie
Bernhard Living
Nnja Riot
James L. Malone
Laura Netz

notes on running Zoom in a VM 

finally start or join a meeting, and hope screensharing the visuals window and computer audio does the Right Thing and works at acceptable quality.... fingers crossed... then enjoy the performance!

Show thread

notes on running Zoom in a VM 

Finally start Zoom, and set the settings to share screen with full manual options always. Sound to "same as system", "low" microphone background noise processing ("optimize for music"), don't adjust levels automatically.

Check that Zoom can make noise to the speakers, and hope for the best w.r.t. sharing computer sound when screen sharing (I haven't found a level meter for that...)

Maybe that needs fiddling in Pulse Audio volume controls to get the right sound from the soundcard (disable USB webcam mic) into Zoom (pulse audio jack source seems to do the trick with system X pulseaudio in qjackctl audio connections).

Show thread

notes on running Zoom in a VM 

Start the custom visuals program so it can connect to JACK (signal from usb soundcard) and claim the USB webcam (`/dev/video0` or whatever in the VM) before starting Zoom.

Start Pd with the `-sleepgrain 0.1` option so MIDI timing isn't so terrible, configure it to use ALSA MIDI and connect it the USB soundcard in qjackctl connections window (ALSA tab, not MIDI tab). Load the synth control patch and enter some values to start triggering notes.

Adjust the volume of the soundcard input and monitor passthrough level for best fit to the environs. The visuals software should be reacting to the sound and levels should be showing in the Pulse Audio volume control applet.

Show thread

notes on running Zoom in a VM 

in the VM, configure JACK to use the USB Audio soundcard. Start jackd.

Set up pulseaudio jack bridge:

load-module module-jack-source
load-module module-jack-sink
set-default-source jack_in
set-default-sink jack_out

restart pulse:

pulseaudio - -kill
pulseaudio --start

if it doesn't work (no `PulseAudio` in qjackctl patch bay in addition to `system`) try

pactl load-module module-jack-source
pactl load-module module-jack-sink

Show thread

notes on running Zoom in a VM 

Startup script:

QEMU_PA_SERVER=/run/user/1000/pulse/native \
qemu-system-x86_64 \
-soundhw hda -device qemu-xhci \
-m 8G -hda zoom.img -cpu host -accel kvm -smp 8 \
-vga virtio -display gtk,gl=on -show-cursor -usb -device usb-tablet \
-usb -device usb-host,vendorid=0x041e,productid=0x4095 \
-usb -device usb-host,vendorid=0x0582,productid=0x0074

I don't think that PA stuff is really needed any more now that I added usb-host passthrough for my external soundcard.

Don't forget to `chown` the relevant `/dev/bus/usb/foo/bar` device nodes to the user running QEMU, otherwise the passthrough won't work. Use `lsusb` to see bus address and ids. This resets on host reboot, and USB devices can change bus address too (maybe some udev magic could fix it but I don't need to run Zoom often).

Show thread

notes on running Zoom in a VM 

There's no way I'm letting that stuff on my main OS installs, so I am running it in virtualized Debian Buster in QEMU. Bit tricky getting everything sorted, what with needing passthrough for host OpenGL, USB soundcard, USB webcam, and JACK running in the VM with PulseAudio bridge. I have custom software processing the webcam and sound from the USB soundcard (via JACK), and screensharing the window and system sound (not USB webcam mic, hopefully!) seems to work now.

Figured out how to plot wakes implicitly.

Given a wake with parameter ray angles $s_-, s_+$, for each pixel $c$ in the image trace the dynamic rays at those angles towards the Julia set: if and only if they land together, then $c$ is in the wake.

An application of Theorem 2.5 from "A survey on MLC, Rigidity and related topics" by Anna Miriam Benini.

Previously I had been tracing the two parameter rays into a polygonal boundary and filling that using rasterization, to do: benchmark and compare the two methods in various scenarios.

claude boosted

Mandelbrot zooming maths 

Got small constant terms working with a quick hack, but for large terms I'll need to restructure the recurrence generator (or maybe do something more clever than generating all the recurrences up to a certain limit and picking the one that matches the most terms of the input)

$ echo "1 2 3 6 38 79 196 430 1056 2542 6140 14822 35784" | runghc periodicity.hs 16
0 2 1
35784 = 0 + 2 * 14822 + 1 * 6140

$ echo "1 4 8 63 130 264 532 1068 2140 4284" | runghc periodicity.hs 16
4 2
4284 = 4 + 2 * 2140

Show thread

Mandelbrot zooming maths 

The eventual end goal is an algorithm, that given an example coordinate, can analyse the patterns of zooming that led there and extrapolate those patterns to a greater zoom depth, or vary them sideways to related coordinates. In my mandelbrot-numerics repository I have a program to do some of the analysis (`c/bin/m-describe.c`). This morning I wrote another bit, in Haskell, to find a recurrence relation for the sequence of periods:

import Data.List (maximumBy, tails)
import Data.Ord (comparing)
import System.Environment (getArgs)

partitions 0 = [[]]
partitions n = [ part : parts | part <- [1..n], parts <- partitions (n - part) ]

recurrences = filter ((/= 0) . last) . filter (not . null) . map (map (subtract 1)) . partitions

score ps rs = length [()| (target:terms) <- tails ps, target == sum (zipWith (*) rs terms) ]

recurrence limit periods = maximumBy (comparing (score periods)) $ concatMap recurrences [1 .. limit]

main = do
[ limit ] <- map read <$> getArgs
interact ((++"\n") . unwords . map show . recurrence limit . reverse . map read . words)

Use it like
$ echo "1 2 3 6 38 79 196 430 1056 2542 6140 14822 35784" | runghc periodicity.hs 10
2 1
and verify by `35784 = 2 * 14822 + 1 * 6140`

Not perfect yet, needs a constant term too...

Show thread

Mandelbrot zooming maths 

Oh yuck, it fails after some iterations because $z$ and $dz/dc$ escape to inifinity -> nan and all explodes. Even if it didn't overflow, the increment of $c$ would be so tiny that it would be below the precision threshold and be lost entirely. I think this means my calculation of $a$ is wrong because investigating graphically the dwell values should be above the period, which means the overflow must be from a wild $c$ value way further away than it should be...

Show thread

Mandelbrot zooming maths 

Setting $c = c_{121} + a t$ for small t and expanding Taylor series $f^{245}(c) = f^{245}(c_{121}) + a t f^{245}'(c_{121}) + \frac{1}{2} (a t)^2 f^{245}''(c_{121}) + O(t^3)$ before substituting into the original homotopy $f^{245}(c) = (1 - t^2) f^3(c_{121})$, then equating powers of $t^2$, gives

$$ a = \pm \sqrt{\frac{-2 f^3(c_{121})}{f^{245}''(c_{121})}} $$

so one can initialize the differential equation in the previous post with a suitably small $t$ and choice of sign for $a$.

The paper I referenced mentions solving the ODE with Runge-Kutta-Fehlberg RKF45 with pole-vaulting, but I think I'll try simple forward Euler to start with followed by Newton's method to polish the root when I get to $t = 1$

Show thread

Mandelbrot zooming maths 

I think it works out as
$$\frac{dc}{dt} = 2 f^3(0, c_{121}) t / \frac{df^{245}(c)}{dc}$$
with $t = 0$ at $c = c_{121}$) to $t = 1$ where hopefully $c = c_{245}$. There remains the issue of needing to perturb the initial conditions so it can even get started...

Show thread

Mandelbrot zooming maths 

I found that (for one case tested so far) Julia morphing leads to patterns in specially restricted atom domains of the nucleii deeper in the zoom path. The example has angled internal address 1 2 3 8/17 50 1/3 59 1/3 121 1/3 245 1/3 ... (from here on each next period is twice the previous one, plus 3).

The influencing island has period 3, and for example the 3p245 atom domain (plus its symmetrical mirror) has a boundary that stretches just to the period 121 atom between them, with atom domain coordinate 1+0i at that point. This means $1 = $f^{245}(0, c_{121}) / f^3(0, c_{121})$ which is the same as $f^{245} = f^3$ which is "obviously true" because $245 = 121 + 121 + 3$ and the period of $c_{121}$ is $121$.

What I want to do is get an algorithm that goes from c_121 to c_245, ideally with a way to distinguish between 1/3 and 2/3 angles in the address.

I have:
f^{245}(0, c_{245}) = 0 \\
f^{245}(0, c_{121}) = f^3(0, c_{121})
and I can't just use Newton's method to find $c_{245}$ from initial guess $c_{121}$ because the symmetry means there's a fractal basin boundary right through $c_{121}$... maybe I can adapt the homotopy root methods I saw once[1] and construct a differential equation that transports $c_{121}$ to $c_{245}$...

[1] section 2.4 p19

Show thread
Show more

Welcome to, an instance for discussions around cultural freedom, experimental, new media art, net and computational culture, and things like that.