Million.js with Aiden Bai and Tobiloba Adedeji - JSJ 589
Aiden Bai is a Web Performance Engineer and Creator of Million.js. Tobiloba Adedeji is a Software Engineer. They join the show to talk about Million.js. They begin by explaining what it is all about, its purpose, the problem it solves, and many more!
Show Notes
Aiden Bai is a Web Performance Engineer and Creator of Million.js. Tobiloba Adedeji is a Software Engineer. They join the show to talk about Million.js. They begin by explaining what it is all about, its purpose, the problem it solves, and many more!
Sponsors
- Chuck's Resume Template
- Raygun - Application Monitoring For Web & Mobile Apps
- Become a Top 1% Dev with a Top End Devs Membership
Links
Socials
Picks
- Aiden - Top End Devs
- Charles - Shadow Hunters | Board Game
- Charles - Legendary: A Marvel Deck Building Game (2012)
- Charles - GitNation Events
Transcript
Charles Max Wood:
Hey, welcome back to another episode of JavaScript Jabber. This week on our panel, we have AJ O'Neill.
AJ:
Yo, yo, coming to you live from tears of the kingdom.
Charles Max Wood:
We also have Steve Edwards.
Steve:
Hello from somewhat sunny and beautiful Portland today.
Charles Max Wood:
I'm Charles Max Wood from Top Endevs, and this week we have two guests. We have Aiden Bai. Aiden, do you want to introduce yourself?
Aiden Bai:
Hey, I'm Aiden. I work on a project called Million Jazz. Yeah, I'm actually really new, Steve, in Portland, but in Washington, yes.
Charles Max Wood:
Awesome. We also have Toby. Toby, do you want to introduce yourself too? Awesome. Yeah, so let's dive in and talk about Million. Now, before we get too far in, it looks like it's a project and I couldn't quite, I didn't have time to play with it. It looks like it ties into React. What problem are you all trying to solve with this? Because it seems like a lot of people use and react and like it, so what's wrong with it, I guess?
Aiden Bai:
Right, and that's totally a valid thing, right? Like React is fast enough for most computers. That's why so many people use it, right? That's why Facebook uses it for their application. But sometimes you do hit performance bottlenecks. I mean, while we do have tools that you like fix those, like memo or just higher, like ordering your components correctly, sometimes you do hit those performance bottlenecks that come with rendering. That's why solutions like Svelte or SolidJS exist to provide faster. rendering of the user interface. And so this comes with really like data heavy or user interface heavy applications that you just can't optimize well with React.
Charles Max Wood:
So effectively what you're saying is, is you have a lot of stuff going on, it makes it slower.
Aiden Bai:
Yeah.
Charles Max Wood:
So how do you, I mean, I don't know. It seems like people have been talking about this issue for a long time, right? And not just with React. So I don't know. It seems like there are tips and tricks for optimizing React. Did those just not get you far enough down the
Aiden Bai:
Yeah,
Charles Max Wood:
road?
Aiden Bai:
I mean, like, if you can use those tips and tricks, then you should use those tips and tricks, right? The thing is, like, one thing about React applications is that you can write them really, really badly and also really, really great. And those really, really great applications perform really, really well. But also, if you put it all in one app component, it's gonna be the worst performance of your life. And so, that's the issue with React. You... It depends on your skill level. Using Million, there's mainly like two applications. One, it's like if you're low skill, then you could just kind of put that function in and it would just work for you. If it works, then you can have like, you don't have to worry about how do I construct my component as well. Which is not necessarily a good thing. You could do it. You probably should make better React applications. But the second camp is like the really like. I think if Dan was here, he would really relate. It's like the web performance camp. Like how can we make, you know, how can I make like a highly interactive application that has a lot of data and a lot of UI that changes a lot. And I want to serve it as fast as possible to my customers. And this could be in the form of stock pickers, like, you know, stock tickers, or maybe a specific component, like a color picker.
Charles Max Wood:
Okay, so what exactly do you provide then? Is this kind of a meta framework where you're breaking up, you're forcing people to break things up into smaller components, because you mentioned that could be the issue, or does this kind of work under the hood to go, no, we're gonna do things in a more intelligent way somewhere further down the chain.
Aiden Bai:
It's definitely the latter. So React uses something called the virtual DOM. It's just like, you know, I'm sure you guys know, but just for the audience, the virtual DOM is like a blueprint and you can use that blueprint to reference before you actually do any action. Like you don't wanna break down a bridge before, before like if you measured it wrong or something. And so that's what the virtual DOM does, but there's a lot of, you know, computation costs. Like if you want to make a blueprint, you have to sketch out the entire thing. you have to determine the changes you want to make, and then you have to actually make that change. And so as your user interface gets bigger, as your component gets bigger, the more computation is needed to, you know, diff that to make those changes. And so essentially, Millian introduces something called the block virtual doc. It's very similar to the Svel, like methodology of approaching it. Essentially, we can turn that like a component, And we can determine where the dynamic parts of the component are. For example, if you have like a counter component, the count and the event listener are the dynamic parts. Um, and so we can perform surgical updates to those dynamic parts to make those updates. So essentially we don't need to diff the user interface. We diff the data instead. I don't know if that was, yeah.
AJ:
Wait, so. Tell them, go a little deeper on that. The differences in what you're diffing and why did React start the way that it did? What was the thing that it hoped it was going to do? Why did it not work out? And why did you find this? How did you find a secret that they can't implement? Like why is this not already in Core React?
Aiden Bai:
Okay, React uses the virtual DOM in order to fulfill their mental model, right? That state is a function of user interface. And the only way, one of the ways to achieve that is the virtual DOM. And it's very effective at achieving that, because you don't need to think about how your data works. With things like signals, you have to think about, okay, how does my data go into the UI? With virtual DOM, you just
Charles Max Wood:
Mm-hmm.
Aiden Bai:
blow the UI away, then you get a new UI. And so this has been really effective for React. I'm sure that's why it's gained a lot of popularity. It's just great developer experience. The Blog Virtual DOM introduces something a little bit different, where it analyzes the Virtual DOM as more of a template instead of a blueprint. And what I mean by that is it follows like view-like or svelte-like methodologies in order to optimize that. And that comes with constraints, right? One of the main constraints is it's not very dynamic. One other thing that Virtual DOM is really good at is you can compare very, very different views with each other. For example, if you have a counter view, this is not a great example, like a to-do view, and you also have, you wanna switch to a image. The Virtual DOM can do those diffs very, very easily and make an efficient update, but with things like signals or templates or these various solutions, it's not as efficient. because you have to replace the entire user interface instead of diffing it. And so the React team sticks with the virtual DOM for good reason. It's very flexible. It's generally good enough for applications. But when you hit that threshold, when you do need that performance, that's when templates really matter. That's when the block virtual DOM matters, or that's when million matters.
Charles Max Wood:
So yeah, I mean, just looking at this, initially when you were explaining it, I was thinking about signals because signals effectively what you do is you say, and it's not, how do I put it, it's not observables, but effectively what it does is you change the data and then it just goes and changes where it needs the data changed. And so in a lot of cases, that's way more performant than a virtual DOM that yeah, does if there are a lot of diffs. It can take it a minute to calculate what it needs to change. So it sounds like what you're doing is you're kind of going somewhere in the middle where it's not this direct value, but it's this very small chunk of the UI. And it intelligently updates it in a way that you don't have that big calculation cost every time you have a change on the virtual DOM. Is that right?
Aiden Bai:
Exactly. It's like, it's kind of like the best and the worst of the both worlds, essentially, when the worlds are signals and virtual DOM, where, you know, signals, you have to think about your data, but it's really fast. And the virtual DOM is you don't have to think about your data, but it can be slow sometimes. This is kind of like a median. You don't need to think about your data, but there are the constraints of signals and templates. And it's also a virtual DOM at the same time. And so it tries to find like a compromise between the two.
Charles Max Wood:
I gotcha. So are you replacing the virtual DOM with the block DOM or
Aiden Bai:
Yeah,
Charles Max Wood:
are
Aiden Bai:
so
Charles Max Wood:
you
Aiden Bai:
essentially,
Charles Max Wood:
working with it?
Aiden Bai:
well, it depends. So for example, we have like a block utility. Essentially, you wrap a component in a block function and it becomes a higher order component you can use in your application. This higher order component uses the million virtual DOM. Everything else in your application uses the React virtual DOM. Essentially, it's an opt-in utility you can use. One of the main advantages, is that you don't like it's essentially you only use million if you need it right you know like generally people when like developers are facing performance problems they kind of know where the performance is and so this is like a you know you can just plug it in and it just works in the in the technical like how it works underlying essentially just imagine as if it makes a dummy component And in this dummy component, it just tells React, stop rendering here. This is my responsibility now. And then it takes that rendering and it puts like million renders into that component instead.
Charles Max Wood:
Okay, that makes sense. I was gonna add, that was my next question actually was, in my experience, React doesn't play nice with other stuff monkeying with the DOM, right? And so, yeah, if you kind of put a fence around it and say, React, don't worry about this stuff. then.
Aiden Bai:
Yeah, it's definitely like compared to solutions like preact signals, which does also work in react. It's less intrusive because it was a common pattern. There used to be something called uncontrolled elements or uncontrolled components where you would have like DOM manipulations inside like class components. And essentially this is a similar methodology you're using here with preact signals. You're like monkey patching the JSX, or monkey patching the virtual node creator, which is okay, but also there have been issues with that. looks like Toby.
Charles Max Wood:
Yeah, he's been connecting and disconnecting for a little bit. And I'm gonna put a mark in here so that. so that we can get an edit there. So yeah. So do I just install it and that's it? Or are there other things that I need to do in order to make this fly in my React app?
Aiden Bai:
Yeah, that's a great question. So we have both a compiler and a runtime. So the first thing is you install the package, but also we have to integrate with your bundler. So it could be Webpack, Veed, or if you're using Metaframwork, Next.js or Astro. And so it is, it is right, like in principle, it is as simple as, you know, integrating the compiler, installing it, using the block functions when you need it. But I do have to note that for our meta frameworks, there are certain bugs we're facing right now. So it's a little bit experimental if you want to use it right now. Um...
AJ:
I'd be interested to know what, what kind of challenges are you facing with that? Why is, why are you having bugs with the meta framework integration?
Aiden Bai:
Yeah. So the runtime is really constrained. By design, it's really hard to achieve a good compromise between the two. That's why most people don't do that. There are projects like BlockDOM. Actually, Millen was directly inspired by projects like BlockDOM that do that, but it's just really hard to strike that balance. And so the runtime is really constrained. And the purpose of the compiler is not only to optimize the template, but also try to give more functionality to it, be able to make it very flexible. And what I mean by that is blocks that run time require stateless components. And so components cannot have state. But a compiler allows for that. It allows you to put hooks into your components and actually use them. And so it's really challenging because Static analysis is hard. Like I've had like using that, yeah, it's like, do you have to think of so many edge cases and actually like work with users and tested in production and see what their issues are facing. We're not production, but like, you know, in real applications. And so there's a lot of edge cases to hit and also a lot of edge cases to fill. Another challenge is...
Charles Max Wood:
And
Aiden Bai:
Yeah,
Charles Max Wood:
so.
Aiden Bai:
go ahead.
Charles Max Wood:
No, it just seems like with the static analysis, if you're using meta frameworks right, they add their own layers of things on top. And so, yeah, I could imagine that picking out their tokens might be a challenge.
Aiden Bai:
Yeah, it's actually, in principle, it's just a battle plugin. So the Meta Framework just runs the compiler when it needs it. So essentially, it's not too hard, unless the Meta Framework does something weird like remix. But
Charles Max Wood:
Hehehehe
Aiden Bai:
otherwise, it's fine. No call out. I think remix is cool. It's just that it's very hard to integrate with. Yeah, one of the other
AJ:
Tell
Aiden Bai:
challenges.
AJ:
us more why is why is remix hard to integrate with what's
Aiden Bai:
Sure,
AJ:
special about
Aiden Bai:
yeah.
AJ:
what it's doing that conflicts with what you're doing?
Aiden Bai:
We're actually working on this issue currently, but essentially every tool, major tool like Next.js or Webpack, or Next.js like it provides like an override. Essentially you can configure Webpack plugin. I'm sure you guys tried it before, the audience has tried it before. Essentially there's like a Webpack property and you can integrate those plugins into it. And that's great. But the thing is Remix doesn't use that. It's super weird. Um, yeah, it uses yes build under the hood, which accepts plugins, but it doesn't allow you to put plugins into it. And so there are solutions like, um, yes, build override, but it's like not a, you know, idiomatic solution for the problem. And I think it's an interesting philosophy, but also every major framework, Next.js, Astro, Gatsby has a plugin integration. And so that makes it really hard for us to compile stuff. Another thing is like our runtime is very, it runs client APIs on the global level. And so with MetaFrameworks, they run React with SSR or server-side render. And the issue with that is server-side rendering doesn't have DOM APIs. And so when you hit those issues, you can't import the runtime. And so remember how we have the component that just tells React not to render? We have to add an extra loader layer on that, where we load the package at runtime instead of SSR. And so it's quite complicated in that sense. trying to skirt around SSR, you know, SSR and limitations.
AJ:
Okay, well, do you think that with the approach you're taking, is SSR even... are these solutions that you should be trying to use together?
Aiden Bai:
Um... I'm not sure. Yeah, that's a good question, right? I assume a lot of the use cases in this field are more interactive, like applications. And interactive applications generally have very interactive data. So it's hard to SSR into or use like an SSR solution. Or just loading stuff before instead of loading at the client. I think it's something that is. enough of a low-hanging fruit to handle though. Essentially, this sort of approach is required whether we do SSR or no SSR. It's just whether we want to support it or not. But it is also not an easy approach to take. And as you guys said, React and Next are just not fun to work with. And not to their fault, but it's just very hard to integrate very, you know, like our use case is quite like, um, weird in a sense. And so it's, it's very hard to get, create solutions to support it.
Charles Max Wood:
So you're talking about remix and next, but do all of the other react ecosystem, I'm thinking like Gatsby or Preact or what other ones are there? I can't even think of them all. But do you play nicely with those? Is it just these handful that are weird or do they all get weird?
Aiden Bai:
Right now they're all pretty weird, but we do support
Charles Max Wood:
Okay.
Aiden Bai:
all of them, the ones you mentioned. Every major framework you can think of, we probably support it except for Dino.
Charles Max Wood:
Okay.
Aiden Bai:
Yeah, it's just like, we're still, it's really early and we're still ironing out solutions, but it's definitely something cool to try if you're interested. Yeah, one thing is we've actually also been talking about Dino support. Um, with, um, if you guys heard of Aleph.js, it's kind of like a meta framework for React and Dino, which is really cool. Um, but figuring out, you know, we're already trying to figure it out. Like over five meta frameworks and different, like we're trying to support free at the same time and also support another runtime. It's, it's a lot of work. Um, but
AJ:
Why
Aiden Bai:
yeah.
AJ:
I've seen a lot of projects really go downhill as they try to get outside of what they're good at. Right. So there's
Aiden Bai:
I agree, yeah.
AJ:
a project that's excellent called SQL. See, have you heard of that one perchance?
Aiden Bai:
I have not.
AJ:
So what they do is the smartest thing that anybody has ever done in regards to SQL, which is that you write the SQL queries and then it generates the code.
Aiden Bai:
Mm-hmm.
AJ:
And they have a JSON output, which I think adding that was a good idea, but they started out with go and then they wanted to add Java and then they wanted to add Python and then they wanted to add C sharp and then they wanted to add my SQL and then they wanted to add SQL light and. And the projects become diluted because now you know what I wanted was something that was really, really great for Postgres. And I would have been happy to pay for that. I think that's another thing that goes, uh,
Aiden Bai:
Mm-hmm.
AJ:
I think of the open source world, there's too much people don't think that they can get value for their work. And so instead they want clicks and likes and views
Aiden Bai:
Mm-hmm.
AJ:
and they neglect it. You know, that people are willing to pay for really, really good solutions. So I think, I mean, if you're. If you're feeling like you're spreading too thin, I just stick to the things that are best that you, the customers that you already have.
Aiden Bai:
Mm-hmm.
AJ:
That already like your product, like it. Cause I think if you, if you try to, you know, one thing is people, the people that are requesting more features, that's, that's kind of like an excuse of saying, I don't want your product. Like when a girl doesn't
Aiden Bai:
Mm.
AJ:
want to go out with you and she says, I have a test on Tuesday. every Tuesday, right? The people that
Aiden Bai:
Right.
AJ:
are asking for more features, a lot of times they're not really, they don't even really like your thing. They just want it to be different. They just wanna show that you're not good enough for them. So I think it's fine if it doesn't work with everything because if it works with everything, it's not gonna be good at anything.
Aiden Bai:
That's a great perspective actually. Yeah, I
Charles Max Wood:
Yeah.
Aiden Bai:
have been feeling that, you know, I'm assumed like every open source maintainer feels that or like any product, but like it's really, yeah.
AJ:
I don't, I don't know if anybody else had that experience,
Charles Max Wood:
Yeah,
AJ:
but
Charles Max Wood:
you're
AJ:
you
Charles Max Wood:
cutting
AJ:
completely
Charles Max Wood:
in and out.
AJ:
cut out.
Aiden Bai:
Oh, gotcha. Can you hear me still?
Charles Max Wood:
you're still cutting in and out.
Aiden Bai:
Hmm. testing testing.
Charles Max Wood:
Oh, that's better. At least
Aiden Bai:
Okay, cool.
Charles Max Wood:
there you go. Yeah, I was just gonna chime in and kind of agree with AJ. I know you didn't come on here to get our unsolicited advice, but yeah. It does make sense once you have people using it saying, I'm using this for my React app, and now I would really like it in Next, and you get enough of those to start. Okay, we'll add that in too, right? Or if you're getting, yeah, anyway, just based on feedback. But... I will tell you one thing that I'm interested in knowing is just how to get this added into my apps then. Is this something
Aiden Bai:
Right.
Charles Max Wood:
that I can just npm install and then I'm done?
Aiden Bai:
It's a little bit more than that. So we do have like, if you look on the documentation, there's like an installation page and there's kind of like an overview of how to do that. But
Charles Max Wood:
You're
Aiden Bai:
with
Charles Max Wood:
cutting
Aiden Bai:
any...
Charles Max Wood:
in and out again, Aiden.
Aiden Bai:
Test test, is this better? I think it's the mic, I don't know what's wrong with it.
Charles Max Wood:
few things
AJ:
all
Charles Max Wood:
that
AJ:
the
Charles Max Wood:
seem
AJ:
Canadian
Charles Max Wood:
to work.
AJ:
fires they're messing up the Portland internet
Aiden Bai:
Oh my gosh.
Charles Max Wood:
Yeah, if you're on Wi-Fi sometimes it helps if you just plug it in.
Aiden Bai:
Okay.
Charles Max Wood:
or if somebody else is doing something else on your network.
Aiden Bai:
It's probably that. Let's see. I don't want to like switch over just in case, because
Charles Max Wood:
Okay.
Aiden Bai:
I see it's like uploading still.
Charles Max Wood:
Yeah, it'll keep
Aiden Bai:
Is this
Charles Max Wood:
doing
Aiden Bai:
better?
Charles Max Wood:
that the whole time you're on.
AJ:
It
Aiden Bai:
Yeah.
AJ:
it'll
Charles Max Wood:
Yeah,
AJ:
be fine.
Charles Max Wood:
it is
AJ:
We
Charles Max Wood:
a little
AJ:
can
Charles Max Wood:
bit better.
AJ:
we can make an edit if
Charles Max Wood:
Yeah.
AJ:
you need to
Aiden Bai:
Okay.
AJ:
swap you do.
Aiden Bai:
Let me see. I will leave real quick then. Sorry guys.
Charles Max Wood:
That's fine. We can ask Toby how to put it on. How do you add million JS to your React app, Toby? Maybe he can't
Steve:
Wonder
Charles Max Wood:
hear
Steve:
if he
Charles Max Wood:
us.
Steve:
heard us. Yeah.
Charles Max Wood:
All right.
Aiden Bai:
I'm using the other mic now. I think there's a little bit of echo in this one though. Let me turn down the.
Charles Max Wood:
Oh wow, we hear a lot of people on Toby's end.
Aiden Bai:
You They are joining the podcast. Okay. Can you guys hear me now? Okay, cool.
Charles Max Wood:
All right, so you said
Aiden Bai:
There
Charles Max Wood:
there
Aiden Bai:
we go.
Charles Max Wood:
was a little more to installing million.js than just.
Aiden Bai:
Yeah,
Charles Max Wood:
Just npm
Aiden Bai:
so
Charles Max Wood:
install.
Aiden Bai:
we do have like an installation page that talks about how to set up with your specific tool you're using, or if you're just using Create React app or something like that. We also have a quick start page, which kind of gives you ideas on where and how to use Million. One thing we don't want is people just wrapping their app in one block. And while that is really convenient, right? there are caveats to using million where, you know, there are with any technology, with any tool, there are constraints and you have to work around those constraints to make the performance well. Just like AJ said, you Just like AJ said, use the tool where it's good. And so we kind of give you our how to think in Million, essentially just like a kind of interactive guide on where to use Million, what's certain use cases, it works well and what is cases it doesn't work well. We also have like a blog page. I can send you like the specific. or like how do, how we achieve this from a technical sense. So now we'll talk about some of the constraints of our approach. One thing I'm really excited about though is the, I know probably to like most developers, it's not something that's going to be used or something to be excited about for them. And that's totally valid, but we introduce like, we implement something called a block virtual DOM, which was introduced by a package called block DOM. And it's... It's something that's very interesting because traditionally we view virtual DOM is very slow or like slow relative to other technologies. Um, and you can see this in like the JS framework benchmark where the technologies like signals or, you know, spell are faster in comparison to react. Um, and it's gotten a bad rap. Like for example, with Svelte, Rich Harris has written an article called the virtual DOM is pure overhead criticizing. Okay. Where it reacts is bad or they are certain constraints to that. Um, and it's really cool to see, you know, virtual DOMs quote unquote, making a comeback in this form.
AJ:
So this is kind of off and left field from what we've been talking about, but what were you doing before you were doing react? Were you ever using other frameworks or have you have you tried other design patterns? What what was it that brought you to say, I'm still going to use react, but I'm going to I'm going to change this core part of it rather than using something different that already exists or just or just. going lightweight.
Aiden Bai:
Yeah, I was actually like the complete opposite before. I was like all in on like Node.js, Pub templates and also using HTML X and Alpine. And so like at some point I made my own like Alpine clone. And that's how I got started into the, uh, you know, the space. Um, like the main reason I kind of switched over was because of like jobs, but also Um, it's, it was more, I don't know. I felt like. I felt like with solutions like HTML X and, you know, just like, no, just it's, it's definitely a way to approach it, but it just didn't appeal to me in that moment. It felt outdated, even though it's a valid solution. Not saying it's not. It's just like, for me, it felt outdated.
AJ:
I missed every other word
Charles Max Wood:
Yeah.
AJ:
on that.
Charles Max Wood:
Yep.
Aiden Bai:
OK, let me try that again. Hey, this is... Testing, testing. Okay, cool. Just straight interrupting if I sound choppy. So before React, I got started with the server rendering world where I had a Node.js server with pug templates. And I augmented my HTML with HTMLX and Alpine.js. And I was really happy with that solution. I even made my own Alpine.js clone. That's how I got started into the JS framework space. One reason I switched over to React was because I felt like I was going like HTML X, these solutions were outdated, just for me. They are very valid solutions. It's just for me, I didn't want to build applications with them anymore. Yeah, it was, but also a lot of the kind of ideas around HGMX and Alpine where how we can provide, you know, experiences that tailor to developers, but also make them pretty fast. Alpine, I mean, Alpine is not fast for like outside its use case, but within its use case, it's really great. It's kind of translated with million where We want to be really good at certain things that really help certain developers. Was that choppy or was it okay? Okay. I don't know, have you guys used htmx or played with AlpineJS before?
AJ:
So secret, not
Charles Max Wood:
I think
AJ:
secret.
Charles Max Wood:
we.
AJ:
I don't do front end. I do libraries
Aiden Bai:
Oh,
AJ:
on the front end.
Aiden Bai:
I see.
AJ:
I do not do HTML and CSS. I stay as far away from those beesies as I can.
Charles Max Wood:
I seem to recall we did an episode talking about HTMX at some point. But I'll go find it and put a link in the show notes.
Steve:
And we
AJ:
Dan
Steve:
did
AJ:
would
Steve:
have
AJ:
know
Steve:
a guy
AJ:
off the
Steve:
from
AJ:
top
Steve:
Alp.
AJ:
of his head he's crazy like that. He knows every single one of our episodes by number, like instantly. But we've had both Alpine and HTMX
Charles Max Wood:
Yeah.
AJ:
talked about on the show before.
Steve:
Well,
AJ:
And...
Steve:
we actually had their creators talking, but
Charles Max Wood:
Yeah.
Steve:
you get the idea. It would be creepy if
Aiden Bai:
That
Steve:
the code
Aiden Bai:
should be cool.
Steve:
started talking.
Aiden Bai:
It's just like a...
Charles Max Wood:
So where do you see this going? At the end of the day, you start creating some of these solutions on your own, realize, hey, there's a whole ecosystem in React, you kinda come back to doing the React stuff. Where does this end up at, right? Do we just continue having React as our dominant framework at the end of the day with tools like MillionJS, speeding it up and making it easier to do the right thing with it? Or do we eventually hop over to something else, like one of the
Aiden Bai:
Mm-hmm.
Charles Max Wood:
smaller, more lightweight frameworks that kind of give us 90% of what we need? Or are we looking at more full stack solutions where there's more backend and frontend? We kind of get that a little bit with the server components. Like there are all these different things that are going on out there. And
Aiden Bai:
Mm-hmm.
Charles Max Wood:
I'm just wondering, yeah, effectively, do we keep doing what we're normally doing with React? with modifications that make it faster, easier, better? Or are we gonna eventually have another paradigm shift, do you think?
Aiden Bai:
Right. I don't like to be bullish or bearish on technologies. I feel like you should use technologies if they're a good fit. And that's with your team, with your project, with your constraints. But if we're to talk about it, React is doing a lot of cool stuff right now, specifically with React for Git, which is like a compiler that can reduce the amount of There's also off-screen rendering, which is like, what if we could render the user interface on the server and then server to the client? And also server components, where we can simplify the data to user interface model and make everything react. And there's a lot of solutions, including Preact, which makes less bundle sizes, faster react. But yeah, I think fundamentally there are a lot of great solutions. but a lot of solutions are ready for optimization with React. And some would say it is a bad thing. And in terms of choice, it can be very paralyzing. But I think React is in a place, like the React ecosystem is in a place where it's at a point where it's like there's a lot of innovation, which is really cool. There are a lot of good solutions. There are a lot of bad solutions. And it's a lot of innovation. we just have to see what happens. With Million specifically, there are also those two paths. Million can, we can figure out there is no product market fit or like there is no users at all. So just dies in the GitHub. Or there are a lot of users, a lot of people interested in using it and we continue to sustain the growth. And maybe some of the ideas can be proliferated into the ecosystem. But I think fundamentally, whatever happens with the million, I'm just happy or our project members happy. Like we're able to provide some reference to the community where. Whether it's like whether it's a good or bad idea, it can be a tried and true idea. It can be a reference for future libraries to see, Hey, we should not take this approach or, Hey, we should take this approach. And I think this also applies to the other ideas like signals or Seeing those is pretty tried and true, but like, I don't know, svelter, solid or whatever. Yeah, also web performance, right? It's always good. I guess from a framework author perspective, it's always good to see new ideas. Maybe not for a developer's perspective, because you'll have to learn all these. Well, you don't have to learn it, but you feel like you have to learn all these new technologies, like RSC, OSC. I don't know. Most people don't. Zero idea what that means. I don't even know how that applies to me. I don't know the constraints. You know what, that is totally OK. And if you feel that way, it is totally OK to feel that way. I feel that way, especially in like I literally work in React rendering. And I still don't know how things up there should be up. But just know if you're like one of those people, from my perspective, there is a lot of cool stuff happening. And maybe we can build. Eventually, this can maybe help. build cool solutions or better solutions for existing products. Because better solutions aren't built with stagnation or sitting with existing solutions. It's built with a lot of trial and error. It's built with a lot of mistakes. It's built with a lot of experimentation.
Charles Max Wood:
All right, well, I think I've kind of exhausted my areas of questions. Steve, AJ, do you have anything else you want to dive into?
Steve:
Not particularly, I mean, I primarily focus on view. So I haven't done a lot of React development. I mean, I understand the virtual DOM and I was just listening to an old interview today with Rich Harris, you had mentioned him earlier, of Svelte fame, just talking about the virtual DOM and why Svelte doesn't really use it. But not being in the React world. don't really have a lot of experience or need for well, I wouldn't be able to implement million JS with view as I understand it right now.
Aiden Bai:
Yeah, it's cool because I think Vue actually has their own compiler. From what I understand, the methodology is similar to Millian, where they have like, if you have like a, I don't know, I forgot what the Vue model or V model thing inside your Vue template, it can detect that dynamic part.
Steve:
Mm-hmm.
Aiden Bai:
automatically optimize into a virtual bomb. Yeah, there's so many learning. Actually, I feel like one of the things about React is, for us, in the React world, it's mostly like we're like, hey, we invented a new thing and D is like, oh, we did this three years ago, like whether it was
Charles Max Wood:
Hahaha
Aiden Bai:
reactivity. So it's really funny because- In ReactLand, we think it's all cool, but views like, oh, we already had this for so many years. Yeah.
Steve:
Yeah, some things go the other way too.
Aiden Bai:
Mm-hmm.
Steve:
I know with change from view two to view three, if I remember right, and I'm not, you know, incredibly knowledgeable on the internals. I know that there's references to view trying to copy react in terms of, I think it was the use of proxies and some more hooks like implementations in view. But so I think it goes both ways and that's common across all the frameworks, right? They all cannibalize each other or copy or whatever phrase you want to use. Borrow from each other, shall we say. you know, and they see, hey, this looks cool that we could use a version of this in our framework to speed things up too. So definitely not uncommon.
Charles Max Wood:
Yeah, I think
Aiden Bai:
Totally,
Charles Max Wood:
it makes
Aiden Bai:
yeah.
Charles Max Wood:
the whole ecosystem better. Because you have a good idea, hey, we're gonna use it over here. And then they have a good idea, hey, we're gonna use it over here. And yeah, I think overall it's a positive thing.
Aiden Bai:
Yeah.
AJ:
So
Aiden Bai:
the
AJ:
I'm,
Aiden Bai:
day.
AJ:
I'll go ahead.
Aiden Bai:
No, no, go ahead, sorry.
AJ:
No, you, you go ahead. Cause I was going to go on a different topic.
Aiden Bai:
Okay, cool. Yeah, I mean, yeah, the day we have RSC and all the frameworks, you'll see like, I don't know what I was saying, just go ahead, there's nothing.
AJ:
edit. Okay.
Aiden Bai:
Edit, cut me out.
AJ:
So when, when I was, when I was younger, I was pretty good at predicting which technologies we're going to succeed and fail. And as I've gotten older, I've gotten worse at that prediction because with age comes wisdom and with wisdom comes some lack of opt of, um, Oh, what's the word I'm thinking? Optimism. Or maybe not with age comes experience with experience should come wisdom and with wisdom, I think comes discernment and with discernment comes less optimism. You don't think that everything's great. You don't think that everything's going to succeed because you're discerning and discriminating. So you look like y'all are pretty young. And so I'm curious how. how young you are, when you started developing, and how you feel like you, what kind of feel of the wins or sense of trends do you get? And are you playing into the trends that you're seeing? Are you going against the current with this? Kind of interested in that social psychological perspective of the project.
Aiden Bai:
Totally, yeah. I just graduated high school. And so, yeah, one of the things I get a lot is, actually, I remember we learned this concept you mentioned in AP government, where it's like, I think it's called the life cycle or age gap effect or something like that, where generally speaking, younger people are more liberal politically and older people are more conservative. And that comes with experience, right? Like as you said. Like for me, I tend to be more excited about new things. One thing I noticed with a lot of developers is I can sometimes see a very rough correlation of, OK, when I see new technologies like RSC or signals, I actually see a lot of things. I feel very excited about this topic. I tend to dig into them. I see many younger people in the community also do the same, where older people are more hesitant or more, they think about it a little bit more before they try it out, which is like, it's not a bad thing at all. I think we do need both sides, right? Technologies,
AJ:
It's
Aiden Bai:
we
AJ:
the
Aiden Bai:
should
AJ:
it's
Aiden Bai:
like,
AJ:
the again in the gang. Yeah, it's
Aiden Bai:
yeah, exactly.
AJ:
the force of ruin and preservation
Aiden Bai:
Exactly. Like we might have needed more older people during the crypto times, but we're going to skip on that.
AJ:
Yeah. Well, I think, for example, Node.js was something where I recognized it as actually being technically superior to existing solutions. I was only in my first year of college, but I
Aiden Bai:
Mm-hmm.
AJ:
could tell from surveying the landscape because I was very, I went to every meetup at that time. I went to the Python meetup, the Ruby meetup, the Unix or Linux meetup. I went to everything, right? And I could tell. Once I got, it wasn't the first introduction to Node.js because it was a little, it was too much new information that I was dealing with because I'd only just started attending the Ruby meetup and that's what they were talking about one of those times. But I could sense there was something about it that wasn't just hype, it wasn't just cool, it was useful.
Aiden Bai:
Mm-hmm.
AJ:
And I sensed the same thing about Go, but the difference between Node and Go is that there was already a hype train on jQuery. And then node was coming along on the tail feathers of the jQuery hype train. And I knew that node was going to succeed because I could see, well, there is no go hype train for it to, to catch on the tail feathers of, so node is going to win this round and, and then also there was a resurgence of one that comes back every 10 years. called Erlang. I don't know if you've heard of that one, but every 10 years or so people get super excited about Erlang and there's a new Erlang framework or derivative and everybody thinks that it's going to be like the next node
Aiden Bai:
Mm-hmm.
AJ:
or the next reactor or whatever. And then it never is, unfortunately, because there's a lot of good things about Erlang. But so anyway, just kind of that is like background. That's that's kind of where I'm, you know, but then since then, I've looked at other technologies and I thought, okay, this one has tear technical merit. And this one really just doesn't have technical merit, but I haven't been as connected with the hype trains and why something would succeed over something else. And that's, that's kind of where I'm, I want to know, you know, are you having experiences like that? Or is it, because mine was very rational, there's rational versus intuitive. And a lot of people just, they capitalize on just their intuition. So if you ask them to explain something, they actually oftentimes can't articulate it well. But they but their intuition is guiding them and they and they're still catching that wind or whatever it is. So do you have a sense for like any of that kind of perspective? I don't know if that was actually helpful the way I explained it. I was babbling but
Aiden Bai:
No, no, no.
AJ:
run with
Aiden Bai:
I
AJ:
it.
Aiden Bai:
understand. For me, I actually feel like I'm very bad at predicting technologies. I get lost in the details a lot, where I really, really like certain technical things. And I'm sure, you know, like with, I know there's like a huge community around Elixir where it's like, oh, there's like concurrency. And it's a very useful language, but I assume, you know, a lot of these people are really stuck in the details of Elixir and don't understand like the bigger aspects. Like you said, there are hype waves that kind of influence the adoption. It's not just like rationality. One of the things that I discovered with Million was At some point, I spent four months just learning about how to do these running techniques. It was just super, super interesting to me. At some point, I realized it's great if I have something very technically strong and it's very nice and it's actually kind of useful for some things, but it's also not super... It hasn't been actually used by anyone. So like for me, I definitely also like to think about things rationally. I don't have a great intuition for things though. And I also, when I think rationally, I think more technically than rationally.
AJ:
So I'm also curious. You've got your, your project is pretty successful. I mean, congrats to you on having ambition and, uh, having the technical expertise. I mean, just being, I thought you were younger. I didn't realize you were just out of high school young. That's amazing. Uh, and you've got 9.4 thousand stars on this, 260 forks. And so. How has the community aspect of this worked out? Because you can have a great technical product, you can have something that checks all the boxes, you can even have something that when people use it, they recognize is better. But then reaching out to people is a completely different skill set than building something that meets a need. So how is that community aspect gone? How have you gotten so many people involved with this and... I've gotten such excitement around it.
Aiden Bai:
I think first of all, first of all, I'm not like expert, an expert at all on this. Like I am pretty bad at talking to people, not only that, but also like trying to get people to be, to do certain things or like try to use the product or give feedback on that or reaching out. But I think one of the main advantages with Million is that it's kind of like an exciting thing in the community where we haven't really seen, it's like kind of like a bun moment. few, like the bun runtime moment where it's like, wow, OK, this is kind of crazy. So there's a lot of initial excitement when people look at Million. But one of the things I've had struggled with was, how do we? Like the thing is, our product is not stable. This is really, really early. The initial version was in February or March. And so there's a lot of issues. So being able to...
AJ:
Wait, how did you get 10,000 stars on this in three months? What?
Aiden Bai:
No, the current rendition is, it was around like, I would say like 3.5 thousand stars in January and it kind of like spiked up from there. So
AJ:
Okay.
Aiden Bai:
there
AJ:
So you,
Aiden Bai:
was like initial, yeah.
AJ:
what, how, how long was the original tail on this? That meaning,
Aiden Bai:
Um.
AJ:
so with the hockey stick, you have like a long tail and then you have the moment of inflection and then you start to get exponential growth rather than linear growth. So I'm talking like, how long were you having slow linear growth before you hit that hockey stick in February?
Aiden Bai:
It started in June 2021, so around a year prior. So 3.5
AJ:
Still,
Aiden Bai:
over,
AJ:
that's amazing.
Aiden Bai:
yeah.
AJ:
Are you active on Reddit or Hacker News or what? How do people get the word about this thing?
Aiden Bai:
Yeah, kind of like everything. Mostly Twitter, I kind of post stuff about Virtual DOM there. And so there is a little bit of initial traction. Every time we ship a feature, I tweet it. I'm like, hey, this is what we're building. And so the nice thing about it that is a lot of the technical stuff we do also translates to kind of like marketing, in a sense, where we're able to attract more developers to use it. But it's. Yeah, like I was saying, there's a lot of hype. It's mostly hype right now. So right now, what we really, really need to work on is how do we convert that hype into usage and then into continuous users.
AJ:
Well, my experience is that most of the people that are starting businesses seem to be in their twenties and that may not be true. That may be skewed because of the circles that I'm around,
Aiden Bai:
Mm-hmm.
AJ:
but it seems like most of the people that are starting web businesses are college kids. And so, and, and a lot of them, they get millions of dollars of investment and they get really nice cushy customer bases from. uh, midsize businesses that need a SaaS niche filled. So I imagine you probably, even though it's, it's not mature, there's probably a lot of products that aren't mature that use this. Do you, do you know, is this in production with, uh, some, some startups that are also gaining traction or is it mostly just hobby projects? What kind of usage are you seeing? Or do you know?
Aiden Bai:
Um,
AJ:
Cause maybe you
Aiden Bai:
yeah,
AJ:
don't know.
Aiden Bai:
it's, well, it's, it's definitely a lot of don't know, but right now it's like, I would say the composition is like 95 hobby projects and then 5% opens production. The main production website we're on is a smart home company called Wyse, W-Y-Z-E.
Charles Max Wood:
Mm-hmm.
Aiden Bai:
And the only reason it's on production there is because I interned there. So I was able to integrate into the thing. But yeah, it's been kind of a struggle. I've been trying to figure out ways to, well, part of it is stability, right? But the other part is how do we get people to start using it instead of, you know, kind of converting that hype into usage.
AJ:
big part of it is just having an option to let people pay you. That has been my
Aiden Bai:
Mm.
AJ:
biggest mistake with my open source projects is I enjoy doing the project and I see getting the payment as a chore and I don't implement the ability to let people pay. But if all you do is put up a open source version three bullet points commercial version five bullet points and it's the exact same code. You're just highlighting different features. You're
Aiden Bai:
Mm-hmm.
AJ:
going to get people that will buy the commercial version just because. There's when you when you have a business, you know, there's a sense of I need to be able to rely on this. And if I can pay for it, I have a sense of security that I can rely on it being there tomorrow. Whereas when something's free and unstable, it's like, well, I like this, but I don't
Aiden Bai:
Mm-hmm.
AJ:
know if it's going to be there tomorrow and it's not stable. So if the people who are working on it stop working on it, it's not going to work for me. I won't be able to get bugs fixed. I'm in deep trouble. So that's kind of where from my perspective, my adoption is I don't, I try to not adopt things that are both unstable and unpaid if it's paid and unstable, that's a better cause it levels the playing field or not necessarily that it must be paid, but that there's an option for me to pay. I've opened up so many GitHub issues where I said, can I pay you money? And if they say yes, I will pay them the money and I'll use it. And if they say no, I will look for something else.
Aiden Bai:
Thank you. Gotcha, yeah. I never really thought about it. I do have like a GitHub sponsors open. It's just that I don't, yeah, I definitely feel you on that where it feels like receiving payment is more of a chore because you really enjoy, like I really enjoy working on the project there. So yeah, definitely something to think about. And maybe you'll see like a enterprise version soon.
AJ:
I don't know what your pricing model should be, but
Aiden Bai:
Mm-hmm.
AJ:
I actually dislike enterprise. I like commercial. I don't like enterprise because enterprise is always exorbitantly priced. And I
Charles Max Wood:
Yeah.
AJ:
want to pay 99 bucks or 30 bucks or 300 bucks. Or if it's a, you know, if it's a really big deal, a thousand bucks. But I don't want to, I don't want to have to, you know, call or what, you know, that's, but
Aiden Bai:
Yeah.
AJ:
that's, that's I have a very specific view on the world, but I think that a lot of people share that where it's like, just give me a simple pricing model. I just it's a piece of mind, right? Even if I only paid
Aiden Bai:
Yeah.
AJ:
10 bucks, although that probably seems a little low. But, you know, even only paid 10 bucks, I have a piece of mind like, OK, cool. This is getting funded. There is because time is money, right? So if I'm spending money, I'm assuming that it's making time for you. So that's kind of thing where. Yeah. But I, I hope that I hope that you do and I hope that's successful. I hope that drives some more business for you. Who knows? I'd love to if you do it. I'd love to hear back on it. If it if it works out or not.
Aiden Bai:
Yeah, I'll definitely reach out if I do, when I do.
Charles Max Wood:
all right well i'm gonna push us uh... into pics and stuff like that uh... Yeah, we used to do a self promo segment on this, but I just kind of folded it back into the picks, just because, yeah, if you're working on something, just tell us about it in the picks. So anyway,
AJ:
Chuck,
Charles Max Wood:
let's.
AJ:
I think you've been giving us the disclaimer longer than you gave us the original.
Charles Max Wood:
Probably, so I will quit giving the disclaimer then, fair enough. Anyway, Steve, why don't you start us off with your picks?
Steve:
Alrighty, so let's bring up the dad jokes of the week, which as I like to point out, are the high point of any podcast episode that I'm on, right? So the other day, my son, he's about 20 and he is, so he's getting to the point. Maybe he was thinking about getting married and having kids later. And so at one point he asked me what it was like to be a parent. And so I woke him up at two o'clock a.m. to tell him that my sock came off.
Charles Max Wood:
the
Steve:
Right. Sorry, delay on the drum joke here. Caught me off-card.
AJ:
I wasn't prepped. I was in a technical mindset and whatever this was, I missed
Aiden Bai:
I'm going
AJ:
it.
Aiden Bai:
to go to bed.
AJ:
What? Alright, explain
Charles Max Wood:
Usually
AJ:
me the joke.
Charles Max Wood:
these aren't funny. That one was hilarious. Oh my gosh. You should have thrown up on him too.
Steve:
You know, there's a lot of people that laugh at my jokes, Chuck, just because you don't appreciate them as much as others, but that's okay.
AJ:
But what is the, explain it, explain it. What was the joke?
Steve:
Explaining what it's like to be a parent. I don't know. Have you ever had your kids wake you up at 2 o'clock a.m. For some? Reason that was just crazy
AJ:
Oh, not yet. Not yet. So we've
Steve:
Really?
AJ:
got a four year old.
Charles Max Wood:
Just wait.
Steve:
With
Aiden Bai:
I'm sorry.
Steve:
the
Charles Max Wood:
Just
Steve:
ages
Charles Max Wood:
wait.
Steve:
of your kids, I'm surprised.
AJ:
We've got a four-year-old and a one and a half year old and I can sleep through the train that goes by in the night I can sleep through My son yelling at the top of his lungs I can sleep through a lot of things but You know, they've not They've not come into the room in the middle of the night yet
Steve:
Consider yourself fortunate.
AJ:
Okay, all right.
Charles Max Wood:
Yep.
AJ:
Now I know I didn't get it and I appreciate
Steve:
When my kids were
AJ:
it.
Steve:
younger for a while, I could have sworn they were gonna be potheads because they kept waking me up at 420 every morning. I mean, literally, at 420, they were waking up. And I don't know what it was about that time. I had me worried that they turned out okay. So did you know that there was a Roman emperor who never aged after he turned 19? His name was Constantine. And then speaking on more of a tech level, one of my jobs, you know, I've talked about jobs where I've had, where I've gotten fired before, like the time I gave my seat to a lady on the bus and I'd lost my job as a bus driver type thing. But anyway, another job that I used to have, I used to be a programmer that worked on auto correct, but they fried me for no reason. So those are my picks.
Charles Max Wood:
All right, AJ, what are your picks?
Steve:
I'd like to point out for those not watching the video that Aiden is really laughing quite hard. So I'm glad he appreciates my humor.
AJ:
also glad that someone appreciates you. You know, they say that I think you brought this up before, that the kids that get a lot of dad jokes turn out more well socially adjusted, able to handle things like constant embarrassment with
Steve:
Exactly.
AJ:
their peers.
Steve:
Yep.
AJ:
Yeah.
Steve:
There was a joke. There was an article I picked one time. I'd have to go back and dig it up that talked about exactly that and why the kids like the dad jokes and They can they can handle abuse and embarrassment much easier because they're so used to it
AJ:
Yeah, that's good. I've got to get my repertoire up to speed with my kiddos. Speaking of which, that's, that's what I'll pick. I'll pick my kiddos because I'm just there. They are at such wonderful ages right now. My daughter's four. My son's one and a half. My son is just the biggest troublemaker. If there's anything that can be any so smart and resourceful. He can stack things on top of each other to reach anything in any place. He I mean, it's just it's impossible, but he's such a lovable little guy. And I just. I and even when he gets into trouble, he's just got this beautiful smile where he's just you need to stay mad at him and give him a stern look, but you can't do it for more than about three or four seconds. Me and my wife are both having this problem. No matter what trouble he causes, we just can't stay upset with him. He's just so adorable. And then my daughter is just, she's in the phase that my wife is totally nonplussed about, perhaps less than nonplussed, but she asks questions about everything. She's in the recursive why phase, where at the end of the, eventually I just have to ask her, well, why don't you know? And she gets to a point where I can't answer it anymore. It's like, why this? Why that? Why this? Why that? Why don't you like it? That's the one that's the weirdest. Why don't you like it? Stop doing that, please. Why? Well, I don't like it. Why don't you like it? I don't know how to answer that. Does anybody know how? How do you answer why don't you like it? It's not my preference. I don't know. So there's some of those where she stumps me. So. Just really, really enjoying time with the kiddos. We've, we've been checking the mail on the four wheeler every single day, even, even Sunday and holidays, cause they don't quite grasp that we can be sure the mail doesn't come, but we go that then it's really weird. We don't have a mailbox at the end of our driveway. We have a community mailbox at the end of the street, which is weird cause it's houses, but whatever, but it's great. Cause we get to go down and And then sometimes we get to say hi to some of the neighbors or the neighbor kids as we, we go around the block and whatnot. So it's just, uh, it's, it's a good life. And earlier to the point we're talking about, you know, being more, more liberal versus being more conservative. Uh, I think, I think everybody becomes an instant conservative once you have kids. When you went, once you're trying to protect what you have. And ensure that they have as good of a life or better than you had hopefully without experiencing the same number of hardships that you had to experience. It's a, and I wish that everybody, well, I know that not everybody wants kids. And I don't think that everybody should have kids thrust upon them, but I, I hope that everybody that's open to it gets the opportunity to, to have kids and, and to get resources to help them. to be a great parent, whether that's through family or counseling or books or whatever, because it's frustrating and it's rewarding and it's one of the great aspects of life.
Steve:
Yeah, I'm sure Chuck would agree, but I can say my kids are probably one of the best things that's happened to me.
Charles Max Wood:
Yeah, mine
Steve:
without
Charles Max Wood:
keep happening
Steve:
a doubt.
Charles Max Wood:
to me too. No, it is, it's true, it's definitely true.
Steve:
You know there's ways to control that, right Chuck? Just saying.
Charles Max Wood:
Yeah, well we haven't had a child in almost a year or so.
Steve:
Okay, so you're doing okay then, okay.
Charles Max Wood:
Yeah, we got that figured out. Yeah, I'm just trying to think. I guess it's my turn for picks. So I'll throw out a few picks. I had a board game pick and for the life of me, I can't remember what it was. So I'm just gonna go to one of the ones that I really love. This one's out of print. It's called Shadow Hunters. You can go find it. It just costs a little bit more. So I'm gonna pick it. I guess the other game that I should pick, this is the one that when my sister comes over, she likes to play is... Legendary and there are a whole bunch of it. This is Marvel legendary. It has a whole bunch of Add-ons you can pull in so it's got like the Hulk add-on and the Thor add-on and stuff like that. So Marvel Legendary and I actually wrote an app, a React Native app that allowed you to randomly select... uh, different characters from different, uh, expansions. You just tell it which expansions you want to use and then it will spin up a game and randomly pick your villain and stuff. Um, it has a board game geek weight of 2.43. And so, you know, it's, it's a little bit complicated, a little more complicated than kind of your average casual game, but it's not so involved that you couldn't play it. Um, it's a lot of fun. Rounds take about an hour. And yeah, three or four people seems to be the ideal. You can play it with one player, you can play it all the way up to five players. And yeah, you're effectively trying to get enough hits on the villain before the scheme is completed or you run out of people in the villain deck. But it's fun, it's a deck building game if you're looking for a good deck builder. And then for my other picks... So last week I was in Amsterdam for JS Nation. And JS Nation React Summit, they're both put on by an organization called Git Nation. They must be based there because a lot of their events are held in Amsterdam. But they were fun. They were really great events. So if you're looking for a conference to go to next year, definitely check them out. And a good chunk of the conference was online. So even if you can't make it to Amsterdam for whatever reason, you know, check out their online portions. So, you know, for example, it's pretty expensive to fly there from here. So.
AJ:
Yeah, for whatever reason. That was
Charles Max Wood:
Well,
AJ:
funny.
Charles Max Wood:
some people can't travel because they have family commitments or what have you. So whatever your reasons are. Yeah. Um, but Amsterdam was a cool city. Um, one thing I figured out, cause I wanted to go see the Anne Frank house. Cause I read the book in like fourth grade, the diary of Anne Frank. Um, and my wife and I, my wife, much more than I, uh, we really are kind of interested in world war two history. Um. And so it would have been fun. You have to get those tickets like months in advance. And I didn't know that. So that's like the only thing in Amsterdam. I didn't really have time to see that I wanted to see. I did get to see the Dutch resistance museum or the Verzet museum. And that was cool. And they kind of talk about a lot of the people and, you know, kind of the newspapers and how they did stuff under, you know, hid what they were doing and, you know, how they convince people to hide Jews and. Anyway, it was really, really interesting to go to. They also have Rembrandt van Rijn. He's the painter, Rembrandt. So most painters, you know their last name. With Rembrandt, you know his first name. But they redid his house in the historical way. So you get to walk through and imagine what it was like 300, 400 years ago when he was painting. And that was really cool. picked that as well, the Rembrandt House Museum. What else did I get to see?
Steve:
Hey Chuck, have you ever rid the hiding place?
Charles Max Wood:
I think so.
Steve:
So I talked to about a little while ago, because my son and I just read through it again. And it's about a gal named Corrie Ten Boom, who is Dutch,
Charles Max Wood:
Oh
Steve:
lived
Charles Max Wood:
yes.
Steve:
in, I forget her name, but her and her family hid Jews during war, and they ended up being arrested, and they were all sent to concentration camps. She survived, her sister didn't, and she was a prolific speaker for years into the 1980s until she died. But it's along the same lines, and it's really quite a fascinating story.
Charles Max Wood:
Yeah, yeah, there's so much. You can go as deep as you want in that area. And there are so many inspiring stories, you know? The other one that comes to mind is the, As a Man Thinketh, I think is what it's called. Maybe not. Anyway, it's, but it's another book by another concentration camp survivor who talks about how mindset in the concentration camp seemed to be the way that people... got through it. And you know, it, I don't know that we can completely fathom what it was like to be there on either side, to be honest, the Germans or the Dutch or the French or whoever, but yeah. My, and it's interesting because my grandmother and my great grandparents left France a few years before the Nazis invaded, so. Um, but my great grandfather, he was somewhat sympathetic to some of the ideas they were putting out there. Um, I don't know that necessarily the extermination of the Jews, but some of the other political ideas that they had. And so, uh, he actually wound up going back to France, uh, during that. My great grandmother and my grandma and her sister actually, um, left, left him. And, uh, anyway. So there's some interesting family history for me there. But anyway, it's also interesting to think, you know what, if I had been brought up in a country that was raised on some of these ideas, would I have been the kind of person to stand up to those ideas and recognize them for what they were or not? And I don't know that anybody really has those answers, but at the same time then it's, how do I begin to recognize truth and do what's right? And that's what really Fascinates me is the philosophical. Okay. Well, I don't live in that time. But how do I make sure my time isn't like that time? So anyway But yeah, so lots of stuff there. The city was actually really great to just walk around in. The conference paid for us to do a canal tour because there are canals around the main part of town. And that was super fun. So anyway, I'm going to pick Amsterdam as a city. And I'm going to just kind of say a thanks to JS Nation to React Summit. We will also have some podcast episodes coming out that I recorded while I was there. So. All in all, good stuff. I'm just trying to think what else I wanna pick. But I guess I can save it. Next week I won't be here, but the week after that, we'll definitely have some picks. Aidan, do you have some picks? You have some things you wanna shout out about?
Aiden Bai:
Sure, yeah. I guess I can pick this podcast. This is like kind of cool because my morning drives to school are generally, I don't have anything playing, but I've been recently just like going on Spotify and just clicking on this podcast and listening to you guys talk. So it's really cool to be on here and maybe I'll hear myself next week.
Charles Max Wood:
Yep. Cool.
Aiden Bai:
Yeah,
Charles Max Wood:
How
Aiden Bai:
I
AJ:
That's.
Charles Max Wood:
about
Aiden Bai:
know
Charles Max Wood:
you,
Aiden Bai:
this
Charles Max Wood:
Toby?
Aiden Bai:
is like...
Charles Max Wood:
Oh, go ahead.
Aiden Bai:
No, it's like, I like it when you're just talking about like Amsterdam and all the history and I'm just like, yeah, this podcast.
Charles Max Wood:
Hahaha Cool. Well, I'm glad we provide you what you're looking for there. Toby, do you have some shout outs you want to make?
Tobiloba Adedeji:
Yeah, I'm out of the room. I'm sorry, continue. Can you hear me?
Charles Max Wood:
I'm gonna take the silence as a no. All right, well.
Tobiloba Adedeji:
Oh God.
Charles Max Wood:
We'll go ahead and wrap it up here then. Thanks for coming guys, this was awesome. And until next time, folks, Max out.
Steve:
Adios!
AJ:
Adios. Thanks for coming
Charles Max Wood:
record.
AJ:
up.
Million.js with Aiden Bai and Tobiloba Adedeji - JSJ 589
0:00
Playback Speed: