Videos
It’s amusing to imagine how far Apple’s bizarre, corporate-esque copywriting goes. Would one be able to go into CaffΓ¨ Macs in Apple Park, pick up a packed sandwich, and see printed on the label:
With this sandwich, our focus is to maximise sustenance and nourishment so we can drive continued living in our employees.
We’ve also introduced a new ecosystem of ingredients to compliment this unique sandwich. Thanks to the incredible availability of nuts and other allergens, we’re able to create a new awareness that this sandwich may contain some of these.
πΌ
Really enjoyed this discussion on the latest Shoptalk show discussing why one would want a website. I disagree with the idea that restauranteurs can get away with just an Instagram. Restaurant websites generally suck, but I'm not sure what I'll do if they aren't around, and I can't see their menu.
Oh, and P.S. I don't know how to use Instagram.
Devlog: Dequoter β Something Different Today
A new project called Dequoter was started to unquote a JSON string and filter it, utilizing Go for backend functionality and HTML for the frontend.
3.78 GHz for a phone chip! I remember getting a desktop clocked at just over 1 GHz and thinking that was the fastest computer I've ever used. These phone chips are almost 4 times faster, and there's like 7 cores here, with 5 clocked faster then 3 GHz. Absolutely crazy when you think about it.
Talk to anyone working on the Go language and they'll tell you about the JSON parser they built. Maybe the CSS designer equivalent is making their own CSS reset. π
Seeing some very interesting visitor pattens over the last two days. There seems to be two or three visitors from the US opening what seems to be every single page on this site. It’d be interesting to know who it isβ¦ or what it is. Maybe I should ask around.
Oh, interesting. That’s a good explanation as to why OpenAI et. al. would want to make a browser. And if they do tout it as being “AI powered”, then it kinda makes sense that Google would do likewise, as a defensive move to keep marketshare.
Enjoying listening to the latest Talk Show with LMNT (I'm about 67% through it so far). Especially liked this part about Safari, and not just because it validated my feelings about it. π
I wonder if the prudent course of action for iOS app developers is to hold off from releasing their redesigns on day one. I wonder if iOS’s new look will be overwhelming for users and having an app that’s unchanged for a week or a month could provide them with something familiar to them. π€·
Making that Seinfield reference in my post on iPadOS 26 and Liquid Glass got my creative/meme-ing juices going. Opened DaVinci Resolve for this one.
If you asked me today, I’d probably call this game “rock paper scissors,” most likely due to my consumption of American media. But growing up, I do remember calling this game “paper scissors rock.”
Amazing Dithering this week. Loved the discussion on why Apple is so driven to remove all software chrome. Never considered that it was because of how the various teams are organised (spoilers in the included clip).
Found a particularly interesting bug in Safari when I tried adding a background transition to radio-button labels styled to look like regular buttons. Tapping the labels on the iPad causes the background colour to flicker:
Fixed it by working around the problem: I only need the transition when the user taps “Submit”, so I held-off from applying the transition attributes until that happens. But wow, what an weird way to fail.
Appreciate that there's someone else out there getting driven crazy by Apple throwing up permission pop-ups everywhere in MacOS. And the Terminal, of all places.
Chalk me up as one of those people that wished they could use Markdown everywhere. I use it for notes, for messaging, writing here, etc. I occasionally dabble with WYSIWYG editors but I always turn back to Markdown. Love it.
All the recent changes to UCL is in service of unifying the scripting within Dynamo Browse. Right now there are two scripting languages: one for the commands entered after pressing :
, and one for extensions. I want to replace both of them with UCL, which will power both interactive commands, and extensions.
Most of the commands used within the in-app REPL loop has been implemented in UCL. I’m now in the process of building out the UCL extension support, start with functions for working with result sets, and pseudo-variables for modifying elements of the UI.
Here’s a demo of what I’ve got so far. This shows the user’s ability to control the current result-set, and the selected item programatically. Even after these early changes, I’m already seeing much better support for doing such things than what was there before.
Made some more progress on that Godot game. I haven’t gotten any further with the first level of world 2, so I’ve been spending much of my time making mechanics. One of them was the slow moving “level 2” mechanic that I stole wholesale from Super Mario World. That mechanic, despite it being frustrating to speed-runners, was always slightly interesting to me. To have areas of a level become accessible or hazardous just due to a layer of it oscillate up and down, it promised to make for some interesting timing challenges. At least in theory.
I decided to put that theory to the test, and start work on one the later levels. And despite being a little skeptical about whether the mechanic could carry through a level on it’s own, I came up with one that I’m reasonably happy with. The mechanic is introduce slowly, and in a rather non-threatening way, proving the player the means to get to higher ground. This leads into the second half, which will be a long underground section which will ramp up the difficulty by introducing the risk of getting crushed or missing platforms.
To compliment this is a new enemy that rushes the player. The player cannot do anything to defeat this enemy: combat is not really a thing in this game. All they could do is evade it before the enemy gives up. I am reusing the same “green slime” sprite for this but I’m hoping that the differing animations provide some hints of how this enemy’s behaviour differs from that of the simpler one.
Finally, it was time to consider checkpoints. While the first few levels were too short to justify adding them in, this one is just that bit too long without one. And given the difficulty ramp-up in the second half, having the player go through the slower first half every time they died would probably lead to frustration. So checkpoints are now a thing. They’re not free β costing 5 coins to activate β and they are sometimes mandatory, blocking the player from progressing until they pay the toll. But I think their presence helps with eliminating the areas of the level that would just be boring to play through again and again.
So yeah, I’m quite happy with this level. And I’m also happy in realising that I’m not bound to building this game in the same progression that the player will experience it. It’s better sometimes to just work on the areas that you’re ready to. I mean, it’s sounds obvious to say that now. Not sure why it took me this long to actually do so.
Spent some time over the last few days working on that Godot game, mainly building new mechanics. This evening I started working on an interceptor, something that would jump out of the quicksand in order to disrupt the player’s jump. Here’s an example of how they look in the test bed:
And yeah, they’re pretty much a carbon-copy of the Podoboos from Mario. But I think there’s a reason they’re still making an appearance in games, years after their debut in Super Mario Brothers. They’re quite a versatile enemy, making jumping challenges a bit more interesting than just seeing whether the player the clear a gap. Plus they’re reasonably easy to make.
Another mechanic taken from Mario was a switch that revealed coins and tiles for a limited time. Hit it once and the child nodes of this “timed_limited_visible” scene are displayed and activated for 10 seconds, before they disappear again:
Much like the blue P switch this mechanic takes inspiration from, the switch can only be activated once. So it may be only useful for bonuses and areas the player can afford to miss.
I had to do some special handling for nested TileMap
nodes, since the player could still collide with them even when they’re hidden. How I solved this was nothing too spectacular: basically I just walk the child tree looking for TileMap
instances, and when encountering one, just enabling or disabling the first layer:
func _show_and_activate_children():
visible = true
process_mode = Node.PROCESS_MODE_INHERIT
for tm in find_children("*", "TileMap", false):
tm.set_layer_enabled(0, true)
func _hide_and_deactivate_children():
visible = false
process_mode = Node.PROCESS_MODE_DISABLED
for tm in find_children("*", "TileMap", false):
tm.set_layer_enabled(0, false)
Building these elements was fun, but the main problem is that I’m struggling to come up with a centrepiece mechanic for level 2-1, something that defines the level in some way. I have an idea for level 2-2 β this world is set in a desert so I’m hoping to introduce a thirst mechanic β but level 2-1 I’m hoping to keep relatively plain so as to avoid overwhelming the player with too many new things. The fear is to avoid making it little more than what the player encountered in world 1: a series of jumping puzzles over pits. Sure, that’s pretty much the entire game in a way, but some variety would be nice.
I’m hoping one of these mechanics could help here. I guess I’ll find one once I’ve start seriously building the level.
Started working on world 2, and one of the main mechanics of this world: quicksand. It won’t kill the player directly, but it will make it difficult for them to manoeuvre, and getting too low could cause death. Might be one of the more annoying mechanics in the game, but that’s kind of the point.
A bit more on Godot this evening, mainly working on pausing the game, and the end-of-level sequence. Have got something pretty close to what I was looking for: a very Mario-esc sequence where the player enters a castle, it start auto-walking the character, and the level stats show up and “spin” for a bit. Not too bad, although I may need to adjust the timing and camera a little to keep the stats from being unreadable.