I really didn't expect this to be posted here, it's just a job change, and not even that big of one, as my work on Druid and Runebender was getting financial support from Google Fonts already. I sometimes wonder if I posted my shopping list whether it would make the HN front page. (Ooh, I see Impossible burgers, let's have a discussion about that)
But as long as we're here, feel free to AMA, and I'll do my best to answer.
I am working a lot with cubic beziers and wonder what the weaknesses of these curves are that require new developments. In Inkscape there is a Spiro spline, but at the end the curves are again represented through cubic bezier curves. What are you hoping to achieve that will make curves/splines easier, better, or more aesthetic?
So this is work in the pipeline, and there's a bunch more polishing that's needed, but I will definitely be writing more about it soon, and I hope that will answer your questions.
But I'll give a brief teaser here anyway. The new spline is a hybrid between Spiro and cubic Béziers, with (I hope) the best features of both. Spiro is good for smooth curves but not so good when you need to crank up the tension. Béziers, by contrast, can do tension just fine, but aren't very smooth (one technical manifestation is that curvature maxima tend to happen near the segment endpoints, but rarely on them, especially for S-shaped curves).
Something that's particularly difficult for Béziers is a smooth transition from a straight line segment into a curve, which is important for U-shaped letters. Unless you take special care, the curvature jumps right up to some nonzero value at the join point. But with the new spline, it's continuous by default, unless you explicitly drag the control handles to make it not so.
It's difficult for people to learn to draw well with cubic Béziers, but obviously people climb that learning curve (so to speak) and get great results. Even so, I wonder if there's a bit of Stockholm syndrome, of being attached to that way of working just because of the amount of pain that's gone into the process of learning it.
Great answer, thanks. I do not think that it is Stockholm Syndrome, many people are quite aware that cubic beziers are not perfect. But for many applications that's all we have, so we simply accept them and try make as much of it as possible. If you were able to create a better foundation for 2d vector graphics, that would be fantastic.
I wrote about this a bit in a sibling comment, but making piet-gpu real is a major goal and probably the main reason I got the gig. It's speculative in some ways because it's trying to do things in a new way, but if it works out as well as I hope, it's pretty easy to see why it's worth doing.
I think you’ve made a name for yourself in the Rust community, especially on HN where Rust content is generally upvoted a lot, so people are generally interested in what you’re up to. I know I am.
Slightly off-topic, but in the spirit of AMA - how would you recommend, on the web (via wasm-bindgen), converting text (like Slate or DraftJS's data models, not necessarily html+css) to WebGL?
Converting to a texture by way of Canvas API calls won't really work with mixed directional text...
From following the links on your blog, seems like state of the art is Allsorts + Pathfinder?
I can't wholeheartedly recommend anything right now. There should be a standard text layout library with pluggable back-ends, but there isn't. If you go to the #text stream on xi.zulipchat.com, there's a lot of discussion under the "Skribo: lifting the curse" topic and a couple others.
It's definitely possible to build something yourself using Allsorts and other pieces, but making it all work well is a highly nontrivial task. Part of the problem is that there are a bunch of projects out there, each with their own subset of requirements, rather than one good one.
I'd like to mentor work to make this situation better, but it's too much for me to take on single-handedly.
I'm also hoping that WebGPU catches on, and we'll be able to run piet-gpu on it (through wasm). That would, I think, be compelling for a lot of interesting use cases.
Thanks for the overview! I'd love to learn and attack this, and I'm also interested in tying it to an ECS for rendering - but so many hours in the day... will reach out if I can see a real opportunity to do something here.
I'd imagine it's also going to be needed by the Ruffle folks when they get to adding TLFText support
Maybe the Metamath community can steal a little more of your time :-), especially since there's more Rust-related work in it.
I think the "Report on the 2020 FOSS Contributor Survey" (December 2020) https://www.linuxfoundation.org/blog/2020/12/download-the-re... is consistent with your experience: Of the OSS contributors surveyed, about 3/4ths were full time, and about 1/2 of all contributors were paid to develop OSS (almost all by their employers). The future is hard to predict, but I think those numbers are likely to increase over time. Do you agree?
Thanks! I had a great conversation with Mario Carneiro a couple weeks ago (I hope he doesn't mind me mentioning that), but sadly, I think I'm going to have to lay some of my research interests down, at least for now, to have more focus for my other ambitious research interests.
I'll not speak to OSS generally, as I'm sure other people have more insight than I do, but specifically within the Rust ecosystem, I can confidently predict corresponding numbers increasing significantly.
I don't have a question but I first heard about you because of Inconsolata (I instantly fell in love with it.) Also, your writing is just exceptionally good.
Thanks! Did you know that it's now a 2-axis variable font, with large ranges on both width and weight? Check it out on Google Fonts.
And also thanks for the kind words about my writing. I consider education to be a pretty big part of my personal mission, and take care to write clearly, explicitly trying to minimize controversy and misunderstanding (if you optimize for clicks or number of comments, it often takes you in a different direction). And sometimes my blog posts take a long time to gestate. "The compositor is evil" was 18 months from concept to publication, 11 of which were in my private repo. It's nice to hear that people appreciate the effort.
I totally appreciate it! And kudos on your personal mission.
Not that you don't have enough on your plate, but I wonder if you've been interested in doing a kind of "on writing" post where you can articulate your approach? I think your writing is unusual in that it has both specificity and approach-ability in equal measure. Like, it's precise but also friendly if that makes any sense. Definitely uncommon in any circles but more so in tech circles. (Also the layout/presentation of your blog is so nice.)
Edit: To be clear, and to quote a previous blog post of yours, "As a reader of my blog, you likely have above average ability to discern truthful information from lies, and you also probably can communicate reasonably effectively to other people." A few nuggets of wisdom on effective writing could help us trying to communicate with others. :-)
Thanks for the kind words. It will not be, as work on Druid is very much in scope for my new role. And I'm especially excited about Piet, as I think I've basically figured out how to get next-gen performance out of GPU rendering, and think a good 2D rendering engine is an essential piece of infrastructure needed for Rust GUI.
Wouldn't it be nice, to have a deep project staring at you and you being able to dive into it, whilst paid and bettering the future.
I've never experienced that and it's a shame as I think this is what true enlightenment is in a civilisation.
That's far more valuable than escaping the rat race and being loaded, blowing it on real estate and night clubs.
It's dangerous to think this way tho because you then start talking about minimum wage which only raises the cost of life for everyone else and takes the poor to really poor. It also leads to communism. Not sure if there is a utopia that isn't communistic in approach where people have the freedom to put their brains onto their topic of choice without worrying about the immediate commercial returns.
21 comments
[ 5.6 ms ] story [ 61.7 ms ] threadBut as long as we're here, feel free to AMA, and I'll do my best to answer.
But I'll give a brief teaser here anyway. The new spline is a hybrid between Spiro and cubic Béziers, with (I hope) the best features of both. Spiro is good for smooth curves but not so good when you need to crank up the tension. Béziers, by contrast, can do tension just fine, but aren't very smooth (one technical manifestation is that curvature maxima tend to happen near the segment endpoints, but rarely on them, especially for S-shaped curves).
Something that's particularly difficult for Béziers is a smooth transition from a straight line segment into a curve, which is important for U-shaped letters. Unless you take special care, the curvature jumps right up to some nonzero value at the join point. But with the new spline, it's continuous by default, unless you explicitly drag the control handles to make it not so.
It's difficult for people to learn to draw well with cubic Béziers, but obviously people climb that learning curve (so to speak) and get great results. Even so, I wonder if there's a bit of Stockholm syndrome, of being attached to that way of working just because of the amount of pain that's gone into the process of learning it.
It's a job change, but a significant one. I am mostly interested in how this affects your other projects?
Namely piet.
I wrote about this a bit in a sibling comment, but making piet-gpu real is a major goal and probably the main reason I got the gig. It's speculative in some ways because it's trying to do things in a new way, but if it works out as well as I hope, it's pretty easy to see why it's worth doing.
Converting to a texture by way of Canvas API calls won't really work with mixed directional text...
From following the links on your blog, seems like state of the art is Allsorts + Pathfinder?
It's definitely possible to build something yourself using Allsorts and other pieces, but making it all work well is a highly nontrivial task. Part of the problem is that there are a bunch of projects out there, each with their own subset of requirements, rather than one good one.
I'd like to mentor work to make this situation better, but it's too much for me to take on single-handedly.
I'm also hoping that WebGPU catches on, and we'll be able to run piet-gpu on it (through wasm). That would, I think, be compelling for a lot of interesting use cases.
I'd imagine it's also going to be needed by the Ruffle folks when they get to adding TLFText support
Maybe the Metamath community can steal a little more of your time :-), especially since there's more Rust-related work in it.
I think the "Report on the 2020 FOSS Contributor Survey" (December 2020) https://www.linuxfoundation.org/blog/2020/12/download-the-re... is consistent with your experience: Of the OSS contributors surveyed, about 3/4ths were full time, and about 1/2 of all contributors were paid to develop OSS (almost all by their employers). The future is hard to predict, but I think those numbers are likely to increase over time. Do you agree?
I'll not speak to OSS generally, as I'm sure other people have more insight than I do, but specifically within the Rust ecosystem, I can confidently predict corresponding numbers increasing significantly.
And also thanks for the kind words about my writing. I consider education to be a pretty big part of my personal mission, and take care to write clearly, explicitly trying to minimize controversy and misunderstanding (if you optimize for clicks or number of comments, it often takes you in a different direction). And sometimes my blog posts take a long time to gestate. "The compositor is evil" was 18 months from concept to publication, 11 of which were in my private repo. It's nice to hear that people appreciate the effort.
Not that you don't have enough on your plate, but I wonder if you've been interested in doing a kind of "on writing" post where you can articulate your approach? I think your writing is unusual in that it has both specificity and approach-ability in equal measure. Like, it's precise but also friendly if that makes any sense. Definitely uncommon in any circles but more so in tech circles. (Also the layout/presentation of your blog is so nice.)
Edit: To be clear, and to quote a previous blog post of yours, "As a reader of my blog, you likely have above average ability to discern truthful information from lies, and you also probably can communicate reasonably effectively to other people." A few nuggets of wisdom on effective writing could help us trying to communicate with others. :-)
I've never experienced that and it's a shame as I think this is what true enlightenment is in a civilisation.
That's far more valuable than escaping the rat race and being loaded, blowing it on real estate and night clubs.
It's dangerous to think this way tho because you then start talking about minimum wage which only raises the cost of life for everyone else and takes the poor to really poor. It also leads to communism. Not sure if there is a utopia that isn't communistic in approach where people have the freedom to put their brains onto their topic of choice without worrying about the immediate commercial returns.