Due to my strict browser security -
Sometimes Facebook will force me to repeat a captcha. Sometimes Google will force me to go through five levels of captchas - no exaggeration!
But worst of all is Cloudflare, who block me outright. There are only two ways to avoid it:
Cloudflare now oversees ingress for a large chunk of the internet - maybe a fifth of all major websites - and they are probably most famous for their DDoS protection and thus their bot detection abilities.
This was worst around 2022, when I was blocked even by some relatively big tech companies such as OpenAI, but it continues today with many smaller websites (such as regional newspapers).
Cloudflare can see, block or tamper with the plaintext of any communications on sites it 'protects'. Most often this is used to escape or block forum posts containing snippets of code. I believe it is enabled by default, leading to much greater difficulty publishing code anywhere, even on programming-oriented forums such as Hacker News.
Besides all this, there's an argument that Cloudflare is the reason why DDoS attacks returned to the internet (hackers used to DDoS each other, but Cloudflare offered hackers DDoS protection, basically stopping their 'civil war' and renewing the war against non-hackers outside Cloudflare's protection).
Years ago, my main Reddit account was permanently banned by Reddit, because they thought I had been hacked - but I had simply been using a Python script that intercepted all my browser traffic. Totally understandable for them to do this, except they don't respond to appeals and creating a new account violates their ToS.
It used to be that Google would force me to complete captchas every few minutes if I went beyond the 2nd page of results. And Google captchas used to be awful - multiple pages of captchas of slow-fading image blocks.
This is despite my IP address
Everything, thus far, is pure CSS and HTML. I wanted to avoid using JavaScript as much as possible.
I recently learned that in 2022, browsers introduced a new 'colour space' - OKLCH (lightness, chroma, hue) - instead of the traditional RGB (red, green, blue). (
OKLCH makes it a lot easier to design colour themes, because OKLCH is optimised for human-perceived colour, while RGB is computer-percieved colour. For example, I can keep the colours looking the same for a human, but make them darker by just modifying one attribute ('lightness'), or make them 'dimmer' by modifying the 'chroma' attribute - the same operation in RGB would require balancing all three attributes.
For my web app, I just slapped a colour theme on it years ago and left it like that. So I decided to revisit it.
Here's a colour-changing interface I cooked up. It changes the CSS variables; I can modify either RGB or OKLCH, and transform in between them.
The light theme was similar, I won't bore you with the details.
I could iteratively improve my colour theme very quickly. So I thought I may as well make it friendly to colour-blind people too.
After a bit of digging around on Google, I found some Python scripts to convert screenshots to simulate certain types of colour-blindness. But I needn't have bothered - Firefox has an inbuilt tool to do that.
The most common type of colour-blindness is red-green blindness (Protanopia and Deuteranopia). Apparently around 8% of men have it, and maybe ~0.5% of women.
My preferred colour theme is very heavy on yellows and greens and reds - basically the worst-case scenario for them. My different types of clickable objects all looked the same colour under Protanopia and Deuteranopia.
Everything looked basically the same under Tritanopia (blue blindness). The solution, I figured, was to add some blue to distinguish these colours.
TODO: Write this section
I found
The sidebar (on desktop) becomes a header (on mobile). Change your browser's window size to see the problem it creates - a table of contents is more natural to display as a sidebar than as a header. To mitigate this, I grouped sub-headers into containers that automatically re-orient depending on whether the screen is in landscape or portrait mode.
Previously, I displayed a list of all blog pages on the sidebar/header of all blog pages. But the sidebar became valuable real estate when their contents grew, so I removed that and replaced it with a single link to
In the blog overview page, I wanted to display previews of all blog posts. The lazy solution to that was just to copy the raw HTML contents, use CSS to make it unclickable, and add a “click here” link to the full blog article. The problem with that is that it isn't immediately clear to the viewer that links in the preview are not clickable - so I muted the colour contrasts, which is sort of the universal way of signalling that a UI area is 'disabled'. In particular, I ensured that links in the previews have a muted blue colour - I could have achieved the same effect by simply reducing the preview element's opacity, but that can have unintended side-effects (including slower page rendering).
I found myself often clicking my circular avatar as a way to go back to the main website. This is surprising, because my avatar wasn't clickable. This behaviour was instinctively ingrained in me, presumably because it is so common on other websites that peoples' avatars are clickable. Presumably this instinct is even more ingrained in other people, so I moved my avatar into the link to make it clickable too.
This blog has a different style to the rest of my website. A light-themed blog on a broadly dark-themed website - it doesn't sound like a good idea.
The reason for this is that, to me, a dark-themed blog looks too 'l33t' - too edgy, too new-style.
Dark themes are almost the default for programming - GitHub, VSCode etc - seemingly as a way to distinguish themselves from the professional looks of other industries, just like they do in other ways: wearing hoodies to work, using black gaming laptops with RGB lighting, using monospace fonts.
Light themes are the default elsewhere - Word, Excel, Exchange, white printers, white desktops, shirts - because that is the world of paper. It makes sense to me that the simple, low-tech portion of my website that consists only of words - the blog - should fit this theme of being paper on a screen.
The sidebar table-of-contents should highlight the currently-in-focus section, and it should show only the highest-level headers plus ancestors of the currently-in-focus section (see
Look into
Drones have
for recreation, sport, or as a hobby
Severance - people split their memories between home and work
Wind River - same writer as Sicario. Some murder mystery in Alaska.
Arrival - trying to communicate with aliens before tensions leads to war
Ex Machina - AI thriller
Memento - by Christopher Nolan
I like listening to songs in languages that I only somewhat understand. This allows me to fill in the gaps optimistically, instead of being annoyed at the lyrics being dumb or non-optimal.
Some of my favourite German pop songs were ruined when I actually bothered to read the lyrics and discovered how dumb they were - for example, Adel Tawil's 'Und ich singe diese Lieder...' which is a recap of recent world events rather than anything as grand as it originally sounded to me.
There's a woman singer - Alexa Feser or something - who wears a spacesuit in her music videos, and sometimes sings about space. Which I obviously like. But only some of her songs are about space - maybe the other songs are somewhat allegorical, and I haven't examined the lyrics carefully enough to see the links.
Classical music is boring! But neo-classical music (e.g. film scores) is great.
It's amazing how musicians can make a good riff and overlay their shitty song atop it. For example,
Listen to the
And dear God,
I'm not really complaining if people want to enjoy this, and more than I'd complain about people eating McDonald's. But why is Youtube showing it to me? All my Youtube history is traditional songs from over 80 years ago. The Youtube algorithm sucks.
I got into this hobby due to 3 things:
Here's the short difference:
Gaussian splatting is a graphics method developed in the 1990s as an alternative to tesselated (triangular) rendering. Although tesselated rendering has been the norm for decades, splatting returned around 2022 or 2023 due to research papers, based on neural network techniques (possibly specifically NeRF - neural radiance fields), which suddenly turned splatting into the fastest way to render realistic scenes, because it embeds all lighting information into each gaussian using 'spherical harmonics' or something.
See
I used to be very skeptical of photogrammetry - it struggled with hair and glass, and always required enormous manual effort to clean up the files to be usable in a 3D render (i.e. to add light maps). The professional tools were probably much better at this - I imagine the film industry has ways to scan objects and automatically produce those light maps - but it couldn't be done with a 'prosumer' DSLR camera.
Gaussian splatting completely solves the hair, glass, lighting and size problems for static scenes.
Cardboard. That basic material that protects our Amazon deliveries and cereal boxes. Have you ever stopped to think about what happens to cardboard after it's served its purpose? Recycling, you'd think, right? Yes, of course. But. But but but.
Let's start with the basics. Recycling cardboard is like getting a Dundie Award for Participation. You're not exactly saving the world, but hey, at least you're trying. You break down the box, you toss it in the bin, and you feel a little spark of virtue. But then you remember that time your neighbor threw a greasy pizza box in the recycling bin, and now the whole batch is contaminated. This is why we can't have nice things.
Recycling, much like Jim's pranks on Dwight, is a delicate balance. Do it right, and you're a hero. Do it wrong, and you're the guy who put a stapler in Jell-O. And let's be real, most of us are the stapler-in-Jell-O guy when it comes to recycling.
I didn't think Brexit would happen, nor Trump's election.
LLMs: In 2020 or 2021, seeing OpenAI's GPT-2 and GPT-3, I thought ChatGPT's capabilities would be around by maybe 2025 - but it came in 2022.
Image generation: In 2021, I thought the best pipeline for image generation would be `sketch -> segmentation -> image`, utilising GANs, which are extremely fast to render and - most importantly - able to convey much more information about intent (e.g. placement of objects within the scene). Diffusion models (such as Dalle and Stable Diffusion) are much more compute-intensive and limited by the prompt. But inpainting solves this problem. Thus diffusion models are capable of almost anything, given enough compute time, because they can train on any labelled image - whereas segmentation models are fundamentally limited by the lack of training datasets, because they can train only on images that have a corresponding segmentation map, and it is difficult for the model to share abstract concepts between similar segment types.
Trump re-election: I thought Kamala would win, and that this would be the slow end of 'Wokeism' due to the left continuing to gradually dis-entangle from liberalism. I thought a Trump victory would lead to a repeat of the 2016-2020 Culture War, with left, liberals and elites joining together, once again, and putting new life into 'Wokeism'. Instead, Trump won, and 'Wokeism' suddenly died, with every major American corporation ending DEI practices, happening so fast that it felt like cultural whiplash.
I didn't realise how much people believe in conspriacy theories. For example, I was pretty shocked when one of my friends - quite a left-leaning but apolitical one - told me she thought that the Clintons had assassinated people. And here I was, thinking I was crazy for looking into the Esptein stuff...