Dan Shappir:
Yeah, so here's the thing though. So React on the one hand has been fairly fearless about introducing quote unquote breaking changes. But at the same time, they've usually been very effective at introducing very comfortable migration paths. And for example, if I'm looking at Next.js, they did not do away with the pages folder. You can have both an apps folder and a pages folder. And just to clarify for those who are not familiar with the normal culture, pages is the old way of doing things. It's without server components. And apps are the new way with the React server components. And to make a long story short, it's more complicated than that, but that's the gist of it. So... you can migrate piecemeal. Now, I do agree that once you've embraced, you've decided to embrace React Server components, that a lot of your existing ways of doing things don't really make sense anymore. Or, you gave examples of using 10-stack query, for example, you probably don't want to do that. if you've embraced
Jack Herrington:
Yeah, that one I can see.
Dan Shappir:
the React Server
Jack Herrington:
Right.
Dan Shappir:
Component
Jack Herrington:
Yeah,
Dan Shappir:
way.
Jack Herrington:
you probably don't need. We may not need that
Dan Shappir:
Yeah.
Jack Herrington:
is and that's fine. And you may use server actions and things like that. But I mean, I'm talking about like I mean, that I think is not that big of a deal. It's the abandoning movie. Like I like there's a lot of folks out there who they've invested a lot of time in understanding movie or chakra or whatever. Or Andy and those or just a raw emotion, emotion generally. And what do you do? I mean, they their basic suggestion is, hey, use tailwind. And that is a big change.
Dan Shappir:
Yeah,
Jack Herrington:
That's a huge change going from movie
Dan Shappir:
that's
Jack Herrington:
to tailwind.
Dan Shappir:
true.
Jack Herrington:
Yo
Dan Shappir:
By the way, go CSS.
Jack Herrington:
I know it's CSS guys and I know it's like, but like, who cares? But no, that's actually for realsies
Dan Shappir:
No,
Jack Herrington:
for
Dan Shappir:
I
Jack Herrington:
like
Dan Shappir:
understand
Jack Herrington:
a lot
Dan Shappir:
what you're
Jack Herrington:
of
Dan Shappir:
saying. I'm saying
Jack Herrington:
front end devs.
Dan Shappir:
you don't have to use Tailwind,
Jack Herrington:
Big deal.
Dan Shappir:
you don't have to use MUI, you could just use CSS. And that tends to always work.
Jack Herrington:
Oh yeah, you could use CSS modules. Right, but
AJ:
Blasphemy!
Jack Herrington:
that's cool. But that, man, that is not a casual migration.
Dan Shappir:
No, for
Jack Herrington:
If I'm using Muie in my pages directory, and then I'm going to...
Dan Shappir:
sure.
Jack Herrington:
Whoa.
Dan Shappir:
And it's beyond that. I told the team, our public site team who are using React, first of all, I told them hold off of server components for another six months.
Jack Herrington:
Oh, easy,
Dan Shappir:
Yeah,
Jack Herrington:
yeah.
Dan Shappir:
at least for it to stabilize and stuff like that. Like the whole mutation story is totally still in flux and whatnot.
Jack Herrington:
State management stories
Dan Shappir:
Yeah,
Jack Herrington:
still in flux,
Dan Shappir:
yeah,
Jack Herrington:
it's all
Dan Shappir:
exactly.
Jack Herrington:
in flux.
Dan Shappir:
But I also told them that when you do decide to embrace it, first of all, do it piecemeal as much as you can, you know, pick one of the parts. Like for example, pick the blog part of our website and just do it to begin with and see what the experience feels like. But take into account that it's not only about replacing certain things like you just mentioned. It's also about a new way of architecting and thinking about how you write the React application. It's almost a totally
Jack Herrington:
Yeah.
Dan Shappir:
new framework. The big difference versus something like switching over to solid or quick is that you still can't do it more piecemeal than you can with those. Like with quick, you do have the ability.
Jack Herrington:
I disagree in the case of solid. I agree in the case of quick.
Dan Shappir:
Why do you disagree in the case of solid?
Jack Herrington:
Because you can embed solid and I've seen this. You can embed solid inside of React
Dan Shappir:
And you can
Jack Herrington:
and
Dan Shappir:
embed,
Jack Herrington:
it's OK.
Dan Shappir:
by the way, React
Jack Herrington:
That works.
Dan Shappir:
inside of Quick. So you can actually move.
Jack Herrington:
You can embed React inside of QUIC, but the converse is not true.
Dan Shappir:
Yes.
Jack Herrington:
You can't get the best of QUIC if you start with React.
Dan Shappir:
but
Jack Herrington:
And I think that's, for a lot of folks, that's a huge migration difference. I'm going to go and take this one little carousel, whatever. I'm going to go implement that in Solid and see how it goes. That's a big difference from I want to do the same thing. I want to go and
Dan Shappir:
Yeah,
Jack Herrington:
what
Dan Shappir:
but
Jack Herrington:
this call is
Dan Shappir:
my
Jack Herrington:
this
Dan Shappir:
recommendation
Jack Herrington:
carousel and
Dan Shappir:
by
Jack Herrington:
quick.
Dan Shappir:
the...
Jack Herrington:
It's like, no, you have to go and take your entire app, ported into your quick app, and then then you can make your carousel. That's a
Dan Shappir:
What
Jack Herrington:
big difference.
Dan Shappir:
I would actually do, by the way, is split vertically, not horizontally, and basically move certain pages
Jack Herrington:
Hmm. Yeah.
Dan Shappir:
completely over to the other framework. I mean, maybe use some components, but starting to embed solid components inside React sounds a bit scary to me, I have to say. Maybe
Jack Herrington:
It's not. I mean, really
Dan Shappir:
if I'm
Jack Herrington:
it.
Dan Shappir:
using Astro with the islands and have some islands work like this and some other islands work like that. I totally get that it works. I'm not talking from the perspective of scary as in it'll break. I'm talking scary as in you're juggling too many things that look really similar but are actually totally different. And... And it's so easy
Jack Herrington:
Fair.
Dan Shappir:
to get
Jack Herrington:
Fair.
Dan Shappir:
into trouble this way.
Jack Herrington:
Yeah. Yeah. I mean, what is JSX? Right? What's that?
Dan Shappir:
Yeah.
Jack Herrington:
Is that is it by default to react JSX? Or is it the solid JSX? I mean, one thing I would recommend if you're going to try any of this is basically go to a mono repo first, start extracting big pieces of your app into into shared libraries, right? Factor it nicely. And then if you then then he got a lot of portability options you could go and embed you could go and take those components and move them into another version react another version next or quick or whatever. That's what thing
Dan Shappir:
Bye.
Jack Herrington:
and
AJ:
Why,
Jack Herrington:
get more options.
AJ:
why mono repo? Why, why not use skit submodules? I mean,
Jack Herrington:
Oh,
AJ:
my,
Jack Herrington:
I see.
AJ:
my thing
Jack Herrington:
Yeah,
AJ:
is
Jack Herrington:
yeah, yeah.
AJ:
I want to have, I want to have
Jack Herrington:
I
AJ:
the
Jack Herrington:
think
AJ:
versions
Jack Herrington:
that's fine,
AJ:
be
Jack Herrington:
too.
AJ:
meaningful.
Jack Herrington:
OK, fair enough. Actually, I don't see like you don't get that with Monterey Bow, but I think either of those,
AJ:
Well,
Jack Herrington:
I guess
AJ:
you can't
Jack Herrington:
it's
AJ:
get
Jack Herrington:
the logical
AJ:
tag in a
Jack Herrington:
boundaries
AJ:
monorepo.
Jack Herrington:
that are interesting to me. It's
AJ:
You
Jack Herrington:
not
AJ:
can't.
Jack Herrington:
not the necessarily the the specific mechanics.
AJ:
Well, the problem I have with mono repos, you get tag becomes useless. Something
Jack Herrington:
Fair.
AJ:
that is, that is basically fundamental to every workflow I've ever had, you throw out the window and I don't, I don't understand how you're supposed to repair that,
Jack Herrington:
Oh,
AJ:
like
Jack Herrington:
you do.
AJ:
what's the alternative once you've thrown away.
Jack Herrington:
Right. Okay, so cool. As long as we're talking about libraries, as long as you're talking about externalizing into libraries, whether you use Git sub modules as your modus operandi for that, or whether you use a monorepo, really just, you know, dealer's choice on that one.
AJ:
But how, how can you use it in a mono repo? If you, if you don't have get tags, right? That's this, this is the thing. So if I have four libraries that I want to export, I can only use one get tag. I can't get tag. There's no, you can't say I want to get tagged this folder. You do you, you get tag and that's it. Get tag is for the repository. That's I mean, that's like How do you get past that? What is the solution to that?
Jack Herrington:
As far as I know, so turbo repo and nx, which are the kind of two big ones in this space, right, they can look at a particular version and say that this as long as you're doing your versions properly in the package, JSONs, and you're actually like,
AJ:
But that should come
Jack Herrington:
as
AJ:
from
Jack Herrington:
if they're
AJ:
the get
Jack Herrington:
externalized.
AJ:
tag. Get tag should influence package.json. So it.
Jack Herrington:
Fine. Okay. Oh, yeah. I guess. Okay, so fine. Take what's it to take? What's the say we want to use get the sub modules, right? The point is that we want to go and externalize, we're gonna take, we'll put a boundary between the framework choice, like the meta framework choice, like next JS or quick, or that sort of thing. And so our sort of business logic implementation in components or whatever. And so yeah, you can move
Dan Shappir:
Hmm
Jack Herrington:
that into a good submodule or whatever.
Dan Shappir:
These days, by the way, I'd be inclined to move as much of the business logic to the back end in one way or another. But
Jack Herrington:
Mm, sure.
Dan Shappir:
to be honest, by the way, just an interesting story. You know what we used to do at Wix with these sorts of things? And I'm talking about really big applications there. We would rewrite them from scratch.
Jack Herrington:
Mmm.
Dan Shappir:
at Wix literally, like I was at Wix seven years and we rewrote our core application from scratch. Depends how you count it, but either two or three times during that period of time.
Jack Herrington:
Cool. And how many devs did you have?
Dan Shappir:
lots
Jack Herrington:
Ha ha ha
Dan Shappir:
but the core but the core but but the core no but yeah but here's the thing No, but what we really had, which made the difference, we had a core group of something like 10 super experienced, very knowledgeable developers who've been with the company for a long time and knew the code inside and out. So that really made a huge difference.
Jack Herrington:
Mm-hmm.
Dan Shappir:
And we had... The project architect literally knew the entire source code by heart, which was insane.
Jack Herrington:
Hmm.
Dan Shappir:
You
Jack Herrington:
Yeah, it's been a long time since I've done that. I well, actually, I think I know my entire codebase. I'm working on now by heart, but it's not that that big.
Dan Shappir:
I'm talking about hundreds of thousands of lines of code.
Jack Herrington:
That's nuts. Yeah. Okay. Yeah.
Dan Shappir:
You would
Jack Herrington:
Impressive.
Dan Shappir:
ask him, like, this function, what, you know, where, what,
Jack Herrington:
What do they do?
Dan Shappir:
oh, no. What's the name of the function that does X? And he would, oh, it's, yeah, that was pretty insane. Um, yeah, look, it's, it's, you know, there's a reason that people hate rewrites, but sometimes you really need to bite the bullet. Uh,
Jack Herrington:
Mm-hmm.
Dan Shappir:
sometimes, uh, uh, this, the, the, the, the slow migration. And by the way, At Next, like I said, we did something interesting. That transition from WordPress to React, sorry, with Next.js, like I said, the data stayed put. But
Jack Herrington:
Great.
Dan Shappir:
the entire code was rewritten from scratch. And again, we did it by vertically splitting. So we looked at different segments. So we migrated the blog. and then we migrated
Jack Herrington:
Yeah.
Dan Shappir:
the FAQ. And then we might, so that's the way that we dealt with it. So we kept
Jack Herrington:
Yeah.
Dan Shappir:
on.
Jack Herrington:
And in each one of those, you're basically cleaving off not just the specific piece of functionality, but also solving a lot of the little issues along the way, like, okay, you take the smallest example, like the fact and it's like, okay, this,
Dan Shappir:
Action.
Jack Herrington:
this involves hitting the back end, CMS or whatever, you know,
Dan Shappir:
Actually,
Jack Herrington:
yeah,
Dan Shappir:
the biggest, the most significant constraint in all these cases was to have a really good, strong set of end-to-end tests
Jack Herrington:
Mmmhmm.
Dan Shappir:
and make sure that they always pass. The first version does not try to improve the UI or the functionality. It might improve performance or other stuff on the inside. I don't know the security model. But it. but
Jack Herrington:
All
Dan Shappir:
it's
Jack Herrington:
right.
Dan Shappir:
not going to touch anything in the actual UX of the application. That would be done afterwards. After you've successfully migrated, you maintain a backlog of the things you want to fix, and then you fix them. But the
Jack Herrington:
You port bugs and all.
Dan Shappir:
first version is port bugs and all, the UX
Jack Herrington:
Yeah.
Dan Shappir:
bugs.
Jack Herrington:
Yeah. What I meant was, when I think about like, how during these migrations, there's always some unknowns, like, how are we going to go and get the data? How are we going to go mutate the data or whatever? Yeah, that's the thing. And when you think about the different parts of the application, some parts stress the whole bat and stress a lot. And other others, you know, are pretty lightweight, you know, in their connection to the back end. And so you start with the ones that are more lightweight, because easier to port. I would think.
Dan Shappir:
But that approach of using the two companies that I worked, that are Next Insurance and Wix before that, each did it independently, but they both used this approach and in both cases it worked. Have a strong
Jack Herrington:
Nice.
Dan Shappir:
set of end-to-end tests
Jack Herrington:
Oh, EDE test, yeah.
Dan Shappir:
and just make sure that they keep on working throughout the migration process. And don't fall into the trap of if we're migrating, let's also, you know,
Jack Herrington:
upgrade at the same
Dan Shappir:
exactly.
Jack Herrington:
time. Right? Yeah, for sure. Totally agreed.
Dan Shappir:
And also make sure that management and product are on, you know, on are bought in, that they don't
Jack Herrington:
Oooooohhh...
Dan Shappir:
that they don't expect, let's say, new features during the key migration phases.
Jack Herrington:
Right. Or if they do, then both teams are talking and then you got one team that's that's doing the newer features and then the
Dan Shappir:
Yeah,
Jack Herrington:
other team
Dan Shappir:
and
Jack Herrington:
is
Dan Shappir:
even
Jack Herrington:
doing the migration
Dan Shappir:
that has a significant
Jack Herrington:
and
Dan Shappir:
cost.
Jack Herrington:
that gets hairy.
Dan Shappir:
Yeah.
Jack Herrington:
Oh, yeah, totally. It slows everybody down. It slows both things down. But sometimes that's not an option.
Dan Shappir:
Oh
Jack Herrington:
You still
Dan Shappir:
yeah,
Jack Herrington:
have
Dan Shappir:
for sure.
Jack Herrington:
like the train
Dan Shappir:
Look,
Jack Herrington:
going at
Dan Shappir:
we're
Jack Herrington:
a certain
Dan Shappir:
living
Jack Herrington:
date.
Dan Shappir:
in the real world. If there's an important business case, then
Jack Herrington:
Yeah.
Dan Shappir:
you know, you deal with it. But just make sure that they understand that there's going to be a price to pay and consequences to such changes.
Jack Herrington:
Yeah. And it also means like pitching things in a way as this is a really good engineering skill actually to learn how to pitch changing your platform or whatever, but you know, whatever kind of technical change you want to make, learn how to pitch it not just to engineers, but how to pitch it to managers, how to pitch it to product managers, how to predict product
Dan Shappir:
By
Jack Herrington:
direct
Dan Shappir:
the way,
Jack Herrington:
managers.
Dan Shappir:
from my experience
Jack Herrington:
See, learn those kind of communications.
Dan Shappir:
in many cases, at the end of the day, and by the way, that's something that Alex Russell kind of rails against, is the fact that they can be suckers. If you're going to pitch a technical thing with conviction, there's a good chance that you can get management buy-in because at the end of the day, they trust the engineers to make the technical decisions. Now, you know, the good ones, you know, ask about the cost, the risks, the whatnot. But at the end of the day, if you say, yeah, this is the, you know, the way that we're currently using is a dead end, blah, blah, blah, and that's the way we need to go, you'll probably get buy-in.
Jack Herrington:
But that's that's actually making business level points. If it is a dead end, right? What you're saying is we can't deliver on on the capabilities you want. And this new platform will allow us to deliver on those the capabilities that you want. And you're just putting that in business terms as opposed to like, raw technical
Dan Shappir:
Oh yeah,
Jack Herrington:
terms.
Dan Shappir:
for sure. Although to be honest,
Jack Herrington:
Yeah.
Dan Shappir:
at the end of the day, there is no real dead end. It's just
Jack Herrington:
It's just a question of a
Dan Shappir:
the
Jack Herrington:
cost,
Dan Shappir:
cost
Jack Herrington:
right?
Dan Shappir:
keeps
Jack Herrington:
Exactly.
Dan Shappir:
going up.
Jack Herrington:
Right.
Dan Shappir:
But yeah, and then it becomes a question again of when to bite the bullet. So you're basically, but going back to that point, and I think that would be probably the point that we wrap up on. So you're saying that... What you're saying is that there's a lot, and again, you do a lot of training, I'm assuming you engage with a lot of these companies that are looking at these technologies and thinking about them. You're saying that you are seeing a lot of pushback against React
Jack Herrington:
Hmm.
Dan Shappir:
Server components.
Jack Herrington:
Definitely. Yeah, there are folks on the front lines who don't understand what what the value is at all. And as I say, there's a larger contingent than we would have thought of client side rendering folks who are like, Yeah, this doesn't advantage me at all. And
Dan Shappir:
I
Jack Herrington:
the
Dan Shappir:
don't totally agree
Jack Herrington:
migration
Dan Shappir:
with that
Jack Herrington:
costs
Dan Shappir:
by the way.
Jack Herrington:
are significant.
Dan Shappir:
Because React Server components from again, from what I understand speaking with Dan and also listening to some of the other content, the main goal is not so much about SSR and avoiding hydration. Those are like, you know, benefits, but they're almost side benefits. The big... goal, which you can ask why React is trying to achieve this, but that's what they are trying to achieve, is about how to better manage data flow from the back end to the front end and from the front end to the back end. They talk about the componentization of the data and state management. So it's really about writing the React server components as those things that access the backend microservices and the database,
Jack Herrington:
Right.
Dan Shappir:
and then all the data from that point on flow trickling down as props from the server
Jack Herrington:
Right.
Dan Shappir:
to the client. And then
Jack Herrington:
Right.
Dan Shappir:
the data...
Jack Herrington:
And then the point when it hits the client, then you get the then you get the frosting of the props and all that. Yeah, absolutely.
Dan Shappir:
And then the other way around, again, the data bubbling up via function calls.
Jack Herrington:
Right server
Dan Shappir:
So
Jack Herrington:
actions.
Dan Shappir:
these are the server actions,
Jack Herrington:
Yeah
Dan Shappir:
which are effectively just functions. And
Jack Herrington:
It's the APIs really, RBCs.
Dan Shappir:
they are RPCs. They're implemented over an API.
Jack Herrington:
Yeah.
Dan Shappir:
But it's
Jack Herrington:
Right.
Dan Shappir:
not like you're not explicitly writing the gets and the puts. uh, or the posts actually, sorry, you're, you're calling a function. Uh, so you're getting a lot of these micro APIs and a lot of coupling, but what do you care because you're writing the backend and the front end code at the same time, so coupling is that's of an issue. Uh, but that's what I think that they're trying to push. Now it's an interesting question of why they're trying to push this. I mean, what's their.
Jack Herrington:
Right.
Dan Shappir:
motivation? Is it that they all got bored with just doing
Jack Herrington:
Yeah,
Dan Shappir:
a front end?
Jack Herrington:
I'm not sure what metas meta is interest in this is because metadata doesn't actually SSR that much. As far as I know.
Dan Shappir:
I have no idea.
Jack Herrington:
I mean, I haven't been on meta I haven't been on Facebook in 10 years, but I don't remember them ever really SSR and all that much. Like every everybody's page is individual is individualized and personalized
Dan Shappir:
So,
Jack Herrington:
completely.
Dan Shappir:
yeah, so there is a big question about, why is the React core team doing the things that they're doing? Why are they now working on a compiler?
Jack Herrington:
That I kind of understand. Okay.
Dan Shappir:
Uhhh...
Jack Herrington:
Hmm
Dan Shappir:
Well, I don't know, have you actually seen it or played with anything?
Jack Herrington:
No, no, I'm not. I did not see React forget. No, no, no. I mean, is anybody outside of Meta? Really?
Dan Shappir:
I have no idea.
Jack Herrington:
I mean, I'm sure
Dan Shappir:
I'm
Jack Herrington:
some heavy
Dan Shappir:
really,
Jack Herrington:
hitters.
Dan Shappir:
really wary of this. In a lot of ways, I'm more wary of it than I am of React Server components.
Jack Herrington:
Definitely. I mean, if you don't write your components, the react way, and I've definitely seen folks who do not like they're, who, you know, they're working around the V dom because I think that like the V dom is wildly expensive and blah, blah, blah. So they're doing everything manually. That's not gonna I'm Yeah, you got to follow basically, you got to write react as idiomatic react, and then it will probably work. But I is interesting, like every other framework. like solid as a compiler, view
Dan Shappir:
Yeah,
Jack Herrington:
as a compiler,
Dan Shappir:
but Solid,
Jack Herrington:
angular
Dan Shappir:
yeah,
Jack Herrington:
as
Dan Shappir:
but
Jack Herrington:
a compiler, quick as a compiler.
Dan Shappir:
that's not exactly the same. If we're looking at Solid, Solid is just compiling the JSX. It's not really compiling the JavaScript itself. So, from my understanding, this...
Jack Herrington:
Yeah, I mean, they all do portions of it, right? You know, it's still.
Dan Shappir:
I do, first of all, I have no idea what React for Get is going to look like. So it's difficult for me to comment on it. And I'm very ambivalent about what Svelte is doing. You know, because I like to say that,
Jack Herrington:
You didn't like the Rich Harris talk?
Dan Shappir:
I like to say that if we could have sent Rich back in time to 95 when Brendan Eich was creating JavaScript in the DOM, and Rich would have like convinced him to do Svelte instead. That might have been awesome, but that's not what happened. And now effectively Svelte looks like JavaScript and HTML and CSS, but is actually something totally different. And that's kind of an issue for me. Something that looks like something, but is actually something really different. Like the... The let keyword in Svelte and the let keyword in JavaScript means something
Jack Herrington:
Oh,
Dan Shappir:
totally
Jack Herrington:
yeah, because he
Dan Shappir:
different.
Jack Herrington:
Yeah, yeah, yeah, he's Yeah, right. He's basically overloading let for four props.
Dan Shappir:
Let is reactive in Svelte.
Jack Herrington:
Yeah.
Dan Shappir:
Import
Jack Herrington:
And you get the dollar colon thing.
Dan Shappir:
are for passing
Jack Herrington:
Yeah.
Dan Shappir:
parameters into components. It's like
Jack Herrington:
Hmm.
Dan Shappir:
it's a different programming language that kind of masquerades as JavaScript. And it's a nice programming language, but I don't know. But.
Jack Herrington:
It is weird. It is weird to think that like React is now the only kind of pure JavaScript framework, right? I mean, it's the only one that doesn't require a compiler other than JSX, which is fine. I mean, you know, we've had bamboo for
Dan Shappir:
No, I
Jack Herrington:
a
Dan Shappir:
think
Jack Herrington:
while, but
Dan Shappir:
that
Jack Herrington:
like it is literally
Dan Shappir:
AJ
Jack Herrington:
you can just take
Dan Shappir:
is
Jack Herrington:
reacts
Dan Shappir:
shaking his head.
Jack Herrington:
motion. OK.
AJ:
A transpiler is a compiler.
Jack Herrington:
But everybody, okay, fine. But everybody is, JSX, there is no native JSX, right? It has to be transpiled.
AJ:
that's
Jack Herrington:
But
AJ:
the
Jack Herrington:
that's
AJ:
same
Jack Herrington:
literally
AJ:
with almost
Jack Herrington:
it.
AJ:
everything in the JavaScript ecosystem. Even what people call JavaScript isn't actually
Dan Shappir:
You could
AJ:
JavaScript.
Dan Shappir:
have used...
AJ:
It isn't actually in the standard isn't actually
Jack Herrington:
Right.
AJ:
implemented in a browser.
Dan Shappir:
You could have used template
Jack Herrington:
Fair,
Dan Shappir:
strings,
Jack Herrington:
but it's
Dan Shappir:
by
Jack Herrington:
not
Dan Shappir:
the way.
Jack Herrington:
writing significant
Dan Shappir:
You
Jack Herrington:
code
Dan Shappir:
could have
Jack Herrington:
for
Dan Shappir:
used
Jack Herrington:
you.
Dan Shappir:
template expressions, by the way, instead of JSX, but nobody does.
AJ:
Yeah,
Jack Herrington:
Sure.
AJ:
that, well, that didn't exist yet.
Jack Herrington:
Yeah, but you can do like, I mean, you can change the pragma of JSX and make it call whatever function you want. And all it's only like, it's a very, very, very thin transpiling.
Dan Shappir:
Hmm. Nah.
Jack Herrington:
It's not as big as like solid
Dan Shappir:
Yeah,
Jack Herrington:
as got
Dan Shappir:
but
Jack Herrington:
like
Dan Shappir:
again,
Jack Herrington:
quick. My god
Dan Shappir:
no, QUIC
Jack Herrington:
quick does a lot of
Dan Shappir:
is a totally
Jack Herrington:
compiling.
Dan Shappir:
different story, but SOLID,
Jack Herrington:
Yeah.
Dan Shappir:
especially if you forget about the bling stuff, is actually not that different from what React is doing. The problem with SOLID is that SOLID is doing to React kind of what Svelte is doing to JavaScript. that it looks like React, but it really isn't. So it's kind of subverting
Jack Herrington:
Right.
Dan Shappir:
the expectations of React developers. But if you don't have those expectations, then I don't see Solid as being that much, quote unquote, worse than React. The Solid compiler at the end of the day, and it doesn't really do that much, is what I'm trying to say.
Jack Herrington:
I don't know. If you attach a prop, if you attach a value, a signal to a property or an element or an attribute on a tag, it's actually going to go and literally write the DOM code to hit that and change it when the signal changes.
Dan Shappir:
Cool yeah.
Jack Herrington:
That's right. It's writing code as opposed to JSX, which is basically just, hey, whatever. your function is react dot
Dan Shappir:
Yeah,
Jack Herrington:
create
Dan Shappir:
but
Jack Herrington:
element
Dan Shappir:
then wrap
Jack Herrington:
or
Dan Shappir:
it
Jack Herrington:
age
Dan Shappir:
in a
Jack Herrington:
or whatever.
Dan Shappir:
React Create element
Jack Herrington:
And then
Dan Shappir:
and whatnot.
Jack Herrington:
there you go. And that's it. That's all it's doing.
Dan Shappir:
Hmm.
Jack Herrington:
And you know, everything else is pretty much just JavaScript.
Dan Shappir:
I don't know. Anyway, yeah, we
Jack Herrington:
Yeah.
Dan Shappir:
can
Jack Herrington:
Yeah,
Dan Shappir:
lament.
Jack Herrington:
this has been fun.
Dan Shappir:
Yeah. Interesting.
Jack Herrington:
I gotta go get some lunch.
Dan Shappir:
We live in interesting times, that's for sure.
Jack Herrington:
We do. We do. We do. We can talk for hours about
Dan Shappir:
Yeah,
Jack Herrington:
this.
Dan Shappir:
so one one last questions before we go. What's your next video?
Jack Herrington:
Ah, actually, it's kind of interesting. I was, I've been getting a lot of pushback about memory management, and people not liking the, you know, having a really negative reaction to the spread operator and, and that is this memory hogging beast and all this sort of stuff. And it was gonna be interesting. I'm gonna try and And basically saying, well, what we really wanted react to do as opposed to being the functional thing was to instead be mutable data structures, like just straight up, like, give me the object element, or do the array, allow me to do push, and I'll send you back the array
Dan Shappir:
You saw
Jack Herrington:
or
Dan Shappir:
it.
Jack Herrington:
whatever. And ha ha, right. And to basically show if it would be a performance disaster for us to do that.
Dan Shappir:
Did you see that that kerfuffle around the preact signals in react?
Jack Herrington:
Oh yeah. I don't know what the kerfuffle was.
Dan Shappir:
The cruffle
Jack Herrington:
What was the kerfuffle?
Dan Shappir:
was that React changed, well, it turns out that they were monkey patching stuff inside of React in order to get the fine-grained reactivity to work.
Jack Herrington:
Yeah, yeah.
Dan Shappir:
And then React updated their version or something, and that broke. So people started report...
Jack Herrington:
Wait. Oh, right, because there's a preact signals for react.
Dan Shappir:
Exactly.
Jack Herrington:
Right? Exactly.
Dan Shappir:
So that
Jack Herrington:
Yeah.
Dan Shappir:
thing,
Jack Herrington:
Yeah.
Dan Shappir:
no, because Preact signals for Preact is fine. It's created by the Preact core team.
Jack Herrington:
Right. They control
Dan Shappir:
Yeah,
Jack Herrington:
everything.
Dan Shappir:
but
Jack Herrington:
Right. Exactly.
Dan Shappir:
the Preact signals for React monkey patch stuff inside of React and then React upgraded, they changed something and the monkey patching failed and people started opening bugs in the React repository about them, you know, breaking Preact signals in React, and that really upset some React core team members to the point that Dan Abramov basically came out and said, this is bad, you should not be using this library. This is a terrible thing to do and don't use it. Something along the line.
Jack Herrington:
I don't disagree. I think when I did when I covered it, I was like, this is not I would not use this. I mean, it's cool. It's very interesting. But at the point where you have to start putting in prognosis, and that sort of stuff. And I know I was because I knew what they were doing. They're just basically getting a ref on whatever the component whatever the element was, and then just bang, bang, bang, bang, bang, doing updates. And you're, you're clearly breaking the VDOM model with it clearly.
Dan Shappir:
Yeah, so
Jack Herrington:
Because the VDOM is out
Dan Shappir:
yeah
Jack Herrington:
of sync
Dan Shappir:
and the whole
Jack Herrington:
with what's
Dan Shappir:
point
Jack Herrington:
actually in the DOM, and
Dan Shappir:
and
Jack Herrington:
that's
Dan Shappir:
the whole
Jack Herrington:
not good.
Dan Shappir:
point of React is the VDOM. So...
Jack Herrington:
Right. So why, you know, I thought it was interesting. I thought it was fun. It's a kind of interesting hack, but I wouldn't put that in production. You kidding
Dan Shappir:
Yeah,
Jack Herrington:
me? Out of your mind?
Dan Shappir:
yeah. So, so going back to your point, I'm kind of surprised that people are concerned about memory. I mean, why?
Jack Herrington:
Well, that's the funny. And that's another thing is like, when you think about a react component, they're all they're getting all been out of shape about, you know, one little spread. And it's like, do you not understand that like, anytime you make a, you know, a JSX element, right? That's that's calling react, create element, which is allocating memory. And then all it's taking all the props
Dan Shappir:
Who
Jack Herrington:
and creating
Dan Shappir:
cares?
Jack Herrington:
an object. And that's allocating memory.
Dan Shappir:
Who cares?
Jack Herrington:
Oh, I know. Yeah, well, what happened actually here, here's what the why they care. So what happened was, some guy came out with an article that said, I sped up 10 sec 1000 times 10 sec
Dan Shappir:
Oh yeah,
Jack Herrington:
table
Dan Shappir:
I saw that article.
Jack Herrington:
1000 times by removing the you
Dan Shappir:
the spread.
Jack Herrington:
know, and it was the spread. And it was it was the classic spread issue, which was like you
Dan Shappir:
Yeah,
Jack Herrington:
you were inside of a reduce and you're using a spread inside of reduce and it was dumb.
Dan Shappir:
they were going from O of n to the third, or something like that, to
Jack Herrington:
Right.
Dan Shappir:
O of n, or something like that.
Jack Herrington:
Yeah.
Dan Shappir:
But the problem was not the memory allocation, the problem was the rendering of the VDOM, the act of the computation. It's that the cost of the computation was O of n squared, or O of n to the third, rather than O of n. I mean, you...
Jack Herrington:
I thought it was as simple as they're going through a big old loop,
Dan Shappir:
I know it was
Jack Herrington:
right?
Dan Shappir:
a loop
Jack Herrington:
And
Dan Shappir:
in a
Jack Herrington:
every
Dan Shappir:
loop.
Jack Herrington:
time they were creating is a loop in a loop, but they were they were creating a new object each
Dan Shappir:
But
Jack Herrington:
time.
Dan Shappir:
the cost
Jack Herrington:
And
Dan Shappir:
was not
Jack Herrington:
that
Dan Shappir:
the
Jack Herrington:
loop
Dan Shappir:
memory
Jack Herrington:
was.
Dan Shappir:
allocation, the cost was copying the values from one to the other. The cost was the fact
Jack Herrington:
Yeah.
Dan Shappir:
that the algorithm was O of n squared rather than O of n. The problem was not that you were allocating more memory. Unless you're writing the next Facebook client which needs to run for 12 hours straight, or you're running a node server... that needs to service a lot of requests, you should in most cases care less about memory consumption in JavaScript.
Jack Herrington:
Yeah, I buy that. And I think also.
AJ:
I think we need to do away with map and filter and especially reduce. If nothing else, we need to just get rid of reduce and we need to get rid of for each.
Jack Herrington:
What
AJ:
We
Jack Herrington:
about
AJ:
need
Jack Herrington:
the
AJ:
to go back
Dan Shappir:
4i.
AJ:
to for.
Jack Herrington:
they're
AJ:
But
Jack Herrington:
going
Dan Shappir:
Hahaha!
Jack Herrington:
the total opposite
AJ:
not
Jack Herrington:
direction.
AJ:
not
Jack Herrington:
They're
AJ:
not
Jack Herrington:
going
AJ:
for
Jack Herrington:
they're adding
AJ:
I.
Jack Herrington:
which they're adding to splice. They're adding to sorted.
Dan Shappir:
No,
Jack Herrington:
They're going there.
Dan Shappir:
are you serious,
Jack Herrington:
They're pushing
Dan Shappir:
AJ?
Jack Herrington:
hard
AJ:
But
Jack Herrington:
in the opposite
Dan Shappir:
I
Jack Herrington:
direction.
Dan Shappir:
was...
AJ:
I am dead serious because it's too it I have never seen someone use reduce correctly I have I have never in the wild in the wild an actual code that people
Dan Shappir:
I can
AJ:
write
Dan Shappir:
understand.
AJ:
That aren't that aren't the Brainiacs at Facebook. I have never in the wild seen someone
Dan Shappir:
Well,
AJ:
use reduce,
Dan Shappir:
here's,
AJ:
correct
Dan Shappir:
but there are two problems here though. First of all, you said reduce, which I can accept, but you also said map and filter, which is more problematic for me because they're fairly straightforward. Map
Jack Herrington:
Yeah, they're
Dan Shappir:
is
Jack Herrington:
very
Dan Shappir:
map
Jack Herrington:
good.
Dan Shappir:
A into B and filter is filter.
AJ:
I see people do it. I see people do it wrong too, because they'll do a, they'll do mapping inside. They'll do filtering inside of a map or what? It just
Dan Shappir:
look
AJ:
people
Dan Shappir:
if people don't
AJ:
do.
Dan Shappir:
know how to code then they don't know how to code but uh...
AJ:
But well, go, go for example, doesn't have those go just has to go. Just has the four loop. It doesn't have a while loop. It doesn't have
Dan Shappir:
Look,
AJ:
a loop. It doesn't.
Dan Shappir:
the second problem is that, and we really need to start wrapping up with this,
Jack Herrington:
I know, I know, but this is so good!
Dan Shappir:
the problem is that React encourages, it's like React encourages ternary over ifs
AJ:
Oh yeah, yes it does. Yes it does and that,
Dan Shappir:
because
AJ:
I hate it.
Dan Shappir:
JSX is an expression. So you basically... You you return a JSX you need to construct a JSX and the entire jsx thing is an expression and in javascript unlike other programming languages Statements are not expressions. So
Jack Herrington:
Right,
Dan Shappir:
so you
Jack Herrington:
yeah.
Dan Shappir:
unless we get the do expression which I always hated as as an addition to the ECMO script, but now I think is kind of needed for react. So it probably needs to happen now So i've gone from opposing it to supporting it Uh...
Jack Herrington:
I think doing four would be great expressions.
Dan Shappir:
Are you familiar with the due expression proposal?
Jack Herrington:
Yeah, yeah, yeah, I saw it. I think it's
AJ:
What
Jack Herrington:
great.
AJ:
what the letter L is a do expression?
Dan Shappir:
Do exp- yeah, go for it.
Jack Herrington:
So basically, you get a loop where the primitive is the output.
Dan Shappir:
No,
Jack Herrington:
And
Dan Shappir:
it
Jack Herrington:
so
Dan Shappir:
doesn't
Jack Herrington:
it's
Dan Shappir:
need
Jack Herrington:
effectively.
Dan Shappir:
to be a loop. Do expression is x equals do. It's not about
Jack Herrington:
Okay,
Dan Shappir:
a loop.
Jack Herrington:
I'm thinking about a different proposal then. There was a loop expression.
Dan Shappir:
No, so that's
Jack Herrington:
Yeah,
Dan Shappir:
not something else.
Jack Herrington:
okay, that's
Dan Shappir:
So
Jack Herrington:
a different
Dan Shappir:
do
Jack Herrington:
one.
Dan Shappir:
expressions
Jack Herrington:
Yeah, okay.
Dan Shappir:
are basically you do like x equals do, and then you write your code, but your code behaves as an expression. So you can write ifs, and you don't need the returns.
Jack Herrington:
Sure.
Dan Shappir:
It's like a sort of an iffy, it's like you're assigning an iffy.
AJ:
Isn't this, isn't this what we have at WASM for so you can run Rust in the browser
Jack Herrington:
Ha
AJ:
and then,
Jack Herrington:
ha!
AJ:
and then they're not have to
Dan Shappir:
Yeah,
AJ:
make JavaScript every freaking language
Dan Shappir:
I agree.
AJ:
that has ever existed since 1955.
Dan Shappir:
I agree. I really hate to do expressions because they change the semantics of the language. The semantic.
AJ:
I love
Jack Herrington:
Not that
AJ:
the
Jack Herrington:
anybody
AJ:
idea,
Jack Herrington:
uses do
AJ:
but
Jack Herrington:
on its own, wait.
AJ:
that ship has sailed.
Jack Herrington:
Nobody
AJ:
That
Jack Herrington:
did
AJ:
ship
Jack Herrington:
do it
AJ:
sailed
Jack Herrington:
does do while.
AJ:
a hundred
Dan Shappir:
No, I'm
AJ:
years
Dan Shappir:
not talking
AJ:
ago.
Dan Shappir:
to that, so I'm not saying it's not do while. It's a do expression. It has nothing to do with the while. They just overloaded the word do for it. But
Jack Herrington:
do. Yeah.
Dan Shappir:
I disliked it because it changes semantics of the language. Because it turns inside
AJ:
Yeah.
Dan Shappir:
the do expression, statements became expressions. So
Jack Herrington:
Right, your final statement
Dan Shappir:
not just
Jack Herrington:
is
Dan Shappir:
the
Jack Herrington:
the
Dan Shappir:
final,
Jack Herrington:
return, right?
Dan Shappir:
you
Jack Herrington:
It's
Dan Shappir:
can,
Jack Herrington:
an implicit
Dan Shappir:
yeah, exactly.
Jack Herrington:
return.
Dan Shappir:
And you could do ifs and stuff. So you can write ifs instead of ternary and if case is just the value. But the thing is, is that.
AJ:
If they're doing this for react, it's only going to end poorly because because ternary is putting putting a bunch of expressions in line with each other. It
Dan Shappir:
and
AJ:
just
Dan Shappir:
do expressions would have fixed
AJ:
I
Dan Shappir:
it. But,
AJ:
I just...
Dan Shappir:
but you know, look, at the end of the day, on the one hand I agree with you, AJ, on the other hand, you do need to look at how the majority of people are using a particular language. And, and, and, you know.
AJ:
They're using it wrong. The majority
Jack Herrington:
Hahaha!
AJ:
of people have no idea what they're doing. The majority of people are just following whatever the super nerds tell them, and they're like, well, if I do what the super nerd tells me, then I'm gonna be cool! And if
Jack Herrington:
Okay,
AJ:
I'm gonna
Jack Herrington:
that
AJ:
be cool,
Jack Herrington:
actually I
AJ:
I
Jack Herrington:
agree
AJ:
can put
Jack Herrington:
with.
AJ:
it on my resume!
Jack Herrington:
Yeah, no, believe
AJ:
The
Jack Herrington:
me,
AJ:
majority
Jack Herrington:
I agree with
AJ:
of
Jack Herrington:
that.
AJ:
people have no idea how to
Dan Shappir:
Anyway,
AJ:
program.
Dan Shappir:
I think it's done.
Jack Herrington:
Bye.
AJ:
And I'm not upset with the majority
Dan Shappir:
It's
AJ:
of
Dan Shappir:
stuck,
AJ:
people
Dan Shappir:
it's
AJ:
on
Dan Shappir:
been
AJ:
that.
Dan Shappir:
stuck at stage two for something like a decade, so I don't know where it's going. But
Jack Herrington:
Yeah, that's
AJ:
Huh.
Dan Shappir:
all
Jack Herrington:
that.
Dan Shappir:
I'm trying to say is I forget what I was trying to say. But where were we? So JSX is this like this big expression and yeah. And I forget where we were, so maybe it's time for us to wrap up. Oh yeah, we were talking about what your next video was going to be about.
Jack Herrington:
Yeah. It's about this about
Dan Shappir:
Oh, the memory
Jack Herrington:
the
Dan Shappir:
management.
Jack Herrington:
media.
Dan Shappir:
Yeah, but
Jack Herrington:
Yeah,
Dan Shappir:
I,
Jack Herrington:
right.
Dan Shappir:
look,
Jack Herrington:
Right.
Dan Shappir:
I can...
Jack Herrington:
And why am I basically teaching kind of coming at it from the other angle, everybody's saying, hey, it's a pain in the butt to deal with references. I don't like them. I just want to mutate stuff in place. And basically coming at it from the angle of if we did
Dan Shappir:
then
Jack Herrington:
it,
Dan Shappir:
just
Jack Herrington:
if we did it that way, it would be horribly inefficient. And you
Dan Shappir:
But
Jack Herrington:
blow it
Dan Shappir:
the
Jack Herrington:
out.
Dan Shappir:
whole point about React is immutability, and that's it. And if you're going to be mutating, then you might as well not use React. And if you don't understand how immutability works, that means that you're using React without fully understanding it. So maybe it's time you watch some more of your videos and learn React more.
AJ:
All this stuff is just too complicated. We need to go back to basic, just Q basic. And
Jack Herrington:
There you go. Love it.
AJ:
you know, get rid of the web, throw the phone in the
Dan Shappir:
You
AJ:
toilet.
Dan Shappir:
know how long it took me to shake Gotoos?
Jack Herrington:
Oh, wow. Really? OK. I was I was happy to get on a go tos. I
AJ:
I'm
Jack Herrington:
when
AJ:
guessing about.
Jack Herrington:
I when I when I would just see, I was like, well, no more go tos.
AJ:
I'm guessing about 10 seconds because you realized the benefit immediately being the wise person
Dan Shappir:
No,
AJ:
that you
Dan Shappir:
I realized
AJ:
are.
Dan Shappir:
the benefits, but it took me a long time to properly... It got me into some bad habits about properly structuring code and not diving into coding before I got a good mental grasp of what I was trying to achieve. At the beginning, I was very much like a savant type of a programmer where just throw me at the problem and I'll start hacking away at it.
Jack Herrington:
Sounded like me. I don't know about savant, but that's how I like to do it.
AJ:
This is the unfair advantage of react. React gets to completely change everything about what they're doing every two years and pretend like it's still the same framework. Like they just, they just clutch more stuff on
Jack Herrington:
Yeah?
AJ:
make it more complicated.
Jack Herrington:
You're not
AJ:
And,
Jack Herrington:
wrong.
AJ:
and, and if it takes, if it takes the experts, if it takes the people who've got a freaking IQ of 165, three years to figure out, oh, this was a bad idea. I should have never done it. Think about the people that just have, you know, an IQ of 100. They're having to learn this stuff. There's some to somehow supposed to become proficient and it's changing every, every six months. There's a new blog article. Oh, we're completely revamping everything. Oh wait, no, we're not. But, and then they release it and then, and then they roll it back. It's just, this is, I'm sorry. I'm just so emotionally compromised. This is maddening. This is absolute. How is any work in the world ever supposed to get done? Can we not just go back to being stupid about the way we do things in a way that just works
Dan Shappir:
Yeah.
AJ:
instead of just always being so much more brainy and so much- EURGH just- GAH F-
Dan Shappir:
So as a final statement before we go into the picks, I just read an article somewhere that this AI scientist looked at the source code for chat GPT or something like that and basically said, I don't understand how this work. It's a miracle that it even works.
Jack Herrington:
Wow. Okay.
AJ:
He didn't know how to read Excel macros?
Jack Herrington:
Ha ha ha
AJ:
so, uh, thanks everybody for coming on and it's, it's been great having you at all. Uh, we do a section at the end called picks. I'm sure you're familiar with that because
Jack Herrington:
Oh
AJ:
you
Jack Herrington:
yeah.
AJ:
do it too. All right, thanks for that. And then Jack, do you have anything?
Jack Herrington:
Yeah, I was listening to wool, which is the book behind the show silo. And that is excellent. And it seems to be a really good series. So I'm now on the second book also just listening to it. And it's been fascinating. It's just a really new author, I guess, Hugh, Huey, or something like that. And just really great stuff. So enjoying that a lot.
AJ:
All right, Dan.
Dan Shappir:
Okay, so I think I mentioned that in a couple of past episodes, but I'll mention it again. I'll Shout out myself. I'm doing quite a number of conferences this year. This is going to be my record year I think in terms of comfort a number of conferences that I'm actually speaking at
Jack Herrington:
Whoo!
Dan Shappir:
so yeah, so I I spoke at IJS in London. I'm speaking virtually at JS Nation, the conference that you're going to, Jack. I have a talk about comparing the performance of different frameworks. Which framework is
Jack Herrington:
Mmm.
Dan Shappir:
more likely to produce fast running, fast loading websites? It's more a question of probabilities than anything else. How likely you are to produce a fast website using a particular framework versus a different. And I'm actually giving that talk again at almost the same time, but live at the conference called J-Nation in Portugal. The big difference, by the way, it's funny, like you give the same talk three times, but in one conference it's 30 minutes, in another conference it's 20 minutes, and then in the third conference it's 50 minutes. So it actually becomes like a totally different talk. In each one of them like a said this is like the kernel is the same but you know that it becomes you know when
Jack Herrington:
Question asked all that. Yeah
Dan Shappir:
Yeah, you know if you need to speak twice as long about something you're going to say more stuff obviously
Jack Herrington:
Yeah.
Dan Shappir:
I'm also going to be speaking at At the react next conference in Israel. It's a really big conference by the way It's a conference that you should attend sometime Jack. It's a conference just well not just about React, but it's around React, obviously being called React Next. And there are some thousand front end developers in attendance. So it's a really
Jack Herrington:
Woo! Yeah.
Dan Shappir:
big conference. And yeah, so the Israeli community for front end is pretty big. So I'll be speaking there about overcome and how about how different frameworks overcome the cost of hydration, which I've also spoken about on one of our past episodes. And then I'll be speaking about this topic again for a different duration again. I've just been accepted to speak at what's it called? Front Conference Zurich in Switzerland at the end of August, beginning of September. So this year is going to be, like I said, like something like five or six conferences this year,
Jack Herrington:
Okay,
Dan Shappir:
which
Jack Herrington:
and
Dan Shappir:
is
Jack Herrington:
and
Dan Shappir:
a record
Jack Herrington:
next
Dan Shappir:
for
Jack Herrington:
insurance
Dan Shappir:
me.
Jack Herrington:
is totally cool with this. They're like, yeah, man,
Dan Shappir:
Yeah,
Jack Herrington:
you get out there.
Dan Shappir:
their smile is becoming ever more forced with
Jack Herrington:
Nnnhaaahhaaah
Dan Shappir:
every additional conference that I mention.
Jack Herrington:
Yeah.
Dan Shappir:
Yeah, well, look, first of all, they are, I have to give them props that they are fairly forthcoming and even encourage me as a representative of our, you know, R&D. Also,
Jack Herrington:
Mm-hmm.
Dan Shappir:
some of the, for example, React Next, like I mentioned, is actually in Israel, and Next Insurance is actually one of the sponsors of the conference. So that definitely makes things easier. So yeah, I helped build our brand as a technological-oriented organization, for thinking, et cetera. Yeah, we do actually sponsor several conferences at Next Insurance, but in Israel primarily. I'm not aware of any conference that we actually sponsor outside of Israel. At least not in the tech part. Yeah, so yeah, I'm enjoying that a lot. And
Jack Herrington:
Okay?
Dan Shappir:
one more, and you know, if I'm doing picks, I'll also pick a book. It's been a while since I picked a book. It's this series of books that I'm reading, which are fantasy books are not amazing but are actually you know quite enjoyable. I'm you know enjoying it's easy reading you know like kind of like easy listening only reading.
Jack Herrington:
rating.
Dan Shappir:
It's called the Demon Cycle series it's by Peter V. Brett. It's high fantasy if you're familiar with the term it's man against demon using magic. And it's kind of
Jack Herrington:
Neat.
Dan Shappir:
a different scenario than most other books. Now, like I said, it's not an amazing series. But if you're looking for something engaging, it's definitely that. So those would be my picks.
Jack Herrington:
Very cool.
AJ:
Cool. And then as you were mentioning hydration earlier, I also have a hydration pick. So I don't believe in health foods. They're they're all, you know, bogus, but there's
Jack Herrington:
Yeah, I got a
AJ:
this.
Jack Herrington:
show for super beats.
AJ:
Kind of, yeah, I'm kind of going to show for
Jack Herrington:
Oh,
AJ:
super
Jack Herrington:
okay.
AJ:
beats, but not super beats.
Jack Herrington:
All right.
AJ:
I'm going to show for LMNT element. It's it's salt powder. It's flavored salt powder, but it's. It's good in an interesting way. So, and if, and if you, if you mix the orange salt with the orange crystal light caffeinated, it's particularly interesting. Um, so it's, it's just something to try. They're, they're redonkulously expensive. I I've got
Jack Herrington:
Hahahaha
AJ:
a buddy who ordered them when they were, you know, first starting out or had a big black Friday sale or something and got them all half off. It's like a dollar a packet. which,
Jack Herrington:
Oh lord!
AJ:
but if you think about it, you know, soda or whatever is gonna be 50 cents a can. So, and these are good for 24 to 32 ounces, depending on how strong you like the flavor. So it's like, you know, not that, anyway, but you gotta buy a bunch of them to get it at a dollar a packet. So anyway, but. There's a $14 trial pack of only eight, so now they're like $1.50 each, but it lets you try every flavor. So if you wanted to, it's just interesting. It's interesting and it's an alternative. If you have the pathology that you must have flavored drinks,
Jack Herrington:
Mm hmm.
Dan Shappir:
Ah, you drink
AJ:
maybe
Dan Shappir:
it, you don't
AJ:
this
Dan Shappir:
snort
AJ:
is
Dan Shappir:
it?
AJ:
not as.
Jack Herrington:
Yeah, my wife does that. Yeah, yeah, yeah. There are many people who just don't like the taste of water. Now that water has a taste implicitly, I get the lack of taste is a thing.
AJ:
Well, and if you're in Oregon, it's different than if you're in Pleasant Grove, Utah.
Jack Herrington:
Yeah, right. My daughter hates California water loves Oregon water for some
AJ:
Everybody
Jack Herrington:
reason
AJ:
loves Oregon water because it's got it's like water the way that God intended. Literally
Jack Herrington:
Hahaha!
AJ:
the water flows from the mountain. It flows down through the rocks and it collects all of the, I think magnesium is one of the things that gives water
Jack Herrington:
Hmm.
AJ:
its flavor. Cause all the purifiers had magnesium to the water and that's supposed to make it taste better. But, uh, you know, the good Lord did not intend for us to drink toxins. It didn't intend
Jack Herrington:
Hehehehe
AJ:
for us to drink chlorine and fluoride that wasn't it is in his master plan of like, here's how to, how to enjoy the earth folks. Um, so, uh, you know, not, not that I'm permissed to speak on behalf of the almighty, but I, I just, I just have a hunch. Okay.
Jack Herrington:
Okay.
AJ:
And then the other thing that I'll pick is micro tick. If you like the CLI, I mean, they have a UI and everybody raves about their, their windbox UI. Their UI is so basic, but micro tick that router, it's a router or switches. Um,
Jack Herrington:
Hmm.
AJ:
and you can do VLANs, which is a little bit, it's like, it's such a simple concept once you understand it, but it's difficult to explain and understand it first, but basically allow you to have. So now I have it so that all of my, well, I actually did this with the unified, but then I extended it with the micro tick, but I have an in my house for everything that's either plugged in or wireless, there's segmented networks. So the anything that I don't personally control, like I'm not, you know, any set top device or IOT
Jack Herrington:
Alexa
AJ:
device
Jack Herrington:
or
AJ:
or
Jack Herrington:
whatever.
AJ:
yeah, it, well, I don't even have those because
Jack Herrington:
Oh, OK.
AJ:
they're, but yes, the things
Jack Herrington:
Yeah.
AJ:
that are like that are on one network. And then the things that are, that I use for work are in another network. And then the stuff that the rest of the family uses are on another network. So like my wife's phone and, uh, you know, so, so there's three networks and the, the micro tick allows you to do stuff like that and so much more. And so, so does the, the unify from, from ubiquity, but anyway, um, their command line interface is what I'm raving about because they're, they're more Unix than Unix.
Jack Herrington:
Oh wow.
AJ:
I've never seen a command line that is so amazing. Everything is a file and, or a folder, meaning it can also be a folder. So it's, I think they basically have a custom shell
Jack Herrington:
Hmm.
AJ:
and, and everything that you can do with it, you can SSHN and then you get dropped in this custom shell. And all of the sub commands that you have. So a command is a folder. And if you run the command, it runs, but if you run the command and then what's inside of its, its folder, which is weird that something could be both a file and a folder, but it's this shell abstraction thing, then when you tab, it shows you all of the sub commands. And then when you, when you select a sub command and put a space in, you tab again, then it will show you all of basically the flags. And then if you select a flag, then it will, you know, auto-complete to the equal sign. And then if you tab again, it will give you all of the options like the ports or the V lands or whatever it is that's available, that's allowed to be put after that thing. So it is, it is the most auto complete, most user discoverable thing that I've ever seen in my life. And I thought that fish was the best shell in the world. Microtik has the best shell in the world. I
Jack Herrington:
Hmm.
AJ:
don't know that you could replicate it in a Linux system because they I'd like, you can't have something that's both a file and a folder in a Linux system. That type of abstraction doesn't avail itself to, to existing, but you could see somebody writing a completions file kind of like the way they do for fish
Jack Herrington:
Yeah.
AJ:
and then have it so that the completions file allows something to be presented that way. And that's, that's kind of what they do. They've got some weird custom shell. It's, it's probably like a busy box type thing where all the commands are actually in one single. file. I don't know how they implement it, but it's just, it's just amazing. It's super discoverable. It's super easy to use, super easy to get right.
Dan Shappir:
I'm just...
Jack Herrington:
So if you
AJ:
And
Jack Herrington:
want
AJ:
I
Jack Herrington:
to
AJ:
love
Jack Herrington:
make
Dan Shappir:
I'm
AJ:
it.
Jack Herrington:
a
Dan Shappir:
just...
Jack Herrington:
shell stuff, follow their example.
AJ:
I didn't hear either of you.
Jack Herrington:
Oh, okay.
Dan Shappir:
you go for.
Jack Herrington:
Go on.
Dan Shappir:
No, I was,
Jack Herrington:
Oh,
Dan Shappir:
yeah.
Jack Herrington:
I'm saying if you want to make shell stuff then then do their thing Like whatever that is, that's what I'm saying. It sounds
AJ:
If
Jack Herrington:
like
AJ:
you
Jack Herrington:
a
AJ:
want
Jack Herrington:
great
AJ:
to make
Jack Herrington:
great
AJ:
shells
Jack Herrington:
implementation
AJ:
do yes, I think anybody who's going to make a command line
Jack Herrington:
Yeah.
AJ:
tool should should experiment with micro tick. The problem being that you have to learn a
Jack Herrington:
Yeah,
AJ:
little
Jack Herrington:
to
AJ:
bit
Jack Herrington:
actually
AJ:
of networking
Jack Herrington:
have a meager check. Right.
AJ:
to well, you got to and you got to learn the networking to experiment with it because if
Jack Herrington:
Yeah,
AJ:
you don't
Jack Herrington:
that's
AJ:
know
Jack Herrington:
true.
AJ:
any of what it does, then you know, the just yeah, it's you have to understand some aspect of the networking to be able to understand how I wish that everybody could have this experience and have that in their mind next time they, they do a CLI. All right. This is, this is, this is the future that we need.
Dan Shappir:
No, the future that
Jack Herrington:
Got
Dan Shappir:
we're
Jack Herrington:
it.
Dan Shappir:
going to get is chat GPT as a CLI.
AJ:
I don't know if that's going to help us or hurt us. Anyway, what are you going to say, Dan? Is that what you're going to say?
Dan Shappir:
Basically, instead of telling Chat GPT, give me a shell script that does x, you're going to have something like a Chat GPT CLI, and you just tell it, do x, and it will figure out what it needs to do in order to achieve x. That's what I'm guessing.
Jack Herrington:
I think that's going to be the case for all UI. Honestly, I think the future of UI is that you're going to have basically headless applications that know how to vend data up to an UI system where I can basically just say, Oh, this is my bank. I want a new custom Panama on here that and then you just type it out. Like I want show me my spending on magic to gathering cars over the past six months, whatever, blah, blah, blah, blah, blah, and it was a thing. There's a graph. That's
Dan Shappir:
Yeah,
Jack Herrington:
your
Dan Shappir:
well,
Jack Herrington:
interaction
Dan Shappir:
for
Jack Herrington:
model
Dan Shappir:
the longest time I used to
Jack Herrington:
with
Dan Shappir:
say,
Jack Herrington:
software going forward.
Dan Shappir:
for the longest time I used to say that Google has the best user interface. You just say what you want in English, and more or less, and you get the results.
Jack Herrington:
Yeah,
Dan Shappir:
And
Jack Herrington:
yeah,
Dan Shappir:
Chat,
Jack Herrington:
oh, you mean the
Dan Shappir:
and
Jack Herrington:
search
Dan Shappir:
Chat,
Jack Herrington:
interface.
Dan Shappir:
and ChatGPT,
Jack Herrington:
You're right, yeah.
Dan Shappir:
and ChatGPT just takes it a couple of steps forward. Now, obviously, you're
Jack Herrington:
Right.
Dan Shappir:
under risk that every, like, 10 times you enter a command, it does something totally different, like you race your hard drive or whatever, or, you know, but,
Jack Herrington:
Or lie to you.
Dan Shappir:
uh, or lie to you.
Jack Herrington:
Yeah,
Dan Shappir:
Yeah.
Jack Herrington:
just make stuff up. Yeah,
Dan Shappir:
Yeah. Fine.
Jack Herrington:
that
Dan Shappir:
Fine.
Jack Herrington:
sounds like
Dan Shappir:
Fine.
Jack Herrington:
something you want to hear.
Dan Shappir:
Yeah. Yeah, exactly. Um, but, but yeah, I mean, it seems the logical place to go. Why do I need to remember all the complicated Git commands instead of just telling it, you know, what I wanted to achieve?
Jack Herrington:
Yeah, if you're on OS X, you can use fig, you can use warp. They all they both have basically AI interfaces where you can just type in, I need a command that, you know, runs across all
Dan Shappir:
But
Jack Herrington:
my
Dan Shappir:
I don't
Jack Herrington:
files
Dan Shappir:
want to, I need
Jack Herrington:
and
Dan Shappir:
a command.
Jack Herrington:
does
Dan Shappir:
I want
Jack Herrington:
that. And
Dan Shappir:
to basically say just
Jack Herrington:
it
Dan Shappir:
do
Jack Herrington:
makes it
Dan Shappir:
X.
Jack Herrington:
happen.
Dan Shappir:
Why do, you know, I don't need you to teach me how to do X, just do it.
Jack Herrington:
Oh, I see. Yeah. Hmm. Fair.
AJ:
I don't know. That's that scares me. That's that's
Jack Herrington:
Which
AJ:
I,
Jack Herrington:
one?
AJ:
I can't see the command line going that way entirely because people that use the command line are using it because they want things to be fast and exact,
Jack Herrington:
Hmm.
AJ:
you want something to be reproducible that that's the beauty of the command line is I don't have to go figure it out every single time I figure it out once and then anytime I need to do it again, I just run that command or that alias or that script.
Dan Shappir:
I never remember the git command to push a new branch.
Jack Herrington:
GGP.
AJ:
Uh, you should not have to do that if you're running a recent version
Dan Shappir:
I know,
AJ:
of Git.
Dan Shappir:
I know,
AJ:
That's
Dan Shappir:
I know.
AJ:
the default,
Jack Herrington:
Okay, fair
AJ:
but
Jack Herrington:
enough. But I mean, I also use I use the SH and they're really good. Is a really good get plugin for ZSH comes out of the box.
AJ:
You're stuck in the 80s. You need to get up
Jack Herrington:
What?
AJ:
with the 90s, man.
Jack Herrington:
Oh, what's 90s then? Oh,
AJ:
Fish.
Jack Herrington:
okay. Okay.
AJ:
Am I a used fish?
Jack Herrington:
I've not used it.
AJ:
Dude, I'm telling you, man, use fish once. It's one of those things that's kind of hard to describe.
Jack Herrington:
Okay.
AJ:
Use it, use it, use it for five minutes and you'll never use the SSH again. One, because you don't have to do any config. There is no, well, I think somebody did create an Oh my fish. I don't know what the purpose of it is though, but fish is Oh, my ZSH already.
Jack Herrington:
Okay,
AJ:
Like fish is
Jack Herrington:
yeah.
AJ:
ever all the options you want are just turned on by default. It's
Jack Herrington:
Alright.
AJ:
just, it just does the thing. The one downside is you don't run bash and fish. Fish is not a bash interpreter.
Jack Herrington:
Oh.
AJ:
So you can run your bash scripts. You can type bash and then the script,
Jack Herrington:
Right,
AJ:
but you
Jack Herrington:
yeah
AJ:
can't,
Jack Herrington:
yeah yeah yeah.
AJ:
you can't copy and paste bash loops, for example, you know, you can't, you can't go find something on stack overflow and then copy and paste it and have it
Jack Herrington:
Yeah, that's okay.
AJ:
do the
Jack Herrington:
I
AJ:
thing.
Jack Herrington:
mean, when I'm writing scripts, I shabang bash at the top.
AJ:
Yeah.
Jack Herrington:
And
AJ:
Then
Jack Herrington:
yeah.
AJ:
you're, then you're good. Cause fish is exclusively from my perspective, it is exclusively for interactive shell. I would, I would never use it for scripting.
Jack Herrington:
be honest, like the reason I didn't touch fish was the dumbest reason ever. Which is I don't actually like the band fish. pH
AJ:
Okay.
Jack Herrington:
ISH.
Dan Shappir:
Look, that's an interesting
Jack Herrington:
I mean,
Dan Shappir:
reason.
Jack Herrington:
I'll be honest, I know it sounds incredibly stupid. But like, I you know, it's like shells to me are like, kind of like, you know, works, it works, it works, works, you know, but like, and ZSH was like, Oh, wow, that's like my regular bash, but I TCSH or something like that, but better. And
AJ:
And are
Jack Herrington:
I, you
AJ:
you on Mac
Jack Herrington:
know,
AJ:
too?
Jack Herrington:
yeah.
AJ:
Okay. So check out web install.dev look for fish and look for iterm too. And there's some cheat sheets there that you might find useful
Jack Herrington:
Web
AJ:
anyway.
Jack Herrington:
install. I use brew. So can I just brew install fish?
AJ:
I wouldn't recommend using brew
Jack Herrington:
Okay.
AJ:
unless you install brew with webby, because if you install brew with webby, it won't, it won't conflict with your system files, like when you install brew normally uses the same brew installer, but passes the options that are in the, the, um, the secret menu that nobody knows about that it makes the installs take longer cause it has to compile more things from source so that it uses. Your home path rather than using system paths,
Jack Herrington:
Right, yeah, yeah,
AJ:
but
Jack Herrington:
yeah.
AJ:
then you never get it. You never get that problem where. brew updates, libSSL, and then curl breaks.
Jack Herrington:
Oh,
AJ:
If you're
Jack Herrington:
yeah.
AJ:
familiar with that problem.
Jack Herrington:
I haven't seen that in a while, but I've definitely seen that.
AJ:
Yeah. And then the other one with SSL anyway.
Jack Herrington:
Yeah.
AJ:
So, but getting, getting back on track, it's
Jack Herrington:
Right.
AJ:
time for us to tell everybody Eddie, Adios, and then edit and then go back to finishing that last comment
Jack Herrington:
Okay.
AJ:
that you have pinned. So everybody, thanks for joining in. It's been great to have you and
Jack Herrington:
Been great
AJ:
we
Jack Herrington:
to
AJ:
will
Jack Herrington:
be here.
AJ:
catch
Jack Herrington:
Thank
AJ:
you
Jack Herrington:
you. Thank
AJ:
again.
Jack Herrington:
you for hosting AJ.
Dan Shappir:
Yeah, for sure.
AJ:
You're
Jack Herrington:
Or,
AJ:
welcome.
Jack Herrington:
yeah.
AJ:
Adios!
Dan Shappir:
Bye!