Logo with title ".Blog"

Briefs

Low-effort content for certain microblogging platforms.

If expressions

Not having if-expressions would have forced you to write it out as a full statement, having the miraculous side-effect of making the code clearer. This is why I’m so grumpy about the syntax’s inclusion.

Continuous collision detection. Very happy to finally have this working. No raycasts. All Luau and a bunch of maths.

The position of the yellow ball is the white ball plus its velocity. The green ball is the yellow ball plus the new velocity.

It only does spheres vs triangles since that’s all I need, but it’s based off of GeometricTools, which has a number of different shapes.

Really annoyed by plugins that roll their own update checker. Especially ones that don’t let me disable it. Apparently the Plugin Management panel doesn’t get in my face enough for the author’s liking.

I’ll set your Parent property to nil. I’ll call Destroy on your ass. You must weigh a singleton, because you’re nothing but Debris to me. Your family better connect to your Died event, because I’ll set your Health to 0. You better BindToClose, because I’m about to shut you down.

No need to set BreakJointsOnDeath, I’ll just call BreakJoints directly. We better update your Transparency, because you’re about to become a ghost. Your ancestry is about to change, kiddo. You’re no longer gonna be a descendant of this DataModel when I’m through with you.

And don’t think you’re coming back, because I’m setting your RespawnLocation to nil. You’re gonna be FallingDown, but you wont be GettingUp, because I disabled that Humanoid state. Your thread is suspended, and I’m calling coroutine.close on you. No need to defer THIS task.

The Garbage Collector’ll need several cycles to clean YOU away. Calling GetFriendsOnline on you always returns an empty array. I’ll set your HeadLocked and max out your NearPlaneZ. By the way these insults are licensed under MIT.

Verification

If you have to verify that the results the AI produces are correct, do you really save any effort?

Loadstring

If you’re writing a plugin and want to avoid optimization penalties associated with loadstring, you can just create a ModuleScript, set the Source, then require it.

Naming

Don’t rename something until you’ve found that it has been consistently causing confusion.

Downtime

Remember, time spent without access to Studio could be time spent singing praises of The Cloud.

Only market a few of your software projects. When you’re actively trying to bring in users, you’re creating an expectation of longevity. If you do this for dozens of projects, you wont be able to maintain them all at once, leading to stagnation and abandonment.

I’ve seen a few groups that are doing this. They have handfuls of projects, each complete with websites, documentation, and other user-friendly concepts meant to improve usage. I see them and wonder how they plan on maintaining all of these projects for the next 5 to 10 years.

The more interest there is, the better chance you’ll have of finding other dedicated maintainers that you can eventually hand off to. However, this is more difficult for niche products, like those specific to Roblox, where the overall pool of potential maintainers is smaller.

It’s the marketing that makes a strong promise of long-term maintenance. If you release something publicly, but aren’t trying to pull in users, then you aren’t making that promise quite so strongly, so you can get away with lesser or no maintenance.

There are other strategies, too. You can clearly define the scope of your project, making it possible to come to a state of completion, and therefore, little to no maintenance. You can also make it extensible, which transfers some of the burden to extension authors.

The documentation for the new MemoryStoreService is, of course, lacking. I’m still able answer most of my own questions, but it’s a lot of extra work that shouldn’t be necessary.

Railroad tracks

Bezier curves aren’t necessarily bad for railroad tracks, they just need more constraints. Real tracks have relatively wide minimum curvature to account for things like speed and axle spacing.

Then there’s things like track transition curves. The radius of a track curve should transition gradually from one radius to the next. There should be a length of straight track in the transition to a reverse curve.