Show HN: An homage to Tom Dowdy's 1991 screensaver, "Kaos" (thestrikeagency.com)
Kaos would take anywhere from 10 to 30 seconds to slowly iterate on a single image, starting with a few colored dots and growing into webs within webs of algorithmic beauty.
I'm not sure how Tom Dowdy actually wrote the program. What I've done here is to try to reverse engineer how it might have worked, but to animate it at the same time.
Freezing a frame (by clicking) seems to often yield something close to the original. My method is to cycle between 1 and 30 lines, with spaced out pixels, and then iterate the whole buffer to draw fainter and fainter points within a radius from any point that's already lit, while also amplifying the ones that were lit before and shifting their colors slightly at the same time.
Anyway, I did this tonight but I've been thinking about it for weeks, so, I hope someone enjoys it. Cheers!
78 comments
[ 2.5 ms ] story [ 120 ms ] threadI don't think it's just nostalgia... but whatever it is I love a lot of the retro / past days of computing UI, UX and graphics. IT feels better than the current state of flat and flashy... everything.
I don't know that the design and look / feel was entirely intentional, or how much was just the limiting factor of experience and computing / libraries available but things feel so much more straightforward and usable at times.
You don't even have to go that far back to get that feel / simplicity: https://cs16.samke.me/
This screensaver looks great and feels like almost everything I would want from a cool screensaver or even just a moment to zen out.
Nice UI, can you add more elements?
Also the documentation for the original app was helpful. http://poubelle.com/DarkSideDocs.html
Download it here: https://www.themacattic.com/title/5993ca999f7040cc-darkside-...
Then install it on a System 7.0 box at: https://infinitemac.org/
It's a bit twitchy, but it works.
https://i.imgur.com/bsdHalB.png
It does have a manifest.json so you can install it as an app and run it full screen though ;)
I miss having a wide selection of screensavers on my Mac. Nobody's writing new ones that properly plug into the system screensaver framework, everything on the App Store is just a little program that wants to run in the background, almost all my old .savers quit working and the ones that do still work have terrible framerates, and the ability to cram a Quicktime composition into the savers directory is long gone. Having some bit of procedural art on my screen was just nice.
I hadn't heard of hopalong fractals, but this code implements something very similar. Conceptually, if you scan the whole image space at each iteration and, for each lit pixel you light up another random pixel at half the brightness within a certain radius, things will begin to trend in one direction. Because if the first one you light happens to be off to the left, then there's double the probability that the next will be at least that far to the left, and then the leftward spread becomes exponentially more likely in the following iterations. I haven't actually encountered spiral arms in this, but maybe following hopalongs will be my next saver ;) There's a lot you can do with a little code here. You can warp the space you want to light up, or over/under light certain things, re-amplify, or run a fader on the entire screen in a few bytes. The possibilities are endless. But it's kind of like...how do I make a thing that looks like that? The fun part, for me, of making a screen saver or any procedural art is cooking with very few ingredients and lots of limitations.
i've used https://www.jwz.org/xscreensaver/ for over a decade on macos (currently on 15.3).
https://www.google.com/url?sa=t&source=web&rct=j&url=https:/...
Edit: I tried it on Firefox and Chrome, and it does indeed redirect to that ... image. But it doesn't do so with Safari (latest version, latest macOS). What is Safari doing differently? Not passing along the referrer?
It's not visible to end users, but nowadays, Apple-authored screensavers use a private framework, and 3rd party screensavers use the traditional framework. Sometimes the traditional framework hiccups. Because these aren't essential programs, presumably they are lower priority, so it may be a while before things settle:
https://github.com/AerialScreensaver/ScreenSaverMinimal?tab=...
https://github.com/AerialScreensaver/ScreenSaverMinimal/wiki...
Nevertheless, here are a few more contemporary offerings:
https://github.com/agarrharr/awesome-macos-screensavers
And here's mine from last year! Got another one in the works.
https://github.com/Rezmason/Iconic
Oh— and when researching for Iconic, I dug up BackSpace for NeXTSTEP and learned how OS X's ScreenSaver.framework came about. Devs distributing modules they produced for other devs' projects was much more prevalent in the early nineties! SuperSolitaire II, for instance, accepted a ".solitaire" program module and shipped a separate set of varieties:
https://ftp.nice.ch/pub/next/games/card/_SuperSolitaireModul...
From : https://www.themacattic.com/apps/8730/downloads2/About_DarkS...
Kaos Kaos draws “cloudlike” pictures in color using an interative fractal algorithm. This fader comes to you thanks to Reinoud Lamberts, and I recommend you check out his excellent “Kaos” program which is available on Usenet and other places. Reinoud was nice enough to send me the algorithm he used, and I took some time speeding it up and making it use a bit less memory – actually the final code isn't related very much to his, but the algorithm is. However, this fader still will only work on machines with 32 bit Color QuickDraw – sorry all of you Plus and Classic owners! Kaos renders its data into an offscreen area, finally moving it onto the screen once the image has darkened enough. Kaos continues darkening the image and displaying it to you until either a timer expires (3 minutes) or an element of the image becomes fully intense. Unless you select otherwise in the settings dialog, you will see a small dot moving from the bottom of the screen to the top – this is a “progress” indicator to let you know how far away the first image will be. It takes about 15 seconds to generate the first picture on a Mac II class machine. This fader needs a good deal of RAM and a large amount of CPU – so this fader isn't a good one to leave running if you are doing background printing, downloads, or compiles at the same time. The current SIZE resource within in the fader provides enough RAM for a standard Apple RGB monitor to be rendered at half resolution. You may lower this value (which will result in a chunkier image) or increase it (which will result in a slightly smoother image) via ResEdit. Those of you with 32 bit displays will find you can actually decrease it a great deal (probably to around 40 or 50 K) because 32 bit displays do not require the large offscreen rendering area that 8 bit displays do.
> Pay the license fee, which is US $29 per Linux
> workstation, US $499 per user on any MicroSoft operating
> system, and US $49 per user on any other system. Send
> money orders for the required amount to Reinoud Lamberts,
> [address redacted]
The license was in the PostMan source download
I also have such a website online since 1993. I sometimes forget to check it for several years.
I'm thinking about putting KAOS and other screensavers on my webserver and an OS 9.2 with all apps and games.
Its already crowded with Squeak[1], 1978 Smalltalk[2], Etoys[3] and Shadama[4].
[1] https://codefrau.github.io/jasmine/
[2] https://smalltalkzoo.thechm.org/HOPL-St78.html
[3] https://squeak.js.org/etoys/
[4] https://tinlizzie.org/~ohshima/shadama2/
Cool links!
https://www.engineersneedart.com/blog/dowdy/dowdy.html
http://www.poubelle.com/butterpig/
https://codepen.io/garthparkhill/pen/PyMPVR
https://gist.github.com/omnizach/886d9843b0fb176da2a7
The display buffer is actually a flat 1D array which also lives through the whole program (mostly) where each 4 sequential values are the r,g,b,a for a single pixel. You don't ever need to copy that array unless you're doing something fancy with window resizing. A simple function translates any x,y coordinate pair (such as a point on a line) into the correct location in the flat array space, and you just modify that array as you go along. When you're done doing things to those values, you just overwrite the entire canvas with that 1D array in a single call.
In fact, the screen buffer array in this case was probably unnecessary, since <canvas> can easily let you get and set the values of individual pixels, draw lines, etc. But I wanted to do it in a flat array to reduce the number of draw calls to one per frame, and also to not overly bind my code to any particular display method.
Was hoping it would be included in the distribution, but sadly never got a response D:
It just looks like hardly visible lines of single pixels randomly bouncing around.
https://thestrikeagency.com/kaos/assets/index-7Wh69ljd.js
Edit: Thanks @noduerme! I had a feeling it looked like compiled TS output. p.s. it looks like you aren't currently hellbanned :)
https://thestrikeagency.com/kaos/src/
There's a bunch of extra experiments and junk in there that didn't make the rollup. It's pretty concise and basic, not a whole lot more verbose than what you see in the mini, ultimately (if you just format it out). Everything mostly does what it says on the box, but let me know if I screwed something up ;)
Super cool project by the way.
I know the kind of work and love that goes into this kind of project. From one software nostalgiac to another, I salute you noduerme
Cheers!
https://stashbox.live/
My favorite screensaver was "Diatoms" from 1994 (?) on a SGI Irix machine. Still fire it up sometimes, just because of the screensaver.
https://www.youtube.com/watch?v=xWmj_ixreUg