2025 The RSS feed for 2025.

  • 🔗 OpenEmu - Multiple Video Game System

    I asked in the Hemispheric Views Discord on recommendations of a good emulator of the GameBoy for MacOS. Some members recommended this, which I’ve yet to try out. But it looks interesting.

  • John Gruber, on the casing of “Internet”:

    The Internet is a lot like the Earth. It’s everywhere. It is our universe, in a sense, from the human-scale perspective. But it’s a unique and distinct thing, thus deserving to be treated as a proper noun. It’s almost disrespectful to lowercase it, and the Internet is one of the great achievements in the history of mankind.

    It’s also grammatically wrong. As my Networks lecturer would say, “the Internet” — the thing hosting the Web that we use everyday — is distinct from “an internet” — a collection of interconnected networks. The Internet might be an example of an internet, probably the prime example, but there’s no law in computer science stating that there must only be one. Anyone is welcomed to make their own internet. No-one will because there are massive network effects associated with network protocols, not to mention the amount of money already invested in the TCP+IP stack. Why do you think it’s so hard getting people to move to IPv6?

    That said, the style guide of this site has no hard requirements over the casing of “Internet”, mainly because it’s easier not to press the shift key. 😀

  • My reputation for a bottle opener.

  • A good documentation site generator not come produce documentation, but it certainly helps, especially when tool comes with a nice way to order content or a set of default themes that are easy on the eye. This site is using Hugo which is pretty decent. Yet I’d be the first to admit that it’s not the easiest thing out there. There’s a fair bit to learn about how the content is organise or how to use Go templates to build a layout in order to build something that looks the way you want it.

    So if Hugo is not your thing here are some others.

    • Astro: I’ve seen a few recommendations for this one.
    • MkDocs: This looks to support a simple way to organise content while producing nice looking sites. Includes a “read the docs” theme.
    • Mycorrhiza Wiki: This looks good for personal wikis. It may require a server though.
  • Was looking at how I could add hazards to my Godot project, such as spikes. My first idea was to find a way to detect collisions with tiles in a TileMap in Godot. But there was no real obvious way to do so, suggesting to me that this was not the way I should be going about this. Many suggested simply using an Area2D node to detect when a play touches a hazard.

    I was hesitant to copy and paste the scene node I had which handled the collision signal and kill the player — the so-called “kill zone” scene —but today I learnt that it’s possible to add multiple CollisionShape2D nodes to an Area2D node. This meant I needed only a single “kill zone” scene node, and just draw out the kill zones over the spikes as children. The TileMap simply provides the graphics.

    Auto-generated description: A game development interface displaying level design with a grid layout, tiles, and collision shapes is shown.

    This discovery may seem a little trivial, but I’d prefer to duplicate as few nodes as a can, just so I’ve got less to touch when I want to change something.

  • Tried opening my Godot project this morning and was greeted with the following error:

    Auto-generated description: A computer screen displays a development environment with an error message pop-up about an invalid or missing scene file.
    scene/resources/resource_format_text.cpp:284 - res://scenes/falling_platform.tscn:14 - Parse Error: 
    Failed loading resource: res://scenes/falling_platform.tscn. Make sure resources have been imported by opening the project in the editor at least once.
    Failed to instantiate scene state of "res://scenes/falling_platform.tscn", node count is 0. Make sure the PackedScene resource is valid.
    Failed to load scene dependency: "res://scenes/falling_platform.tscn". Make sure the required scene is valid.
    

    Traced it back to the technique I was using to respawn the falling platform. Looks like Godot didn’t like the two preloads I included:

    # file: scripts/falling_platform.gd
    
    @onready var FallingPlatform = preload("res://scenes/falling_platform.tscn")
    @onready var FallingPlatformScript = preload("res://scripts/falling_platform.gd")
    

    This resulted in a parse error and Godot thinking the level scene was corrupted. In retrospect, this kinda makes sense. What I doing was technically a circular dependency, where the scene and script was trying to preload itself. I was hoping Godot was smart enough to recognise this, but I guess not.

    So I had to change the respawn code. I modified it to make use the duplicate method. Here’s the revised version:

    func respawn():	
        var dup = self.duplicate()
        dup.global_position = init_global_position	
    
        # Duplicate also copies the velocity so zero it out here
        dup.velocity = Vector2(0, 0)
        get_tree().current_scene.add_child(dup)
    

    After some limited testing, this seems to work. One good thing about this approach is that it looks like duplicate copies the script, so I no longer need to do anything special here.

    So I guess the lesson here is don’t try to preload the script within itself.

  • 🔗 Ethical Ads

    I’m not likely going to put ads on anything, but if I was, this might be worth considering.

    Via: Bluesky

  • Can plane sleep even be classified as sleep?

    Surely it does not meet the international standard for the definition of sleep

    I wasn’t a believer until it happened to me once. It was a 10 hour flight traveling from Tokyo to Melbourne (so roughly in the same time zone). Granted I was in premium economy but I managed to sleep uninterrupted from dinner until breakfast, around 7-8 hours. I’ve never achieved that before or since, but I’m glad to know it was possible.

  • Plenty of people taking advantage of the warm weather and low water level at Pound Bend, Warrandyte today.

    Auto-generated description: People are enjoying a day out by a river surrounded by trees and rocks, with some swimming and others relaxing on the shore.
  • “Get out more” goal for March achieved. ✅

    Joined a bushwalking club and went for a hike in Warandyte.

    A dirt path winds through a dry, wooded area with tall trees and sparse undergrowth under a clear blue sky.A dense forest scene features twisted tree branches and a wallaby camouflaged among the foliage.

  • Rendezvousing with a group that published a Melway location with the address. Really miss when people did that. Miss just flipping through the Melways for no reason other than it’s cool looking at maps. Maybe I should buy a Melways.

  • The one good thing I get from hearing podcasters talk about Formula One is that they provide a good reminder for when the local race is on, so I can remember which dates I should stay the heck away from the city. 👎

  • Adventures In Godot: Respawning A Falling Platform

    My taste of going through a Godot tutorial last week has got me wanting more, so I’ve set about building a game with it. Thanks to my limited art skills, I’m using the same asset pack that was used in the video, although I am planning to add a bit of my own here and there. But it’s the new mechanics I enjoy working on, such as adding falling platforms. If you’ve played any platformer, you know what these look like: platforms that are suspended in air, until the player lands on them, at which point gravity takes a hold and they start falling, usually into a pit killing the player in the process: Continue reading →

  • Ooh, you know you have a situation on your hands when you see three glass trucks in convoy.

  • I can’t see voice assistants ever getting better than very basic human understanding. I heard someone mention that they asked their cylinder to “brighten the lights in the room and make it warmer.” The assistant bumped up the heater, but if it was me, I would’ve adjusted the light temperature.

  • The next “touch grass” event, plus my “get out more” goal for March, has been booked for this upcoming long weekend.

  • 🔗 cathoderay.tube

    Auto-generated description: A web browser window displays the word computers!!! in large text on a plain white background.

    Yes.

  • It’s amusing to see a farewell card get passed around the office like a hot potato. A hot potato that everyone has to touch at least one, without letting the recipient know that such a potato even exists.

  • When do you reach the diminishing returns of adding defensive code to handle outcomes that are “unlikely?”. It’s probably worth it if the chances are 1:10,000, but what about when they’re 1:10,000,000? Is it worth adding this extra complexity if you believe it could happen, despite not being sure?

  • Idea for a game show: you’re given some out-of-context messages from a Slack thread, and a vague description of who the participants are and where they work, and you have to guess what they’re trying to communicate to each other.

  • Lot of web developers I’m seeing online are going all in on cross-document view transitions. Chalk me up as someone who doesn’t like fun (a fair assessment) but I really can’t see myself using this anytime soon. It just doesn’t feel… genuine. I can’t really describe it any better than this. It’s as if the site is trying to be something that it’s not (a native app, verses a website).

    The immediate transition to a new page may seem like a bad user experience, but I don’t think it is. The transitions don’t hide a page load, so you’re still waiting for that, and I’ve come to expect that the page will be shown to me when it’s ready. Making me wait while a transition is playing, no matter how short it is, just makes it feel like you’re wasting my time.

    Anyway, that’s the feeling at the moment. Maybe I’ll come around.

    In the meantime, it would be nice if browsers have a preference of turning these off. Having it controlled via the global accessibilities settings is insufficient, as transitions in native apps are occasionally helpful.

  • Go really should consider adding enum types. There are many useful things that can come from doing so, like the ability to specify a zero value, to detecting when a switch or map is non-exhaustive. I encountered both cases in the last 10 minutes where such features would’ve been helpful.

  • Kev Quirk:

    I received an email yesterday in response to my “iOS Mail Is Shite” post and the email started with “Kev - I cannot agree with you more.”

    But Apple “Intelligence” summarised the email as “Disagrees with Kev; uses Mutt for blog email.”

    Maybe Apple Intelligence is smart enough to know when it’s being criticised. 😄

    Jokes aside, I find it pretty useless too. The priority message for the last couple of weeks is a notice for someone to move their car. I open all sorts of mail but nothing like that. Would’ve thought that be signal in their model.

  • So, uh, Stripe; which is it? You can’t change the currency of a customer, or you can? Because I was under the impression that you were unable to change the currency once it was set. So you could imagine my surprise when I was able change the currency of a customer this morning.

    Auto-generated description: A webpage from Stripe Support provides instructions on setting or changing the currency for an invoice, highlighting that the currency cannot be changed once set for a specific customer. Auto-generated description: A highlighted section of text outlines instructions for changing a customer's default currency, emphasizing that no active subscriptions, quotes, or billing objects must be present in the customer's current currency.
  • It’s crazy to think how little you have to pay to put up a website nowadays. For what you get for your money when using a service like Netlify, such as a CDN and edge computing, it feels like an absolute steal.