Lesley Lai's Avatar

Lesley Lai

@lesleylai.info

I organize @gpvm.bsky.social lesleylai.info/ mastodon.gamedev.place/@lesley

525
Followers
235
Following
105
Posts
10.11.2024
Joined
Posts Following

Latest posts by Lesley Lai @lesleylai.info

It's also interesting that with the "falling factorial" definition, one doesn't need to think about what the value of "negative factorial." It just works when k > n.

07.03.2026 01:05 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
Falling and rising factorials - Wikipedia

TIL "falling factorial":

(n)_k = n(n-1)...(n-k+1)

It's interesting that n!/(n-k)! is very often seen (pick from n choices, then pick from n - 1 choices, etc), but I didn't know if it has a single notation.

en.wikipedia.org/wiki/Falling...

07.03.2026 01:05 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

This is cool, but also means I need a Windows server to run it

17.02.2026 05:28 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Screenshot of the Forgejo web UI showing CI build and test jobs for a Rust project

Screenshot of the Forgejo web UI showing CI build and test jobs for a Rust project

Baby's first Forgejo actions pipeline. Can probably reduce my GitHub Actions usage substantially (the only use case not covered is for Windows runners)

16.02.2026 10:46 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
In 1938 the first wireless newspaper was sent from WOR radio station in New York. Photo shows children reading the children’s page of a Missouri paper in an long paper stream coming from a machine

In 1938 the first wireless newspaper was sent from WOR radio station in New York. Photo shows children reading the children’s page of a Missouri paper in an long paper stream coming from a machine

We think endlessly scrolling the timeline is new?

Here's a group of kids reading a wirelessly transmitted newspaper in 1938.

02.02.2026 12:19 πŸ‘ 42 πŸ” 7 πŸ’¬ 0 πŸ“Œ 0
A wall of log entries showing "out of memory: killed process"

A wall of log entries showing "out of memory: killed process"

TIL that VS Code's SSH functionality maintains a node.js server at the remote, and the server eat 100% CPU power and RAM on my low-end VPS.

02.02.2026 12:33 πŸ‘ 3 πŸ” 1 πŸ’¬ 1 πŸ“Œ 0

Source: web.evanchen.cc/textbooks/po...

17.01.2026 16:23 πŸ‘ 1 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
A poster summarizing integrals across different dimensions, organized as a grid from left to right as 0d to 3d integrals, and different integrals on different function domains and codomains from top to bottom.

The top row is about functions from R^1 to R, where "0D integral" is just evaluating the function, and the 1D integral is the simple single variable integral.

The second row is about vector fields from R^2 to R^2, where the 1D integral is the work integral (line integral on tangent vector).

The third row is about functions from R^2 to R. "0D integral" again is just evaluating the function. 1D integral is the line integral (on scalars), and 2D integral is the double/area integral.

The fourth row is about functions from R^3 to R. "0D integral" is evaluating the function. The 1D integral here is still the line integral (on scalars). The 2D integral is the surface integral (on scalar). And the 3D integral is the triple/volumetric integral.

The fifth row shows vector fields from R^3 to R^3, where the 1D integral is the work integral, and the 2D integral is the flux integral (surface integral on the normal vector).

There are also extra red lines here showing the relationship of these integrals via the Stokes Theorem.

A poster summarizing integrals across different dimensions, organized as a grid from left to right as 0d to 3d integrals, and different integrals on different function domains and codomains from top to bottom. The top row is about functions from R^1 to R, where "0D integral" is just evaluating the function, and the 1D integral is the simple single variable integral. The second row is about vector fields from R^2 to R^2, where the 1D integral is the work integral (line integral on tangent vector). The third row is about functions from R^2 to R. "0D integral" again is just evaluating the function. 1D integral is the line integral (on scalars), and 2D integral is the double/area integral. The fourth row is about functions from R^3 to R. "0D integral" is evaluating the function. The 1D integral here is still the line integral (on scalars). The 2D integral is the surface integral (on scalar). And the 3D integral is the triple/volumetric integral. The fifth row shows vector fields from R^3 to R^3, where the 1D integral is the work integral, and the 2D integral is the flux integral (surface integral on the normal vector). There are also extra red lines here showing the relationship of these integrals via the Stokes Theorem.

This is a pretty nice poster.

The integration of vector fields and the Stokes' theorem stuff took me a while to parse, but I'd really love it if someone had presented this information to me this way before.

#calculus

17.01.2026 16:19 πŸ‘ 11 πŸ” 3 πŸ’¬ 1 πŸ“Œ 0

I've written a bunch of programming language related projects in the past, and are quite comfortable with this stuff. But if a learning resource dumps me with a BNF and hope me to magically understand the syntax of a new feature, I just can't, or at least it will take me more trouble than worth it.

12.01.2026 14:30 πŸ‘ 2 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

My code looks like the following:

for (u32 i = 0; i < MAX_BOUNCE; ++i) {
bool hit_anything = << ray scene intersection >>

if not hit_anything {
<< update frame buffer >>
break;
}

<< scatter ray >>
}
// Oops. Forget to update framebuffer if the loop exited due to too many bounces

06.01.2026 15:46 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Video thumbnail

Fun "temporal" bug in my new path tracer project that only manifested when I set max bounces to a very low value (e.g., 3). Can you guess why?

06.01.2026 15:45 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
A tabby cat wearing a medical cat cone tries to get rid of the cone, ending up with one front leg sticking out of the cone while the other remains inside

A tabby cat wearing a medical cat cone tries to get rid of the cone, ending up with one front leg sticking out of the cone while the other remains inside

Timo cosplaying Buddhist monk

03.01.2026 04:57 πŸ‘ 4 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

I also find it is nice to use indices. It can be smaller (32-bit) and can also be constructed on the CPU and directly uploaded to the GPU.

02.01.2026 13:41 πŸ‘ 0 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Nice! I've actually never used the intrusive-list approach; it is good to know.

Another useful representation is one pointer and one size, if all the children are continuous (which is often enough for hierarchies that don't need to change once built). For binary trees, even size can be omitted.

02.01.2026 13:41 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
For instance, trying to match the pattern ^(a|ab)*c$ against the string abc results in an incorrect match, whereas simpler patterns seem to work perfectly fine. How can I be sure that the library is reliably handling these scenarios? It’s incredibly frustrating to deal with this inconsistency, and I expect a response and fix for this issue promptly.

Can we get some rigorous debugging on this? It’s crucial for the integrity of the library that this functionality is solid. Users should not have to second guess the matching results based on regex complexity. If this is related to the underlying NFA implementation, it absolutely needs to be addressed right away – no exceptions.

Please prioritize this fix as I need to know that I can rely on miniregex for any production-level projects. Waiting around for issues like this to be addressed is not feasible.

For instance, trying to match the pattern ^(a|ab)*c$ against the string abc results in an incorrect match, whereas simpler patterns seem to work perfectly fine. How can I be sure that the library is reliably handling these scenarios? It’s incredibly frustrating to deal with this inconsistency, and I expect a response and fix for this issue promptly. Can we get some rigorous debugging on this? It’s crucial for the integrity of the library that this functionality is solid. Users should not have to second guess the matching results based on regex complexity. If this is related to the underlying NFA implementation, it absolutely needs to be addressed right away – no exceptions. Please prioritize this fix as I need to know that I can rely on miniregex for any production-level projects. Waiting around for issues like this to be addressed is not feasible.

Sometimes it is hard to tell whether this is a human troll or the whole text is generated via LLM. Or maybe both.

For context: this is a personal project that I don't expect anyone to use. Nevertheless, what this person described is completely bogus

22.12.2025 01:45 πŸ‘ 4 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
Preview
No Graphics API β€” Sebastian Aaltonen Graphics APIs and shader languages have significantly increased in complexity over the past decade. It’s time to start discussing how to strip down the abstractions to simplify development, improve pe...

My "No Graphics API" blog post is live! Please repost :)
www.sebastianaaltonen.com/blog/no-grap...

I spend 1.5 years doing this. Full rewrite last summer and another partial rewrite last month. As Hemingway said: "First draft of everything is always shit".

16.12.2025 18:51 πŸ‘ 466 πŸ” 191 πŸ’¬ 19 πŸ“Œ 12

I am currently using Librewolf, and it is pretty good (just as boring and unremarkable as a browser should be)

17.12.2025 04:36 πŸ‘ 1 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0
A piece of code, whose line is at line 106, and the following lines are blank

A piece of code, whose line is at line 106, and the following lines are blank

A piece of code starting from the line 1518, this is the code that should immediately follow the code in the previous image

A piece of code starting from the line 1518, this is the code that should immediately follow the code in the previous image

Fluffy cat on keyboard

Fluffy cat on keyboard

Just moved away from the keyboard for a minute. Meet the 1000x programmer who can write 1000+ lines in one minute
#cat

16.12.2025 00:20 πŸ‘ 8 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0

After all those years, I just can never remember the quotient rule and always derive it from the product rule whenever I need to use it

#calculus

15.12.2025 06:44 πŸ‘ 2 πŸ” 0 πŸ’¬ 2 πŸ“Œ 0

Yeah. It is definitely more convenient to work only with 4x4 matrices, and no need to worry about alignment or converting to 4x4 matrices.

That said, those "3x4 matrices" are not really 3x4 matrices but rather 4x4 matrices with the last row always [0, 0, 0, 1], so they can still be inverted easily.

12.12.2025 12:30 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
C++ Standard Adventure - cppevo Explore the C++ standard as an interactive text adventure game. Navigate between C++ eras, collect knowledge, and learn the language.

I've built a text adventure game engine on top of the C++ Standard. Why? I have no idea. But it's a learning tool with quests and time travel and artifacts and NPC's and XP and ... well, you just have to check it out!

cppevo.dev/adventure

12.12.2025 00:22 πŸ‘ 45 πŸ” 14 πŸ’¬ 3 πŸ“Œ 0

It is interesting that many ray tracing APIs (such as Vulkan and OptiX) require 3x4 matrices (rather than 4x4) for affine transformations.

Makes me wonder about many usages of 4x4 matrices waste 16 bytes to always store [0, 0, 0, 1]

11.12.2025 05:44 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

He rarely vocalize, so this is pretty rare moment to see and catch in video

07.12.2025 08:00 πŸ‘ 3 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0
Preview
WebGPU is now supported in major browsers Β |Β  Blog Β |Β  web.dev Read about the biggest web graphics launch since WebGL. WebGPU is supported across major browsers, bringing unparalleled performance to the web.

In case you didn't notice, #WebGPU is most likely available in your browser now!

25.11.2025 18:44 πŸ‘ 20 πŸ” 7 πŸ’¬ 1 πŸ“Œ 0
Video thumbnail

Cat vs Roomba.
Cat: 0 Roomba: 1

26.11.2025 09:13 πŸ‘ 2 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

Eww. I just checked their website, and the all-man lineup looks suspicious. I don’t want to know the details, but I kind of regret this post now

25.11.2025 00:22 πŸ‘ 1 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Fifty Shades of OOP | Lesley Lai This post talks about the many different aspects under the umbrella term OOP

New blog post: "Fifty Shades of OOP." Put in a surprising amount of research for this one!

lesleylai.info/en/fifty_sha...

24.11.2025 09:37 πŸ‘ 15 πŸ” 8 πŸ’¬ 0 πŸ“Œ 0
Preview
Digital Signals Theory Chapter 1 Group Read, Fri, Nov 28, 2025, 7:00 PM | Meetup This week, we will start reading a new book: [Digital Signals Theory](https://brianmcfee.net/dstbook-site/index.html)! During group reading events, we go through all the c

This week, we will start reading a new book: "Digital Signals Theory"!

www.meetup.com/graphics-pro...

24.11.2025 06:59 πŸ‘ 3 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025
Casey Muratori – The Big OOPs: Anatomy of a Thirty-five-year Mistake – BSC 2025 YouTube video by Better Software Conference

I am reluctant to watch this talk, and I am only watching it now as part of my research for a blog post. But it is actually really good, with (almost) no rants and a lot of historical deep dives.

youtu.be/wo84LFzx5nI?...

24.11.2025 05:03 πŸ‘ 3 πŸ” 0 πŸ’¬ 1 πŸ“Œ 0
Graphics Replicability Stamp Initiative

The Graphics Replicability Stamp Initiative (GRSI, www.replicabilitystamp.org), a community-driven initiative to promote replicability in Graphics research, is seeking volunteers.

More details in the 'Volunteering' section of the home page.

21.11.2025 12:16 πŸ‘ 16 πŸ” 11 πŸ’¬ 1 πŸ“Œ 0