f-log

just another web log

14 Apr 2026:
not a normal approach

Not a normal approach

I didn't know I had a Carbon Monoxide detector until it started chirping (loudly). It was tucked inside the cupboard with the boiler and I took a while to locate it. The beep was so loud that pin pointing its location was great fun.

photo carbon monoxide detector old

No big problem. These things are designed to be changed every ten years.

So I went and bought a new one, that in itself is long story, but it is not particularly interesting.

photo carbon monoxide detector new

Went to hang it on the screws the last one was on and ... it does not fit!

The screw are slightly further apart and the screws are a different size and would not fit even if they were the same distance apart.

photo carbon monoxide detector new and old

Now, a normal person might have

  1. Pulled out the old screws and drilled in new ones
  2. Mounted it somewhere else
  3. Glued it on

but

  1. The new screws are designed for walls and the mounting was the inside of a cupboard. So even if I had wanted to, I would have need to purchase the exact size and length of screw for the job.
  2. nah
  3. and then what in ten years time?

Instead I turned to Blender and designed and printed a 3D bracket.

photo carbon monoxide detector brackets

The first one (using up the last of my orange filament) showed the holes 2mm too close. As the holes were procedural, I could easily shift them and print again. This time with the pegs for the new detector.

The result was just off. The screw holes were still 1mm off (I could bend it to fit but I needed another print anyway) and the pegs were the exact size of the new holes which was too tight.

The final result worked beautifully. The new detector snapped onto the pegs and the whole assembly then hung on the old screws!

As no one has this exact problem (detector models) and would never look for a solution, I am not going to post the files. But this does show the value of owning a 3D printer if you are so inclined to do things the difficult/fun way.

14 Apr 2026:
tentacular

One hundred percent completion

I have a bit of a problem with games, in that I need 100% completion.

Well I got it on Tentacular on the Quest 2.

tentacular screen shot

A strange experience for sure, but it was on offer and I am a sucker for a bargain.

You are a two tentacaled creature that needs to complete a number of diverse tasks. Somewhat hampered by the floppy and cumbersome arms.

There is a main story arc and there are side missions. From saving a town from a volcano to stacking boxes, to completing a complex 007 mission with a team of helpers.

The diversity keeps you coming back and some of the side missions could be complete games in their own right. One has you posting signs to get people to an exit in a kind of Lemmings approach. Another, you build a complex road system and send trucks with caravans attached around the branching circuit. That last one allows you too much freedom. In that, I created a complex ramp system that mostly worked to launch the vehicles over another road. Problem was that the correct solution was to send them through the targets in the other direction. Oops.

It is not perfect and the main obstacle is yourself controlling flailing arms. But I did come across a bug where it wanted you to pick up a sign post and there were none. Only when I went Kraken on the map and destroyed a number of buildings did it turn up. This was not a normal way to approach the missions.

There is something about a sandbox game that allows you to pick up sharks and chuck them about that seals the deal. And I do not think the developers wanted that. The sharks are a non grabable material, but you can still scoop them, if you are so inclined.

11 Apr 2026:
the gemma ollama rabbit hole

Gemma4 and the self-serving rabbit hole

Gemma4 is new (as of this week) LLM that is open source and freely downloadable.

We have been using AI at work (Cursor) and on the whole it is a net positive. Though I could tell you a number of stories where it went off the rails and caused unexpected problems.

As employees we have a monthly budget of tokens and I keep hitting mine. I decided to try and run a local LLM and found Ollama and Gemma4.

The work laptop has 32G of RAM, but conversely only has a discrete GPU (no NVIDIA or AMD graphics processor).

It was fairly painless. Download and install Ollama

curl -fsSL https://ollama.com/install.sh | sh

then download the model

ollama pull gemma4:e4b

That model was a 9.6G download and has 4 billion parameters

then run it

ollama run gemma4:e4b

takes a while to start up and then it takes 5-6 minutes to respond to anything. This is not going to replace my Cursor work subscription.

But, it is a full LLM and in my probing, very capable. Returning long detailed thinking statements followed by valuable responses.

So, not practical, but interesting.

My main desktop machine that I have had since 2019 has only got 16G RAM but crucially it has a NVIDIA 1660Ti with 6G GDDR6 RAM. Would it run any better on that?

And I fell down a rabbit hole.

As I had used Ubuntu at work I opted for Ubuntu server and a 64G USB drive. I did not want to pollute my current setup.

This was a lot harder than expected. To make the USB drive available to VirtualBox I had to create a raw VMDK file that mapped to it for low level access. Then Boot from an Ubuntu Server ISO. (and telling it to not boot any hard drives it found)

It should have been easy, but it was so slow. Turns out the default CD ROM settings in VirtualBox use IDE and moving it to SATA creates a HUGE speed up. Writing to the USB in the VM was also slow, but that was expected.

I wasn't expecting to run the LLM in the VM. Though I did try and that produced lots of other headaches. Mainly due to VirtualBox disconnecting the virtual networking cable (I am not kidding) when setting up SSH port forwarding.

My motherboard did not see the drive and no amount of tinkering in the BIOS settings would get it to show.

I found the the drive was not set with UEFI support and the cure was worse than the disease. Spent hours and hours trying to get the boot partition resized and set up. Eventually gave up and wiped the drive and this time set the VM to use UEFI mode (that is detected by the Ubuntu Server installer) and selected NO to creating a logical volume.

Finally got the machine to boot and immediately hit strange and very confusing networking issues. Not going to detail here, but somehow it was hung up on the networking setup the VM had and was having a hissy fit at my real hardware.

Run

curl -fsSL https://ollama.com/install.sh | sh
sudo ubuntu-drivers install
ollama pull gemma4:e4b
ollama pull gemma4:e2b
sudo apt install nvidia-cuda-toolkit
reboot
nvidia-smi

You might think that a 2 billion parameter model would be half the size of a 4 billion, but no, it was still 7.2G. The ubuntu-drivers and nvidia-cuda-toolkit was also huge, with not clear indication just how big they were or how long they would take. The both took ages!

But I now had the models installed and GPU accelerated!

When first starting or switching models the response time was

but running the same model afterwards was much quicker

that was multiple tests with the prompt "I am an llm", which garnered a much more thoughtful response from Gemma4:e4b

and one final note. I disabled Swap and set to FSTAB to use noatime but the drive was still quite slow, When removing the drive it was also Hot, well, warm to the touch, and unexpected.

The Ollama instance exposes an API server, so I might try and run this during the work day and connect to it remotely. Another rabbit hole.

05 Apr 2026:
reusable button

Reusable button

The further I get with the Godot Minesweeper VR game the more I find I need to create proper solutions.

You can get surprisingly far with scrappy it works code, but at some point you realise that you don't just need clean reusable code you crave it.

This was a quick attempt at a VR Button helper class to manage the three states or, Hover , Un-Hover and Hit .

You pass it the Mesh and the three materials that correspond to the different states. Very easy and straightforward, but I needed to complicate it :D

I wanted the user to see the button have a cool down state after hitting it. This had to allow the user to re-interact with the button before the cool down ended.

copy_colour_from_material_override(mesh_target.material_override, mat_tweening)
mesh_target.material_override = mat_tweening

if _tween && _tween.is_running():
    _tween.kill()
var trans = Tween.TRANS_QUART
var easing = Tween.EASE_IN
_tween = mesh_target.create_tween()
_tween.set_trans(trans).set_ease(easing).tween_property(
    mat_tweening,
    "albedo_color",
    mat_selected.albedo_color,
    duration
)
_tween.finished.connect(func(): is_active = false)

Everything updates the material_override which was where I hit a number of problems. First was that the Tween has to be added to the scene tree. The fix was easy, run the create_tween() on the passed Mesh. Then I had multiple instances where the animation would play and update the colour but would never work again, or would affect all the instances where the material was used in the game world.

The result was creating a special mat_tweening material and copying the colour information. Then externalising the Tween instance so it could be killed and restarted.

So I have a nice VrButton and VrRaycast to handle the interactions and visual state of buttons. Not sure I am going to have any more, just need to set the difficulty.

05 Apr 2026:
a and e

A and E

There are not many personal entries in this Flog, but this felt log worthy.

For reasons I was getting my blood taken on 1st April. It did not go well and I ended up talking an ambulance to Accident and Emergency. Was there for four hours hooked up to a drip.

The reasons are surprisingly long and twisty and include failing to draw blood on my own and having to pay someone else to do it for me.

This is number three. 1st was getting my Tattoo redone last year, then there was the aforementioned blood drawing attempt and now there is loss of consciousness. All three relate to my right arm, but that might be coincidence.

loading results, please wait loading animateloading animateloading animate
[More tags]
rss feed

email

root

flog archives


Disclaimer: This page is by me for me, if you are not me then please be aware of the following
I am not responsible for anything that works or does not work including files and pages made available at www.jumpstation.co.uk I am also not responsible for any information(or what you or others do with it) available at www.jumpstation.co.uk In fact I'm not responsible for anything ever, so there!