Menu
Sign In Search Podcasts Charts People & Topics Add Podcast API Blog Pricing

Rain Paharia

๐Ÿ‘ค Speaker
467 total appearances

Appearances Over Time

Podcast Appearances

Oxide and Friends
Crates We Love

So these are bots that behave like strings. So they don't handle every possible path, but they handle basically every realistic bot that most programs are ever going to see. So this is a crate that I use for pretty much everything that I end up writing, and I think most people should use it. There's a,

Oxide and Friends
Crates We Love

there are actually some, now this sounds like, you know, there sounds like a trade-off in some cases, right? Like you're, you know, you're losing some functionality or whatever. But one of the things I've realized from my time working on this stuff is that actually that trade-off was always false.

Oxide and Friends
Crates We Love

there are actually some, now this sounds like, you know, there sounds like a trade-off in some cases, right? Like you're, you know, you're losing some functionality or whatever. But one of the things I've realized from my time working on this stuff is that actually that trade-off was always false.

Oxide and Friends
Crates We Love

And so as an example, like, you know, if you say, if you have a path buff and that path buff has a path that isn't a valid string, then that path does not get serialized as JSON properly. Right. As an example. or if you get a string, it won't get serialized properly. So if you are ever deserializing bots, you are already putting in a restriction that those bots must be valid strings, right?

Oxide and Friends
Crates We Love

And so as an example, like, you know, if you say, if you have a path buff and that path buff has a path that isn't a valid string, then that path does not get serialized as JSON properly. Right. As an example. or if you get a string, it won't get serialized properly. So if you are ever deserializing bots, you are already putting in a restriction that those bots must be valid strings, right?

Oxide and Friends
Crates We Love

So you are not adding anything new here. And I think Mino kind of is a real improvement to anyone who does that. So I know that at Oxide, we use it a bunch. I've used it a bunch. But yeah, I think if you want... If you want to handle paths and you don't already know that you need to handle every possible path, then you should consider using Camino.

Oxide and Friends
Crates We Love

So you are not adding anything new here. And I think Mino kind of is a real improvement to anyone who does that. So I know that at Oxide, we use it a bunch. I've used it a bunch. But yeah, I think if you want... If you want to handle paths and you don't already know that you need to handle every possible path, then you should consider using Camino.

Oxide and Friends
Crates We Love

Sure, yeah. So both of this was just something that actually it was your code. I'm pretty sure it blamed you, Eliza. So I love bytes because it kind of presents this unified interface over. So bytes comes with a type called bytes, which represents this So it uses dynamic dispatcher under the hood, but it is a type that represents a contiguous sequence of bytes.

Oxide and Friends
Crates We Love

Sure, yeah. So both of this was just something that actually it was your code. I'm pretty sure it blamed you, Eliza. So I love bytes because it kind of presents this unified interface over. So bytes comes with a type called bytes, which represents this So it uses dynamic dispatcher under the hood, but it is a type that represents a contiguous sequence of bytes.

Oxide and Friends
Crates We Love

Bytes also comes with a trait called buff, and that buff trait does not require the sequence of bytes to be contiguous. So you can imagine a different implementation, which actually is the segmented list or a segmented queue, which ends up being the right data structure for this off byte sequences. So buff list is actually that segmented queue. And I might've talked about it.

Oxide and Friends
Crates We Love

Bytes also comes with a trait called buff, and that buff trait does not require the sequence of bytes to be contiguous. So you can imagine a different implementation, which actually is the segmented list or a segmented queue, which ends up being the right data structure for this off byte sequences. So buff list is actually that segmented queue. And I might've talked about it.

Oxide and Friends
Crates We Love

I think I talked about it in the episode where we talked about prop test and verification, but that was where I ended up writing a cursor type over it, one that can essentially navigate this queue and use prop test for that, and ended up finding six different bugs, because like Eliza, I find it very, very hard to reason about these things by myself.

Oxide and Friends
Crates We Love

I think I talked about it in the episode where we talked about prop test and verification, but that was where I ended up writing a cursor type over it, one that can essentially navigate this queue and use prop test for that, and ended up finding six different bugs, because like Eliza, I find it very, very hard to reason about these things by myself.

Oxide and Friends
Crates We Love

Yeah, that is great, Eliza. I ended up writing the very incorrect at first, but now fully correct cursor implementation. That was my contribution to it.

Oxide and Friends
Crates We Love

Yeah, that is great, Eliza. I ended up writing the very incorrect at first, but now fully correct cursor implementation. That was my contribution to it.

Oxide and Friends
Crates We Love

Um, yeah, uh, the last one I actually wanted to mention, uh, because I think it, it deserves a real, real shout out is, uh, Winnow. So, um, maybe this came up in the, in the chat earlier, but, um, so, uh, so I got a, you know, I got a, I got a degree in computer science and like, you know, one of the requirements is a compilers class.

Oxide and Friends
Crates We Love

Um, yeah, uh, the last one I actually wanted to mention, uh, because I think it, it deserves a real, real shout out is, uh, Winnow. So, um, maybe this came up in the, in the chat earlier, but, um, so, uh, so I got a, you know, I got a, I got a degree in computer science and like, you know, one of the requirements is a compilers class.

Oxide and Friends
Crates We Love

And like, I hated writing compilers and I hated writing parsers. That was my least favorite class out of the whole thing. Um, and. Since then, I've had to implement parsers a few times, and each and every time I've just, like, it's been miserable. And NOM, so I ended up using NOM for something. And NOM, I think, is a great library.

Oxide and Friends
Crates We Love

And like, I hated writing compilers and I hated writing parsers. That was my least favorite class out of the whole thing. Um, and. Since then, I've had to implement parsers a few times, and each and every time I've just, like, it's been miserable. And NOM, so I ended up using NOM for something. And NOM, I think, is a great library.

Oxide and Friends
Crates We Love

There's a whole bunch of trade-offs across all the different libraries. But I ended up using NOM for something, and I thought NOM was okay. Winnow feels like the first time where writing a parser was a joyful experience, which is not something I ever thought I would say about a parser library. So I did want to make a special shout out to Winnow. Ed Page has done a lot of work on this stuff.