No idea if they pivoted away from blockchain or just stopped saying it on their website, but it makes me take this with several grains of salt.
[1] https://web.archive.org/web/20190502154457/https://www.adjoi...
7,006 karma · joined December 12, 2014
https://mattkeeter.com
No idea if they pivoted away from blockchain or just stopped saying it on their website, but it makes me take this with several grains of salt.
[1] https://web.archive.org/web/20190502154457/https://www.adjoi...
(It was previously counting up at $3855/second, but is now stopped)
(Previous HN discussion: https://news.ycombinator.com/item?id=24303832)
https://www.mattkeeter.com/research/mpr/
https://news.ycombinator.com/item?id=26873691
There's also a good Twitter thread here:
https://twitter.com/CasualEffects/status/1385389913881858054
libfive installs custom readers for #0, #1, #2, and so on, which all do the same thing: store the syntax position (row/column/span), then create a free variable with a particular id that's associated with that syntax position.
When pushing and pulling on the surface, it's solving for free variables values that put the surface at your mouse cursor's position. Then, it can splice those values back into the original script using the row/column/span data from before.
Python does the same thing with a magic `var(...)` function, which is used as the target for an AST transform here:
https://github.com/libfive/libfive/blob/master/libfive/bind/...
[1] http://www.gnu.org/software/guile/manual/guile.html#Reader-E...
This sounds like a bug, please open a Github issue and I'll investigate.
I don't believe the MPL requires the ability to re-link; this is one of the reasons I chose it over the LGPL.
(My intentions are to promote development of the libfive by require changes to the library itself to be shared, while not limiting commercial use / distribution / embedding into a larger application; there is at least one commercial CAD company using libfive as a component in their application)
Yes, these are now part of libfive's core – Python is an important-enough language that having canonical, first-party bindings seems important.
There was a bunch of infrastructure work to get to this point: the standard library was ported from Scheme to C++, so the shape bindings are now autogenerated for both target languages and use FFI to call into a dynamic library (with a C API).
This means that you can go wild with geometric and coordinate transformations – even weird things like twisting or attract/repel will work fine.
(the only requirement is C0 continuity, which is the bare minimum; otherwise, a point could be both inside and outside the shape depending on which direction you approach it from)
The site isn't totally up to date – the Python bindings + API are brand new, and need some examples, but they work great if you know how to use them!
The downside to sphere tracing and similar is that it limits the input model: you have to guarantee that evaluating the model at [x, y, z] gives you a result that's less-than-or-equal to the true (Euclidean) distance to the shape's surface.
(or a distance adjusted by some constant scaling factor, i.e. Lipshitz continuity [2])
This is a relatively fragile property, and really limits what kinds of shapes and transformations you can use when modeling.
Using interval arithmetic is more robust against arbitrary models, at the cost of being less efficient when models are well-behaved.
I don't know much about state-of-the-art fractal rendering! I'd imagine that the fixed (original) tape in MPR would be a limitation here, because you may want to terminate conditionally, rather than evaluating a fixed expression.
[1] http://www.fulcrum-demo.org/wp-content/uploads/2012/04/Cone_...
In another project [1], I found a 2-6x speedup in going from an interpreter to a fully-compiled shader, so this can make a huge difference!
If you enjoyed this paper, there's a companion blog post about the actual process of writing it: https://www.mattkeeter.com/projects/siggraph/
(and I'm happy to answer questions, of course)
(There's also a bit of extra logic to skip regions which are occluded in Z, plus a final pass to render normals using automatic differentiation)
A truly fancy system would be something like Tristan Hume's keyboard-to-photon latency system: https://thume.ca/2020/05/20/making-a-latency-tester/
Sure enough, it compiles down to "add rax, 7"
In practice, I'm racing mesh loading against "how long does the OS take to give you an OpenGL context", which is rarely below 160 ms (longer if it has to switch from integrated to discrete GPU).
Linked deep in the Twitter replies [1], there's an open glibc issue about this, dating back to 2014:
https://sourceware.org/bugzilla/show_bug.cgi?id=17577
C doesn't have any requirements on the complexity of sscanf, so it might not be a bug per se, but it's certainly... a pitfall.
[1] https://twitter.com/impraxical/status/1367194430835425283
There's a long list of properties that you want your algorithm to have:
- Meshes should be watertight
- Meshes should be manifold
- There should be no self-intersections
- Sharp features (edges and corners) should be reproduced accurately, rather than blurred or bevelled
- Thin features should be preserved (which makes it tricky to sample on a regular grid!)
- The mesh should be adaptive, i.e. having fewer triangles in flat areas
It's relatively easy to get ~3 of these properties, and (last time I checked) nigh impossible to get 5 or 6 in the general case.
If you'd like to read more, Doug Moen has a comprehensive overview of the literature: https://github.com/curv3d/curv/blob/master/ideas/v-rep/To_Me...
I've also written up a 2D study of Marching Cubes (Squares) vs Dual Contouring: https://www.mattkeeter.com/projects/contours/
And a deep dive into the math that lets you precisely position vertexes in dual contouring: https://www.mattkeeter.com/projects/qef
It's named "Futureproof": https://www.mattkeeter.com/projects/futureproof/
Perhaps they meant "database"?
Anyways, this article is basically content-free, so if you've come to the comments first, I wouldn't recommend it!
One of my favorite problems from last year involved programming a robot to traverse an obstacle course (https://adventofcode.com/2019/day/21).
Interestingly, the space of potential programs was small enough (105 bits) that you could smash an SMT solver into it and solve for a correct, minimal program, given the shape of your obstacle course: https://www.mattkeeter.com/projects/synthesis/
https://blog.siggraph.org/2018/10/the-magic-of-technical-pap...
https://mntre.com/media/reform_md/2020-05-08-the-much-more-p...
It's not as powerful as most modern laptops (uses an iMX8 SOM, rather than an x86 CPU), but it's got a full keyboard, trackball (!), replaceable batteries, etc.
The rooms persist as long as there's at least one connected player in them. Exiting + rejoining a room under the same name will let you continue to accumulate points under that name.
(Rejoining isn't perfectly seamless: you won't necessarily be dealt the exact same hand, and if you exit + rejoin while it's your turn, your turn will be skipped)
I also appreciate the load testing! For the curious, we're at 30 open rooms, and I'm seeing:
- 0.0 server load
- 2.6 MB of RAM used by nginx + its worker process
- 4 MB used by pont-server