Well, Hello, hello everybody, and welcome back to another exciting episode of
JavaScript Jabber today on Well Today, on our show, we have We've got
your hostess with the most us that's me and Joe Neil for now Yo yo
yo, coming at you live and all that stuff. And then we've got
Steve Yo what up from Portland? And then we have our guest today,
Kelvin. Hey, how you doing? Ye? All right, so let's
jump right into it. Who are you? What makes you famous? Or
if not, what makes you famous? What do you want to be famous
for? Okay? Thanks? AJ? So I'm Covin. I am the
lead Mintino Sims Jiz, and I'm currently working on the borrowing jervascript stack.
Hopefully it's the name is not a turner for most people. I him to
make it a go to stack for building full stack web applications in JavaScript.
So how long have you been maintainer of sales? Did you start it?
No? Not at all. So sales was created by Mike McNeill. I
became the maintenance of sales June last year. Cool? Why did it change
hands? Okay? So Mike is still the BDFL you know, and but
currently we have his hands full with being the CEO of Fleet Device Management to
fleet Security and endpoints company based on squad. So there's your help. You
get visibilities into your computers and all the stuff. So the sales frame of
the more hands on midness, which is where I'm come in to like lead
the framework. Yeah okay, And for those that are not familiar, BDFL
is Benevolent Dictator for life, So any the person who gets to call the
shots, all right, and then what is boring JAS because that kind of
sounds like a generic term like vanilla JS. Yeah yeah, so the full
okay, go ahead, Yeah for sure. So the fool it's it's kind
of like a mouthful. So it's called the ball in JavaScript stack and it's
my own. Like, I just think that in the gymascript space we sort
of have a lot of excitements when it comes to building full start as apps.
There's so much going on boats in terms of actually putting everything together is
sort of like not complete. So the boring stack was started I think back
in twenty twenty where I was like, you know, the old promise or
the premise of no jars was that we can build wh JavaScript across the stack,
right, but what we have today. Most times when we want to
build single page applications, you have like a single page app which is like
a like his own ripor and everything. Then if you if you're going to
do anything sub scated, you're gonna leave like an API. So that's two
separate Javaski apps that are in separate ritos. And of course there's a lot
of things. You have double routing where you have to route on your API
routes then your client side routing, and that's just scratching the surface, right,
So I wanted something where I could piece all this together still have a
single page application, but we did more server centric flow, right, so
that means no more loading spinners, no more double routing and other things I
saw for us. So that was it, Like that was the old and
I get to use it in the old platform. And then I figured out,
you know what. At first I called it like the vit stack,
which is view innationial tail with that sales, but it supports react and filt
so that's this reads and see he's just does me any sense? To me?
I was like, you know what, let's call it what it is,
which is like it's not exciting, it's just boring, and it gets
to move a really quickly, so hence the name. I got to say,
you're preaching at the choir because I'm looking at the repo. And I
have been preaching about inertia, Tailwind and View for years, both here and
when I was doing the Views on View podcast, because I have talked to
Jonathan Renick, the creator of Inertia, twice on this podcast, and I
have been using inertia in Tailwind and View for an app that I've been writing
for last year and for other stuff. The difference between what you're using what
I normally use is I use LERAVL on the back end. Yeah, but
but yeah, this this stack is the bomb, and I understand what you're
talking about double routing. It makes it really nice because Murcia handles all that
and you only have to define your route once on the back end and everything
gets to pass through those. So yeah, it's it's I don't I mean,
I'll take don't. I don't know if I would necessarily coin this as
its own separate stack simply because the point of inertia is the plug and player
back in with your front end. And I know initially when I had first
talked to Jonathan. Node was not an officially poor supported back end supported by
Inertia, but the community had come up with plug ins to use no,
so I know, like I think Ruby and Lara Bell were the first back
end that were supported by a nurse out of the box, along with sales
excuse me with spelt you and React. So walk us through the stack.
What are the pieces and what how long have they been around and what's the
goal of each? Yeah, for sure. So one thing I like about
the stack really is that I kind of see it as basin a lot of
cool technologies at the stable and most bowing versions, for example, we all
like React for j exs, right, but most of the time when you
get to like you full stack, okay, I don't really use it that
you speak, But the void is at the components level, React to stable
right, and it's it's really good for what it does. Stepway one of
layer stuff like routing and all the metal frames, it just gets out of
hand. So my thought process was, you know what legs take the components,
which is made possible by inertia, right, and just let you build
your pages with reacts components which are just as view which is a single fire
component. Then it speilts own stuff and let us be the pages and a
more selver centric web framework like sales which is really old. Serss like what
twelve years or more now, which is really old, and just take the
stable versions of all the step and of course stalings which makes starting super good
and just give you an holistic mono reple like a monolith where you just build
full start JavaScript applications. So there's Sales which is going to control everything as
the web framework. There's Inertia which this is your view spelled or read components
together with sales. So why I think is it makes sense to make it
its own stack because this is just like the earliest version of it. The
vision is to get it in social way that for you to build the pages
the way your users are going to consumments. For example, I don't think
your marketing page should be a single page application because you literally don't have any
drama script that should run there. So with this stack, you should be
able to use your jeccess and still just ship or send back HTML at the
end of the day or like what you do when you have a single page
application with SSR, Like there's no need for SSL in your marketing page.
Really, so my thought process is led to dev use the DSL, which
is the which is the views templates, to use components felled or reacts,
and just give them the option to build either apps or websites. But's all
in the same code base. You say, don't say no to chasing JavaScript
trends, Yes, and then you've got view react and Felter supported tailwind,
et cetera. So what do you mean by say no to chasing JavaScript trends
when I mean those seem kind of trendy all those things. Yeah, not
really, So like I said, we know everything happening in the JS for
for example, now when we have things with RSC, you know the app
rout and the next years or the pages router whether they're just all these complexities
that you have to learn in order to just chip your rectangles to use us
to do stuff with. What I'm saying is that you don't really need to
go all that trend All your need is the component, which is the basic
cell of all this from and framework. Leave the whole state management jas because
the borings that you don't need the state management at all. But you don't
need to know sustained or whatever you use for state management. Neither those trendy,
because there's some more stable and borrowing to do things that actually gets you
moving really really quickly. So those are the trends. The frameworks, they're
really boring. At the components level, there's not so much you could do
with the excess than just write it. But when you start adding all the
trends on top of it, that's where you just get out of hands.
And we've seen applications that are just terrible for that use cases. Yeah,
all right, I got that. So you mentioned state management. There's no
need for state management. I'm curious to see why that is or why you
say, because I have found niche where yes, it is still important,
but I'm curious to see why you say it's not even needed with the stack.
Yeah, definitely, So most times why you needed like a state manager,
especially when you're building a single payer applications the normal way, you often
want to sink states across your app right, because the front that is away
from the back end. But with the star the owner sort of truth is
the state from the back end. But we can be cashed of course to
make it really fast, so there will be no needs. So like the
way I've been building ups and I've even't seen this even I think Remix also
have this as well. Where there's no state management, you don't need any
state management. So I'm not talking about use states. Yeah, I'm talking
about state management libraries wife like the sour stand. Like in View with Opinia,
you don't really need to synchronize states in the front end because again it's
centric. So all this did come from you back data and it just gets
sent to your front that that's prop shid zta, all facilitied by Yeah,
Okay, So the basically the premise that you're saying is is that I mean,
is that because I don't know if it's because of a speed issue,
because of the sort of source of truth, you don't need the state management.
And I ran into a case using inertia with you with Lara Belle,
where I had I was dealing with the calendar app and because of the hierarchy
of of components without state management, I would have been having to either go
back and forth to my server or pass props from A to B to C
to D. Granted with View three, you can use inject yes inside the
components whether it called provide inject I think you can do that. But for
Jonathan, state management isn't prohibited. You can't use it if you want to,
and I think there probably are going to be some cases where state management
needed, But to your point, yeah, you don't need it to the
extent, yeah you will where you're just using arrest API from the front in
the back end. Now, I think we should probably do for those that
might not be as similiar with inertia as you and I are, is to
explain how exactly inertia is working and what it's how it's working behind the scenes
that invalidates the need for state management. Yeah, definitely, thank you,
Steve. So the old promise of inertia is that it's acts like erupting library
rights sols of like view route or the or anyone using reacting language. Right,
but it's kind of interesting to do it, Walks. So two things
you have to know. It has a protocol which is like a page So
there's a page object that initial expects to get sent from the back end,
and that page object has the name of the components and prop which would be
like the proper you want to pass to your components. So For example,
if on the page we have like an initial link, if you click on
that link, Initia is going to intercept that click so that that you don't
make a full page request, but it's going to send an AGEAX requests to
get that page object. So once you get the page object, it uses
the name of the component to find the component in like maybe if a pages
slash in the extra says, and then swap the current page with that page
as well as passing the problems that the page needs just like that. Okay,
So doing so you find that you don't need like a loading spinal because
as soon as you click the link, it goes to the back end.
I guess the pitches and also the prop so it's it comes with the data
it needs, so you don't have to make an extra request to get the
data. So that's at the high level, that's like, well it works,
and of course the headers you have to send we're is all going to
be taken care of by the sem aside adapter that you're using. So I
wrote the one for sales, so there's there's also official one for laville and
of course rails. That's basically what it's doing. Exist the best way I've
heard it put is that it's hijacking the request from the browser and instead of
doing a full page reload, it's just passing the data back and forth so
that your browser isn't doing a full load. And so when you're writing your
back end, no rails, what have you, you say okay, in
whatever your function is that that's saying okay, return this value. You're telling
it, okay, this is the component that I want you to pass it
to, and here are the props that go to this particular component. And
so then in your in your front end component, you just expect your props
as you normally would, you know, from anything else, and that way,
it's that makes it very much a lot quicker because you're bypassing the page
reloader it uses. And if you look in the inertia docks at are Ersegas
dot com and talks about the headers that it uses to determine what's going on.
And then even within you know, if you're within a component you want
to click a button and you want to, you know, just go to
your back end and get some data without reloading the page. That has some
helper functions like visit where you can say, okay, go to this url,
it calls your method, you do what she needs to do, and
then it returns it. So it makes it very quick because of bypassing the
whole page reloading. That's really all it does. And then not sure if
we cover this in detail, but your routes, you're only defining your routes
in your back end and it's just using those if you go to the docks,
it just says, yeah, to find your routes in your back end,
you call them from the front end, where normally with like a USPA,
you would have your your view router configuration where you've got to find your
routes and then it calls the standpoints on and so forth. So it makes
it much neaterer and cleaner, and that you're only finding your routes in one
place instead of instead of two different places and both your front and your back
end. Right, So, what are some other things that you wanted to
that you want people to know about the boring stack, either implementation details or
philosophy. Yeah, definitely. So the first thing is that you don't need
to because in the JavaScript cycles of new trends, and you feel if you're
already no view and reacts or is built? Are you like the component?
Because I find out most times what we like in these promotes is the DSL
that they like that they to us write our U eyes in right. So
if you if you want to shout out the noise that you have to piece
yourself. Because why I liked Sales back in the day was I started to
know just with Express and it was a paint to always have to go find
for everything that I need in order to build an API. In Express,
I have to piece everything together. So I found Sales and they just have
everything you need. So there were a lot of conventions that work, which
is MVC. So that's same thing that Sales let me do, which is
the move with quick. That's what the start is trying to do, which
is if anyone, even if you're a new by, your already know components
in whatever you have frameworks you like, all you have to do is to
user start right your components like sixty percent of the time because your back end
just act like the data layer. I just just sending down a page with
the prop. Then you do everything that you normally do components and it's just
a brudge to work with I've had folks seeing that we're using next Years have
a demo of the stack, and they really really loved it because of how
simple it is, and it takes a lot of stuff, like cause is
no longer an issue because you're backing at your front there at the same page,
so you don't have to worry about all that, all right, so
the old reckless hell of course it's not long your thing to worry about.
And it just sort of like makes sense, right, like when you use
something that is there's holistic, Like I said, no loading spinners, Like
I've had to deal with that, where why is the page loading? And
I still have to go fetch data for it again? Right, like to
give you this empty share which is your spa promise, you know, just
look the page and get the data. But there's no benefit of the page
to the user if you've seen a loading spinner. So the page load first
of all with the normal browser load that's some seconds. Then do you not
have to load your own? It's just too much. So I feel like
you want to keep the simple, keep things really really fast. You should
use the boranch start because it just does all that. And again you're not
construmed from what's sending Jason over the wire. You can also do that because
it doesn't construme you not to do that, So you could still have pages
send the inertial way and also Bill fetch your data with Jason if you want.
Okay, so two questions, I'll try this one. I mean,
I hear both sides of this argument about should your application use its API?
Are you going to export an API to customers? And then, if so,
should your application use your API? And I've kind of always been on
the side of yes, your application should use your API. And my reasoning
for that has been that when people design, like most people don't have experts
on the team, right, and when people are designing their front end and
their back end together, then everything starts to look like the front end,
right. So when there's a form on the front end, then the data
model starts to look like that form, and the database table starts to look
like that form. And then when it comes time that you need to modify
things or add an API or expose a customer integration, you're just screwed.
And I'm curious with this stack, are you advocating it to people that are
going to be exporting things that are going to integrate with others. Are there
some guardrails in place to help people fall into the pit of success in terms
of data modeling or is it really just for kind of like the javscript versions
of rails where it's you're going to create a cookie cutter site and you're not
You're not really going to be, you know, exporting an API or something.
You're just building a like a like it's more customizable than WordPress, but
you want to do it in JavaScript rather than Ruby on rails, Like,
I guess there was a lot of stuff there, but yeah, you pick
at any of that. Yeah, definitely. So for our sales mix for
a really good framework for building APIs, Like I do know Postman and Pastack
they use it Postman for micro services and Pastack for like, yeah, public
facing a PI. You can't build an a p I a right, And
this thing is what I've seen and I think a couple of us. So
I used to be a very good advocate for recpis. I still am.
But the through is for most apps you won't need to expose a sp I.
Sometimes I get people say, like, you know what, let's vie
the RECIPEI now and use it so that when we have to expose it,
it's just the what the truth is your API that you use for your app
a lot of the time, if you want to suppose it, it won't
be the same. So I've seen this work, but like when seems that
to be, like, you know what, let's build an API so that
we can consume it, and of course I suppose it. It's not going
to be the same thing, so the use case is never the same.
That's when we have terms like back and for front end, and you start
have like you start having to modify different parts of the Jason your center back.
So to your point, this tack is mostly for full start applications.
Most apps are okay being food that applications, especially if your client is on
the web. You don't have to build an API, which is the entire
idea of of initial which is like, you don't need an API, but
if you must, you can expose your API routes. But I wouldn't say
that the same API routs for you for your own private use the same you're
going to suppose. It's most likely doesn't always work out really well, I
know, right, So on the I think the old recipe. I thought,
right, if you could use your your private one I used to,
I suppose the same one. Have you had to do that? So I
I just think that if the data is modeled well, I mean, well
then this this comes to the SPA versus the service I render issue. But
I think if the data is modeled well, then you you should be able
to use it externally and internally. And yes, you may need to tweak
it for the internal use, but but then you have to you have to
model it well. And if it's modeled well, I mean, but this
this is the whole thing of like the PHP style where you're exporting the data
specifically for a form view or a gallery view or whatever, versus you're exporting
information, Like are you exporting a view as Jason or you exporting information?
If you're exporting a view as Jason, then it's not really an API.
It's it's a it's a particular view of the data. It's not about the
properties or the values of the data or the relationships of the data. It's
about I wanted to show this gallery with this this pieces of information. You're
selecting that, right, And that's and that's kind of like the promise of
graph QL is that you don't have to make the decision. You get to
do both and then you know, we saw how that turned out. But
you know, on the other side, if the data is not modeled to
the UI, then if you're trying to do whether you're doing client side rendering
or service side rendering, then you have to have another layer that's going to
consume the API, which I guess you know, either it's the back end
for the front end, or it's the or it's it's more sophisticated front end
where you need to fetch a bunch of objects, you need to iterate through
them, you need to attach the extra data for them. And so I
guess I guess maybe I think of a of an API as being a little
bit closer to the model with some of the business logic that needs to be
done on top of it solved, and a view is more like what what's
going to be templated. I don't know, I don't know where I'm going
with that. I'm just thinking out loud. No, yeah, like I
get the thought. But I think when we go into real world we sort
of like, see, so you just painted an ideal API hing, but
if that was the case of every app, we wouldn't need graphs. All
the different solutions we have tried to come up with just for like, our
UIs to get just the data it needs, so do all over an affetching
thing. It gets to tell us that that ideal the PI is not really
what the end consumer would need. So if I just send you know what,
this is my generative game, which is tied to the data and it's
modern, really well, my UI will have to now do some extra work
right to get just the data it needs, you know, like, okay,
let's put the graph on top of this one. Two cannot pick face.
So with the boring stack, now the you I only get the data
it needs. And this is suitable for just web apps. So instead of
you thinking of okay, graph c so I can need to pick so the
page will only come with the data that that page need. So there's no
overfetching, there's no un affection. You only get in the data you need.
So we did have a couple of questions here, I'll go ahead and
field which I think you just answered this one to confirm the boring stack compiles
the page with the props you passed into it, right, Yes, So
it makes an asp PA look like a static site. If you if you
look at the source code of an inertia page, what you'll see is there's
a big, huge data attribute of the top page that has all the data
that's been passed into it as props. And that's how it's scoring that and
accessing that. Yeah, I'm not sure I understand what it means. What
makes it look static because it's still because what I guess, because the data
is passed in before the page is actually compiled. I mean, it can
be verysly. I do a lot of really cool dynamic stuff with the page
as well. Once it's loaded, you know where I just send you know,
a little bit of data back to my API and it passes it back
and I only update that certain section of the page without the whole you know,
browser reload, which is part of inertia, and there's some stuff you
got to do. There's some really cool props you can pass that says okay,
only get me to change data or only get me such and such data.
So it's doing the absolute minimum in terms of traffic between the front and
the back end. Yeah, definitely. And to add to that, point.
Sometimes in the old traditional way, you often get to like if I
submit the form, or like I want to reload the page back after like
an update, you just get everything back, right, Like maybe I have
like a course to space, and I just edit just one course. When
I submit the form with my agents and everything, the data would just send
back the JAP blog, right. But with this one, with this tag,
which is really cool and it's powered by inertia, you could just need
to pick what you want back, be like, okay, this course in
this process, list was the only thing changed, return it back for me,
right. So it's I don't want to call it giving you the power
graphical, but it's sort of like you have control of what gets returned back
from the server. With all the APIs that inertia is going to provide for
you. You could preserve scroll and you could do a ton of stuff that's
really really cool that we can't really actually get into because it's just it's simple.
It's a routing layer, but it has so much power. Well,
what are some other what what are some other questions that we we should be
asking you? Oh yeah, yeah, So so Steve's point so earlier on
in measure that it's not sure why this should be zone stack, but I'm
making a zone stack because at the end of the day, my vision is
that inertia it's not just so making not all pages are mediequal. Right.
So in an SPA land, because you're using React SPA, everything should be
a React SPA because it is in nextges, everything is SSR if you want
that, or all the I SR and everything you have to do. But
in my world, or in the boring staff world, we know that not
every page should be a single page application, none, that every page should
have SSR. Right, So we are using inertial to power these single page
apps. Right. And there's something I'm currently working on which I've actually mentioned
a little bit before, which is even now in sales world we use EAGs
for templates, but I feel like having to learn to DSL to author pages
people don't like. I think me and myself, I don't like egs at
all. I don't like the same tax at all. So my thought process
is, what if you can use the same jexs you write for your clients
side up and also your back end views INSS as well, so that for
pages like the home page, they are back page, the priceing page.
Of pages that don't need jamas at all, you can still write the same
gess but when it gets acts for like user, you just send them HTML,
which is SEU friendly, does not have anything to do with the user
in terms of JAMA scripts load. Right. So this is the key piece
of the broying stack which is still being walked on today because I feel like
you can have this hybrid app but the same code base, the same dear
story you're writing. All you have to do is to know that, okay
for this, this is so my slash dashboard, it's my single page app.
My marketing page should be HTML because that's what value you get from the
from the marketing page is more content, right, content and SEO. So
I saw this this talk from someone at Netflix where they had to remove react
from the marketing page and then saw an increase in conversion because they all hydration
was taken too long and people were actually clicking away. So just imagine you
are still using reacts, but you're sitting down htmoor by default. Yeah yeah,
I mean I that as somebody who is a big fan of scraping and
being able to get to data when no API is provided. I really do
hate react sites because there is no data on the page. Yeah, and
it is. Yeah, it's it's really frustrating because there's so many sites out
there that have useful information. It's like, I just want to automate something
off of this, and they, you know, they haven't bothered to create
an API for it, and and so yeah, from from that perspective,
whether it's because the search engine is going to be able to understand it better,
or the GPT is going to be able to understand it better, or
just because I know a lot of people don't like the idea of somebody scraping
the content off of their site. But I don't know. I hope if
you've got valuable content and you're not, you're not in a business where you're
creating a product out of the content, particularly like just make it in a
format that's easy for people to consume. Otherwise, I guess why are you
Why are you creating the content in the first place. Some people should be
able to use it in some some way. So, yeah, I really
like the idea of for static pages render them. So so does this does
this have some sort of mechanism where you can say, Okay, these pages
are mostly static, so treat treat them as such, and then these pages
are mostly dynamic. So you know, these pages are more component heavy and
these pages are more content heavy. Is there a differentiation between the two or
is it just you're always getting the static benefit by way of you know,
it's it's it's rendering things as the as the props are past them. Yeah,
So what's going to happen is that they're going to be two places to
define your your components. Right. So now in the stack, so we
have assets like jas and pages, so that page directory is where you find
your XPA pages. Right. Then if you want to define your STML pages,
which is going to be in your components, you could do it in
views. So we all know the old emphys at model, views and controller.
So once you define something in jers inside the views folder, it's going
to be compowd at request time and send back as at right, so the
only convention you have to know is and the views older you will are only
defining components that are going to be used as templates for your server side rendering.
And once it gets to the user, there is no hydration because you
don't need this, right, It's just these pages has stating their hym but
just for your DX you can still use the same components you're using for your
single applications. So that's just the convention. Like I said, this part
is still being worked on. And I saw who know from class flare.
I think yes, I think we know from classware, so it's a new
framework. They also do this where you can write your your templates in gxcess.
Yeah, so's actually a very good and vible idea. I think Netflix
does it too, and a little bit of paper as well. So we
can't do this like for like since forever now right, but with this like
next years and remixed, it's sort of like I've been archived for you to
just go use next for something else. But I think those components can be
really good templates if you just have the engineering to just make it really nice
to use. Now, for what it's worth, is probably worth mentioning along
these lines that I know this came in later after the initial at least,
But Inertia has a service side rendering capability. Yes, that's mentioned in their
docs, so there's a whole page on how they implemented, but it does
take that capability have that capability, so that not every page has to be
a job script rendered template. Yeah. So the the only difference with that
one with the SSL one it needs to hydrate, right, So yeah,
and full there sellicide views that I'm talking about. It shouldn't hydrate because you
don't need the Joba script right And even in larre Bell I know you can
do you can just return and you know that you do the view. You
know in an interview, you can have your hard coded ah htmo. There's
been ways you can do that. So but the point is even with this,
there's not every page doesn't have to be a dynamic job screen template.
Yeah for sure. All right, well it sounds like we're kind of wrapping
up here. I think we've covered a fair amount of the topic. If
people want to learn more or if they want to reach out to you,
where should they head. Yeah, so you could go to the dogs for
the bowling stock, which is dogs the sky, the com slash bowl stock,
or just of com slash boring to take you to the repo. It
can of schedule links of the dogs. So if you want to reash out
to me, you could join this discord slash chats, or you could just
sweet at me at Dominos And yeah, your questions and do you know about
picks? Were you informed of that we do a thing called picks at the
end of the show. No, I did not. What's that you have
to feel? Met Steve, and I'll go first. It's just you pick
something you're interested in or something that you thought was cool. Could be tech,
could be a movie, could be uh you know, some sort of
article and a newspaper or whatever. You just pick pick something that that you
think is cool. And then before I do that, Steve, did I
do everything right? Do we leave anything off before we close out the show
here? Uh? No, I think we got to cover. If we
do remember something, it will be after we're done. Then we'll have to
added in somehow. I'm sure. I thank fornight. You're pretty good.
Okay, well, I will go ahead and lead us off with a few
picks. So, as I mentioned last time, I have gotten into the
aquarium hobby and it's very fascinating because it's there's a lot of technical stuff to
learn and do. Some stuff that's pretty rote, like if you learn how
to do I like things that are functional from the perspective of if you do
X, you get result why, and you get result why every time.
That is something that you know has drawn me to computers and programming, and
I like to optimize things in my life. I will take the same routes
on a road, like my brain is like a reduced instruction set processor.
I will take the same routes on the road, even if I know a
more efficient route is available, because I just rather get better at these particular
set of routes rather than every possible route. And I've got a buddy who
when he drives with me, he's like, oh, well, you know
if you went this way, you'd get there faster. I'm like, yeah,
but I'm just gonna take State Street or Main Street because because that,
you know, that's I just I travel the same roads, I do the
same things. I even oftentimes eat the same foods very very much. That
I just well, it's it's beyond habit. It's I am customizing for fewer
mental inputs. But this, the aquarium hobby kind of goes against that because
there there is no way to really jump start your aquarium. You you can
have anyway you there's there's just a lot of levers and knobs that you you
have to learn, and they're going to be different for everybody because your tap
water is different where you live, The fish that you get might be used
to different parameters. The plants that you want are different than the plants that
somebody else wants. The type of things you're trying to combine in your tank
to create the environment you want are different. And the ecosystem just isn't natural.
You know that these fish don't naturally to go together, These plants don't
naturally go together. These fish and these plants don't naturally go together, and
so trying to create a self sustaining ecosystem is kind of impossible, or at
least there's trade offs. There's there are no solutions, only trade offs.
That quote certainly applies in this case. Anyway. I didn't mean to go
that much into all of that, but I guess it's just super fascinating to
me because I'm trying to learn how to create the ecosystem that I want inside
of this little glass box. And it's hard to get the parameter right because
they're living things, and you can't just even if something is generally true,
the evolution that you're getting like that, if you breed some fish, if
you breed some guppies or you breed some tetras or whatever. The next generation
that you're getting from what you bought is more specific and tuned to its environment.
So the next generation is going to be different. As you get more
fish, the bio load of the tank is going to be different. Well,
assuming that you're feeding them more. You know, at some point you
can reach equilibrium by just letting things die. But then the problem with that
is then the water starts to turn kind of a yellowy color like it is
in real life and ponds and whatnot, because the decaying matter tends the water.
But if you wanted to just let stuff die and grow and die,
then things will reach in equilibrium in terms of you know, the water can
only support this many fish, it can only support this many plants, only
this many nutrients. You can create a clothed system like that. But it's
just it's super fascinating and so yeah, I'll just I just pick that as
a general concept, and it's I'm having a lot of fun learning about it.
I'm trying to get my wife into it a little bit. She kind
of will dip her toe into it with me. She's not as excited about
it as I am. But she helped me. She helped me put together
an aquarium last night. And it's it's so I tore one down. I
bought a ten dollars aquarium on sale and I tore it down and I built
it back up and I used a higher grade silicone. And it's so crazy
because there's like there's like four millimeters of silicone holding this thing together. And
that's it, Like that's that's all you actually need is the silicone in between
the glass if you clean away everything else, Like it's the four it's it's
like a a quarter of a millimeter thick and about four millimeters wide, and
it's so scary, but in reality, like that is actually what holds the
thing together. All the rest of it is just because they use a lower
grade aquarium that's like ten cents less, and probably more importantly, they use
a they don't they don't use people that are highly skilled to put them together.
So at the shops they just slop on the silicone. So you see,
you know, when you go into the pet store, you see this
tank and it's got like a full freaking inch of silicone on it. But
that's literally just slop that's left over because they didn't bother to clean it up
when they put it together. The part that actually holds it together is the
quarter millimeter. By the four millimeters, it's insane, so it's so scary
to look at the thing, but it holds water. So anyway, so
that pick brings a couple of things to mind. Yeah, that's great because
it's your turn. I guess you could say that your aquarium is sort of
an unopinion native framework, right, okay, all right. It doesn't give
you all the rules. It lets you do things however you want to do
it. Well, there's a lot of rules. They're just not easy to
understand. There's basic trade offs like the nitrogen cycle, how much food you
put in, how much water you take out. If you put up your
plants, then you're taking out some of the nutrients, which means you have
to add nutrients. But but yeah, it's just there's a ton of variables,
and if you want to get the low maintenance, self sustaining aquarium,
it's going to take like a year to do it because you have to get
everything has to reach equilibrium and then you have to stop doing so it's just
constant change. Yeah, well, like I said, from a code standpoint,
it's like an unopinionated framework versus an opinionated framework. Yeah yeah, and
then yeah, but like but like a code more framework where every time you
run the code, the code changes, because I mean it's biology, like
every day some different process is happening and then that affects other process. The
other thing was I don't know if you ever heard a song I was back
in the eighties, the guy named Kippa Data. He was real big on
puns. He had all kinds of songs, and they had one called Wet
Dreams. It's all the whole thing about fish puns. And he goes into
a bar and anyway, he's talking to some some gal and he says,
so, what's your son. She goes aquarium. He said, great,
let's get tanked. Anyway, that reminds me of so uh picked for the
day. I just as last week. I might have mentioned this before.
Apologies if this is a duplicate a few months ago. But I've been studying
to get my It's called the FAA Federal Aviation Administration Part one of seven drone
certification and it's what you need, it's what you have to have if you
are flying your drone in any capacity other than as a hobby for fun.
So if you're doing you know, you're getting pictures something anything for money,
you know, a commercial, if there's a commercial aspect to it. Those
limitations on the types of drones, and the reason I got it is to
be able to fly drones for our fire district. The fire department I'm with,
We getting a drone program going and it's very useful over you know,
some larger instincts and stuff. Anyway, it was recommended that I take study
for the course by taking there's an online course from a place called Pilot Institute.
Pilot institute dot com. Really good online course for this. This guy
who does that, he's a French guy who lives in Prescott, Arizona now,
but he has online classes for pilots as well as the drone courses.
And you know, with the FA there's books you can get and there's FA
has study guides for all the things you need to study. I never even
had to crack those. I just went through this course and took all his
course and was able to pass. I got an eighty seven percent. A
lot of people get above ninety percent on the FA Test, which is sixty
questions but really really great course, really thorough course. The guy's name is
Greg Revard. But pilot Distitute dot com if that's something you want to do.
And now for the dad jokes of the week, which is, uh,
you might not know this, Kevin, but this is the high point
of every podcast. So recently I told my wife that a husband is like
a fine wine. We just get better with age. The next day she
locked me in the cellar. Right, So I did a little bit of
putting money on the horses, and I got I was misled, and fortunately
I put a bet on a horse I supposedly had excellent breeding. So in
the race, after the horse left the starting gate, he stopped and closed
it behind him. Get that edge, No excellent breeding, you know manners,
he stopped and closed the starting gate behind him instead of racing. Oh
okay, all right, right. So one of the things with being highly
pedantic and very you know, like the way I was just describing my brain,
is that puns get more and more difficult for me every year. Oh
okay, because I killed a joke, but for you all too, literally,
yeah, so it gets anyway, what do you call a group of
chubby newborns, heavy infantry about that one. That's good. Yes, thank
you. Those are my picks for the week. All right now, Calvin,
now you get to go hog wild. Yeah, so for the picks
of the week. I don't have no dad jokes though, But for me,
I've been really stick in film music. So I played the piano.
I've been playing it for a while now, but late last year I i,
I don't know whether I discovered Handsomer, and what it did in Interstellar
kept me up. Like most nights, I just had it on repeat because
it was just so good. So I was like, I think this is
something I need to do for the next step of like playing music. It's
like taking the emotions in pictures and infusing it in like a musical production.
And it's something I've been like working on, you know, trying to like
see how to really understand it because I am not classically trained. I played
that year, but I feel like this is really really good to like interpret
words and acts in music. So yeah, So Handsomer is someone I've been
studying bowl on that one, and it's local and Interstellar Deprives of the Caribbean
and even the Lion King Yeah, my son is like you. He is.
You know, I take the piano listens too. I just started here
a few months ago, and I'm one of those people that, you know,
I've got to learn how to do this, and it's really slow and
learning how to play without watching the keys and all that kind of stuff.
My son is a musical freak, and that he can just sit down.
I have yet to he he can't. He plays my ear and he can
sit down and watch a demonstration of how to play a song. Uh,
And pretty soon he's playing the stuff like he's been playing for years, with
just a couple of hours worth of work in it keeps here. I am
working and working in ten minutes later, he's playing his beautiful song with all
these chords and he doesn't even know what the chords are. He just knows
they sound good. Yeah, you know, so he's crazy gifted that way.
It's really amazing. I was gifted. So I'm jealous of people like
that. That's amazing, really awesome. All right, Well, with that,
thanks for coming on the show and teaching us about the Boring Stack,
and we look forward to catching up with you again sometime in the future.
Yeah, definitely. I look forward to being here. Thank you, thank
you Steve, thank you a J. This was amazing our pleasure. Sure
have a good one. I