claude (mathr)

making art with maths and algorithms

2018-05-23T15:47:00Z (original)

I make art with maths/algorithms, image/videos/audio/etc. Mostly using Free Software on computer, physical drawings sometimes.

I live-code audio in the C programming language for performance, last performance was at THSF#9, Toulouse, next performance is at LAC, Berlin.

I'm the current maintainer of Kalles Fraktaler software, recently released the 2.13 branch with experimental features (but so far it is slower at rendering than the 2.12 branch).

Based in London, UK.

2018-05-28T17:36:35Z (original) (in reply to)

@wendy lists.puredata.info/listinfo/p
forum.pdpatchrepo.info/
irc on freenode (but wait a while for responses there, it's very quiet)

2018-05-28T20:03:40Z (original) (in reply to)

@320x200 @wendy seems bela is using the closed compiler-as-a-service "heavy" bela.io/archive/faq.html#3

2018-05-29T10:13:25Z (original) (in reply to)

@wendy @320x200
Oh, good to know that Bela supports libpd as well as Heavy - sorry for misleading earlier!

2018-05-30T11:18:40Z (original)

working on the sound for an thing (sequel to silent meshwalk-1.0), one oscillator per shape, but not really happy with it (too literal, too monotonous, too computationally heavy - though there are some nice spatial effects at times)

video (with sound):
mathr.co.uk/meshwalk/meshwalk-

source code:
code.mathr.co.uk/dr1/blob/HEAD

2018-05-30T12:05:25Z (original)

was going to rehearse, but suddenly far too loud noise from outside tree surgeons shredding chopped down branches

2018-05-30T13:00:06Z (original) ()

they left soon after. rehearsal session audio: mathr.co.uk/tmp/session-2018-0 21mins

2018-06-01T04:47:11Z (original)

mandelbulber plus ffmpeg plus gifsicle

mandelbox 3d ray-traced fractal fly-through using a palette based on the packaging that my new cpu came in

my first mandelbulber render, complete with bad camera rotations at times

2018-06-01T07:28:47Z (original) ()

seems mastodon transcoded my carefully optimized 2.1MB GIF into a 5.8MB MP4.

I don't think that's an improvement...

2018-06-02T19:04:28Z (original) (in reply to)

@stsp

lac.linuxaudio.org/2018/linux-

2018-06-03T17:58:31Z (original)

big-company tech support sends emails from a noreply@ address while also requesting a read-receipt

2018-06-04T16:39:28Z (original)

Crosscompiled libjpeg, linking client app failed, error message suggested ranlib was needed, but that just changed the errors to undefined symbols. Turns out I built the library in the wrong directory so that stale 64bit object files were combined into the archive instead of the 32bit ones I wanted rebuilt. An error message saying "found ... but wrong architecture" would have saved me quite a lot of time...

2018-06-05T01:44:29Z (original)

MAX_ARG_STRLEN. Maybe there is a good reason, but I don't like it much.

2018-06-08T13:28:23Z (original)

5 years on from lac.linuxaudio.org/2013/papers (13.4MB) and not much has changed w.r.t. pages 3-13...

2018-06-13T15:06:24Z (original) (in reply to)

@wendy well in the end LAC wasn't quite 100% white male (I based my initial comment from a glance around the main hall rather than the complete program) so things are improving slowly

2018-06-13T17:02:08Z (original)

git log from my performance at LAC this Saturday:
code.mathr.co.uk/clive/history

Difference between the code at the start and end:
code.mathr.co.uk/clive/blobdif

Digital audio recording with synchronized code diffs:
mathr.co.uk/clive/session-2018

Video link coming as soon as LAC upload it.

The noise at the start was because I forgot to re-run make after switching branches from the soundcheck session branch to the lac ready-for-performance branch, so it started with the noisemaking code as last compiled at the end of the soundcheck. I fixed the ./start.sh script afterwards.

2018-06-13T17:26:11Z (original) (in reply to)

@eryn @kibi
en.wikipedia.org/wiki/Strassen
en.wikipedia.org/wiki/Toom%E2%
both use recursive splitting into smaller parts to asymptotically reduce the total number of multiplications needed for larger problems compared to simpler algorithms

2018-06-14T03:48:39Z (original)

C11 __STDC_NO_THREADS__ makes for horrible double negatives if you also need to check __STDC_NO_ATOMICS__:

(!defined(__STDC_NO_THREADS__)) && (!defined(__STDC_NO_ATOMICS__))
// use threads

// don't use threads

Anyway GCC doesn't support C11 threading as that's an optional feature and glibc doesn't do it, so I guess I go with pthreads or C++11 threads (if g++ supports it...).

2018-06-14T05:20:21Z (original) ()

got it working with pthreads, might still work with C11 but I haven't got a C11 compiler yet

code.mathr.co.uk/mandelbrot-nu

2018-06-14T07:12:43Z (original) ()

MPFR seems to work much much faster with "simple" numbers (lots of trailing 0 bits) than other numbers, which makes benchmarking this thing a bit frustrating - the first pass takes ~2 minutes, after which the numbers get more "complicated" and it slows down dramatically (~30mins wall-clock for ~10% of second pass...)

2018-06-14T07:13:38Z (original) ()

I'm running:
m-nucleus 3322000 -2 0 830484 16 16
which means
find a miniature Mandelbrot set copy
using 3.3Mbits of precision for each real number
near -2 + 0 i
with target period 830k
performing at most 16 passes of Newton's method
using at most 16 threads

2018-06-14T07:14:23Z (original) ()

I'll feed the resulting coordinates into some yet-to-be-written fractal rendering code - a fork of knighty's nanoMB augmented with "floatexp" support for rendering images deeper than "long double" allows, also with jitter to avoid the otherwise-inevitable horrendous Moiré artifacts that I expect from this location.

2018-06-14T09:27:58Z (original) ()

A period 10000 nucleus near -2+0i is found with my 7-thread m-nucleus in about 70 seconds, and rendered with my floatexp enabled nanoMB fork in about 11 seconds.

Zoom factor 1e12039, maximum iteration count 10100100. Full coordinates too long to paste in a toot.

Bigups to knighty for the bivariate polynomial acceleration implementation, it's like perturbation theory magic all over again.

I haven't added jitter yet, so there's a bunch of Moiré artifacting (jitter will turn it into less visually obnoxious noise).

A mini mandelbrot set in red, surrounded by grey rings with Moiré patterns

2018-06-14T09:54:32Z (original) ()

Added jitter, rendered with 4x4 supersampling, 3m25s wall clock time, 27m50s CPU time (some of my 16 hardware threads are still busy with the deep nucleus calculation, would be ~30% faster wall clock time otherwise I guess).

A mini Mandelbrot set in red, surrounded by grey rings with a slightly noisy texture

2018-06-14T12:57:32Z (original) (in reply to)

@jk to be really careful (and dataset isn't huge) you could compare by md5sum (or other checksum) - identical files will give identical checksums (but identical checksums might be from different files, this however is unlikely, especially with longer cryptohashes)

find -type f |
xargs md5sum -b |
sort |
uniq -w 32 -c |
sort |
grep -v "^.*1 "

Will list all files that have more than one copy of the content. BUG: it only lists one of the files that has the duplicated contents, but GNU uniq -c -D claims "uniq: printing all duplicated lines and repeat counts is meaningless" :(

2018-06-14T16:14:05Z (original) ()

refactoring tools to take long arguments on stdin instead of command line is a bit boring but if that's what is necessary for it to work then so be it

2018-06-17T17:52:00Z (original) ()

Using Newton's method to find a tiny mini-Mandelbrot:

7 threads:
real 3075m36.254s
user 21055m58.851s
sys 0m15.102s

1 thread:
real 5101m8.674s
user 5032m46.414s
sys 6m47.578s

identical output.

4x the effort expended to finish in 60% of the time - not sure it's worth it, I'm not in such a rush.

2018-06-17T23:29:05Z (original)

Faulty keyboards, exhibit 1.

It's not a big difference from the accepted* keyboard layout, but it's enough to make it completely unusable.

*accepted by my muscle memory

photo of a keyboard with badly designed hash/tilde and return keys

2018-06-20T12:57:26Z (original)

pulseaudio with jack issues on debian buster

pulseaudio service goes into a loop failing to start jackd (because it can't allocate the audio device from dbus), spamming my syslog with 50 lines / second, and causing horrible race conditions when I try to start jackd via qjackctl.

Takes a few rounds of `killall -KILL jackdbus ; killall -KILL jackd ; pulseaudio --kill` until the timing is just so and qjackctl can start jackd successfully.

Once jack is running, the syslog is quiet again.

2018-06-20T14:30:12Z (original) ()

fixed pulseaudio with jack issues on debian buster

fixed by installing pulseaudio-module-jack 11.99.1-1 from experimental repository.

mplayer -ao jack doesn't work automatically after boot, but at least qjackctl can start jackd properly now without needing many attempts, after which mplayer works fine.

only wart remaining is two instances of pulseaudio jack sink clients - maybe I'll get some phasing audio effects on pulse apps like firefox. to be tested, not a high priority.

2018-06-20T16:49:47Z (original) ()

Faulty keyboards, exhibit 2.

Why do manufacturers do this?

Accidentally pressing Insert instead of Delete is a waste of my time.

Keyboard with Delete End PageDown directly above cursor keys with no gap.

2018-06-20T17:38:27Z (original)

Upgrading from 18.0.5-1 to 18.1.1-1 a couple of days ago seems to have made my system very unreliable (random hard / complete / : not a , nothing in logs, mouse pointer not operational, numlock not operational, must hold down the power button for a few seconds to halt).

Currently on 18.1.2-1 and no freeze so far, but uptime is only 19min at this point.

Using the free/libre driver for RX 580 graphics card, with 7 2700x cpu.

2018-06-20T19:24:24Z (original)

Kalles Fraktaler stores its iteration data in column-major order (as arrays of arrays, access like `iterdata[x][y]`). But image data is stored packed in row-major order, access like `imagedata[(y * width + x) * channels + c]`. The naive loop to make an image from iteration data suffers from poor memory locality with large images, as detailed at en.wikipedia.org/wiki/Cache-ob

Task: implement cache-oblivious matrix transpose, with parallelism, to replace `ApplyColors()`: code.mathr.co.uk/kalles-frakta

2018-06-20T19:40:56Z (original) ()

just froze again and had to power cycle, only 2h16m36s uptime :( some of the things I want to run have an estimated runtime of 20h wall-clock minimum, so not happening with this mess :(

not even 100% sure it is a mesa issue, because of the lack of info in logs. this is super frustrating :(

2018-06-20T19:46:11Z (original) ()

to test the mesa hypothesis, I'll stop X on the desktop and try running the long-running job from text mode console.

2018-06-20T20:29:24Z (original)

best to remove obsolete kernels promptly from your or other -based distro installs, because some apt operations are O(number of kernels installed).

This means removing N kernels (that are long out of date/unused) while keeping the last few M kernels around to actually use takes O((M+N)^2) time, even if you do it with one apt invocation...

2018-06-20T22:51:08Z (original) ()

Another Kalles Fraktaler task: vectorize floatexp (double + int64_t for extra exponent range).

Vectorizing double is easy with GCC vector extensions. Vectorizing long double is easy (just use a loop, as there is no hw simd for long double). Vectorizing floatexp efficiently would mean figuring out how to convert the branches in `operator+` etc into conditional moves/blends (using `?:` operator I suppose).

Want to avoid FPU intrinsics if at all possible, so I can compile for older machines.

2018-06-21T00:50:46Z (original)

mathr.co.uk/kf/kf.html#kf-2.13 new release of kalles fraktaler 2 with ability to turn off slow derivative calculations if you don't want analytic distance estimation colouring, plus some bugfixes merged from the 2.12 branch

2018-06-21T10:45:56Z (original) ()

Another Kalles Fraktaler task: vectorize floatexp (double + int64_t for extra exponent range).

I vectorized floatexp but performance was much worse than the scalar code.
code.mathr.co.uk/kalles-frakta

2018-06-21T10:50:02Z (original) ()

uptime over 15 hours without X running. not proof, but does make me more confident that mesa and/or amdgpu driver is somehow to blame for my system freezes.

2018-06-21T14:24:34Z (original) ()

downgrading mesa on debian buster

mkdir work
cd work
sudo apt-get build-dep mesa
git clone salsa.debian.org/xorg-team/lib
cd mesa
git checkout mesa-18.0.5-1
dpkg-buildpackage -us -uc
cd ..
sudo dpkg -i *.deb
ls *.deb | sed s/_.*// | xargs sudo aptitude hold
# remember to unhold when it's time to allow upgrades again

# no time for testing for a few hours, other things to do and my render isn't done yet...

2018-06-26T11:05:15Z (original)

kalles fraktaler 2.13.5 released!

mathr.co.uk/kf/kf.html#kf-2.13

2018-06-26T11:20:29Z (original) ()

downgrading mesa on debian buster

uptime 112 hours with this 18.0.5-1 version; no freezes at all

2018-06-26T11:22:46Z (original) (in reply to)

@popey manger danger! real friends don't let jesus baby

2018-06-26T13:53:16Z (original)

room feedback

2018-06-26T16:36:40Z (original)

rendering raw fractal data with nanomb (fast!) and colouring it with kalles fraktaler 2 (flexible!). best of both worlds.

a mini Mandelbrot island in white with textured rings in rainbow colours from blue outside through yellow to red inside

2018-06-28T20:52:49Z (original)

added interior checking to for more speed, making feasible much higher iteration counts near deep minis that are large in view

maxiters 10100100, no interior checking: 2m14.343s
maxiters 100100100, no interior checking: 9m26.174s
maxiters 10100100, interior checking: 1m39.288s
maxiters 100100100, interior checking: 1m42.080s
(CPU time)

mini-Mandelbrot set with noisy super-iteration bands from grey to green via violet and yellow, interior in dark red

2018-06-28T21:22:46Z (original)

The FARM submission deadline for papers and demo proposals has been extended to July 8 (the same as the performance submission deadline).

6th ACM SIGPLAN International Workshop on Functional Art, Music, Modelling and Design
St. Louis, Missouri, USA, September 29th 2018

functional-art.org/2018/

I performed last time around, in Oxford UK, was a good experience.

2018-07-02T23:08:59Z (original) ()

room feedback

still streaming for a few more days, now with a virtual room simulation (instead of live mic/speakers) and a delay inside the feedback loop for a rhythmic effect

also bumped the number of notch filters to 64 (from 32), they are controlled at about 6Hz giving a memory of about 10secs

cafe.mathr.co.uk/eiskaffee/aft

2018-07-03T02:55:35Z (original)

sleep failed me, so I added interior distance estimation to

still need to add glitch detection and correction to the post-super-iteration perturbation stage, maybe I could copypasta from without too much pain...

fractalforums.org/f/28/t/277/m

mini-mandelbrot set large in view with interior distance estimation colouring (blue in center through green and yellow to red nearer the boundary)

2018-07-03T11:16:24Z (original)

I wrote a short script to parse @benoitmandelbot coordinates and convert them to a link to my interface

mathr.co.uk/mandelbrot/BenoitM

mathr.co.uk/mandelbrot/web/
it does rendering in javascript as well as symbolic computations cross-compiled using

2018-07-04T21:08:50Z (original) (in reply to)

@er1n I ported the Java implementation of bitonic merge sort from Wikipedia to a multi-pass OpenCL thing once, should be possible to do the same in GLSL... en.wikipedia.org/wiki/Bitonic_

2018-07-06T14:07:06Z (original) (in reply to)

@lo how do you stop it when the design is ready?

comment l'arrête-t-il lorsque le dessin est prêt? (thx google)

2018-07-23T19:38:17Z (original)

archive.org/details/ZIMMER153 nice new under CC-BY-NC-ND, the artwork is good too

2018-07-24T10:22:21Z (original) (in reply to)

@entreprecariat superficially similar shapes...

the lower side of the 1/3 bulb (orange) in the Mandelbrot set, with the .(001) external ray (white)

2018-07-24T10:43:38Z (original) ()

@benoitmandelbot my coordinate munging script no longer works properly :( or maybe I was just (un)lucky in the few locations that I tried before...

2018-07-25T16:45:26Z (original) ()

downgrading mesa on debian buster

upgraded to mesa 18.1.4-1 from buster, maybe my issue has been fixed by now...

2018-07-25T17:10:11Z (original) ()

downgrading mesa on debian buster

New mesa with linux kernel 4.17 gives blank screen instead of X login prompt (cannot see text console after ctrl-alt-f1 either), system is up otherwise (ie can ssh in to reboot). Message in Xorg logs about no connected displays found.

Seems to work better (ie, I see things) with 4.16 kernel, let's see if it freezes up on me...

2018-07-25T17:23:47Z (original) ()

downgrading mesa on debian buster

kernel 4.17 with new mesa works (can log into X) with "amdgpu.dc=0" specified on the kernel boot line in grub. afaik this is the default in earlier versions.

2018-07-25T19:45:14Z (original)

@emsenn

now
next
imminently
soon
later
eventually
never

2018-07-25T23:51:48Z (original) ()

downgrading mesa on debian buster

bugzilla.kernel.org/show_bug.c seems relevant, but different from my situation (I use DVI not HDMI). The patch there had no effect on my symptoms (with "amdgpu.dc=1", the screen goes blank about 5 seconds into boot of linux). dmesg seems to indicate that no monitors are detected. Trying to force-enable monitor in xorg.conf failed too, it seems to want to use DisplayPort-0 instead of DVI-D-0 (as xrandr calls them with working amdgpu.dc=0).

on the plus side I haven't had any freezes with the new mesa, so I'll give it a week to be sure and then close the bug I reported...

2018-07-26T01:22:03Z (original)

@emsenn thanks! my profile picture dates (with minor modifications) from 1998 or so, possibly earlier - I forget exactly..

2018-07-26T08:11:24Z (original)

boring pouring pawing pong pol poll poel poem

mathr.co.uk/blog/2011-04-13_wo old code updated with
speech.cs.cmu.edu/cgi-bin/cmud
using hackage.haskell.org/package/pr to load the pronouncing dictionary

the first line of the toot as rendered by graphviz, with first and last words in red rectangles and the remainder in grey ellipses

2018-07-26T08:14:04Z (original) ()

mind -> brain via a network of possible pronunciation routes

a graph of word pronunciation edits, from mind at the top to brain at the bottom

2018-07-26T09:28:16Z (original) ()

looter lutes loops lips ellipse

one path through a graph, reduced the size of its output by ignoring all the proper and otherwise esoteric names in the cmudict by intersecting with only lowercase words from /usr/share/dict/words

2018-07-27T15:55:49Z (original) ()

4h15m (wall clock time, 16 cores, 7GB RAM needed) to analyze the pronunciation adjacency graph of 42447 words and find the longest shortest paths, length 27, between "DISSUADE" and "FORBIDDING", and also between "DISSUADE" and "MONGERING". en.wikipedia.org/wiki/Floyd%E2

word pronunciation edit graph between DISSUADE and FORBIDDING

2018-07-27T16:00:12Z (original)

finally raining, after however many weeks!

2018-07-30T15:03:30Z (original) ()

someone suggested avoiding vowel/consonant replacements, to make it more natural-sounding, which makes the longest shortest paths length 26, with 11 such pairs of endpoints:

FORBIDDING REFUGES
FORBIDDING SCULPTURED
FORBIDDING SCULPTURES
FORBIDDING STABILIZING
FORBIDDING TASTEFULLY
PRESENTED REFUGES
PRESENTED SCULPTURED
PRESENTED SCULPTURES
RECRUITED REFUGES
RECRUITED SCULPTURED
RECRUITED SCULPTURES

FORBIDDING-STABILIZING pronunciation edit graph

2018-07-31T23:55:32Z (original)

I released hp2pretty 0.9, a tool for graphing heap

more details on my blog mathr.co.uk/blog/2018-08-01_hp

2018-08-02T18:03:38Z (original) (in reply to)

@benoitmandelbot needs more iterations, this location probably should have no interior black regions at all...

2018-08-02T18:05:35Z (original)

I made a new blog post about my experiments in

mathr.co.uk/blog/2018-08-02_pr

2018-08-02T18:39:53Z (original)

Jared Sagar - Fortitude
archive.org/details/PILOTELEVE
electronic, algorithmic composition, ambient, drone
apparently published tomorrow, apparently I can hear the future

sounds quite nice so far, I'm about half way through the first track (of two)

CC-BY-SA license, which is nice

2018-08-02T19:52:21Z (original)

one of my works (an ) is in the Sounding DIY in this month:

sivazona.hr/events/sounding-di

2018-08-02T21:36:08Z (original)

kf-2.13.6 released mathr.co.uk/kf/kf.html#kf-2.13

new feature: file -> open map to load kfb data without needing to fake a zoom sequence

bug fixed: a single dot appears in a mini

bug fixed: zoom 0 is saved in parameter file when zooming out

2018-08-02T23:33:08Z (original)

recently got my emndl "exponential strip" renderer working again. it's super slow because it dates from before the perturbation technique and series approximation were popularized (ie, it uses arbitrary precision calculations for each pixel instead of just a few references with machine-precision deltas). my coding task tomorrow is going to be copy/pasting knighty's "super series approximation" algorithm from nanomb into emndl_calculate.cc , will benchmark some zoom video calculations...

example image output from emndl (an exponentially / logarithmically transformed mandelbrot set zoom, outside at top, center location of zoom at bottom)

2018-08-02T23:37:46Z (original) ()

mathr.co.uk/tmp/emndl_2018-08- is the original file before mastodon rescaled it (smaller image pixel dims) and then expanded it again (larger html/css dims), which didn't improve the visual quality much

2018-08-02T23:49:14Z (original)

if anyone wants some imaginary internet points, i put a bounty on my question mathoverflow.net/questions/306 looking for fast for external to/from coordinates in the set or sets. the ray tracing algorithms I have thus far are O(n^2) which is too slow (eg, n = 100 is still practical, but n = 1000 takes 100 times as long, and I want n = 10000 or more). if you don't want the points, but know an answer, i'd like to know too of course!

2018-08-03T01:55:32Z (original)

couldn't sleep, so found some old code to get running again. this time its using fixed point based on Integer for z and soft float based on Int32,Int32 for dz/dc (for de), rendered in using the vty library. bit slow, I suspect I'm hitting GHC issues with parallel GC not working too well when the CPU core count is high

mathr.co.uk/mandelbrot/ansibro (3MB animgif)
the text from the last frame:
re: -1.77846145720263266130903712436165533385518286876559
im: 0.00807892396256432556838964635935454710890060278837867
@@: 4.3790577010150533e-47 | 32768 iterations | 164 bits

(the iteration count could be higher at the end, but never mind)

2018-08-03T03:35:50Z (original)

log and exp are universally there, I suppose, and log2 and exp2 are in , and log10 is available as standard in and ++ , but exp10 is a extension. I guess pow(10, x) is acceptable, as this is for string conversion that is only performed once per file save...

2018-08-03T10:47:24Z (original) ()

mathr.co.uk/mandelbrot/emndl_2 (140MB) hd of to 7.5e-38, took only 7m23s (wall clock time) to find location algorithmically, calculate exponential strip pixels using knighty's nanomb code with minor modifications, and export as sequential flat frames encoded to h264 (plus the soundtrack too)

verbose details at mathr.co.uk/mandelbrot/emndl_2 (1MB)

2018-08-03T18:27:54Z (original) ()

archive.org/details/emndl_vs_n ~15m rendered in~72m, set with ambient drone noise soundtrack generated from the image data and processed with

now working on adding interior checking to knighty's experimental nanomb2 code i pasted into emndl, hopefully should make it even faster, but having issues with Dinkydau's "evolution of trees test location: fingers crossed I just had the maxiters too low and not an algorithmic issue...

2018-08-04T16:01:24Z (original) (in reply to)

@switchingsocial @funkwhale
archive.org/details/netlabels "This collection hosts complete, freely downloadable/streamable, often Creative Commons-licensed catalogs of 'virtual record labels'."

2018-08-05T15:30:34Z (original)

math.stackexchange.com/questio did some related to and - chances are I made a nonsense because I only started self-learning about algebraic number theory last night...

2018-08-06T20:43:20Z (original)

mathr.co.uk/blog/2018-08-06_en new blog post about enumeration of Misiurewicz points in the Mandelbrot set, with some flawed algortithms (though it might turn out that all the polynomials are irreducible after all, I have no proof)

2018-08-06T23:40:02Z (original) ()

I updated it with some code, and extended the table to p+q<16

2018-08-07T09:24:27Z (original) ()

added some more Haskell code with a simple formula that fits all the data, but for which I have no proof of correctness...

2018-08-07T16:20:24Z (original) ()

math.stackexchange.com/questio asked a question about it on M.SE

2018-08-08T20:18:54Z (original) ()

downgrading mesa on debian buster

getting freezes with linux 4.18-rc7 mesa 18.1.5-1, so maybe the bug is not fixed after all :(

downgraded to mesa 18.0.5-1 again, will reboot when my code finishes running, or a freeze occurs, whichever is sooner

2018-08-09T11:59:54Z (original) ()

arxiv.org/abs/1309.4048v2 corollary 3.3 has a formula for counting misiurewicz points for z^d+c, not just d=2

2018-08-13T21:18:42Z (original)

this evening I've been porting some old patches to my setup.

I don't have anything like [vline~] or even a message system in clive, so some things are tricky, but I'm not being too strict about exactly reproducing all the sounds.

code.mathr.co.uk/clive/shortlo

2018-08-14T17:20:08Z (original)

replaced an IORef Int with an AtomicCounter in some concurrent , got a 10x speedup (elapsed time) and much higher multi-core utilisation

hackage.haskell.org/package/at

2018-08-15T17:00:31Z (original)

I have claimed in the past that series approximation is not possible for abs-variant fractals such as the Burning Ship because |x| is not differentiable everywhere.

But maybe it's possible after all, as in a sufficiently small neighbourhood of a reference orbit that is sufficiently far from the axis, |x| will be either x for all x in the neighbourhood, or -x for all x in the neighbourhood.

So one could do case analysis on the sign of the reference orbit, when updating the series coefficients.

Whether it would be worth it is questionable, as periodic references would break after at most 1 period (when the orbit hits 0). Maybe something can be done to handle this case too?

2018-08-16T18:56:15Z (original)

I implemented this for set in - seems to work though it needs loads of RAM and is slow (GC is a bottleneck, I haven't optimized yet):

"Images of Julia sets that you can trust"
L. H. de Figueiredo, D. Nehab, J. Stolfi, and J. B. Oliveira
Last updated on January 8, 2013 at 10:45am.
webdoc.sub.gwdg.de/ebook/serie

level 9 of a quad-tree refinement algorithm for exact Julia set computation

2018-08-16T19:01:04Z (original) ()

I then used it as a building block in an algorithm for trustworthy set rendering: if the Julia set quad tree has any black cells, then the 'c' region is definitely interior to the Mandelbrot set, and if a neighbourhood of 0 contains only white cells then the 'c' region is definitely exterior. Gray is "unknown so far", subdivision of the Julia set and/or Mandelbrot set 'c' cell is necessary.

trustworthy Mandelbrot set level 7

2018-08-16T23:39:04Z (original) ()

here's the source code: code.mathr.co.uk/mandelbrot-gr

2018-08-20T22:36:38Z (original) ()

and a blog post about it mathr.co.uk/blog/2018-08-20_tr

2018-08-21T12:31:35Z (original)

archive.numdam.org/article/BSM
P. Fatou
Sur les équations fonctionnelles
Bulletin de la S. M. F.,
tome 47 (1919), p. 161-271

Some references in a more recent paper seem to indicate that this has a proof of backward stability for Julia sets of holomorphic functions (or something along those lines, not entirely sure) but it's 100+ pages of 100-year-old Français...

tl;dr

2018-08-23T20:05:04Z (original)

uploaded a quick fractal zoom centered on Dinkydau's Ssss... location, calculations took about 30mins wall-clock time using knighty's nanomb2 super series approximation algorithm, unwarping from an exponential strip image and encoding to h264 video took about another hour.

unfortunately archive.org's MP4 (27MB) streaming transcode is unspeakably poor quality, so get the Ogg (200MB) or original Matroska (1.7GB) for something acceptable to eyes.

archive.org/details/emndl_vs_n

2018-08-24T10:52:49Z (original)

I uploaded a #360 zoom test to YouTube:

youtu.be/5_v2VYZRKeg

Looks like PeerTube will have 360 support at some point, it's being worked on it seems.

6 hours render time, most of which was spent in the unwarping from exponential strip (8192px wide) to equirectangular frames (8192x4096) - I suspect I could optimize it somewhat, maybe the inline functions aren't getting CSEd (common subexpression elimination) and there is 3x the necessary work done (for each RGB channel).

2018-08-27T16:28:55Z (original)

I wrote a new blog post about automatically unskewing the burning ship

mathr.co.uk/blog/2018-08-27_un

2018-08-27T16:37:44Z (original)

@emsenn thanks, i guess? maybe i should chill out a bit and post more personal stuff... or try and make the maths comprehensible - not sure which I'd find harder...

2018-08-27T16:39:08Z (original) ()

github.com/Chocobozzz/PeerTube is the peertube issue about 360 video

2018-08-27T16:41:16Z (original)

@emsenn ok! :)

2018-08-27T17:22:30Z (original)

an excerpt from yesterday's practice session for the upcoming (next weekend! so soon!) two-room Global in

mathr.co.uk/tmp/session-2018-0

building up into noisy hypnotic

2018-08-28T10:18:24Z (original)

kf-2.13.8 released

mathr.co.uk/kf/kf.html#kf-2.13 new release

- new feature: auto skew (via Newton-Raphson zooming dialog)
- new feature: show/hide crosshair window
- new feature: quality presets ("fast" but inaccurate, "best" but slow)
- new feature: page up / page down keyboard shortcuts to zoom in / out
- new feature: drag-and-drop parameter files from the file manager to the main window to open them
- new feature: drag-and-drop palette files from the file manager to the color dialog window to open them
- new feature: CLI prints total remaining pixels
- bugfix: suppress error dialogs when loading metadata from TIFF
- bugfix: remove obsolete .ini stuff that was overriding default settings
- bugfix: enabled "no reuse center" by default (without it zoom out sequence sometimes glitches)
- major documentation improvements
- new dependency: GLM 0.9.9.0

2018-08-28T10:34:42Z (original)

libpng and metadata after IDAT

seems libpng can read PNG metadata from before the IDAT chunks (containing the compressed pixels) with no problems, but to read metadata from after the IDAT chunks seems to require decoding the image first - this is not good, because it's a waste of time and (potentially lots of) memory

this is a problem because it seems some image processors (eg ImageMagick) move metadata from before IDAT (fractal parameter files in text comment put there by KF) to after IDAT, and i still want to access it after transmogrification.

the pngmeta tool historically had some code using PNG_INTERNAL structs that skipped IDAT chunks without needing to decode them, but that broke when libpng upgraded its API (and indeed Debian's patched(?) version no longer reads metadata after IDAT)

perhaps exiftool (which can read metadata after IDAT) has some code I can look at. in the worst case I might have to write a custom PNG parser :(

2018-08-28T12:05:21Z (original) ()

libpng and metadata after IDAT

exiftool has a custom PNG parser it seems. but it's written in so I'm not entirely sure - I am sure that I don't understand it

2018-08-28T12:12:25Z (original) ()

libpng and metadata after IDAT

what if... I used libpng, gave up and decoded the image IDAT (still wasting time), but set all the row pointers to point to the same single row in memory, thus reducing memory usage to O(W+H) instead of O(W*H). it might explode with broken invariants, let's try...

i could postpone that conditional on checking for metadata before IDAT, so it would only be slow if the image has been postprocessed by annoying software that moves the comment metadata until after the IDAT

2018-08-28T12:53:17Z (original) ()

libpng and metadata after IDAT

it works!

though it didn't until hexdumping the PNG file output by ImageMagick revealed it had renamed the "Comment" keyword to "comment" (note bad lower case 'c') - hacked around it by using the C standard library stricmp() case insensitive string comparison instead of strcmp().

and i haven't get managed to create an interlaced PNG with text metadata after the image data, so that case might make the row pointer hack explode... untested

2018-08-28T13:53:32Z (original) ()

kf-2.13.8 released

while trying to figure out how to get autoskew from a 2x2 matrix to work with kf's legacy code I scribbled 11 A6 pages of equations in my notebook. then I had an insight, and the solution was half an A6 page:

h [s, 0 ; 0, 1] R(t) = R(t) R(u) [g, 0; 0, 1/g] R(-u)
where R(k) = [ cos k, sin k; -sin k, cos k ]
with the solution
s = g^2, h = 1 / g, t = -u

the left hand side of the first line represents a uniform scaling h of a horizontal stretch s of a rotation by t of pixel coordinates, which is what KF uses to represent skew

the right hand side is the polar decomposition of a matrix with determinant 1: a rotation by t of a stretch by g along direction u (and 1/g along the perpendicular direction, so area is constant) of coordinates

when implementing it in KF i didn't get as far as handling the uniform scaling by h = 1/g, so highly skewed regions will be differently zoomed than might be expected

2018-08-28T14:02:35Z (original) ()

kf-2.13.8 released

the right hand side is formulated that way because of the definition of polar decompostion: scale * rotation * rotate * stretchX * unrotate

the main insight was writing down the equation, after that it was only a little work to realize that to move the stretchX to the front of the matrix multiplications, then (rotation * rotate) must be the identity matrix, ie the angles t and u are opposite so the rotations cancel

2018-08-28T15:01:14Z (original) ()

downgrading mesa on debian buster

mesa 18.0.5-1 rock solid on linux 4.18-rc8

mesa 18.2.0~rc4-1 is in debian experimental repo. maybe once a version is in unstable i'll try it

2018-08-28T15:08:18Z (original)

4.19rc1 looks like it has some fixes relating to blank screens with amdgpu.dc=1, tempted to try it.

i've been running with amdgpu.dc=0 for the last long time because otherwise it thinks no displays are connected when it initializes 5 seconds into the boot process and turns off the monitor (which was displaying the text console perfectly well up til then)

2018-08-28T15:34:37Z (original) ()

tried it. didn't solve my problem. now on 4.18.5 stable with amdgpu.dc=0

2018-08-30T20:34:10Z (original)

Reading List for a 10yr Old Programmer?

@emsenn when I was that age i loved going through the "Computer Recreations" in Scientific American print magazine that my dad subscribed to. apparently there is a book collecting some of them, "The Armchair Universe" by A K Dewdney 1988, though I've not got a copy (or been able to find a copy online...)

also Amiga Shopper and cuAmiga magazines had some programming tutorials in the 1990s when i was in my teens, typically a 4-page spread each month. Amiga Format magazine had an assembly programming game tutorial series by some of the big names at the time, but that was too hard for me (80000003 software failure flashing red box of doom)

tl;dr maybe some magazine subscription, if you find one that the 10yrold likes

book-wise, "The Emperor's New Mind" by Roger Penrose had a big impact on me

2018-08-31T03:05:42Z (original)

One of my works was exhibited a few months ago, and it was horribly jittery/bad - I supposed at the time it was an incompatibility between the I used to encode it and the laptop used to play it back.

Tonight I finally found (and fixed) the cause in my own code: it turns out that

glfwSwapBuffers(...);
glReadPixels(...);

is the wrong order to do those two things in, and will lead to jumbled frame order in the output stream or worse (either undefined behaviour as allowed by the specification, or a driver bug, I haven't dug deeper to know which is the case). The correct order is:

glReadPixels(...);
glfwSwapBuffers(...);

Probably the galaxybrain in this whole thing would be to use an off-screen framebuffer object instead of the default framebuffer, then all windowing system buffer swapping issues are irrelevant.

2018-08-31T03:45:36Z (original) ()

The broken video: mathr.co.uk/meshwalk/.broken/m (250MB)

The fixed version: mathr.co.uk/meshwalk/meshwalk- (340MB)

The fixed lossless version which is 10x the size but doesn't look blurry (I'm looking at you, chroma subsampling): mathr.co.uk/meshwalk/meshwalk- (3GB)

I should probably have called the fixed version "meshwalk-2.1", but I'm too lazy to redo the title screen.

still from meshwalk-2.0 (a wavy grid of quadrilaterals alternating red white blue and black)

2018-08-31T11:32:01Z (original)

I wrote a script to take the dumps from and output containing all the with internal and external hyperlinks (as appropriate).

I only tested with my account so far, output at mathr.co.uk/@mathr/ script at mathr.co.uk/@mathr/mastodon2ht

Security note: if you intend to use the script for output to a website, be sure not to expose your outbox.json or key.pem to the public, they contain private data (sent DMs, cryptographic secrets).

Bugs: yes! it's hacky json and html string mashing. may break in numerous ways (if Mastodon changes data format, or if some fields contain unexpected html chars, or..).

Features: no! it only does public toots, and possibly only some of them (it assumes the public url must be the first in the "to" list of the toot).

2018-08-31T13:15:51Z (original) (in reply to)

@wendy repository is a bit overloaded, do you mean in the sense of a distribution of a collection of software (eg slackware, debian, freebsd, msys, homebrew, f-droid), or in the sense of version controlled history of software development (eg rcs, cvs, subversion, darcs, mercurial, git)?

for the latter this article seems a nice introduction:
queue.acm.org/detail.cfm?id=15 Making Sense of Revision-control Systems,
Bryan O'Sullivan, 2009

revision control has a deeper history in engineering, aircraft blueprints etc, but i know no more than that

2018-08-31T17:13:43Z (original) (in reply to)

@wendy @screenless

wiki.archlinux.org/index.php/A

debian.org/doc/devel-manuals

freebsd.org/doc/en/articles/fr
freebsd.org/doc/en/books/porte

2018-09-03T21:28:32Z (original) (in reply to)

@autogestion I don't know the format spec, I just inspected it in a text editor to see what kind of data I might be able to extract... dodgy hacks...

you should be able to get your own archive dump to inspect from the preferences page of the mastodon web ui, as a tarball containing the json and media files, but it may be rate-limited (eg 1 request per week).

the script itself is linked from the post you replied to (second paragraph, second link) and also at the bottom of the output page

2018-09-03T23:09:42Z (original)

back from live-code-fest-2 in sheffield, updated:

mathr.co.uk/clive/ in

newly added to that page:

clive-core.git repository split off from clive.git for size reasons

global live performance audio+diff stream

talk2 slides PDF

getting started workshop slides PDF

2018-09-03T23:20:04Z (original)

is inspirational
hydra-editor-v1.glitch.me

I want to hack 360 cubemap texture support into it somehow, because edge artifacts rile me. down with boundaries.

no idea how easy/hard that will be, i suspect non-trivial at the very least...

2018-09-03T23:51:53Z (original) (in reply to)

@tedthetrumpet @deerful unfortunately i missed both your sets, are there any recordings?

2018-09-04T01:00:20Z (original) (in reply to)

@deerful @tedthetrumpet mathr.co.uk/clive/session-2018 is my pure-digital (no audience reaction) recording (audio with code diffs). hellocatfood and izzy took some photos flickr.com/photos/hellocatfood seems the line numbers from my text editor were all over my face

2018-09-04T01:20:34Z (original)

3 hours rendering time (wall-clock, 16 threads) for a cubic burning ship in kalles fraktaler 2+ only to find I really needed to set the "glitch low tolerance" flag to avoid bad appearance in certain parts of this image. edited the settings, retrying.

I need to re-find where gerrit and/or knighty posted a more accurate detection formula on fractalforums.org , because pauldelbrot's heuristic gives much false-positives with the low tolerance setting, which leads to needing to re-calculate too many pixels, hence slow. hopefully it won't require calculating more running derivatives, because that is already a cause of slowness (and so far it only calculates derivatives w.r.t. C for distance estimation colouring).

2018-09-04T01:32:13Z (original)

is also inspirational praxislive.org/

it may be my new toy for live shader programming

was having no end of trouble with and core profile requirements on my laptop (the nvidia proprietary driver lets you use deprecated functionality together with new stuff, but the nouveau driver only lets you use the new stuff - and my hardware is now in legacy maintainence mode, not to mention nvidia's truly evil licensing requirements..)

the only sticking point will be whether i can have a library of shader code that i can include in all my shaders without too much trouble, because i don't want to copy-paste (eg) complex number maths all over the place.

2018-09-04T01:53:27Z (original)

the performance by Ryan, Lucy and Loz using github.com/Qirky/Troop was great, they looked like they were having so much fun, I guess because if there's 3 of you making sounds, it's less to stress about trying to keep the flow going.

had a chat with Neil (of praxislive) about it, seems impossible to do that kind of collaborative text editor (with multiple humans changing things at different places in the same file simultaneously) thing with the "whole program compilation" model of both my system clive and his (awesome) amen $ mother function set...

2018-09-04T11:28:17Z (original)

graphgrow

old GUI was very powerful but also very complicated, and not so intuitive to just start playing around - it also started from a blank canvas, so to get it to do anything you have to 1. click "add node", 2. click a couple of times in the empty space in the middle, 3. click "add link", 4. drag some links between the nodes in the middle, 5. and only after all of that is there any output. and to get the output interesting you have to add nodes and links in all 4 workspaces (selectable on the left) and "mod link" them to switch the colours up

so this morning I worked on simplifying it a great deal. now there are no multiple modes, the only things you can do are select workspaces and drag nodes. the graph topology is preset to something nice, and when you leave it alone the nodes gradually drift back to their preset starting positions. it's still possible to get it in a state that doesn't generate good output, but much easier to get out of those states.

need to adjust the colours a bit, maybe a pastel background would be better than dark.

this is written in C++ with via but I need to port it to run on my tablet - ideally before xmas so I don't panic near the deadline...

old graphgrow interface new graphgrow interface

2018-09-04T11:36:29Z (original) ()

graphgrow

this user interface broadcasts data over to a video rendering program, also C++ with and , which renders a graph-directed iterated function system using texture array feedback. there are 4 buffers each of which pulls data from the others, with histogram equalization to prevent the colours getting too bright or dark.

it runs fine on my new GPU at very high quality settings, but I'll be using my old desktop for this, so I need to check how hard i can push it without the frame rate dropping too much. the code is instrumented with timer queries, so i can see which parts of the OpenGL code are the bottle-necks.

some optimisations i could activate if necessary include building the histogram from a smaller mipmap level, or only doing that every few frames instead of every frame. quality may suffer, the main thing is to avoid strobing artifacts because they're very distracting and the rest of the visual has a calm feel to it.

graph-directed iterated function system fractal

2018-09-05T18:30:54Z (original) ()

downgrading mesa on debian buster

even with mesa 18.0.5-1 my desktop froze on me a few times with linux 4.18.5 the past week. so maybe I was wrong about the cause after all and it has all been an unfortunate (combination of) coincidence(s)? :(

resorting to running without X (ie, text mode console only) is not a good long term solution, but I'm trying it now just to get my fractal rendered.

linux 4.18.6 is released and the changelog mentions a few deadlock fixes, and there are amdgpu changes too (which mght affect my "no displays detected with amdgpu.dc=1" bug, so I'll try it asap (when my fractal is done).

I'll also test the linux 4.19-rc2 briefly.

2018-09-05T19:11:54Z (original) ()

found the links I was looking for, about half-way through a long forum thread. the search function helped, I think the useful keyword was "threshold" as "glitch" had too many irrelevant results to sift through.

knighty explaining the derivation of his glitch detection formula for quadratic mandelbrot set:
fractalforums.org/fractal-math

gerrit explaining the derivation of his glitch detection formula for arbitrary formulas (as functions of pairs of real numbers, not just complex numbers):
fractalforums.org/fractal-math

2018-09-05T19:22:10Z (original) ()

these two glitch detection methods are more expensive than pauldelbrot's glitch threshold, which was the first reliable method. but some locations need a larger threshold (which causes more pixels to be classified as glitches), in which case doing a cheap pauldelbrot test as a first check before doing the real (expensive) test might be beneficial.

pauldelbrot explaining the derivation of his glitch detection formula for the quadratic mandelbrot set:
fractalforums.com/announcement

pauldelbrot's criterion is used as-is for the other formulas in KF, including burning ship etc, despite no precise theoretical justification. Only the thresholds are changed, typically higher powers have larger thresholds.

2018-09-06T03:39:44Z (original)

the next will be 16-20 July 2019 in Linz, Austria.

bridgesmathart.org/bridges-201

2018-09-06T03:54:28Z (original) ()

not affiliated with them, just passing on an announce I saw.

maybe I'll write a paper or submit a short film (or both), though being independent I don't have any easy funding source to pay for the registration.

2018-09-06T16:20:54Z (original)

kf-2.13.9 released

mathr.co.uk/kf/kf.html#kf-2.13

- new feature: auto skew without miniset: new button in Newton-Raphson zooming dialog, "Auto Skew (Escape)", that skews at the center pixels (algorithm suggested by gerrit)
- bugfix: set window title on parameter drag and drop (reported by gerrit)
- bugfix: reading PNG metadata works even if it is moved after the image data chunks and has a miscapitalized "Comment" keyword
- bugfix: fix Mandelbar derivative calculations for ADE (reported by gerrit)
- bugfix: fix 4th False Quasi formulas Newton-Raphson zooming

2018-09-07T08:49:33Z (original)

@emsenn mathr.co.uk/blog/

2018-09-10T12:37:59Z (original) ()

downgrading mesa on debian buster

today I will be testing linux 4.18.7 from kernel.org with mesa 18.1.7-1 from debian buster. fingers crossed for no freezes.

will also test 4.19-rc3 briefly, fingers crossed for detected displays, though the diff since rc2 doesn't mention any amdgpu changes so I'm not optimistic.

2018-09-11T14:04:18Z (original) ()

downgrading mesa on debian buster

linux 4.18.7 from kernel.org with mesa 18.1.7-1 from debian buster seems a stable combination. I suspect my issue was some Linux deadlock bug(s) that coincidentally happened to be more exposed by some mesa version(s).

meanwhile the latest kernels with amdgpu.dc=1 still don't detect my display. at least amdgpu.dc=0 is still an option.

2018-09-11T14:18:32Z (original) ()

graphgrow

re-installed my old desktop with debian stretch (current stable), with liblo(-dev) from buster because it has a feature I need relating to OSC blobs.

the video part is running fine, using slightly lower quality settings than on my new desktop, but looking ok. maybe I'll need to adjust the output gamma when using a projector, on my TV screen the halo is a bit too present perhaps. I'm using the NVIDIA proprietary evilblob driver, as that's what I used when originally writing the code, and I don't know if the Free nouveau driver supports GPU clock frequency scaling for my hardware.

the audio part is running fine too, using the internal soundcard, no noticeable JACK xruns, which is nice (no need to use an external soundcard).

the interface part is running fine on my laptop sending unicast OSC to the desktop, latency is not bad. I had originally used broadcast OSC (to 255.255.255.255) but its latency was atrocious, up to 1 second at times.

the only issue I have now is that the laptop with the interface sometimes decides to switch to using a different wifi access point without my telling it to, which breaks everything.

next I need to port the interface to Android to run on my tablet.

2018-09-11T15:41:04Z (original) ()

graphgrow

sudo apt install lm-sensors
sudo sensors-detect
sensors

tells me CPU is running at 45C (very acceptable) and motherboard is at 51C (a bit hot for my taste)

sudo apt install nvida-smi
nvidia-smi -q -d TEMPERATURE

tells me GPU is running at 95C (rather too hot for my taste)

sudo apt install acpid

allows system shutdown by pressing the desktop case power button via a script in /etc/acpi

will leave the machine a few hours to cool down, or maybe until tomorrow, then dismantle and use my recently-purchased spray duster compressed gas can to clean the fans and heat sinks thoroughly

2018-09-11T17:32:05Z (original) ()

graphgrow

I ported the interface from OpenGL 3.3 Core Profile to OpenGL 2.1 so it runs on my netbook (a backup machine in case I fail at Android development or something else goes wrong).

The main changes were in the vertex shader:

330 core
layout (location = 0) in vec2 pos;

becomes

120
attribute vec2 pos;

also adding

glBindAttribLocation(program, 0, "pos");

before the

glLinkProgram(program);

Vertex shader "out" becomes "varying", fragment shader "in" also becomes "varying", fragment shader "out" is deleted and the variable name replaced by gl_FragColor. "texture()" becomes "texture2D()".

I also parameterized the layout by screen size: my tablet is 1280x800 while the netbook is 1024x600. I was super surprised that the arithmetic worked first time with correct layout, after correcting some small typos that made it fail to compile. I left the internal coordinates relative to an 800x800 square, because too much is hardcoded there. I only have to scale by the screen height in about 3 or 4 places, when passing along mouse coordinates from the window system.

still to do for the netbook: automatic login launching the UI with a minimal window manager, or with window manager keyboard shortcuts disabled. also need to figure out how to force the wifi to connect only to my graphgrow access point.

2018-09-11T21:43:44Z (original) ()

graphgrow

to make sure my netbook only connects to my GraphGrow access point:

sudo service NetworkManager stop

sudo mv /etc/NetworkManager/system-connections /etc/NetworkManager/system-connections.disabled

sudo mkdir /etc/NetworkManager/system-connections

sudo mv /etc/NetworkManager/system-connections.disabled/GraphGrow /etc/NetworkManager/system-connections

sudo service NetworkManager start

but this may be moot as I'd rather use an ethernet cable to connect to the router if I need to fall back on using the netbook instead of the tablet...

2018-09-12T00:53:30Z (original)

dynamo

I think I've successfully set up a laptop with my Dynamo generative techno patch with the kiosk-plugin to allow browsing the GUI but preventing editing or other unintended actions. Will test it on some people to see if they can break it.

one neat trick / one stupid workaround to prevent certain parts being interacted with (like drawing waveforms where there should be pre-loaded samples) is to use a graph-on-parent subpatch with the kiosk plugin disabling the context menu - this GOP subpatch is then unopenable in the kiosked GUI.

another neat trick / another stupid workaround for the kiosk plugin not differentiating between top-level windows and sub-windows in its "quit on close" functionality is to use [iemguts/closebang] object connected to a [; pd quit( message, in an abstraction instantiated by the top level patch. it doesn't work if it's naked in the top level patch, didn't try a subpatch. this allows "quit on close" to work for the top level patch, after which my launcher shell script restarts pd, while closing subpatches works as desired (not quitting pd).

one thing I still need to fix is ignoring the laptop lid close event instead of suspending. another is killing all processes on logout, to prevent duplicates on relogin

2018-09-12T02:57:29Z (original) ()

dynamo

the response to laptop lid close events is controlled in /etc/systemd/logind.conf

to do something after /usr/bin/xfce4-session ends, create a /usr/local/bin/xfce4-session wrapper script. in my wrapper script I "killall -KILL -u dynamo" which ruthlessly destroys everything running as that user.

to prevent ctrl-alt-f1 switch away from X to a terminal console login prompt, create an /etc/X11/xorg.conf.d/dontvtswitch.conf with the desired Section "ServerFlags" options

lightdm is fairly easy to configure to autologin the dynamo user after a timeout

I chown most files in /home/dynamo to another user, so that they can't be overwritten or deleted, whether by accident or malice - this doesn't work for .config for some annoying reason - considering switching to a more minimal window manager...

2018-09-13T18:35:56Z (original) ()

graphgrow

I ported the graphgrow user interface to using for touch UI instead of on the desktop version. it steals the main loop, but that wasn't too much trouble to work around. minor changes to the other callbacks, too, nothing too hard.

I had intended to use the packaged android tools, but I couldn't get them to work at all. probably due to me not having a clue. maybe I'll revisit that once I've finished v1 of the graphgrow ui app (want some network status display in case of errors)

what was a major headache was getting liblo for to compile and link with my code in Android Studio, eventually I gave up and just listed the sources in my CMakeLists to compile it statically, instead of doing it cleanly as a reusable shared library (.aar with native .so might not work anyway?).

this meant I needed to manually set a few configure substitutions in some header files, namely making endianness autodetected at compile time instead of at configure time, and disabling the threaded server include (because it broke things for me), and setting a printf macro for long long int.

there was one very small bug/issue in liblo when compiling for android, which is needing to replace index() by strchr() in one location (which it already does for Windows, don't know why it isn't used on all OS).

2018-09-13T20:26:17Z (original) ()

graphgrow

browsing the "no filters" logcat from my tablet debug tether to desktop shows it is trying to phone home to various places periodically, and not succeeding (my wifi access point has no internet, by design). DNS lookup failures for play.googleapis.com (unsurprising) and www.265.com (no clue what it is as I can't read those glyphs, this is concerning... the manufacturer of my tablet ASUS is from Taiwan). also connectivitycheck.gstatic.com which seems to be another google site...

another issue is the wifi router I am using sometimes disappears, and only reappears after some time. maybe thermal issues, it's pretty warm with 350kB/s UDP traffic (if i read the logs right). propping it up on some plastic pieces seems to have helped.

when that happens, the tablet automatically reconnects to my regular home network, which is all wrong for this project. it should be relatively straightforward to delete all the saved network credentials to prevent this, need to test

2018-09-13T20:58:58Z (original) ()

graphgrow

the speedtouch router I am using for this may need replacing. it has an "intrusion detection system" that can't be deactivated, including "udp flood prevention" and "udp rate limiting", neither of which are what I hope and desire for my situation.

2018-09-13T21:18:12Z (original) (in reply to)

@320x200 nice! I suppose there'll be a lot of de-unboxing in the future (I suppose that would be "boxing", but that term's taken by fisticuffsing ruffians). maybe "enboxification" would work

2018-09-14T11:24:57Z (original) ()

graphgrow

I failed at sleeping, but in the process I rewrote the audio part of graphgrow. Before it was a noisy mess, very wild and unpredictable/hard to control.

Now it has a rhythmic drone feel, and the user interface to sound correspondence is much tighter - shorter links make higher pitches, longer links make lower pitches, and the different panes have different sounds.

Technically it's a feedback delay network: each rule pane has a stereo delay line that makes a rhythmic loop, and each edge link reads from the delay of the rule of its own colour and writes to delay of the rule of the pane colour.

Each edge has another internal stereo feedback delay line, and inside that loop it has some filters: high pass and low pass to restrict to a comfortable range, and a resonator whose frequency is controlled by the link length (longer is lower pitch). The loop has dynamic range compression, to avoid any risk of superloud blowups or decay to silence.

One last trick to make it interesting: when the edge reads from its rule delay line input, it pitchshifts it down an octave (the algorithm is from a Pd example). I set a large window size to synchronize with the delay time of all the other delay lines, which are based on a tempo of 150bpm.

Listen: mathr.co.uk/misc/2018-09-14_gr

2018-09-14T13:31:01Z (original) ()

graphgrow

ccrma.stanford.edu/~jos/fp/Tim has a lot better solutions than my homebrew resonator code. But then it's JOS so what do you expect... Mine has zeroes at +/-1 and lots of complicated calculations to normalize the gain by calculating the response at the conjugate pair pole frequency, which is not the same as the peak frequency, so at small pole radius the peak gain is more than 1 and the filter is pitched sharp too...

one thing my code does have is setting the pole radius based on the frequency and Q, something like R = 1 - frequency/SR / Q, which is more intuitive for setting the filter bandwidth in pitch space

2018-09-17T23:37:26Z (original) ()

graphgrow

wrote a new blog post about optimizing the graphgrow audio engine to run with much less CPU usage while still sounding fine:

mathr.co.uk/blog/2018-09-17_op

2018-09-18T02:32:42Z (original) (in reply to)

@craigmaloney or if you were cheap you could get an older version or code-size-limited demo from a magazine coverdisk (3.5")

2018-09-18T03:38:52Z (original) ()

graphgrow

I changed the Linux desktop versions of all 3 components (iface, video, audio) to use a leaner OSC protocol - should bring network traffic down from 360kB/s to about 60kB/s. I could probably half the transmission rate from 60fps to 30fps without ill effects. Still need to port this to the Android version of the iface, which as of now won't control either the video or audio. Also want to add OSC error code visualisation.

The netbook isn't a good fallback for the iface after all, it runs the OpenGL stuff at only 3fps, which makes interaction a bit painful. I had assumed it was broadcast wifi network latency.

Found some forum posts, seems the attempted Beijing-registered www.265.com connections (presumably to the /generate_204 URL mentioned, though I haven't checked myself yet) are for the same purpose as the connectivitycheck.gstatic.com connections - ie, to see if wider internet access is available through the currently available local networks. My guess is that Google is not available in China, so Asus (Taiwan) tries both sites. Hopefully the tablet isn't transmitting any data beyond an HTTP GET.

2018-09-18T07:36:51Z (original)

17th - , University ( ), March 23-26, 2019

lac.linuxaudio.org/2019/

open for , , , , ,

Submission Deadline: December 7, 2018 (11:59pm PST)

2018-09-18T07:42:37Z (original) ()

I'm not affiliated, just passing on the call.

I almost certainly won't submit anything, as they don't fund anything and I don't particularly want to travel to the USA... but if it's like previous editions (I don't know...) then at least conference registration and concerts might be cost free for attendees.

2018-09-18T08:33:47Z (original) ()

graphgrow

was getting tearing in the graphgrow-video on the desktop machine running NVIDIA proprietary driver and XFCE4. checked nvidia-settings and sync to vblank was on by default. added glfwSwapInterval(1) to my code and recompiled / relaunched - still tearing. finally found the fix:

xfce4 menu -> settings -> window manager tweaks -> compositor -> uncheck enable compositor

no tearing any more!

I don't need compositing, and from some reddit posts it seems X compositing and the NVIDIA driver don't play well together (suggesting compton as an alternative to XFWM compositing).

as a bonus, GPU temperature is now around 80C under load, before it was up to 90C or so (even after thoroughly cleaning its heatsink and fan with a spray-duster can of compressed air (it was fairly caked).

2018-09-18T13:41:14Z (original) ()

graphgrow

the speedtouch 585 router isn't actually so bad once you get into its telnet cli and use the :menu command to configure it. I disabled the firewall and intrusion detection system, and researching things to try to improve wifi stability - what is a good wireless txpower in mW ? I think too high might be making it reset due to overheating...

2018-09-19T12:39:22Z (original)

emndl

emndl is my exponential-strip set fractal renderer. I recently added 360 video export, but for 360 to look good you need high resolution, so I've been going for 8192x4096 equirectangular output. This makes the exponential strip 8192 pixels wide too, and the height is proportional to the width times the logarithm of the final zoom factor. The data gets big for deep zooms.

So, I made the calculation engine work in 64 chunks, each of which is hopefully not too huge (eg 1.5GB each). Also stopped outputting data I didn't need for colouring, so now just 4 bytes per pixel instead of 20.

Decided to go monochrome, so the bitmaps are 1byte/pixel instead of 3. The colouring no longer needs dwell, so I no longer need to equalize it, which is a big time/memory saving. Even so, the largest mipmap level in my current video project is 22GB, and the total is 29GB, leaving not enough RAM for ffmpeg to encode the video of the unwarped frames.

Solution to this is mmap() memory mapping - treating the file data as virtual memory without explicitly allocating memory and reading the contents. Read only mapping is perfect for this use case, the only (very minor) issue is the offset for the PPM header.

2018-09-19T14:10:10Z (original) (in reply to)

@joshsharp

Author: mythsmith

2018-09-19T16:32:35Z (original) ()

downgrading mesa on debian buster

saw a screenshot with a mouse pointer, and had a sudden fear reaction when it didn't respond (oh no, frozen machine!) - found my real pointer quick enough, same size and shape but a different colour.

my machine seems perfectly stable since the last kernel+mesa upgrade, so I think I'll close the issue I have open on the mesa bugtracker.

2018-09-19T17:21:28Z (original) (in reply to)

@er1n

afaik ALSA OSS-emulation linux kernel modules are no loaded by default any more, and might even have been removed. I think there is a CLI tool to wrap OSS apps and direct their output to ALSA or JACK out there somewhere...

I use pulseaudio module jack sink so that my web browser gets routed to JACK, which talks to my external USB soundcard using ALSA. complicated, but works for me mostly. JACK is reliable on my laptop, but I set the latency to 128ms which is unacceptable for processing external sounds. I guess I need to tune my kernel to get lower...

apart from when I forget to start JACK, pulseaudio doesn't know what to do so video playback doesn't work (it plays a couple of frames then stops because the soundtrack is broken)...

2018-09-20T20:20:32Z (original)

youtu.be/3WJmSdmu4vE 360 zoom, into a location from Dinkydau

2018-09-27T13:10:05Z (original)

Working on series approximation for - initial implementation in was terribly slow (my fault, not Haskell's - a naive translation to was even slower). Eventually sped up the C++ version.

Ported the core of that to Kalles Fraktaler 2 (because verifying the code's correctness without interactive browsing is near impossible. Works well, but I didn't port the logic for continuing series approximation after the first period's worth of reference iterations as it depends on a different order of loops (KF does for each pixel for each iteration do stuff, while I did for each iteration for each pixel do stuff).

So, a new KF release coming soon, but first I want to add a feature to increase the probe point density, to try to avoid the series overskipping issues that occur in some example locations. KF defaults to 8 on the corners and midpoints of the edges, which is barely enough for more well-behaved functions like set...

2018-09-27T14:41:43Z (original)

new blog post!

mathr.co.uk/blog/2018-09-27_se

2018-09-27T20:02:55Z (original)

mathr.co.uk/kf/kf.html#kf-2.14 new release of Kalles Fraktaler 2, now with series approximation for burning ship power 2, menu layout revamp, two new formulas, and other stuff too

2018-10-01T22:12:00Z (original)

for submissions of works dealing with space and the spatiality of calculation processes
zkm.de/en/call-for-works-algor
deadline Sunday, October 14, 2018

2018-10-01T22:20:48Z (original) ()

I think I want to submit a sonification of the anti-Buddhabrot, but the deadline is soon and I'm quite busy and my higher-order-ambisonics experience is zero...

2018-10-02T16:57:51Z (original)

I tried a Buddhabrot style rendering of the Burning Ship formula. Not as interesting as the Mandelbrot version. Average iteration count per plotted escaping orbit is around 1.5k in this image, with log() scale colouring of many layers.

2018-10-02T17:16:36Z (original) ()

I think it doesn't even converge, so the image is misleading at best. Doubling the iteration limit gives an increasing contribution of newly plotted points - for the Mandelbrot set Buddhabrot the contributions seem to decrease to 0 fairly quickly...

2018-10-02T17:24:32Z (original)

this is the total contribution of orbits of length between 2^n and 2^{n+1}. Coloured with log scaling, the true contrast between start and end is much more dramatic. Looks not converging...

2018-10-02T18:24:27Z (original) ()

here's a comparable image withe buddhabrot of the Mandelbrot set - it seems like it fades out, but long orbits are rare so its not so easy to be sure. I have an open M.SE question about this for some time...

2018-10-06T23:06:07Z (original)

option -dGrayImageDownsampleType=/Bicubic stopped my minification of a from looking like a complete disaster. There are similar options for Color and Mono images. I guess the default downscale is nearest-neighbour, which gives much aliasing (and disappears thin lines).

Found these options here: askubuntu.com/a/3387

2018-10-07T12:31:32Z (original)

working on a thing. takes ~1hour to render. needs ~9.5GB RAM, so my parallelization possibilities are small (the algorithm is essentially serial). I want to render lots of times with different seeds and pick the most aesthetic outcome. this may take some time, but at least it's non-interactive. the appearance is strongly dependent on the output dimensions as well as the seed, unfortunately, otherwise I could just render small previews to choose from and then do one final big render...

2018-10-07T13:05:42Z (original) ()

saved some images of work in progress (earlier versions took much less time to render, a few minutes)

2018-10-09T21:39:23Z (original) ()

I made my thing use 4.5G instead of 9.5G RAM, by compressing the histogram from 32bits per pixel in each layer to 2N+1 bits in layer N (where N is numbered from 0 in the largest dimension layer, to ceil(log2(max(width,height))) in the 1x1 layer). This also should allow images with >=2^32 pixels, but I haven't tested that yet.

2018-10-09T21:43:11Z (original) ()

I then made my thing use 450M instead of 4.5G, by reducing the image buffer from 56bits per pixel to 2bits per pixel plus 24bits per pixel for a single scanline. This was possible because I was no longer using the 32bpp image buffer for semantic edge detection anyway, and I am now using only 3 colours so I don't need to keep track of a full RGB buffer either.

The 2bits is perfect for my needs, 0 for empty space, 1,2,3 for filled with my 3 colours.

2018-10-09T22:00:14Z (original) ()

This memory reduction means that I can run 16 copies at once, instead of just 3 with everything else closed. This means I should get candidate images at a 5x faster rate, which means I can increase the fractal packing power law 'c' factor a bit, which gives more aesthetically pleasing images but takes longer.

c=1.01 5mins, looks bad
c=1.02 9mins, looks better
c=1.03 22mins, looks acceptable
c=1.031 28mins, looks a little nicer
c=1.04 over 4 hours (still not finished, with the 4.5G-using version of the code)

2018-10-10T08:02:19Z (original) ()

I found a page with encoding formulas for 3rd order

blueripplesound.com/b-format

now compiling AmbiX so I can render the 16 channels down to stereo for

github.com/kronihias/ambix

2018-10-10T10:00:31Z (original) ()

AmbiX binaural standalone needs an extra -lfftw3f_threads or so to link without error, got it working - defaults to ALSA and ALSA defaults to mic input / speaker output - cue intense feedback squealing.

ecasound can't read the 16channel WAV output from ffmpeg, but sox ch16.wav ch16.wavpcm and rename the wavpcm to wav lets ecasound play it ok (tip found in SSR docs), routing via JACK to AmbiX.

Documentation on the AmbiX binaural presets seems a bit lacking, I picked an IEM Cube one with 24 virtual speakers, sounds ok to me on my rubbish earbuds...

2018-10-10T10:07:19Z (original) ()

I reduced memory further, now just 150M. instead of cropping the middle 1/2 x 1/2 from a larger image to avoid edge effects, I deliberately wrapped the shapes around the edges of the image area to mimic wrapping of printed paper around the 3D object. I probably won't know until its physically in my hands if I got the full-bleed trim and spine thickness calculations correct...

2018-10-10T12:31:04Z (original)

mathr.co.uk/tmp/something-old-

I remember making it, but I can't remember when. The file is dated 2016, it is probably a few years older. Experiments with multiband distortion and compression, as far as I recall.

It loops.

2018-10-10T14:07:58Z (original)

digital recording from last week's live performance that I didn't get around to announcing beforehand:

mathr.co.uk/clive/session-2018

2018-10-10T17:06:08Z (original) ()

my a/v rendering Makefile is not 100% fully automatic, because I haven't yet figured out how to pipe audio through AmbiX binaural decoded without getting unpredictable added latencies that I need to edit out afterwards :( maybe some voodoo with ecasound and JACK Transport will work?

the 16 audio channel ACN/SN3D 3rd order ambisonics video file *is* rendered automatically, it's just the binaural preview that isn't, so it'll do for now...

512x256 is ok for now too, if necessary I can go larger

2018-10-11T21:48:19Z (original)

Environment variable to tell to lie about its capabilities, and hopefully allow applications that don't know about shenanigans to work as intended anyway:

MESA_GL_VERSION_OVERRIDE="4.5COMPAT"

Now FragM 2.5 doesn't crash on startup, and even seems to work ok in the few examples I've tried.

2018-10-12T09:28:44Z (original)

Working on a very simple ray-tracer in FragM 2.5. Want to try for something physically accurate.

So far the only reflectance model is diffuse, with reflected rays being chosen uniformly at random in the hemisphere about the surface normal. The ambient occlusion in the animation is emergent from this simple rule, no adhoc hacks.

I got some weird banding in earlier versions, fixed that by always marching the ray to its maximum step count, instead of bailing early if "near" a surface.

2018-10-16T18:23:57Z (original)

experimenting with spectral raytracing

a green menger sponge and a yellow sphere reflected in a blue mirror

2018-10-16T18:25:12Z (original)

experimenting with simulating b/w film spectral sensitivity

a menger sponge and a sphere reflected in a mirror, in black and white

2018-10-16T18:40:09Z (original)

didn't yet figure out polarized light rendering, cgg.mff.cuni.cz/~jaroslav/pape seems quite dense (maybe too hard for me)

2018-10-16T21:10:15Z (original)

something is wrong with my menger sponge

brightly coloured perpendicular planes

2018-10-16T21:37:06Z (original)

deliberately glitching it gives interesting results (reduce number of ray steps very low, increase ray depth very high, increase the acne avoidance value to absurd levels)

colourful fractal glitches in equirectangular projection

2018-10-18T15:18:16Z (original) ()

I realize now it was extra-glitchy because I forgot a crucial step: transforming back into world-space after calculating the surface position and normal relative to the object.

Should be something like T^{-1} S T but I was doing just S T.

2018-10-19T03:16:21Z (original)

Someone pointed me towards Halton sequences for low-discrepancy pseudo number generation. The difference compared to Burtle integer independent uniform is quite large, here is an image excerpt rendered with 64 samples, the top half uses independent uniform randoms and the bottom half low-discrepancy randoms.

en.wikipedia.org/wiki/Halton_s
burtleburtle.net/bob/hash/inte

uniform on top, halton on bottom

2018-10-19T13:15:57Z (original)

refactored my ray tracer, now it crashes radeonsi_dri.so :(

bugs.freedesktop.org/show_bug.

2018-10-19T19:39:58Z (original)

pbr-book.org/

Physically Based Rendering:
From Theory To Implementation

Matt Pharr, Wenzel Jakob, and Greg Humphreys

As of October 15, 2018, the full contents of the third edition of the book are freely available online.

2018-10-19T19:51:27Z (original)

I refactored my raytracer, no more non-deliberate glitches.

Some bugs with diffuse and transparent (refractive) objects remain, but the main issue is the excess noise on diffuse objects. Monte-Carlo O(sqrt(N)) quality is a bit ann0yment.

Thin film irridescence renders very quickly with very smooth gradients, because there is no random scattering. Halton sequence sampling gets good spectral and subpixel coverage without issue. The nested reflections look confusing I think the shape is in fact not buggy.

Menger Sponge with rainbow gradients across its surface.

2018-10-19T21:24:23Z (original) ()

I named it Raymond.

2018-10-19T21:25:30Z (original)

ported the glass/quartz/water models from my prismatic thingy to this new thing. so much noise though :(

spheres on a checkerboard

2018-10-20T15:20:21Z (original)

made with an early version of Raymond, my physics-inspired ray-tracer for Fragmentarium.

Inside the union of two rotating low iteration depth Menger sponges with reflective thin film surface (causing irridescence), with the ray-tracing deliberately glitched (low ray marching step count, high ray bounce depth, absurdly high acne avoidance factor, ray teleportation on reflections).

mathr.co.uk/misc/2018-10-20_ra 100MB 4mins

2018-10-22T18:39:05Z (original)

another week, another time to reboot into several freshly compiled kernels to see if my bug has been fixed yet...

2018-10-22T18:51:02Z (original) ()

nope, not fixed :(

2018-10-22T23:18:26Z (original) ()

code.mathr.co.uk/raymond
source code for my physics-inspired ray tracer for Fragmentarium (GPL3+)

2018-10-23T06:33:15Z (original) ()

new release of Kalles Fraktaler 2 development 2.14 branch:
kf-2.14.2 mathr.co.uk/kf/kf.html#kf-2.14
(bugfixes and minor enhancements)

plus a maintenance bugfix release of the stable 2.13 branch:
kf-2.13.10 mathr.co.uk/kf/kf.html#kf-2.13
(these bugfixes are also merged into 2.14)

2018-10-23T10:46:32Z (original)

today I'm refactoring my in system into a client (that recompiles source code on change) and server (that reloads shared libraries on change), together with launch scripts for various configurations.

going ok - seems to work fine all running on the same amd64 host, but cross-compiling to rpi3b needs work (it compiles, but my raspbian jessie won't load it, too-old glibc).

so I guess my next step is to backup my pi's data + configs and install (experimental, unsupported) debian buster arm64 on the sd card, then restore the relevant parts of the data and configs

code.mathr.co.uk/clive-core source code (work in progress)
mathr.co.uk/clive/ home page

2018-10-23T14:49:11Z (original)

log seems to print a final newline when using a tty, but not if it is piped elsewhere. this ill behaviour was causing my html exporter to miss the final commit.

fixed it by mixserting ( ... && echo ) > outfile around the command. hax

2018-10-23T14:57:14Z (original)

merged my radically changed clive-core engine code back into my clive live performance repository and it all seems to work still. will rehearse a bit later on to check that it's not just an illusion.

2018-10-23T15:50:01Z (original)

#ad

2018-10-23T17:42:36Z (original)

I published my work in progress patch set for for . It's a library for multidimensional array processing and more, but was abandoned some years ago.

I mainly hacked on it to get my old Mandelbrot set periodic attractor music patch to work again, so that I can figure out how it works and reimplement it with the enhanced knowledge that the years bring.

patchset against gridflow git svn clone
mathr.co.uk/gridflow/patches/

EP released on GOSUB10 in 2010
archive.bleu255.com/gosub10/GO

updated version of the EP's source code
code.mathr.co.uk/zzc

gridflow home page
gridflow.ca/

2018-10-23T20:29:01Z (original) ()

got rudimentary sound to work over hdmi on the raspberry pi 3 b running debian buster arm64 but that is with aplay's pulseaudio plugin only and jackd isn't having any of it - complains about no supported hardware formats in the alsa pcm

2018-10-23T21:24:24Z (original) ()

$ /usr/bin/jackd -ddummy &

$ tail /etc/pulse/default.pa
load-module module-jack-source
load-module module-jack-sink
set-default-sink jack_out
set-default-source jack_in
load-module module-loopback source=jack_in sink=alsa_output.platform-3f902000.hdmi.iec958-stereo

$ mplayer -ao jack somefile.ogg -loop 0 &

$ jack_connect "MPlayer [15406]:out_0" "PulseAudio JACK Source:front-left"
$ jack_connect "MPlayer [15406]:out_1" "PulseAudio JACK Source:front-right"

unholy strength of on top of on top of , not the usual stacking order but finally I got sound from JACK to my rpi3b HDMI output on debian buster arm64.

now I need to disable the screen blanking of the lightdm greeter, because when it kicks in the sounds stop (I'm running all the above via a remote ssh session).

$ export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus

might have had something to do with getting it working, but I'm not sure....

2018-10-23T21:33:42Z (original) ()

$ tail /etc/lightdm/lightdm-gtk-greeter.conf
[greeter]
screensaver-timeout=-1

this might work, though the documentation says it is for when the greeter is invoked as a lock screen for an existing session...

2018-10-23T21:42:21Z (original) ()

doesn't work

2018-10-23T23:12:16Z (original) ()

mathr.co.uk/blog/2018-10-23_ja blog post with added verbosity

2018-10-29T19:52:45Z (original)

new bugfix release of kalle's fraktaler 2.12 (oldstable) branch:

mathr.co.uk/kf/kf.html#kf-2.12

- bugfix: corrupt image at transition between number types (eg near e600) (reported by CFJH)
- bugfix: changing "threads per CPU" during rendering crashes (reported by CFJH) (the menu is now disabled during rendering)
- bugfix: reading PNG metadata works even if it is moved after the image data chunks and has a miscapitalized "Comment" keyword
- bugfix: ghc-8.6 compatibility (MonadFail)
- bugfix: translation with reuse reference (reported by Dinkydau)
- bugfix: don't add secondary references when auto solve glitches is disabled
- upgrade to Boost 1.68.0
- upgrade to MPFR 4.0.1-p13
- upgrade to libpng 1.6.35

2018-10-29T19:53:55Z (original)

new bugfix release of kalle's fraktaler 2.13 (stable) branch

mathr.co.uk/kf/kf.html#kf-2.13

- bugfix: fix translation with reuse reference enabled (reported by Dinkydau)
- bugfix: don't add additional references if autosolve is disabled
- bugfix: ghc-8.6 compatibility for preprocessor (MonadFail)
- upgrade to libpng 1.6.35

2018-10-29T20:38:10Z (original)

new feature release of kalle's fraktaler 2.14 (development) branch

mathr.co.uk/kf/kf.html#kf-2.14

- new feature: nanomb2 algorithm for power 2 Mandelbrot (experimental) (originally by knighty)
- new feature: display Newton period (and set limit for nanomb2 algorithm) in Location dialog
- new feature: Ctrl-Shift-W shortcut to set image size (suggested by gerrit)
- bugfix: distinguish dialog titles for set window size and set image size
- bugfix: fix corrupt images when zooming out from the default view
- new feature: dialogs to en/disable derivatives when opening file with/out
analytic DE; automatically enabling derivatives if needed in CLI mode (reported by gerrit)
- default zoom size changed from 4 to 2 (press Ctrl-4 to reset to 4, or load a settings file with your preference) (suggested by gerrit, to avoid the dreaded "zoom size is not 2" warning when saving zoom out sequence).
- merged changes from 2.13.11

(experimental means sometimes images are bad, like the attached)

Mandelbrot set minibrot with red and green features, and black artifacts (incorrect rendering)

2018-10-29T21:05:33Z (original) ()

of course, the nanomb2 algorithm (aka "super series approximation") does work sometimes, and when it does it is often much faster than the older series approximation algorithm, which in turn is much faster than perturbation iterations alone, which in turn is much faster than using plain iteration with high precision numbers for each pixel

the algorithm works by approximating the orbit near a periodic cycle (usually a minibrot island) by a polynomial in *two* variables representing small changes in C and Z. you end up with a polynomial that does P iterations at once (a "super iteration"), where P is the period of the cycle.

this polynomial is only valid while dC and dZ are small, but when they get big you can switch to a different polynomial corresponding to a nearby less zoomed in minibrot of lower period. one "super-iteration" takes longer than one perturbation iteration or one plain iteration, but you need far fewer, so it works out faster.

combined with interior checking, you can set the iteration count exceedingly high (100100100 is routine for me now) with little-to-no slowdown, and get super-crisp minibrot boundaries

an embedded Julia set in the Mandelbrot set, with dense rings of features surrounding a minibrot in the Mandelbrot set, with dense rings of features surrounding

2018-10-29T21:13:48Z (original)

got a new warm coat for winter.

however, the zip requires the left hand side to be inserted into the right hand side to be able to close it. this is the opposite handedness of all my other zipped fleeces/jackets/coats.

I hope I get used to it soon and don't remain mildly frustrated...

2018-10-30T00:28:32Z (original)

playing around with rendering the bifurcation diagram of the logistic map x := a x (1 - x). only 128 lines of commented code.

using the two Feigenbaum constants for zoom in 'a' and 'x' and starting the zoom sufficiently deep, 'a' focused on the end of the first period-doubling cascade (and the critical point x=1/2), makes it loop almost perfectly.

there are two "zooms" in the animation, as "zooming once" flips it vertically.

(it would be a perfect loop approaching the limit of infinite zoom depth, but the number of points calculated that contribute to the view is inversely proportional to the height of visible 'x' , so you need to calculate ever more points when zooming deeper, which slows things down)

2018-10-30T00:30:25Z (original) ()

complaining

oh and of course mastodon transcodes a perfectly looping GIF into some video file that doesn't loop smoothly, and adds insult to injury by overlaying with "GIF" text in the corner. great job!

2018-10-30T10:15:27Z (original)

Feigenbaum constants are traditionally calculated for period doubling cascades, but they can also be calculated for period tripling cascades (p=3^k):

delta = limit of ratio of successive sizes of components ~= 55.24719485586328460
alpha = limit of ratio of succesive f_c^(3^{k-1})(0) ~= 9.277343959121408190
mu_infinity = limit of successive component centers ~= 3.854077963590777589

(almost surely not accurate to all digits, my calculation methods are susceptible to rounding errors and I used only machine native double precision, with 53 mantissa bits)

I used my mandelbrot-numerics library to compute these in the z:=z^2+c representation, the ratios transfer without alteration to the x:=rx(1-x) representation. transferring between c and r can be done by:
r = 1 + sqrt(1 - 4 * c)
c = (1 - (r - 1) ^ 2) / 4

the period tripling corresponds to this location in the Mandelbrot set: mathr.co.uk/mandelbrot/web/#!q

reference: keithbriggs.info/documents/Kei

2018-10-30T10:44:30Z (original) ()

fractalforums.org/fractal-math is the thread where knighty introduced the idea, first implementation source code starts to be posted around page 8 or so

2018-10-30T11:48:10Z (original)

cannot compile ghc-8.4.4 with ghc-8.6.1:

libraries/Cabal/Cabal/Distribution/PackageDescription/Configuration.hs:222:39: error: Data.Map.insertWith' is gone. Use Data.Map.Strict.insertWith.

retrying with ghc-8.2.2 from

2018-10-30T16:55:31Z (original)

finally got around to releasing

hackage.haskell.org/package/ro

rounded: Correctly-rounded arbitrary-precision floating-point arithmetic (a binding to )

originally by ekmett but abandoned due to technical issues, after integer-gmp library changed internally I could rewrite some of it as a more straightforward library binding and got it working (that was mostly before 2017)

today I tidied up a few loose ends, added long double support, and pushed the publish button.

2018-11-01T01:04:02Z (original)

Looping animation made by sequencing key frames in the bifurcation diagram of the logistic map x := a x (1 - x), which is conjugate to the Mandelbrot set's quadratic polynomial x := x^2 + c.

The left hand edge of each keyframe is the parabolic root of a hyperbolic component (using jargon related to the Mandelbrot set). This can be found by Newton's method in 2 variables, starting from a nucleus of the relevant period (the animation starts 1, 2, 4, 8). The nucleus can be found by Newton's method in 1 variable, starting from a guess coordinate found by tracing external rays.

The right hand edge of each keyframe is a tuned / renormalized copy of the tip of the Mandelbrot antenna (c = -2 or a = 4). I found these coordinates by tracing external rays in the Mandelbrot set and then mapping c to a.

The top and bottom edges of the keyframes were found by iterating at the right hand edge and finding the two x that are closest (but not equal to) the starting point (the critical point x = 0.5). I think (not sure) these are at iteration numbers P and 2P, where P is the period of the "owning" hyperbolic component.

Interpolation between keyframes was done using Poincaré half-plane geodesics:
mathr.co.uk/blog/2011-12-26_po

2018-11-01T06:12:51Z (original) (in reply to)

@hamptonio you could probably make it respond in realtime if you do the per-pixel calculations in a WebGL fragment shader running on a GPU instead of Javascript on a single core of a CPU

2018-11-01T07:51:59Z (original) (in reply to)

@hamptonio I made it roughly 2x faster (in Firefox 62 on Debian Buster) by avoiding memory allocation by [...] inside the loop: mathr.co.uk/tmp/Newton%27s%20m

here's one of my experiments from 2012 with GLSL fragment shader (using desktop OpenGL, not WebGL)
archive.org/details/ClaudiusMa I think it ran in realtime, but it's so long ago that I forgot...

2018-11-01T07:58:35Z (original) ()

@hamptonio Oh! I found my code, and turns out I already ported it to WebGL (runs 60fps full screen realtime on my system but I have a beefy GPU..).

code.mathr.co.uk/fractaloids/b

drag with left-mouse-button pressed to add a new root (the path is recorded and animated, but there is no visual feedback in the process, and you need 2 or 3 paths to get something interesting...).

code.mathr.co.uk/fractaloids for source/history browser

2018-11-01T09:59:29Z (original)

refactored my bifurcation diagram (aka orbit diagram) generator to invoke ffmpeg itself, thus adding the ability to encode multiple segments for later seamless repetition to desired length. it's not true "infinite zoom", but a visually indistinguishable fake, and that's good enough for me.

also made it use the z:=z^2+c form, as the distortion of the x:=ax(1-x) form at low zoom levels was annoying me a lot.

these 3 videos rendered in 9mins at 640x360p25 with a density (average number of samples plotted per output pixel) of 1000. I have zoom outs too, and another set of 6 videos zooming to the period 3x island in antenna of period 3x island in antenna of ... limit point are still being rendered.

2018-11-01T16:33:48Z (original)

I implemented the attached with
mndynamics.com/papers/bedlewo1 3a multiplier map for hyperbolic components (page 15)

Later I will try to figure out 3b so I can also highlight the filaments that are owned by the mu-units.

Later still I'll try to use wakes to select one specific mu-unit, probably will try to highlight limbs first.

see also: mrob.com/pub/muency/muunit.htm (but I replicated the method behind this one (afaict, something to do with mapping the multiplier to the period 1 cardioid even outside the interior of the mu-unit's owning hyperbolic component) and the distortion of features is too great - there are halos around discs where the supposed mu-unit does not align with the true set shape).

section of Mandelbrot set with period 6 mu-units highlighted (minus filaments)

2018-11-01T21:40:32Z (original) ()

mndynamics.com/indexp.html Mandel by Wolf Jung can do proper renormalization

will dig into its source code (GPL) soon

period 3 island renormalization period 3 bulb renormalization

2018-11-01T21:44:19Z (original) ()

oh, if you download the zip, make a new directory and unzip it there, as otherwise it will spam your filesystem with its contents (it isn't packaged nicely in its own tidy directory)

2018-11-05T19:14:28Z (original) ()

mathr.co.uk/mandelbrot/mu-unit got mu-unit renormalization working, the idea (reverse engineered from the code) I used from Mandel was to use 2 divided by the derivative w.r.t. z of the superstable periodic cycle (excluding the critical point z_crit = 0) as an escape radius for |f^p(z)-z_crit|.

The implementation of Mandel is a bit messy with loads of magic values (eg code does something completely different if one parameter is 65001u vs 65003u). Not many comments either.

2018-11-05T19:46:19Z (original) ()

I'm not entirely happy with my scaling of the distance estimates relative to the mu-unit and relative to the enclosing entire Mandelbrot set. Need to experiment a bit more.

2018-11-05T23:06:06Z (original) ()

another version
youtu.be/TtqPkpRAyH8 thanks google for the autogenerated portuguese subtitles

2018-11-06T04:23:23Z (original) (in reply to)

@paul some modifications weren't sufficient after @rra upgraded us to 2.6, not your fault

2018-11-06T16:10:46Z (original) ()

still not fixed :(