What are you working on? What have you been curious about lately?
[flagged]
[dead]
[flagged]
[dead]
[dead]
[flagged]
[flagged]
[flagged]
[flagged]
[dead]
[flagged]
[dead]
[flagged]
Building a tool that finds code problems before they become "quick" Friday fixes. Currently teaching it to be less dramatic than the linter :)
[dead]
[dead]
I'm nearing the end of a somewhat long and arduous journey of writing a GPU-accelerated voxel terrain generator and editor.
The terrain and editor pipeline is a three stage process. The first stage is user-configurable; users write an arbitrary 'shaping' shader in GLSL. The second stage is a fused stage; it does a convolution on the output of the first stage to compute a normal, runs a second user-configurable 'decoration' function, and finally applies edits. Edits are collections of SDFs that are 'compiled' from a graph structure on the CPU into a bytecode, and interpreted in the shader. The last stage runs another convolution to compute the final normal, then packs an occupancy bit, color, and normal down into a 32-bit representation, suitable for transfer back to the CPU. I expect I will expand this to include additional user-level bits for encoding biome type and GPU-driven spawning.
The entire shader pipeline is one fused 'ubershader' .. everything is bound at startup and the shader is dispatched three times, incrementing a 'Stage' uniform on each dispatch. This strategy conceptually makes the driver overhead nearly zero, and the profile agrees.
The final step in the process is giving the CPU a chance to spawn additional entities and structures after generation. This is not completely fleshed out, but the bones are there. The idea is that the results of the GPU work are passed back to the CPU, which can run arbitrary callbacks to spawn additional edits and entities. Once spawning is complete, the result is meshed using a fast binary meshing algorithm and uploaded to the GPU. I keep 16 bits of data per voxel from the GPU work, 1 bit of occupancy, and 15 bits of normal for collision response, which works out to half a megabyte per chunk. At the moment I only keep chunks which contain a piece of the world surface, and discard the rest. Surface chunks are dense, and may be compressed in the future, but keeping this amount of data scales to world sizes greater than 1B voxels cubed, which seems good enough for now.
In terms of raw performance, GPUs are ridiculous. My 3080ti mobile gets somewhere on the order of 500B-1T perlin samples per second with a naive perlin implementation. Compared to FastNoise2, that's about 1000x more, which sounds wrong since my GPU only has 35x more capacity, but, that's what my initial profiling said. That number is the marketing number; the real throughput is significantly less due to multi-stage nature of the system, but, there's a lot of headroom for improvement. For example, dropping the backing textures from 32bit to 16bit roughly quadruples performance. Since we only really care about the surface where values are near zero, I believe using 8 or 16 bit is a viable option, though this claim will require a fair amount of study to validate.
All in all, I'm pleased with how this is all working out. My original goal was to write a highly flexible system giving users both easy-to-use tools and granular control over the final output. I think I've done a fairly good job at that, and the fact it's also super fast is the cherry on top.
www.statsbrowser.com, a web-based statistical analysis app built on top of webR with step by step test guides and result insights intended to make performing stats easier for students.
[dead]
Commenting twice to show off something I have been working on.
what follows is the text of a poem I just wrote about a youtube short. It's artistic so if you're into that sort of thing you could read it. anyway I'll be posting it on my website later. I have a whole pipeline set up, it's pretty neat, I can show you that later if you want.
it's better to be able to do anything so you can be provided the tools and materials often, it's good to keep around spare parts of material only re-melting them when they no longer have a purpose none that you can creatively define space constraints, material constraints, tool constraints these are what limit you. uber-eats for machine assembly. Suddenly every suburban dad finds their calling. https://www.youtube.com/shorts/x4eXF-573jk CNC machine but on steroids, because there's more people who want to do stuff like this but don't because their specialty is something else or they don't have the tool/machine/willpower/reason - there's no reason but if they were paid whatever they wanted they could do whatever they wanted dollar inputs are spread dynamically based on what we have, and what we need. constraints. that we can all see and bend. like an MPC. Something I don't understand, but I do understand the implications of. Described, accurately and honestly, I know how to creatively apply. this, of course, is the destiny of all manufacturers - to be able to make whatever they want. "you need a joint structure in a shape? I can do that for you." "my rent is 1234$ per whenever. what does it really matter? we do the same thing."
--
insane software idea: function names should be indented, to provide a startplace for X direction rotation. Spinning and twining through the project. [see some of the formatting on my older programming works] most of which is unreleased and unheeded.
--
"you're jesus and everyone hates that", savior of the human race.
gods need to exist, so then it will all be okay.
if it's not okay, typically, you're dead.
in the modern day,
[dear disney world refugees - come work in Las Vegas or Portland]
[be beloved]
[culture of service]
in the modern day, life is all about lessons. at least for me. what do you need, you can learn from me. this is what I offer to ye.
"oh she said ye that means she's from the past"
nuh-uh
"yeah-huh"
no way you're bothering yourself
"... I didn't actually say that"
HA I got you switched to the off-the-shelf
"curses! look at me, I'm an evil witch now in another dimension!"
haha what a toast. cheerful, return to the fathers or something like that
"haha I got you back"
noooooo what was I saying
"not like I'd ever know."
heh true
"and so they were like bros"
---\ \ anyway that's my poem hope you liked it I might read it at an open mic tonight if I can muster up the courage.
I'm working on a tool library for you, your apps and AI agents, it is on Github but super early though (alpha prerelease, web app and CLI etc coming very soon)
https://github.com/tool-io/tools-ts
The goal of https://tool.io is to be a Wikipedia but for functional software tools. Instead of recreating all kinds of small tools, use an open-source library instead, and you can contribute and create your own tools and publish them (by contributing on Github for now)
For years, I struggled to make any headway with Linux - I get so frustrated at how obscure, inscrutable, and unintuitive TUIs are! God I don’t want to waste my life typing esoteric strings of commands into the terminal. When I started with computers that was all there was, and once GUIs happened I never looked back.
Good news though, these days Claude will just do it for me!
I’ve been working on setting up a home media server, using headless Debian on a pi - I’ve got it set up to stream music and videos, hold all my ROMs, I’ve got it automatically standardizing file names and handling tagging and subtitles - all attached to a big 6-drive enclosure that I just stuffed all my random old HDDs into.
Even though I haven’t written more than a dozen lines of code or commands for the whole thing, I am pretty fuckin pleased that now I can just wave a magic wand and say “I want all my video game soundtracks filed under the game name rather than the artist” and Claude uh finds a way to grant my wish. I spend about an hour each night tweaking it and it’s so easy to customize to be exactly what I need.
[dupe]