You may have noticed a few changes around these parts recently. Welcome to the 2024 site re-design. Gone is the tailwindcss grid and columns, in favour of a pure pixel grid based layout. With lots of ideas planned for future updates, we're rolling back the clock and going to re-design like it's 2004 again.
It's been a long time coming, but this site is now free of cookies! This means no need to implement a cookie banner, as there is no user data being stored in cookies. Not using cookies also means users are not tracked for analytics purposes, although simple page hit statistics are captured by the server monitoring systems, these do not include any user data.
For my main Photo library, I use Adobe Lightroom Classic. It does everything you would want, and does it really well. But I only use it for my photographic photos. That is, photos that have a bit of thought put into them, the kind of photos that are taken with a tripod, or a circular polariser. I also use Apple Photos as my everything-ever-taken library, so all my phone photos, all my photographic photos, all my holiday photos, random snaps, and everything in-between.
Apple Photos has become a really powerful photo library management tool and image editor. It seamlessly syncs across all my devices, as well as iCloud Photos, which makes it a really useful part of my backup process.
As a managed library, there is a database that holds all the information about the photos and videos in the library. This database is an SQLite3 database, a very popular open source database that has plenty of tools to query the data held within. The only tricky part is figuring out how the data is structured.
In this post, I'm showing a few picked highlights from my Apple Photos library. This is not an exhaustive report, but given the dataset, it does show a good overview of the photographic equipment I've used over the years, and how my photographic style has changed to reflect this. There's quite a lot of data to make sense of, and this is a mostly un-edited dump of stats.
Wave Function Collapse, it sounds like a complicated quantum mechanics process, partly because it is, but it's also an algorithm to generate 2D tiled layouts.
The Wave Function Collapse algorithm works by reducing the possibilities for each tile on the grid, and then collapses the tile with the lowest entropy (i.e., the tile that has the least number of possibilities). Once collapsed, the new constrain is propagated to all neighbour tiles, and then the next tile is selected for collapsing.
With terrain generation, we have 5 types of tiles: Sea, Sand, Land, Forrest, and Mountains. Each tile then defines its possible neighbours:
Sea tiles can be boarded by Sea and Sand tiles
Sand tiles can be boarded by Sea, Sand, and Land tiles
Land tiles can be boarded by Sand, Land, Forrest, and Mountain tiles
Forrest tiles can be boarded by Forrest and Land tiles
Mountain tiles can be boarded by Land and Mountain tiles
With these simple constraints, the algorithm can loop over each tile, collapse, and then propagate the new constraints to each neighbour.
Check out how the algorithm propagates and collapses tile on the canvas playground
I've added a new section to maniacalrobot.co.uk that has been in the planning for a long time. Canvas is a playground for experimenting with procedurally generated artwork. Canvas artwork will work in the browser, and will built with HTML canvas elements are drawn with the standard 2d context javascript library.
As much as possible, I'm avoiding using any 3rd party libraries. The purpose of Canvas is to experiment, and learn the technical skills, as well as the user experience when interacting with the canvas.
There are no rules as to what will be included, it's a free space to try new experimental ideas.