What are you working on? Any new ideas that you're thinking about?
https://bauble.studio/ is a lisp-based procedural 3D art playground that I hacked together a while ago. It's fun to play with, but it's a very limiting tool: you can do a lot to compose signed distance functions, but there's no way to control the rendering or do anything "custom" that the tool doesn't explicitly allow.
So lately I've been working on a "v2" that exposes a full superset of GLSL, so you can write arbitrary shaders -- even foregoing SDFs altogether -- in a high-level lisp language. The core "default" raymarcher is still there, but you can choose to ignore it and implement, say, volumetric rendering, while still using the provided SDF combinators if you want.
The new implementation is much more general and flexible, and it now supports things like 2D extrusions, mesh export for 3D printing, user-defined procedural noise functions... anything you can do in Shadertoy, you can now do in Bauble. One upcoming feature that I'm very excited about is custom uniforms and embedding in other webpages -- so you can write a blog post with interactive 3D visualizations, for example.
(Also as a fun coincidence: my first cast bronze Bauble arrived today! https://x.com/ianthehenry/status/1827461714524434883)
Am I right that the output of the lisp code is ultimately a plain GLSL shader (like one might find on shadertoy.com)?
I built a SDF-based rendering system (2D) for my game, and one of the big hurdles was how to have them be data-driven, rather than needing a new shader for each scene or object.
Would be curious if/how you tackled that problem (:
Yep! It just outputs GLSL. It doesn't do anything smart -- it's a single giant shader that gets recompiled whenever you change anything, so it wouldn't really work for something like a game. I mean, it could handle like basic instancing of the form "union these N models, where N<256" but there's no way to change the scene graph dynamically.
I've done this for a project where the SDF functions are basically instructions, and you can build up instrictions on the CPU to send to the shader. and then the fragment shader runs them like a mini bytecode interpreter. You can tile up the screen to avoid having too many instructions per fragment. Kinda wild idea and performance may vary depend on what you're doing
That's pretty similar to what I'm doing!
The CPU builds an RPN expression (like "circle, square, union, triangle, subtract"), and the shader evaluates that in a loop.
I wasn't able to find examples of other people doing similar, but it seemed too useful to not be invented yet (:
Do you have any links to your work?
I'm writing some blog posts for my approach, but haven't finished them yet.
> You can tile up the screen to avoid having too many instructions per fragment.
I don't quite understand this part... If a given SDF needs N instructions to be evaluated, then how does tiling reduce N?
> performance may vary depend on what you're doing
Yeah, fill rate was not good enough with a straightforward approach, so I had to cache the evaluated distance values to a (float) texture atlas, then use those to render to screen. Luckily, standard bilinear filtering on distance values produces pretty decent results.
Yes sounds like the same thing! I also couldn't find anyone else doing it. Sounds super interesting what you're doing so I'd love to read your blog post when it's done if you want to drop me a message/email.
My project was using 2D SDFs for UI which meant you could use a bunch of primitive shapes and union/difference between them, and also add outlines, shadows, glows etc. This means that if you tile up the screen and use a union between two rectangles, only the tile with the overlap needs to calculate the union. It's a little more complicated in 3D with frustum culling.
I was doing it in webgl which doesn't have storage buffers and so I had to use uniforms to pass the data which is a huge limitation. Apparently webgpu could be better so I will try to figure that out one day. But it is early prototype so no links or anything yet.
He made quite a few useful videos demoing it.
@ian Adding this to your help page would be helpful.
https://www.youtube.com/@ianthehenry/search?query=livecoding
Looks amazing, I was having fun with cssdoodle, and now I have two cool sites to do some programming+arts.
Thats kinda cool ngl!
This is completely nuts. Well done.
This is phenomenal. Thanks for sharing.
This is amazing! Thanks for sharing
Stunning.
That site needs to be seen. Thats great.
I’m a tech nerd rare coin & currency dealer! I took my two hobbies and combined them into a real business and I’m having the time of my life. Just launched a proper retail site here:
About 50% of my days are spend doing the coin dealer stuff - hunting for inventory, buying collections/doing appraisals, going to coin shows and buying and selling in person, etc.
The other 50% I’m writing code and building out the tech stack for this business. I’ve written the whole backend for the retail site myself, which includes my own inventory management system, sync with eBay and other marketplaces, etc.
I’ve also built out a research tool which includes an ML price prediction engine engine (which sounds fancy but is really just a tabular regression model).
Backend is written in Crystal because I love the language and there’s nobody stopping me from using it :) Frontend is all Svelte and they’re glued together using a mini framework I wrote:
https://github.com/noahlh/celestite
I probably have 5 years worth of ideas I still want to build and I wish I could spend even more time building it all, but it’s super fun actually using it in the real live marketplace so I’d never give that up.
Happy to chat about this stuff with anyone who’s interested or vaguely interested in numismatics.
I have a question - I've seen TikToks of people who buy rolls of coins from the bank and sort through them for rare imperfections then sell them on eBay. I've always wondered whether it would be possible to develop an automated system where a camera takes high res photos of the coins on a conveyor belt, compares to a DB of known imperfections and sets them aside?
Is anyone doing this? It's an interesting business model as the product is money so you'd only stand to make a profit never a loss.
Nobody that I know of is doing this, and see no reason why it wouldn't be possible from a technical standpoint. I think the only reason I can imagine NOT to do is that the ROI probably isn't that high in reality. Now, granted, I don't watch the coin TikToks because 95% of it is clickbait, exaggerate, etc. But my actual impression is that there simply isn't that much actually-valuable material out there hiding in bank rolls (despite what TikTok says).
Most of the people I know who do bank roll hunting and doing it because it's just kinda fun and there's a thrill when you find a silver quarter from 1964 (worth about $5) hiding in a roll of otherwise-normal quarters. But so much of the good stuff has already been plucked from circulation.
Having said that, nothing should stop a good hacker from doing something just for the hell of it :)
do you know why vendors take credit cards, square and applepay, even though those services charge several percent fees? part of it is for convenience for the customer, but another part is that shuttling cash around to the bank and back is time consuming, risky, and takes you away from running your business (let's say you are a breakfast place, you don't make your own cups and napkins or farm your own eggs and coffee either)
>product is money so you'd only stand to make a profit never a loss
you're grabbing the expense part of the business that everybody else is trying to shed. Let's talk also about time value of money. All the money that you've invested in cash is not making money passively as other investments do. Compared to putting the money in the stock market, you're losing 7% a year on this scheme, plus the expenses of running your business, and opportunity cost of not doing something else that generates income.
I did this for personal collections a while back and went through a lot of Canadian quarters to get one from each year and never even found the 1991 I was looking for which is somewhat rare. I guess if you do it full time or automate a bunch maybe you could make money, seems hard though.
That is beautiful!.
One of my favorite design elements is the Guilloche patterning on currency, along with the history behind the use of Guilloche as a form of anti-counterfeiting.
Your site is very simply visually appealing.
Also - I like to order $2 bills from the bank. You can order then, mine delivers them on tuesdays - and they give you a stack of brand new $2 sequentially serialized bills. They are great for tips and gifts.
100% agree! I often get folks asking if their $2 are valuable, and tell them exactly what you do -- no, alas, they're not worth more than $2, but they are super fun to leave as tips because people still get a kick out of 'em.
Thanks!!
Infra: I was hosted on Google Cloud for a while -- literally a single VM running Docker Compose, but I decided I wanted something a bit more flexible and interesting, so last month I switched everything over to Fly.io and I am incredibly happy with them. It's just so easy and fun to manage.
The retail site (rarity7.com) is just a small VM running a Crystal server process to handle web requests. Image hosting is all done on Cloudinary. My backend / inventory management / trading + research engine is a separate Crystal process in a separate VM. Both connect to a Fly Postgres DB. There's one other service which is a small python process on another VM which is doing inference on my regression model. That's super lightweight and I don't need any GPUs to do the inference (tabular data is nice like that).
Overall it's really nothing fancy and it works quite well. A few web-serving VMs and an inference service for my pricing model. I train/retrain the model a few times a year on a local box (my repurposed gaming rig running a 2080Ti).
That's neat and congrats! How long does it take to be part of the authorized dealers listed on the site?
I did it all in about 2-3 years. I was a big collector as a kid but didn't get back into it in a serious way until 2021. Becoming an authorized dealer is basically, fundamentally about building trust. The whole coin industry operates in a very old-school relationship-based trusted way. To become a member of most professional orgs or become an authorized dealer, you need to have 5-10 VERY solid references from other members or authorized dealers, and the only way to get those references is to be a part of the community, build trust, and build relationships by doing business with others (which means honoring your commitments and your word and writing good checks, etc.). In the end, you need to ask 5-10 people to personally vouch for you, so they'd better know you and actually trust you.
This is great, my brother is a history buff and a few years ago I bought him a Hadrian coin for his birthday. I'll look through this and see if I can find something else he'd be interested in, holidays are coming up and I'm always looking for nice gifts.
EDIT: is there any way I could set up an alert for when you add some non-US currency into stock?
That's awesome and a very thoughtful gift for him! Yes I'm planning on building alerting - BUT - I'm probably not going to expand beyond US-based stuff for the foreseeable future. It's just the niche I know and even though there's a big wide world out there, I haven't spun up my brain to learn about it all yet.
If there's any country in particular you're looking for, shoot me an email. I know a ton of other dealers in the business and I'd be happy to point you to someone who might have something he'd enjoy.
Cool project! I showed this to my 13 year old son who is a coin and bill collector; he loves it.
Awesome -- thanks! Tell your son to join the Instagram coin community if he hasn't done it already - there are tons of kids & adults on there and it's a real community that meets up regularly at coin shows, etc. Send me an email and I can give you a heads-up on some starter accounts to follow and get involved.
So let's say I have a few hundred silver dollars. Is this a tool to help me sort them, or does such a tool exist? Like take a picture and it identifies it, looks for common errors, and provides a base price estimate?
There really should be, but the fact is there isn't a tool that does this yet. It would not be deeply hard to build, but it would mean training a model which means getting good enough training data which means taking the time to actually do it. It hasn't been done because it requires someone who is deeply knowledgable about coins AND someone who knows how to train a model and build an app, and the fact is that intersection is pretty small (it's me and probably 20 other people? Give or take). This is very much on my long-term roadmap.
In the short term, the easiest way is to find someone who does this (eg me) and just email me some pictures. I'd be happy to tell you if you've got anything good. The old school neural net between my ears can assist.
(See profile for email).
That's fair. I have to imagine that there's a market for a product like that. My mind goes to auctioneers and estate sales. I know the local auctioneer would kill for a tool like that.
Something to keep in mind if you do build that: have a one time purchase or month long purchase option. When my wife's grandma died, we had to go through her coins looking for good ones. I would've killed for something like this but for a month.
Am curious how you handle trust.
E.g. someone says the delivery didn't come through. Or that the coin is not authentic.
Those are some expensive coins! So was curious.
Great question. Authenticity is easy - I mostly deal with certified coins, which means they’ve all been authenticated and guaranteed by a 3rd party service which stands behind their mark (they will pay you for the coin if they make a mistake, which does happen).
For shipping, that’s just pretty standard across most industries - I have shipping insurance and if USPS fails, they’ll pay for it. But losses happen and it’s just a matter of business (thankfully they’re rare).
The 3rd party service, do they require you to mail the actual coins to them before they authenticate?
Besides your love for the language and nobody telling you otherwise, why Crystal?
wow this is super cool stuff. I see the similarities between currencies and trading cards.
seems like you guys also have grading services
Yes! Very much so. And in fact, the grading services are owned by the same parent companies. NGC and PCGS are the big coin graders and I think their card graders are CGC and PSA respectively?
Are 1987 loonies rare?
I’m working on a collaborative ebook reading app. The idea is that you can create a reading group, invite people and then share comments and highlights and see each other’s reading progress.
It’s something I’ve been wanting for a while, for example to read a book with a group of friends or with a work team, but there’s lots of other possibilities including author reading parties, proofing and education. Got the basics of it working now, need to polish the UI and add the commenting and highlighting features.
I’m using Next.js and Supabase, neither of which I’ve used before so it’s been a fun but often frustrating process. Claude has been an amazing assistance, fixing my mistakes and countless type errors.
Ooooo.... Idea! One thing I've always wanted is an "asynchronous" book group. Basically, some way to tie the questions and conversation to a page or chapter, and then you can follow along at your own speed. Just passing the idea along since I'll never do anything with it.
Storygraph[1] does this with their Buddy Read feature. My wife and I use it to read books together and leave messages about different happenings, which only get unlocked when you mark that you've read up to that page in the book. It's a great feature, and we really enjoy it.
I wish there were discussion websites for media like this. If I've finally watched a tv show, everyone is already talking about another season. I want some sort of "season one insulated forum" or something. For all those that are in the same "temporal" spot.
Not the same thing but if your show has a subreddit, they will probably also have discussion threads for each episode.
Somewhat similar to r/patientgamers - so r/patientreaders, r/patientwatchers, etc.?
That’s a cool idea, thank you for sharing. Yes, I want to tie conversations to specific locations in the text, but I love the idea of being able to set discussion questions as well. Will look into that.
Hey man, it is an amazing idea. I have been thinking to build something similar.
I am building reading clubs for my custom library - on top of crypto tech, and in the process, I have experimented with several book reader tech. pdf.js, muPDF and some other tools, which one did you settle on?
My lib: https://datapond.earth
That’s a fascinating project, thanks for sharing. I’m using epub.js as it already has things like annotations and highlighting and it’s fairly easy to override the book styles.
From the research I’ve done, it seems that most ebook reader libraries are old and not very well supported. Haven’t considered PDF readers yet.
Is it going to be P2P? It would be much more easier to handle book versions and other such technocalities if it is, allowing people to share the EPUB via the platform and stay in sync
This reminds me heavily of Perusall, which we used for a course in university. Take a look at it for “inspiration” - it might be interesting :)
good idea!
feature idea- you can see the reading progress of everyone in the group to sort of apply some passive social pressure to catch up if you're behind
then again, not everyone might be willing to do this since the book club might not all be about actually reading the book for them
Cool! Lemme know if you want help with testing.
same for research papers ( I think there is/are some prototypes but no big communities perhaps)