
This might be our most hyped show of all time because we've been teasing it for, like

This is certainly one that's most planned in advance. I I I I think this is, like, a this whole advance planning is, is new to us. And, of course, we're we're in our our, I would say, Europe friendly time, but but Arun, you're you're in you're in Turkey. Right? So it's like it's not it's I think it's 8PM there. Is that right? It's it's definitely not it's it's not exactly midday there.
No. It's, yeah. It's eight 8PM. I have, like, two hour difference, with Europe. So CAT, like, two hour ahead of me, I think. I'm not sure. I think. Yeah. But that's So it's

still, not I mean, our normal time is is what? 4AM your time.

Four 4AM. Yeah. Yeah. Exactly. It's better than 4AM.

That's friend friendlier. It's all I mean, these days that counts as downright welcoming.

We the oasis is half full. Right. So, Adam, I'm I am very excited for this. I'm I am very excited to talk to his Arun, thank you so much for joining us. We've got some folks from Oxide who've been building on Ratatouille. And so we're we're really excited to talk about this. Yeah. We we we brought

all we brought all your groupies. I hope that's okay. Like, we couldn't keep them away. A lot of Ratatouille excitement at Oxide.

That's sweet. We're we're big Ratatouille users for sure. We we really love Ratatouille. The but, Adam, actually, has a a way of background. I thought I might tell I think I'm gonna tell you something about me that you might not know.

Okay. Wow. Okay. An ox headed prince first.

Making history here, folks. Brian is actually telling me something that I haven't already heard six different times over spanning three decades. Yeah. No. The the

I'm gonna put down the crossword puzzle. That's great.

Put down the crossword puzzle for a second, if you wouldn't mind. So, and of course, you may also be thinking like, you know what? I'll be the judge of that. I'll be the judge of whether

you told me this or not.

So when, so of course, back in the day, I had an IBM PC XT, which is what I I grew up on. And some of this you do already know, by the way. So don't hit your buzzer yet. Okay? Just just totally. Like, I know we've heard this one before. No. No. Stop. Hold on.
I'm gonna get to something you've heard before. The and we so we did not have we had a very, very, very early PCXT. Actually, I believe the second PCXT in the state of Colorado, which obscenely expensive. My father had the idea he was gonna start a software company, that kinda died. But the, so I had this this what was kind of a business computer at the time that everyone else had really an Apple two e.
And the, so it, I could I mean, what I wanted to do, which is kind of what, you know, every kid wants to do, is I wanted to play games on this thing. Right? And, there there was a graphics card, but I only had a monochrome monitor. I had an an Amdek amber monochrome monitor Nice. Which is, like, just as a decide. Have have we have I talked about my Amdek before with you?

No. No.

Oh, man. That thing is like that that is my rosebud, man. That thing I I had that thing all the way through college, and it I it it it was left in a garage in in in Providence, and I'm I I like no, no, it's it's it's not good. Like, if the I I I did that monitor dirty, and whenever and that amber is like got such a kind of an emotional resonance with me because I spent so much time. I had like the word perfect screen was burned in on that on that monitor.
Beautiful, beautiful monitor. But the, terminal, I should say, really. Of course, so we there was a Hercules graphics card that you could buy for this thing, a monochrome graphics card, but it was, like, $250 in 1985. So like, yeah, that was a % not happening. You think a GPU's are expensive, you should try buying a Hercules monochrome card, graphics card in 1985.
So I everything I did was text based, and I, there were some text based games. I would write my own games in basic and then later Turbo Pascal. But what I then this is the bit that that, so I, wanted to have a, I was writing batch files, DOS batch files.
Nice.

And I wanted to have a way of having a a user pick from a menu. God only knows why I wanted to do this. Like, I wasn't making software for anybody else. I don't know. This is just, like, the the things kids do in their nerdy kids do in their bedroom, I guess. The, but I wanted to have a way of having, like, from a I mean, to call a batch file a shell script is far too generous. It really is. It, have you do you have any spent time with DOS, Adam? Is this, like

very little. I think only when I was dealing with, like, Renegade BBS stuff, like, just to also turn to the Wayback Machine. Oh, I I guess I guess not quite as far back, though.

Yeah. I mean, it it it's, you know, raw but it does bad. Batch files bad.
Percent error level percent.

Percent error level percent. Did you scream error level, Josh? I we need to scream percent error level. I I think I don't think that I think that had to be an upper case.
I think it yeah. I think that were case sensitive.

So I had this idea, I I and I guess maybe the the the apple didn't fall far from the tree in terms of my father's delusions of starting a software company. My own delusions, I'm gonna, like, I am gonna write this piece of software that allows you to have this this menu from a batch file, and, like, this is gonna be, like, my ticket to the bigs. Like, this is gonna be I'm really going places. So and I remember vividly thinking when I was in, like, eighth grade, like, if I can just figure out how to do, like, how how to read and write to a file, like, I'm cooking with gas. I'm, like, I I'm this is this is and I, so I did this thing and built this this TUI, really, that would allow you to, like, specify from a batch file, specify a bunch of things, and, made it available as as shareware, which, of course, in 1987 meant that I was uploading it to the Montana Programmers BBS.
That's cool. Yeah. Exactly. I this is where or when you may be like, where am I right now? Am I, like, what happened? I I feel I am down at the home. You know, give me five downloads for an upload, you'd say.
I enjoyed this a lot, to be honest.

I I so that was the extent of my distribution. And then I actually, like, alright. Well, I gotta, like, you know, print. I said, I I I printed I I typed on our our IBM typewriters, literally circa 1948, just typed up some labels and was, and I was describing my ambitions to a friend of mine. And a friend of his is like, that sounds really useful. He's like, how I I I'll take that. I'm like, how much is it? I'm like, I think it's $5. And he gave me $5.

Wait a minute. You I I didn't know this at all. So you had a your first profitable software business back in 1985 or whatever?

Yes. 1980 yeah. Seven. Whatever. Nineteen eighty yeah. Nineteen yeah. Eighty seven, '80 '8, something like that. Peter Rubinstein, God bless you wherever you are, for your your charity. Oh, clearly, money meant nothing to you because you gave me $5. An early angel investor.
The early angel super angel, actually. Well and and so, Adam, you may wonder, well, this is suspiciously the same dollar figure, and but it is actually the same dollar figure. I know what you're thinking of something you've heard many times, which is namely when I also part of the headwaters of Food for Money Friday wasn't just Robert, but was me drinking a cup of vinegar on a dare for $5 at scout camp circa, like, 1985, maybe two years earlier. So I think I would like to say that, like, yeah, that $5, I was, you know, I was cleaning it up a bit. I was, I was actually I earned that $5.
That's awesome. The ended vomit, the person who paid me said it was the best. Said, I think that's the best $5 I'll ever spend in my life. I would like to believe that they still believe that because I gave them much entertainment for that $5. Peter Rubinstein's 5 dollars much more like a traditional angel investment.
That one's just that one. I don't know that he ever that was that was the only one I actually, so that was it. That that that was, that but my it all kind of begins for me with a with a with a with a two e. And And
that'd be that would be almost $15 in today's money. Right?

And that'll be $15 exactly. But, of course, like, $15, then you gotta correct for the fact that I have no job and no way of earning money other than, like, doing food related stunts. So you you you gotta adjust for that. And it's kinda like, it's a little like, you know, like a thousand bucks. You could be like, wow, I can really I can buy, like, two whoppers with this.
Okay. But so then we, and and unless, so, you know, you were, you had the the glory of being on the Mac pretty early, right? So you were That's right.

Yeah. My first computer was a Mac in 1986.

Yeah. Wow. I mean, did you have the GI Joe aircraft carrier too? Are you one of those kids? Stop.

Stop. You, you, you careful what you say. I was not. I know those kids and I was not

one of those kids. Doctor. No, I was that. Listen, that was what I said was rude and insensitive. And I didn't like to give you that. I, I know based on your ability to socialize with the people that you were not in fact, one of the aircraft carriers. Yeah. You're gonna

ask you if I was homeschooled and forgiven. That's right. With forgiveness to all the homeschoolers who are listening.

But, like, yeah, go play with your aircraft carrier. You do you know you wanna you know you wanna do it anyway. Or invite us over so you can beat us at the video game that you've got. Like, you did these these guys all the time. But so okay.
So you and I think that that was an era where, like, the graphical user interface is, like, the step forward. Yeah. And everything is gonna move to graphical user interfaces. But then there's this kind of, like, command line I I would say I don't know if backlash is the right word, but then you I mean, the the kind of the Unix versus Windows dichotomy that that, typifies kind of the late nineties is really a kind of a a GUI versus a CLI kind of debate at some level. And the I I mean, we we had a a colleague who was describing, because this is where we're like IT organizations would be very divided based on UNIX versus Windows.
And
you remember Jared always saying like, look, these got these guys, they just need the clicky clicky. Gotta give you clicky clicky. And so there was this but it was kind of unfortunate that and or I'm sorry to give you kind of, like, the the the background from from nineteen Dickety two over here. But the, it it was a bit unfortunate that there was this kind of divide that if you wanted to have a graphical user interface, it was on Windows or X Windows, and X Windows was it was I mean, x the X is it's tough. Right?
It's tough to make a really good clean X. You definitely can, and, you know, we did, but it was like, it's not easy at all. Mhmm. Did you you must you obviously did programming in x, for sure.

Yeah. Yeah. So, I mean, like, in in in college, in, like, the graphics courses and stuff. Yeah. I mean, and and I have all the x manuals propping up on the course that I've left around. Yeah.

Yeah. Yeah. Yeah. So we did right. So the the I don't know. I'm not sure if you know X Windows, but, like, the the the hallmark of X Windows is the the end the kind of like the

the The, like, the pride flag of pride flag of books with, like, all the different colors.

Also, I was I was gonna go the Pokemon route, but I think you're also right. It's kinda like the you'll collect them all. You have this kind of, like, you know, whatever it is, 12 books, nine books that are the x window set. And you kinda need that up on your lap as you were doing the stuff because it was just, it was not exactly clean. There's a lot.
And in part because it was a C based interface and so on. The but it's okay. So that divide kinda continues. And then Adam, this is kinda thinking about, like, our own, like, our own journey with respect to user interfaces. Now, fast forward to 02/2006, and it's like, man, we wanna, like there are things you wanna be able to do graphically the that you like, how do we but we we're not we're on the server side, and this is like the the the rise of AJAX.
Right? And Right. Being able to build, like, real web apps. And then, you know, you and I went and did a a really sophisticated user interface using the web at a pretty early time, in hindsight. Yep.
Although, you know, as early as it was, it was still so late that when we were we were not gonna use Django, we were gonna just, like, implement to the raw DOM. And there are people who are like, oh my god. That's like, are you ready? You're like, you're like on the metal. It's like it's a it's a dog. It's not. It's like it's still pretty high level.

It it is notable that the state of the art, as you might recall, the competitor who we were looking at, it looked like command line tools wrapped in pretags. So I do feel like there is sort of a a a circular notion to this and we'll we'll as we'll get to later on.

Yeah. For sure, we'll get to. Yeah. Absolutely. I think there's a circular notion to it. And and I'm like, I was trying to think like when did I first start seeing I mean, because we definitely had to have some TUI programs. I I don't know when the term TUI started to arise. I don't think I heard it until, you know, the last decade for sure. I don't think I heard it before that, but maybe it's been always been around.

Do do you remember we we used to call our thing, I I almost hesitate to say it, a buoy. I think I'm I I feel like
you called them. I think you were the only people that ever used that,

that acronym.

Josh Josh has been patiently waiting for years. It's like, I will stage the next time these guys say buoy, I'm staging intervention. I'm jumping on.

It was such an awful term. I could never get behind it, but it was for a brief moment in sort of the late aughts or whatever. It's it was the term of art. It was awful. And I'm so glad it's fallen out of the lexicon.

I think that I think Mike invented that one.

I don't think so. No. No. No. That that was that people. Yeah. That was that was a thing.

Oh, that was a thing. Okay. Well, and then the and then we did have some things that had to be text based. I mean, there were or something and using curses or end curses.
Right.

Which is terrible. Although, actually, do and Encurse is is also kind of you know, I know we over the course of this podcast, we're really just going through our collective resentment that we've accumulated over our lives. The the Battlecruise knock off, do you know this?

Oh, a Netras.

Netras. And do you know what Netras is? So the for context.

Yeah. For a lot of context, I would just say Battletress, the Tetris, inspired a game that you made that is that was

Okay. So are you saying that this is, like, Sam Altman complaining that that DeepSeek is, like, you're a pain at all Tris. You may wanna sit down. I may wanna, like, lose some of the indignation about being knocked off, pal.

It's like we patented Tryst. It's like, did you though? I'm just I

think there's there's there's there's

maybe even a movie about it. I don't know. But, yeah. But Battle Trist was a game you made with some other folks, and it was your obsession in college. And then I would also note, after we finished was it Solaris 10 or Solaris nine? After we finished Solaris 10, it ground the productivity Solaris nine. No.

No. No. No. No. Nope. Nope. Nope. Nope. Nope. It was definitely not after we finished Solaris 10. It was after we finished Solaris nine.

That's right. That's right.

ZFS hung in the balance. ZFS no.

I like,

this is literally, like, you can go through because there were two things that Battle Trust almost capsized. ZFS, because this is early, early, early days of ZFS.

Yeah.

And the and Brigid, my wife, was, in her PhD program. And the the two worst BattleTress players on the planet, this is a net a network Tetris game where you play Tetris against one another. You get the in addition to the regular pieces, you would get these dice. You'd get that into into to lines that would give you money. And then every time you got 20 lines between you, you'd go to a weapons bazaar to buy weapons to screw up the other person's game.

I'm just gonna say in the last thirty years, you've really tightened up the elevator pitch for battle trust.

Thanks. I'm pretty good on that one. Right. Buzzed me.
Bryan, have you played, like, the modern? Like, this sounds a lot like modern, competitive Tetris.

I this is where Adam would point out that I would be wrong to be claiming that. Well, then then they've knocked off Tetris too.
Yeah. I know. Right?

No. This and actually was inspired by, in many ways by Wesleyan Tetris, which is another Tetris train. It was not networked, but would screw up your game. And, anyway, it was a lot of fun. I would, so I I'm I'm just gonna you're you're being a complete gentleman, and I'm I'm just gonna say it. You're a better Battle Trust player than I am.

I was just waiting for that. Thank you. Alright. Thanks, everyone. That's it for today's episode.

We can actually, like, we can actually now end the podcast. Actually, there's to be no more episodes. But you and I had some absolute clash of the titans on I mean, you and I and the thing is when we go at it, it's like a thermonuclear exchange. It is like it it is like Soviets versus it is Warsaw Pact versus NATO full nuclear exchange. It just does not last very long.
Fair. When in contrast, when when Matt Ahrens, ZFS the cofounder of ZFS, early, early, early in ZFS, so a lot of things are unstructured, it's just easy to procrastinate, Bridget working on her PhD early in her dissertation, easy to procrastinate, and those two both basically sucked and they would have these games that would go on for hours, unable to kill one another.

Two kittens trying to kill each other.

Two kittens trying to kill one another when actually the kittens have other things to do, actually. And so, it almost like I I mean, I was getting a little bit worried. I'm like, we like, ZFS might not happen because of Battle Tris. Like, that's how early it was for ZFS. It is it was early, early, early for ZFS. Sorry, Orin. You're getting much more than your bargained for here. Well, I promised we're gonna get the right two. We are we're we're sailing home. I promise.
We're gonna but so alright. So Netras was this curses based knock off of Battle Tress, which, the whole value of it was was curses based. I I kinda like curses had a bit of a stain for me, but but curse have you ever used curses as awful? We did Curses is awful.

Yeah. I have used awful awful. I I have used it for, like, the most pedestrian tasks, and, yes, it's awful.

And, Orhan, have you used curses? Have you had the Bright, like, a c application in curses using curses?
I think I did. Yeah. But it was a long time ago, actually. So I don't remember much about it, Sally.

Well, that's good. It's it's it's bad. Just let me just take our word for it. It is very, very bad. And that was kind of the state of the art.
And I and I'm sure that, like, I'm sure, like, a Python must have good I mean, I'm sure QEs were being starting to blossom elsewhere. Obviously, htop and you get some other applications that are, I mean, Norwin, maybe this is a good place to kinda tack you in here. What's your history with respect to these terminal applications? Because my my read on this is that, like, this is something that was not happening nearly as much ten years ago.
Yes. So my personal history with the terminal and command line actually begins in, I think, 2036 or some some sort of, you know, around that times. I was before that, I was kind of, like, you know, learning programming and, like, trying out different technologies and stuff like that. And then, I basically met with Linux and then, started using Arch Linux, by the way. And, you know, I was just from that point on, I was just, like, a terminal geek.
And then, my first ever Rust project was a Twi project. So, and then it kind of, like, opened many doors about the possibilities of the terminal and command line and stuff like that. But I'm not, like, really, you know, I don't have a very long history with the terminals and stuff like that because, you know, I I just kind of, like, learning about other things, back then. You know, They also, like, I did some GUI programming too. So, yeah, I basically started off with, just trying out Linux and then kind of, quote unquote falling in love with the command lines, and then, I started to learn more about it.
I always had some kind of interest or, like, admiration towards nostalgic technology, some retro stuff, so to speak. So, I basically, like, learned, many things about terminal after that point, but I didn't, like, really, you know, born into the terminal world to so to speak. I was more into, like, you know when I was, like, first met computers, it was, like, Windows, Vista, and stuff like that. So, I I didn't have much thermals going on back then, basically.

Well, I think it's interesting you kinda mentioned that, like, the nostalgia aspect of this because the thing that I find so fascinating and, like, why because we do not use TUI's at Oxide out of any sense of nostalgia. We I mean, although, I guess, the nostalgia doesn't hurt, but the, I mean, because you really need the there are so many, especially on the server side, where it's like all I actually have is a is a shell prompt. All I've got is the ability to exit. I got a terminal, but I don't have a browser. I don't have I don't have you I don't have a network connection.
I'm over a serial line. I don't have I mean, I just like the terminal is the thing that is actually the lowest common denominator that you know you've got absolutely everywhere. So the irony is that, like, the nostalgia kind of brings you back to a spot where you're getting to also, like, real ubiquity. And I mean, I think that and I I mean, Arnaud, you gave a great talk, just last week at Fosdum, which we'll definitely link to. One of the things I mean, there are many favorite parts I had about that talk.
You were showing Ratatouille on the Minitel, which is an old, have you ever seen a Minitel? Adam?

Never. And

Yeah. So the yeah. Go ahead, Orin.
So, somebody in our community, they had this very old, terminal hardware. I think it's, like, for telecommunication or or some some sorts. It's like, like, some, it has some special protocol that it it uses and some kind of, like, you know, special things going on with it. It was, it it was, created in, like, 1980s or, around that time in in France. And this guy just decided to basically put rotatree on this hardware, and he basically, like, shared his whole adventure with it in our Discord.
He was like, okay, guys. I have this hardware. I I wanna, like I have this old terminal, to be specific, and I wanna, like, run on this. And he shared some videos, like, rendering certain widgets and so on. And at at some point, it was, like, rendering fine, but, like, like, it was just buffering a little bit.
And then we kind of tried to figure out why and so on. And, basically, he just made it at the end. He created a Rust library out of that, which enables you to render tweet things on Minitel. Just very mind blowing to me as well. Because, you know, when you think about these, like, rather three, as a library and, like, all the all the other twees that we are using today, those are, like, modern applications that we use today.
Right? But this this thing is has a very different, like, special value to me because, I mean, this is not, like, super useful, but from, from a, like, nostalgia and, like, the experimentation or the retro computing standpoint, I think this has, many good lessons to be learned, because, you know, it's very, it's one of the oldest, like, hardwares that that is running RoTA today.

Well, absolutely. So one, a couple of things. And I I I, if you are if you are French and of a certain age, if you are if if we've got any anyone who's a a Gen Xer and who is French, I mean, the Minitel was, extraordinary. And I, then you ever, you've never seen one of these things or used it?

No. No.

So I, I had a homestay in France, in, 1991. And the family I stayed with, like many French families, had a Minitel terminal, and it was insane. It because it was basically like a it was an it was an Internet. It was a proto Internet, and you could do all sorts of things on this thing. You could it it was like, wow.
This is what would happen if, like, BBS's took over the world. I mean, it was like you could book train tickets on it. You could it was amazing. And it was, so I mean, it was like you're you're tacking into some super deep, deep, roots there. And then but I also love the fact, and Orhan, to be to your to your point about, like, the that going back and operating on these very resource constrained machines has a lot to teach us.
You know, when we had, Ron Minnick on on the metal way back in the day, Adam, he was talking about how much creativity comes from constrained resources.
Mhmm.

And, and we certainly see that with Hubris running on microcontrollers. Right? I mean, Hubris runs the smallest system that Hubris runs on, an M0 plus has, 64 k of ROM, eight k of of of SRAM. And this is where Cliff is like, yeah, and it should run-in 32 k. But, like, I've never run on a system that's that small in my life.
Mhmm. I mean, my my first computer had 256 k of RAM. So and and it does require to get really creative or just to your point of, like, you have to, like, now it must have been really fun to kinda dive into that problem of, like, okay. How do we make this thing run well on this terminal from the eighties? This terminal that is, like, from a Moore's law perspective, I mean, probably running at do you know what the clock rate was on that terminal?
I mean, it is probably on the order of, like, a single digit megahertz.
Yeah. I don't remember the clock rate, but the the rep repo that I just sent to the chat contains all of the information. This guy basically created a, like, interface between, the Minitel and, and Ratatree using ESP 32 and some other other stuff as well. It's like I mean, if there was a, like, a conference talk that that is about this, I would just listen to it. It's super interesting for me and I think this is kind of like, you know, we we need some more details about how this really happened because, you know, this guy showed up on this discord one one time and then next time there was a Minitel running Rataty.
So, yeah, some some parts still mystery to me as well.

Oh, that's awesome. This kinda tacks into I loved, Adam, where we were talking of to the Shreiber's folks about deep seek and this kind of, like, mysteries that happened in the Internet and kind of, like like, the the the hundred language coin anyway. You're just like, wow. This is this is amazing. That is great.
Yeah. And I and I heard I'm totally with you in terms of, like, I would I would absolutely go watch that talk. Just outstanding. Okay. So then so you are getting into terminals, and is that kind of before? When did you discover Rust in all of this?
So, I I kind of got into open source by accident. I I was, like, creating fun projects and sharing them with people on the Internet. And then I discovered GitHub. I started uploading stuff to GitHub. And then I was like, okay. This is called open source. Then, I just wanna keep doing this. Right? And my my mindset was each time I create a new project, I wanted to try something new. So, I I learned about, for example, the Go program language and created some CLI tool.
I learned about Python, Java, and so on. So I was kind of, like, experimenting with different languages and different tech stacks just to just to, like, you know, build cool stuff, not to Yeah.

That's great. Yeah.
And and at some point, I had one friend. He said you should learn Rust. Rust is pretty good. And it was around 02/2018.

I was gonna ask yeah. Yeah. Yeah. I've that that's interesting. I because I do think 2018 is a that's when I learned Rust as well. And I I really think that's a major inflection point for I think kind of Adam in your when's your block entry? Twenty fifteen? When is your block entry? Yeah. That is that just, like, just seems exceedingly painful. And by 2018, Rust is there there are a lot, it's it's I just think it's much more approachable in 2018.
Yeah. Yeah. And, yeah, this this friend of mine, he he was, already, like, creating, small Rust tools and so on. And he was quite hyped about it like everybody else. So I was like, okay, let me just give it a try.
And, I had one project idea which, I had in the back of my head for for some time. I wanted to basically monitor the the Linux kernel because I was, like, running in multiple commands to check what's going on in the kernel, you know, demask and, like, other stuff. And, just wanted to, like, visualize the kernel modules as a list and then see the details of that module, what it does, and so on and, like, monitor the activities. So, I discovered that, discovered a similar app, not very similar, but, like, you know, a dashboard app. It was, Spotify Twi, And this was, written in Rust using the Twi library, Twi RS.
So I was like, okay. I wanna learn Rust and I wanna build this thing. I already have some project as a reference. So maybe I can just, like, read the code a little bit and then try to, like, follow the documentation on the side. And maybe I can just, you know, make this thing happen.
And that's basically my first entry to Rust. I created, this project, you know, this three project. This was my first Rust project. It was quite difficult actually because I was very overwhelmed by all the compilers' errors and all the new concepts and stuff. But, at the end, I basically created this project and I shared it with people and I've really, like, enjoyed, the the feedback and the the, like, you know, the the ecosystem of Rust.
Because for once, I felt like I was engineering something, if that makes sense. Because for the other languages, I was like, okay. There's this thing. I wanna do this thing. Okay. I gotta use this library and, like, very straightforward. But for Rust, it was, like, more, like, kind of painful in a good way. So, so it it was it was a good experience, learning experience as well. And after that point, I kind of, like, got stuck with it. And, yeah, I cannot really move away move away from it.
It's a it's a good thing. Don't get me wrong. But, you know, I'm basically that's my entry to Rust then, please.

That's amazing. I was gonna say, like, oh my god. Spotify Tooie, where have you been my entire life? I've I've never heard of Spotify Toohey. It looks Yeah. Great. It is is there a more active work than the one I just Yeah. Just stupid? It's like Yeah. I'm like, oh, last commit four years ago. It's like, well, maybe the Spotify API hasn't changed much. And then you go to issues, it's like, doesn't work, doesn't work, doesn't install, doesn't work, doesn't work, doesn't work. You're like, okay.
Yeah. There is this, more active one, Spotify player.

I Okay. Good.
Package this for, Arch, and they seem pretty active, so it should be good.

I, I would love a terminal based Spotify player. This this would be life changing for me. So I'm sorry not to turn this podcast into this particular application, but that would be really, really life changing for me. Yeah. So it was that using what was then two ERS? When does it where does kinda two ERS come in here?
So two ERS is, is a library maintained by it was, like, maintained by a single person, and, Florian, his name is. And he was, like, kind of, like putting a lot of effort into it, creating releases and so on. And I kind of like tried to contribute to the repo a bit back then too, and it was like, I don't know, created in, I don't remember when it was created actually. Hold on. I think it was like a couple of years before my first entry to Rust but I'm not sure.
And, I. After that point I basically kind of like liked the the Twi ecosystem and, like, the Twi library, Twi RS library, and kind of, like, kept creating other Twis and also, CLIs too because, I wanted to, like, do other projects in Rust. I enjoyed enjoyed the first one a lot. I kind of, like, wanted to learn more about it and so on. So, I used Tuileries in two other projects of mine and kind of, like, I was very dependent on it after that point, and there's like there isn't any other alternative at that point.
It was just Twi, in like, when you search for, like, how to how to create Twis in Rust, it was just Twi RS. And, I didn't know it was unmaintained until somebody pinged me in one of the discussions. And

Oh, it was twiz. It was actually unmaintained. Okay. Yeah.
Yeah. It was, like, maintained, but, like, the the author was, like, I'm I'm busy, guys. I don't have time. Maybe we should do something about it, like we can create a community around this maybe. Yeah.
Or like add people as maintainers and so on. So I was like, invited to discussion by, other other people who build Twiz. Somebody said, yeah, Orhan created these other tools, maybe he can be involved too and so on. And at that point I knew that I should get involved because I liked the tweed library a lot and it was just, my like, you know, one of the like, I think it was one of my favorite libraries in Rust. And, I basically wanted to kind of lead this, kind of like, you know, organization movement thing.
We kind of, you know, discussed how what do we do, how do we keep this thing alive, and so on. And, one of the, like, one of the, like, most straightforward options was was to just, like, get get access to the repo for maintenance, but the author was kind of not there a lot. He was, saying something and then disappearing again, and there were, like, too much delays between those times, and we had to do something at that point, with a couple of other people. We decided to, create a temporary fork and, maybe we were thinking maybe we can just merge, like, upstream those changes after the author is back. And then, the author was not there still, so we kind of moved on with this temporary fork, created a discord.
We we had some meetings and so on. We we really need needed to move quick because there were other forks too. Some people just forked the tree library and started their own projects. So, we just wanted to, have a central place for this project and, like, you know, central place of development, communication, and everything. So, you know, we forked that.
We had some meetings. A lot of other people joined us. I announced this thing on Reddit. It's really helped us to, bring more people in. And somebody just, said, said that we should rename it. So, one of the suggestions was. I still don't know who suggested that. I searched on Discord a couple of times. I don't know who was the first who suggested it. I don't know if it was in a meeting or it was in GitHub discussions.
I really want to just give props to that person, but I don't know who that was. That wasn't me, for sure. So, was, you know, you know, the the obviously, the name, and, somebody created a logo.

Great. I I I agree with you about the props to the name. So I okay. So when was this? Was this in with when was this? Because I started using it when it was two it was two ERS when I when I started using it, in, and I think Andrew and Rain would well, I guess, Andrew, you would be the one to correct me. I think Humility dashboard was our first use of two ERS. I don't I don't know if that, maybe not.
Two yes. The dashboard was definitely before Wicket.

So, so, Orin, I I was using two ERS as part of Humility is our is our debugger for Hubris. And Hubris being an operating system, not merely. By the way, if you wanna name an an operating system you want to be searchable on Hacker News, definitely don't name it Hubris because Hubris is used in, like, Hubris is used a lot on Hacker News in its actual

Just call it Dunning Kruger OS. That'll be easier. Call

it Dunning Kruger OS. Exactly. Call it flagged OS. Yeah. No. Absolutely. The, so the Humility is our debugger for that. And, we, after we had done bring up of our initial gimmick board, it was like, boy, we really wanna be able to kinda visualize all of these sensors in the system. And, it it was work that I did kinda over the holidays at the end of twenty twenty one into early twenty twenty two, based on two ERS. Loved it.
Like, the mic, this is really, really great. And then, I I I don't know. The renaming must have happened. I think either 2022, maybe even 2023, but with the I I I loved I'm like, the only thing I actually like, the name, like, these guys need a better name.
But you like, you know, you never wanna make

that complaint. You know, Adam, like, you don't wanna be like, the name sucks. Just like

You're right. Your kid's gorgeous, but

tough name. But tough name, Adolf, really. The I mean, you you just don't wanna make that complaint. And so Orhan, I thought it was great. Obviously, I was not the only one that felt that way. And I think Ratatouille is such a good name.

Yeah. Orin, I really appreciate the description like this like, understanding this because the way we stumbled onto this was, like, updating a dependency. Like, I remember updating some dependencies, seeing that two ERS was, like, pushing us to ratatouille and just, like, following along blithely, not understanding, like, this this really complicated community building that you were doing underneath it where it sounds like the or that original author, Florian, was not unsupportive, just also absent. Yes. That there was some urgency to, like, get everyone rallied behind one thing rather than fragmentation.
But I would say that mission accomplished in terms of our experience just being, like, going to update a dependency and moving right along.
Yeah. So I think it it was, like, two year like, two years from now on like, two years two years ago, from now on, that we kind of, like, started this. And, we kind of, like, tried really hard to reach out to the, floor like, the the author, Florian. And, sadly, we we we needed to move really quickly. So, we just, you know, needed to do something about it.
So, we kind of, like, renamed it, around this time, two years ago. And, the we kind of wanted to wait until he was back because we didn't just wanted to, like, you know, quote, unquote steal his project and just move on with it. We were always hopeful about just upstreaming our changes. And one day, he he came back, and he archived to IRS and added a note to ReadMe, at the top of the ReadMe saying that to IRS is now wrote a tweet. Go go ahead and use that project.

And he did that, like, without any coordination? It was just like, alright. I give up.
No. Yeah. He didn't give give give us any signal or anything. And, yeah, that day, I basically created the the Rust security advisory for, like, renaming, like, you know, changing two ERS references to router three and, you know, two ERS is deprecated and so on. So that happened very randomly.
We were just kind of hoping that we might upstream our changes. But at that point, we made a lot of decisions. For example, we decided to, like, continue with the the same versioning scheme and, like, I don't know. We we kind of decided many things. Like, we didn't want to use unsafe, for example.
Like, every, like, little detail, we just discussed it on, on on our meetings and also GitHub discussions. And, all our all our, like, decisions are just, you know, community decisions. At that point, we were, having polls for the name, which was not really, which didn't really make sense because, you know, Rotatouille is obviously picked by everyone. But for the logo, we had some kind of a like a pull for it. Everyone just designed a logo and the current logo was designed by someone in the community.
And there were actually great submissions to that. I also tried one which wasn't picked. I'm happy about that because the current logo is really great. And yeah, so we we kind of like building this community on the side and, kind of, like, moving towards, as a as a new project, basically. But all all our, like you know, everything really depends on TRS.
And the funny thing is after after some point we enabled GitHub Sponsors and, we were just basically accepting, like donations and so on. And there is, one one company would really just donated some money to us and we were like, okay, what do we do with this money? We still don't know what to do with this money, so we decided to maybe like give it back to the original author, you know, support him a bit. So, I sent him an email saying that we just wanted to, like, support him a little bit because he created free of it.

Let's see if he's to this one. I've got I need to make the check out too. Oh, hey. You are there. Oh, okay.
Yeah. So, he kind of, like, rejected very kindly. He said that, guys, I don't need this. You kind of, like, did the best thing ever by just, you know, keeping this project alive. Thank you. I don't, need any donations or anything. So, yeah, he's he's pretty happy with the current state of the project, I would say.

That's great. That's a real one. Yeah. It's great to hear, like, that he I mean, that that it was also so well supported. I don't know. That that he, you know, didn't wanna hand over the repo, but did wanna see it continue. It just sounds it's a great story just to to hear that continuity.
It is really great. I I noticed the whole, like, trying to talk about contributing back. You know, it was a very delicate process. And you all did a, like, a great job managing that, and I'm glad to hear that the original author is was happy with it. But, like, I also noticed it seemed like as soon as, like, Ratatouille became a thing and became the de facto standard that, like, development picked up a lot.
Like, it seemed Yeah. Like, it just started going like, it ramped up very fast. It was like you guys are being polite and not contributing that much code or something, and then boom, it it exploded. Is that is that the case, or is that just the weird outside perspective?
So, when we migrated to a new repo, we actually wanted to keep the the existing PRs in the original repo. And the only way to do that without, you know, getting access to the repo is basically, like, writing a script that will just create a PR from, like, each previous PR. So I I created a very ugly ugly script that will just, you know, go to each PR and also each issue and, like, take everything from like, take like, any comments and everything and just, you know, create, like, the exact duplicate of it into the new repo. So that way, we kind of, like, transferred all the PRs, and slowly, we started working on those PRs because there were, like, a lot of PRs. Like, there were around 50, I think, or, like yeah.
Around 50 probably. And, like, we had these 50 PRs laying there. Most of them are just ready to go, but not being reviewed or, like, not being rebased. So at that point, we had a lot of things to do. I tried to be active on that side and the other other people as well.
And over time, we kind of, like, went over everything. And also, there were new users, so new issues and new PRs. And we were just kind of lucky that we had some great people joining in, and they kind of, like, picked up the maintenance. And now we're we're, like, three people doing all the maintenance, and it's moving not very fast these days, but, it's moving at least. So that's that's good.
So in the beginning, there were, like, a lot of a lot of PRs and a lot of issues to go through, because even, like, the simplest thing, was not merged. Something like, you know, bumping the Rust edition or, like, I don't know, bumping some dependency was just laying there for a long time. So yeah.

Well, really appreciate all of that and also really appreciate, honestly, the way you did it. Because I had to go from two e r s to round two e. Right? So I was like, a and I was like, oh god. This is how brutal is this gonna be? I'm like, oh, this actually isn't bad at all. It was funny.

As brutal as a said script. Right?

Yeah. And they it was it was actually new. It was good because it was a little bit more than that because they they did make some breaking changes. And but the breaking changes were all, like, good. I mean, they were all, like, pretty reasonable, and it it just didn't take too long. It was it was fine. It was it it, it was, as interesting, it was, like, well thought out. And, like, okay. No. Yeah.
That that makes sense. And, you know, we're kinda they took the opportunity to change some names or some things or what have you, but it was it was light. I mean, it was it was not hard to do. You know, it was definitely not more than, you know, a couple of hours at most to get, my thing working, which is great. And then, because Andrew, were you was were you born on Ratatouille or were you because talk about kind of our other uses of this, because we've used it a lot.
Yeah. No. It was yeah. Tu e r s, I started with, for Wicket. But, like, so I the project started, like, originally so 2022, like, Oxcon '20 '20 '2, Adam, John, and I sat down to discuss, like, how we were gonna initialize the rack.
And we came up with this rack setup service and stuff, and we needed some way to drive it over SSH. And so I was just gonna do a CLI because I was I was just saying like, originally, I was like, oh, John just got hired. Like, John's been here for a little bit. Like, he he can take this on. Right?
And then, like, we all got swamped. John built this huge thing, MGS, a bunch of stuff. And I was like, alright. I guess it's it's up to me now because, like, I've kinda finished a few things. And, and then I saw

that is the management gateway service. So then and that is what allows us to kinda to to go to talk to all of our service processors. That's kind of that that gateway service that sits on, one of our SUDs that's attached to the switch.
It's both it sits on both scrimlets. So we have redundancy. So the scrimlets are her, yeah, the switch attached to gimlets, which are our server SUDs. And And so

And the gimlets are ours. Our compute sleds.
Yeah. We have kind of a interesting architecture there where we process well, I I I'm not gonna get into network architecture. I believe there's plenty of, podcasts on that and documents on that. Yeah.

We'll we'll we'll have something in the notes that we had a couple of episodes on this.
Yeah. So but, like, I was gonna do a CLI, and then Josh, built this manufacturing, UI in his own, like, Tuohy stuff because, as Josh said, like, other people's software is, you know, the greatest frustration. I'm paraphrasing there. But built his own thing, and I was like,

hey. Melville?
I don't know. But, yeah. I, like, I remember pinging Josh and being like, hey. Your thing looks awesome. Like, how do you how do you do this? And I was like, can I get your philosophy on building UIs? Because, like, I'd I'd done a little handwritten UI stuff using DirectX for a video game back in around 02/2003. But not much, lately. You know? I'm a systems guy.
I don't write a lot of UIs. And, and then Josh showed me his thing, and I was like, I started I kinda had some time to play around with it, and, I saw that we were using two ARS. I think I saw that we were using two ARS, and Hubris. And then I went and, and just started playing with it and, like, I whipped up a very quick UI that was very, very ugly, but the the things that did right was that, there was a bunch of animation. So I remember giving a demo and, like, there was a help menu that just, like, animated out from the side.
And it was it was hideous, but it was cool and it was a a starting point. And so then we were able to get Benjie, our designer, and just be like, hey. Like, you should structure things like this, and he gave me some kind of wireframes. And then, yeah, I was off to the races. But, yeah, it was off to ARS

in the beginning. Time Wicket comes up, but we man, we gotta get, like, a the a ASCII movie out there of the the rack the rack setup process because it is gorgeous. It is so Yeah.
But there was also one Friday where I think my wife went to sleep, and, I stayed up late, rendering the rack. So there is a full, like, screen rack rendering of the rack using, anti characters.

And it's It's so I mean, it's I

don't wanna give it away too much, Andrew, but was that that sleepless night when I guess your wife went to bed early. Is that when you made the, like, rack defender game Easter egg that's also built No.
No. No. So that was that was on the way to Oxcon twenty twenty three or '24. That was on the plane. I wrote that on the plane. And it has interestingly enough, it does have like, the the rack falling, racks falling from the sky do accelerate with gravity. So I tried to, you know, make that somewhat realistic. It makes for kind of weird gameplay. And as I believe you mentioned on another podcast, I am terrible at it. So I really need to merge that

into terrible at it. I mean, I I I I mean, like, look, I'm only the second best battle trust player, but, you know, I really expect when you even go and you drop them I mean, it is great. You drop the racks onto a truck. And I think are you driving the truck? Is that the No.
So the trucks random trucks, just go across the bottom of the screen, and you have to drop the racks on, and you get a certain other number of racks. And they have to land on the truck. And then, you know, if they make it to their destination, you get reimbursed a new rack. Like, you've sold a rack now. Right? You didn't destroy it in, manufacturing. And so That's right. Yeah. So now you get a new rack to sell. And it just goes on forever.
Yeah. But, like, the the speed like, rack or, like, rack speed up. You know, the truck speed up. There's there's varying things. But, like, they always kinda maintain their distance.
They don't crash into each other. But, yeah, it was just kind of I was like, how can I build a simple game that makes sense for oxide? But that was, like the most challenging part of that was finding characters to be able to draw the racks in such a small, size. Like, make them look decent and to draw the truck wheels and stuff. It's all just anti characters thing together and things moving across the screen.
So that's still on a branch because I haven't merged I haven't, like, written the code to integrate it into Wicket properly.

Oh, it was sent for Verger.
Oh, wow. Okay. Yeah. Yeah. So, like, this is why, like, it's been complained. I think Laura brought it up the other day. Like, didn't wasn't that demoed, like, two years ago? I guess. Yes. Yes. It was. So maybe I should do that some weekend. Maybe I'll

I mean, you know, frankly, like, I I got we got lots of people that have bought racks so they can play the game while they're installing it. And, like, what do I even buy this thing for? Like, this thing is the this is the boat anchor if I can't actually play this game while it's installing it.
Yeah. The install I mean, I built it because I think the installs took longer a while back. Now they go pretty quickly. They take, like, I don't know, fifteen to twenty minutes to, like, go through the whole process. But that's still fifteen, twenty minutes you could be playing a video game.

You could be playing a video game. Absolutely. Yeah. Yeah. But the and so this is happening over SSH, importantly. Like, this is why, like, why we I mean, any user interface is gonna have to be a TUI that's that is at this because we don't have the rack. The rack is not configured. The rack doesn't speak it has got no networking connection other than the than this connection coming out the front on the tech port. Correct.
Yeah. That's I mean, that's that, like, that's why it was gonna be a CLI, right, until I get inspired. But it's it is pretty cool to be able to just do this over this SSH connection. And SSH provides us other capabilities too. Like, RAIN RAIN is here, and RAIN RAIN, hooked in mechanisms to SSH to allow us to, either open the UI or to, like, upload, a tough repo, which is how we manage our software updates over that SSH connection.
So it's it's pretty handy. Like, we have multiple ways to kinda interact with it. So you don't have to do everything through the through the text UI. I think it was Rain also who wrote the like, you kinda have to click on we did this on purpose, but you have to update all the all the machines in the individually, by all the slides in the rack by clicking on them and, like, hitting install. And they all show up, like, your UIs.
You can view their their, like, their current status, through, like, a pop up, as you scroll through the slides, in the rack display or in another, pane we have. And so Rain wrote, like, a whole update thing for that. And there it it's it's pretty cool. And John John has worked on this significantly as well. But, like, having it available over SSH allows us to kinda step back and say, okay.
Like, we can do all this in the in the TUI, but, like, maybe when we're doing development, we wanna drive it through some automated system. And so you can go to, like, kind of a text view where it's almost like a CLI, and it just it's just outputting all the steps and run you can you can kick off the updates for every slide all at once, except both streamlets because the slide you're connected to, you can't really do that with. Go ahead, Ryan. Explain that better than I just said.
No. No. No. I think, I think I think that was great. I think, you know, one of the things, is interesting where there is a a spectrum of, like, how, you know, how, like, high fidelity it is and, versus, like, how, like, in what places you can use it.
So so for example, a TUI is, like, a TUI is amazing for interactive views. Right? But maybe for, CI, it's a little bit more of a challenge to actually render that in the logs and so on. So, one of the cool things, that we were able to build as a as a team was the ability to have multiple views, where there is the two way view for interactive views, and there's also like a CLI log based view for either batch use or, or use in in CI. And and so, you know, the way it's architected, like, you can see you can start the process with one and then see the progress with the other.
So it's, you know, it's all kind of, nicely architected in that way.

Yeah. That is that is awesome. And I the other thing, Rain, that I also love and or, this kinda gets to one of the principles that you outlined for yourself. You know, you in your Fosdum talk, you mentioned that, Rust is right once, run everywhere. And the only Windows software I've ever developed in my life has been software and Rust.
So when I developed, like, the humility dashboard, for example, people were just the the the double e's have got to use Windows for a lot of the software that you they need is only on Windows. So they've been able to use the dashboard on Windows, and everything just works. It really is. It does run everywhere. Do you wanna speak to a little bit of that in terms of your because you're able to do all this stuff that Rain is talking about where you can have the kind of multiple views.
I mean, Rain, we don't have to worry about it not working on Windows or some other terminal. It just it just works.
Yep. So, the the back ends, let me just, start off with the back ends of Resa three because, that's where it gets really powerful. So we we currently support, like, three three back ends. And two of them is, Linux and macOS native, and one of them is actually cross platform. And it's it's called a Crosstern.
It's another project. It's it's a quite quite good project, actually, like, well maintained and so on, and it gives you, like, a lot of abilities to control the terminal, in a cross platform manner. So, when we use cross cross term with, Reta three, the this this three that you have built will just run on, any terminal on on, like, cross platform, Windows, Linux, macOS, whatever. So, that's where it gets really, powerful. The other back ends, though, for example, we have the Termion back end, which runs significantly faster on Linux.
When you compare some basic rendering on Linux, with, like, cross term versus Termion, Termion will be just faster because it's native Linux and so on. So, yeah, we basically want to, like, give you these options, but this doesn't mean that you you are just limited to those options. This, this Minitel thing that we have talked about, it probably and most likely implements a custom back end that enables you to render on this, you know, old terminal. And this applies to other projects as well. So in theory, if you implement this back end trait on, on something on some screen, some canvas display, whatever you have, and at that point, you should be able to, like, render something on that platform.
So that's, what I was experimenting with, during my Fostom talk because I wanted to for a long time, I just wanted to render something on the web. There were some other projects which does that, but, I didn't like their approach. I was like, okay. Maybe I can do it, like, in a simple way. So I kind of challenged myself for it because I've been just thinking about this Resatue web render for a long time.
So, I I was like I was like, not really, I I didn't have time or maybe I was just lazy. I don't know. But I submitted this, talk to Fostem, and it got accepted. So at that point, I just had to do something. You know, I kinda, like, forced myself by doing that.
And, that was, like, one month till the talk, and I was, like, thinking, what do I do? And, just, you know, live stream the whole process on YouTube. I was just, like, tearing my hair apart, trying to, like, find find a way to render twees. I don't have much hair, by the way. So, maybe because of that. I don't know. And, like, trying to, like, find something and just, you know, forcing myself to build it. And, luckily, I I just thought

just accepted talk driven development. This is the Yeah. Absolutely.
Yeah. Sometimes you just gotta push yourself a bit. So, that's that's what I did. It was quite stressful. But, I at the end, I had something to present, and it works quite well.
And sometimes people ask me what do I use for my, for example, my own website, which is going to be in the chat in a second. People think that I'm, like, you know, like, using some kind of terminal, building terminal, like, website building thing, But, no, it was just HTML in this case. And I just want to say that I used Rust and I used Resetti for for for a website. So, I have some ideas to build websites using Resetti at this point. So, yeah, I built this new library called Ratzilla, and, you know, I just very quickly hacked this together.
And I basically used the, Rataty back end to render on HTML using DOM elements or, like, you know, a canvas. And it's it's working quite well at the end of the day. There is a website built with it right now. It's still not super, like, super super well in terms of responsiveness and, like, maybe, the text and so on, but it works. And, now you can build these type of websites.
I have some other ideas. I wanna maybe build a blog using this, library or maybe, I don't know. I I'll see about it. I I have an idea which is, r v tui yet dot r s. I just want to do that using this library. So yeah.

Okay. So can I ask, like, just a naive question? So the so when you're using the web as a back end, where where is the actual code running? Is that running as Wasm? You you've you've compiled it to Wasm, and then it's running it it's all self contained in the browser?
Yep. So I'm using, I'm using trunk, trunk. Trunkrs.dev, I think. And it's like bundling your Rust code and your, your files, basically, like the index HTML and other JavaScript files into one WebAssembly, WebAssembly file, and then it just runs. It's like it's very simple, actually.
I was kind of amazed by it when I first learned about this trunk tool because I never, like, done WebAssembly development before. And, it's, like, very straightforward and works quite well. You don't even, like, do any annotations or, like, any special imports. There isn't such thing as, like, Tokyo main or something like that. You just use your f n main and just call trunk build, and gives you that that WebAssembly content, which you can just statically host it.
I'm using, GitHub actions to build those websites. I basically call trunk build and just put everything on GitHub actions, like, statically. So, yeah, it it's quite straightforward.

Yeah. That is wild. That's really interesting. And then if you your website, though, is your website built with Ratzilla then? Mhmm.
No. Not yet.

Not yet. Okay. Got it. It's the terminalcollective.org is the Razzoa, like
Yeah. Exactly.

Yeah. That was really cool. There you go. That's really cool.
Yeah. The the live streams were quite fun, actually, because for, like, for, like, I don't know, two hours, you just watch me suffer. And at the end of the day, I just build something looking like that, and it's quite quite pleasing. But, I mean, sadly, first two hours is just pain because of, because of the rendering stuff. And I actually, kind of, like, render some some very cool looking animations, accidentally during those live streams.
I was, like, rendering something wrong or just one cell is just not, like, correctly positioned. So everything just shifts, and then you got, like, a, I don't know, some some kind of, like, a floating, animation or something like that. Yeah. It it was quite fun to watch, and quite fun to just work on. I'll try to find one of those animations now to send it to chat.

That's really cool. And and so could you describe a little bit in terms of, like, when you because there are some other things I did. Some some things that were kind of approximating this, but you're like, this this is not the way I wanna go do it. Can you describe the philosophy that you have in terms of, like, the way programs should be able to interact with these back ends? Because I think it's kinda revealing as terms of the the philosophy and ratatouille.
So, what do you mean by interacting with the back end?

Well, it's just like I mean, you've got a real emphasis on keeping it simple for the programmer. Mhmm.
Yep. I mean,

I don't wanna put words in your mouth, but that's what it felt like from watching that. It's just like you you you want programmers to not have to know a lot about the innards of these back ends. You wanna be able to have a clean boundary. Is that

is that
up there?

In particular, I mean, you you showed an example in that in the defozedem talk, Orhan, where you're you were saying, like, okay, here's Ratzatouille. Now remember this, everyone. And then, like, twenty minutes later showing effectively the same code or very similar code for Ratzilla. And and that was very impressive. Like, it's very cool seeing, as Brian is alluding to, like, you know, abstracting away a lot of the details here and letting people just, like, do what they intend.
Yep. Yeah. Okay. Got got the question now. So as a as a as someone who comes from a back end and systems development background, I don't want people to learn about, like, front end stuff, and I don't want people to learn about, most of the stuff they don't need to learn.
They you you know, you just wanna build a website. Right? So, you shouldn't be able to you should not learn about, like if you don't want, you don't wanna learn about, like, reactive states and, like, you know, like, React JS and and, like, other web concepts. So I basically wanted to, keep keep all the logic and all the complex parts in the back end and just expose an API which is as close to as the, to to the, like, the, the original Presatree API. So that was my goal.
If you check out the other projects which are doing something similar with WebAssembly, they're exposing this API, but, like, it it's not in it's not remotely close to the Resatree's minimal, workflow. So I just wanted to, like, keep everything inside the back end, like, all all the stuff there, and I just want people to build what they want. And, that that way, I think it's it's more straightforward. And one of the things that I did, which is kind of, debatable, is that I, I exposed Ratzula, so you don't have to add rats Ratzilla to your project. So you can just use ratzilla two columns rotatory, which is maybe not super, like, intuitive for a beginner because what is rotatory and what why are why there is this thing?
But, like, I don't know. I just wanted a single dependency that will handle everything. And I I just like that more, to be honest. And that's what that's what we're doing with, router three these ways as well. Before, if you wanted to create a terminal, you needed to add crosstern as well or, like, your back end of choice.
And you gotta enable alternate mode. You gotta enable sorry. You gotta switch to alternate mode and enable the row row mode, sorry, alternate alternate screen and row mode. Sorry. And then you gotta, like, create your terminal, like, construct it, and then you can create a, like, a render loop and so on.
But these days, we just, you know, put everything into a single call, called rotatory init that will just do all of these things for you, and you can just, move on with your, UI logic and application logic and so on. And it was kind of like there was a lot of discussions about this as well because we don't wanna hide these things because those are, like, useful as well. If you wanna, like, enable mouse capture, you need to, know about this crosstern back end functions and what crosstern is. So, but, I mean, at the same time, there should be a balance to it. So you wanna just build something simple.
There should be a simple API, and that's our approach to this problem these days.

That's really great. When I part of this, I also love I mean, you've just built a lot of things with Ratatouille. And it feel feels like you're still doing that, which I think is is I mean, I I that to me gives you great empathy for those building with Ratatouille because you're building with Ratatouille yourself.
Mhmm.

And in terms of, like, hitting these as you say, it's a balance. Like, you know, how much do you wanna you you wanna make it easy for people to build new apps, but you wanna also allow people to get into that back end where they need to for things like mouse capture, and I think it's allowing you to hit that balance. It must how do you, make sure I mean, how do you test this thing?
Do you mean or is it three or, like, yeah.

I mean, just kind of in general. I mean, it it just feels that, like, there it it feels like there's some testing challenges with this. I mean, you're you've got, so many and maybe this is where you're able to lean on things like cross term. But how I mean, because you but what you've got is is remarkably robust. What what have you done from a testing perspective?
So in order to test the Resideo application, you kind of have to design your app in a way that you can test it. For example, you you can expose a render function that will take your application state and give you back, something that that is testable or maybe take a back end. In that case, you can use our test back end, which is just, just a very simple back end implementation that that is that can be used to take the whole terminal as a string and can just assert on that string. Another approach is, I which I kind of like these days is, the snapshot testing. Let me just send a link to chat.
So we we can use, like, Cargo Insta for this and also, test back end once again. So you just basically take the whole rendered state of the app, and you just add snapshots for it, and that just works. Most of the time time, people just follow this approach. It it also, like, makes it easy to see what's being rendered, And, also, like, you can just add unit tests to your functions and so on. So that's a kind of no brainer. But yeah.

Intra brain, have we played around with that?
So we haven't actually done much testing for that. But I actually have been playing around with, snapshot testing for two weeks for a personal thing. So maybe we should hook it up into WCAD at some point.
Yeah. I did not know this even existed. This is cool. I this is very cool. Actually, it leads me to a question though.
Like, you mentioned, the render method and stuff like that and how you'd wanna return, like, manage your state and command that you wanna test, like, feedback and stuff to make sure things are doing what you want them to do. Like, your application is behaving well and not just what the output looks like. Do you think like, do you have any I don't know if this is a leading question. I guess it is a leading question. But do you have any, like, things that you would like to change but would just, like, break the whole model of Ratatouille?
Or are there things, like, you really like about the model, and, like, think should be expanded upon? Like, just opinion opinions upon how, like, everything works. How you like, when you took over from two ARS, was there anything that was, like, oh, I wish that was slightly different or this was great and, like, we need more of this?
Yep. So, when we took over from, two ARS, we are sadly bound to the existing rendering mechanism, which is immediate mode rendering. And, we we should just, you know, keep everything in place. We cannot just break everything, at that point. So there were actually quite, quite a bit of discussions about re redesigning the rendering model.
And there's a very prolific maintainer and contributor to Rotatree, Josh. And he's been super active in the repo, and he he's been leading those discussions a lot. One of the projects that we are kind of inspired is, the Xylem and also the, the masonry projects. Those those are basically, like like, the projects that we are, looking up to for maybe, like, adopting a similar rendering technique. There are a lot of blog posts about how they are handling UIs in Rust, And, Josh been just, kind of brainstorming about that for the past years and so on.
We have a forum that we kind of, discussing this. I'll send the link to it. And I would really like to see an easier, way of designing, like, designing a UI, basically, because our current approach is not very flexible when it comes to very complex applications. We basically want to so the current approach is a bit like declarative, I think. We wanna, like, have, more of a different thing where we are, like, you know, you you you create your widgets and you kind of, like, assign an I don't know, maybe an action to it or, like, an event to it if possible and just move on with with that approach.
But right now, it's like you your UI logic and your state is very, like, separated. So you kind of, like, check the state and, like, update your UI. But maybe we we wanna, like, do something else in the future. But I'm not sure if this will actually be a part of Ratatouille because this will just change a lot of things. I was thinking and I was talking to Josh about this, and we kind of want to first try this out on a maybe, new library on top of Ratatouille, which will kind of change the the rendering, like, the UI, design, like, logic and so on.
And then maybe make it a part of Ratatouille. But, we still have time for that, and we still need some ideas. But, like, over over the years, there were, like, many other, things. There's this another project which is a bit interesting. This one is, like, an an attempt to, changing the the, like, logic of, Resideo a bit, like, making it reactive.

This is a project called RizUp.

I knew you were gonna love it. I knew you were

gonna lose your mind over this. Word to your mother.
Yeah. So Sorry. There are,

like, lot
of no no problem. There are, like, a lot of other attempts for, changing the, like, the rendering logic and, like, the the whole app, like, application structure for the tree. There's this another one, tree realm, for adopting the the Elm architecture. And, you know, like, they're very, very different projects. But, we want to, like, kind of adopt something based on, masonry and xylem approach and maybe have it as a as a part of fraternity at some point.

Crespo's eye is twitching somewhere. Have you ever talked to Crespo about Elm? No. But oh, so Crespo's got a great story about how he was doing a lot with Elm and had designed a bunch of things around a new feature of Elm or newest feature of Elm. And as he is going on stage to deliver to the talk, the the maintainer of Elm is announcing that he's ripping it out. The thing that he's like, well, oh, well, That may have actually It's
a shorter talk. A shorter talk, I guess.

Yeah. But, the two interrupts. The or this is this is so this is a lot of great stuff here. I mean, you're obviously looking around for a bunch of different kinds of models. And then so, Orhun, in terms of of Ratatouille, what's the, what are some of the things you're kinda looking forward towards?
It sounds like you're looking at kinda different models and and contemplating different things. Obviously, with Ratzilla and different back ends, what are some of the other things that you're doing with Ratatouille?
So these days, we are trying to cook up a new release. It's been in the works for a couple of months now. And this is gonna be actually a big one because we finally modular modularizing the create into multiple parts. So, this is a good thing for, for widget developers because back then, if you wanted to develop a widget, you basically depend on which contains everything. This time, when we push this release, you will only depend on probably just Retoti core, and all the widgets will be in Retoti widgets.
The back ends will be split it into their own crates such as Retoti cross term, Retoti Termion, and so on. Also, we are kind of this will give us flexibility to, do more breaking changes, hopefully, and add more, more features to to the widgets and so on. And, yeah, this is gonna be just a quite a good refactor, and this will just, make make give us more room to develop more more things in the Rototi repo. Since now we we're, like, already modularized most of the parts, we added Rotacity macros, for example. This will be, a part of the Rotacity, but you can kind of, like, not depend on it if you're doing, doing a like a library on top of Rust three core.
And also, when we push this release and you may let's say you're depending on Rust three core, this won't change a lot, we are hoping. And this this means that for every Ratatree release, you won't be you won't need to update your dependency, and this will be just more, reliable in that sense because we won't be breaking people's libraries, widget libraries, to be specific. And, yeah, it's gonna be just a just a better way of structuring things. And, I think this is a good like, a big step towards the, UI, like rendering, redesigns and so on. So, we're kind of, like, finalizing that.
This week, I think, I will work on the release automation a bit because now we have a bunch of crates instead of just one. And, you know, we gotta just test this properly before we release it. Nothing will change for people who already depend on Ratatouille. You

I was gonna ask what what if yeah. What what what Yeah. Will people need to is there a breaking change from, the perspective of those using Ratatouille, or how does that work?
So, there are small breaking changes. Not many breaking changes. Like, there are some unstable feature flags and stuff like that. But, if you're you're just a regular user, you just bump your Ratatouille dependency, and will contain all the widgets and core and back ends and everything. So nothing will change on that side.
But if you're a a widget developer, you basically need to, you actually don't need to, but it is recommended to just depend on versus e core and versus e widgets if possible. And we're still testing this out. We kind of, like, created a bunch of alpha releases before the actual release. So, we wanna make sure everything works before we release. So, it's it's gonna be that and also, some other features as well.
Let me just have a very quick look. So we kind of changed some things, you know, there's, like, customizable symbols. For example, we added new border sets and so on. So, those are just, like, the typical features that we add, every every release. But, we kind of, like, moved bunch of things around in the code base.
The examples are moved around. You know, the the documentation is moved around and and so on. So, yeah, that's the that's the thing that I've been working on with the other maintainers. We kind of, like, hope to push this release, soon. And, yeah, that's that's that.

That's awesome.
I do have a quick follow-up question about, something that has fascinated me for a long time now is the from an aesthetic perspective, I guess. I feel like, applications in this ecosystem have a lot draw a lot of borders around stuff, which I I find fascinating, like, using box drawing characters. And it feels like there's a lot of, I mean, I suppose Brian and myself are probably the only people that still have a lot of, like, 80 column wide terminals. And and so I feel like my historic aesthetic has involved not using a lot of Chrome on around controls and

stuff, like, trying to
differentiate stuff with, you know, different case or use of bold or or use of background colors and stuff to to to make things visually separate rather than actually drawing lines between things. Do do you know is that is that like an intentional UI guideline thing that people are doing in the Ratatouille community, or or is that, like, a just like a a natural thing that has emerged now that the Unicode box drawing stuff is, you know, pretty well supported everywhere and, you know, you can do rounded corners and stuff?
Yeah. I think there's a so I I also, like, talked about this during my talk. There's something called look, I think, and I believe, this is like this is like the the most typical look that people go for. I think this is not, like, documented anywhere. It's just, like, something people just choose to do.
So, the the borders are just very easy to use in Resideo. You can just add borders to each widget. And when when people learn about, you know, the widgets, they tend to just, you know, try out this thing, and it turn turns out looking pretty good, I think. And, yeah, we kind of, like, want to support different border types and so on. And that's just something, yeah, something people prefer most of the time.
But, yeah, we don't really have anything documented or, like, anything that we, like, recommend, like that. Most of our examples use block, though. So I don't know. Maybe this is something that we kind of incentivize without even knowing. But,

yeah, one one thing that
like a back a solid background color thing without any border? Or
So, the block is that, but you can add, like, borders to it. And Okay. The the way of constructing that is basically block two columns bordered. So, that's been used throughout our examples. And it's very easy to just create that block, bordered block, so people just use it.
Yeah. But, like, there are, like, a lot of, approaches to this. And I have seen many other toys that are just not using that or, like, they just want their own thing. And, I I think the the the most, like, most impressive one so far was this, project, which is using some animations as well. I'll try to send it to the chat.
One second. So, it's exapined. It's using the blocks, like the the typical blocks, but it it's actually com configuring them to look like, you know, they are just sharper and so on. For example, on the top, the the block or the title is just, like it, you know, it has this, the the shape, there's like a rectangular shape or something like that. Also, the colors are a bit different, and the blocks are actually, like, animated too.
So, yeah, this this was quite impressive to me when I first saw it. And then I decided to implement this, and it's basically, like, you know, changing the the cells one by one to make this, moving color animation around the borders, basically. So it's not much it's not magic, but, it it it is, like, looking like magic. You know?

Yeah. And you did something similar, right, for Ratatouille? Because I think that you demoed this at Fozdimm. Mhmm. But I think that, like, I I was unable to fully I was just, like, listening to it kind of on my phone and was unable to fully appreciate it, but I know that the audience was the audience was was oohing and aahing. So it was obviously, terrific on the big screen.
Yeah. This library is built on top of. It's called tuck in effects. And now the the author of this library is actually working on a script like initialization for the for the animations. So you so you will basically write little scripts for creating animations to your widgets and so on. It will be quite easy at that point. And, yeah, it's it's a quite use like, not not I don't wanna say quite useful, but, like, aesthetically pleasing at least. So, pretty cool projects are just, exist in
in the So cool. This is this is incredible. Wow. I'm looking at Exabind right now.

Yeah. I know. It it's and I don't know if, like, I'm actually, like, it's a little bit of a spin the wheel whether Josh I don't know if Josh, this is a step in the right direction or the wrong direction from your perspective. I it's really stunning, though. The I do love the way you're tying this to 80 columns.
So, like, I feel like this is, like, I feel like I'm the I'm the the senator from the agricultural state that is just, like, vulnerable to anything that's gonna like, any kind of pork for my 80 column constituency, I'm gonna I'm gonna vote for.
Single. Single issue constituency. I absolutely single issue. Yeah. %. Yeah. Everybody's
Well, this

has been great. Arjun, thank you so much. I mean, this is you know, we are obviously really big users of Ratatouille here at Oxide. It's extremely important for us. Again, this is not like it is not a this is not out of nostalgia.
It's not out of just the fact that it's neat. Although, it's both of those things, it's really, like, a very essential for us on some of the things that we're building, where we we got is a the terminal is the interface, and we need to present something visual or wanna present something visual. And it's allowed us to do, I think, much better things. Rain, the the software that you've built, Android software that you built, software that I built. I mean, and Josh obviously use the terminal a lot in in terms of facade and manufacturing.
So this is all, really important to us. And it's really great to have you here and kinda get that full the full story is was was terrific. So Yeah. Thank you very much, and thank you for all your your hard work on Ratatouille. It's really, really appreciated.
Yeah. Thank you a lot for the invite. It's been a pleasure. And, yeah, I I'm just, I'm just actually one of the people who work on these, thermal projects. So I just wanted to, like, thank everybody who maintains Rust three based tool or three tool or, Rust library for Rust three, and so on.
So I'm not, luckily not alone in this. I just wanna, like, take some take a brief moment to thank the other people as well. The maintainers, the people who built stuff with Resatree, they're just amazing. And, I've been just very lucky to be in this position. I've been kind of, like, leading this project, and, I've been just kind of doing a lot of things about it.
But, without all those other people, it was not really possible. So I just wanna say thank you to them, and thank you to your thank you for your invite again. Maybe before, we wrap this up, I wanna share something that I found, recently. It's a very fun project if you guys Yeah. More time.
So, there's this SSH game, which was built with Resetsu, And this is like something that I discovered or some somebody shared this on Discord a couple of days ago. You can just play it right now as well. Just run this command. It will, run a TUI in in your terminal. And the game is basically you have an endless maze and, like, infinite maze.
And, there there are some other players as well. And you're trying to, like, find your way through this maze. And there's some minotaurs, these creatures in this maze. And it's quite fun. I've been trying out for the for the past couple of days.
And sometimes, like, you know, doing, I don't know, just I'm bored, I just wanna play this thing. The the thing is it works quite well because it's very minimalistic game and also like, you know, multiplayer due to SSH and kind of very, aesthetically pleasing too. So, yeah,

it's This is amazing.

This is incredible. I I we're we're gonna go find Adam. Can I go, like, can I go whack Adam in this thing? I
think I

I think I see you. Yeah. This is where this could be a bit show notes. This is incredible, and this is like we started I I I think I mentioned, Renegade and BBS's. Like, this is really it's great. BBS vibes.

I think it definitely is. I also feel like, Adam, this is gonna give you something good to do when I'm telling a story for the eighth time.

Oh, there you go. Okay. This is, like, really Even more helpful.

Exactly. This is awesome. And a a a great note, Orhan, to to end on. Thank you so much for, for dropping that in. I I would love to say that I'm going to a meeting, but I'm really just gonna go play this for a while. So,
And just like that, we missed the quarter. Exactly.

It would be the first time. But thank you very much again, Orhan. Really appreciate it. And thank you everyone for, thank you for, Raine, Andrew, and and Josh for joining us as well. And, thanks for joining us in in our Europe friendly time. And we'll do a couple more of these through the year. I think I I I enjoy mixing up a bit. So Yeah. Good stuff. And, getting back on brand, we've got absolutely no plans for next week. So we'll be kind of we spin the wheel. No idea what's gonna happen.

So
Stay tuned. Right. We'll see.

Stay tuned. Exactly. Alright. Thanks, everyone. See you next time.