Logo with title ".Blog"

Briefs

Low-effort content for certain microblogging platforms.

Is passing a buffer directly to MessagingService/DataStore actually better? Mandatory compression means that a size check is required, which means double encoding. Also does base64, which has worse size overhead than base85 via Luau.

For specialized data, the developer will be able achieve higher info density way better than general compression ever could. I’d argue that the compression step should be skipped entirely.

Debugging

Notoriously unstable debugger: That assignment didn’t change this variable.

Me: Must be a compiler bug.

Light mode

I hereby give you permission to not unconditionally hate light mode. Go ahead. Be indifferent.

DataStore keys

Boring Facts: DataStore keys are binary-safe. They have a size limit of 50 bytes, not characters. That’s 400 full bits to work with.

Rewinding

This is fine. I’m okay with the events that are unfolding currently.

“Fixed” it. There’s some rewind logic that stops new builds from being displayed until Roblox says they’re live. It seems to malfunction when a build hash appears more than once in the deploy history. Fixed by disabling rewind, so diffs can now be enjoyed before they go live.

Magic software

Magic in software is just a lack of documentation. A design is fine if we know why we’re using it and the reasons are justified.

In Roblox Studio, Ctrl+R “rotates” around the normal of the focused surface. Ctrl+T uses the axis that is nearest aligned to the camera’s local X axis, so that it “tilts” towards the camera.

RunService

If you need to simulate something, such as an assembly, you can call RunService:Run() and :Stop() from the command bar. It even respects undo/redo. Keep in mind that the whole place is simulated.

Comparisons of performance between libraries are completely meaningless. The most optimal choice between two libraries is neither.

Consider the following question: is it being used on the hot path?

  • No: Then performance doesn’t matter.
  • Yes: Then it will be optimized away.

FAQs

Preemptive FAQs are not FAQs.

Real houses

Latest obsession: building houses realistically. Most of it will be abstracted away in an actual build, but doing it this way informs the layout of the house. For example, the stairway in this image isn’t ideal, because its headroom conflicts with the roof (1.5-story house).

Remote signals

Remotes effectively break the Signal pattern, so the only thing you should be doing with them is :Connect()ing exactly one listener.

Luau coverage

Wrote a script to display luau --coverage in a readable format.

Fun idea: A protocol that programs can implement to allow their plugins to be managed by the system’s package manager.

Metatable types

Luau:

> Barges into output

> 'Type { @metatable Foo, { } }' could not be converted into 'Foo'

> Refuses to elaborate further

> Leaves

Git exclude

.git/info/exclude lets you gitignore things locally without modifying a .gitignore that exists remotely.

Downtime

If downtime is inevitable, then it might as well be on schedule.