Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Released Wednesday, 6th November 2024
Good episode? Give it some love!
Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Inertia.js - The Modern Monolith with Jonathan Reinink - RUBY 659

Wednesday, 6th November 2024
Good episode? Give it some love!
Rate Episode

Episode Transcript

Transcripts are displayed as originally observed. Some content, including advertisements may have changed.

Use Ctrl + F to search

0:00

When you think about businesses that are

0:02

selling through the roof like Ello or

0:04

Allbirds or Skims, sure, you think about

0:06

a great product, a cool brand and

0:09

brilliant marketing. But an often overlooked secret

0:11

is actually the business behind the business,

0:13

making selling simple. For millions of businesses,

0:16

that business is Shopify. Nobody does selling

0:18

better than Shopify. Home of the number

0:20

one checkout on the planet. And the

0:23

not-so secret secret. With shop pay that

0:25

boosts conversions up to 50%. Meaning way

0:27

less carts going abandoned. and way more

0:30

sales going. So if you're

0:32

into growing your business, your

0:35

commerce platform better be ready

0:37

to sell wherever your customers

0:40

are scrolling or strolling on

0:42

the web in your store

0:44

in their feed and everywhere

0:47

in between. Upgrade your business

0:49

and get the same check

0:52

out Allbirds uses. Sign up

0:54

for your $1 per month

0:57

trial period at Shopify.com/Try. Refinance

0:59

your car at Kemba Financial

1:01

Credit Union for quick access

1:04

to cash. Plus get up

1:06

to $500 next day cash

1:08

bag. Enjoy no payments for

1:11

90 days and take advantage

1:13

of cash equity from your

1:15

vehicle. Apply at

1:17

Kemba.org. Restrictions apply.

1:19

Offer ends March 31st, 2024

1:22

federal insured by NCOA. Equal Opportunity Lenter.

1:24

We have a couple panelists today, we

1:26

have Luke. Hi. Welcome. And we have

1:28

Jonathan Rining. Your thing like cut off

1:30

and gave me the dots right as

1:32

I was looking at it. I was

1:34

like, oh my gosh, Rining, welcome. Jonathan

1:37

is the author or creator, however you

1:39

want to say that, of inertia J.S.

1:41

And we just have here today to

1:43

yeah, for about it. Can you just

1:45

give us a little bit just to

1:47

start out about your background and how

1:49

why you might be famous? And then

1:51

we can go ahead and get into

1:53

inertia after that. Yeah, for sure. I

1:55

am a web developer and I've been

1:57

doing web development for almost two decades.

1:59

and I hang out mostly in the

2:02

Laravel community, so I contribute to that

2:04

framework and kind of like doing all

2:06

things, Ph. And yeah, my main projects

2:08

have been some libraries and some PhD

2:11

libraries. I was also involved early on

2:13

in the Tailwind CSS framework, if you're

2:15

familiar with that, you know, my buddy

2:17

Adam Webin built that. And more recently,

2:20

I have focused on inertia as well

2:22

as a bunch of database stuff. I'm

2:24

a big fan of databases and optimized

2:26

in databases and active record. and so

2:29

I put it a course recently about

2:31

that. So those are kind of the things

2:33

I mostly work on. I work for myself

2:35

outside of that. I run a small SAS

2:37

business, solo SAS, and that's fun. That's pretty

2:39

much me. Awesome. So since we were

2:41

planning to talk about inertia, let's

2:44

go ahead and dive in. What

2:46

exactly is inertia? Yeah. So it's

2:48

always fun when you come up

2:51

with a new project that's a

2:53

little bit different than other things.

2:55

It's certainly one of the most

2:58

challenging things. It's just explaining what

3:00

inertia is. And kind of the

3:02

simplest way to describe it is

3:05

it's a way to build single

3:07

page applications without needing an API.

3:09

rails or layervel and you can

3:11

use classic server side routing, classic

3:14

server side controllers. But the only

3:16

difference is with inertia, there is

3:18

no server side views. All the

3:21

views are done with view or

3:23

they're done in react or done

3:26

using Selt. And what happens is

3:28

you basically return some data from

3:30

our controller and where you normally

3:33

return a view and output that

3:35

data, you instead return a JavaScript

3:37

page component. component being rendered on

3:40

the page instead of like an ERB template

3:42

I guess is what they would be considered

3:44

in rails and obviously that's client side rendered

3:46

so it's not server side rendered but what

3:49

happens is every single time you navigate from

3:51

one page to the next inertia intercepts any

3:53

page clicks so that you don't do full

3:55

page reloads but instead when you click a

3:58

link inertia will intercept that link click And

4:00

instead of doing a full page reload,

4:02

it'll run off to the server, making

4:04

what's called an inertia request, and the

4:06

server will pick it up, say, okay,

4:08

this is the inertia request, and it'll

4:10

fire back the data needed for the

4:12

next page. And the data is the

4:14

JavaScript page component, be view or react

4:16

or whatever, and the data, be view

4:19

or react or whatever, and the data,

4:21

the props or the props for that

4:23

component. which is a feature of all

4:25

three of the popular client-side frameworks view

4:27

reactions felt. So it's dynamically swapped out

4:29

and it's given its new page props.

4:31

And the big, big, big benefit there

4:33

is one, when you're navigating from one,

4:35

so there's like three key benefits. One,

4:37

you're navigating page-to-page, you're now doing full

4:39

page reload, so there's a performance benefit

4:41

to that. Two, when it's doing that

4:43

because you're not doing a full page

4:46

reload, it's not having to reboot, view,

4:48

or react every single time. So it's

4:50

like really like silky smooth kind of

4:52

experience. It's just like a, it's like

4:54

you're working with an SPA, except you're

4:56

just navigating from one page to the

4:58

next and it's just swapping out those

5:00

components, those page components dynamically. And three,

5:02

and I knew this was gonna happen,

5:04

I don't remember my third benefit, but

5:06

oh, the third one's the obvious one,

5:08

you get to build an obvious one,

5:11

you get to build an app, you

5:13

get to build an app using. client-side

5:15

technology. And really, kind of what pushed

5:17

me down this road is I was

5:19

building more like in my applications that

5:21

I built and I build, I always

5:23

use Laravel, which is very similar to

5:25

rails. So for this audience, just kind

5:27

of think of them more or less

5:29

as the same thing. I was, you

5:31

know, much of my apps were starting

5:33

to contain more and more like rich,

5:35

u. You know, more client-side functional, more

5:38

JavaScript requirements to basically make the u.

5:40

doing is I was in my page

5:42

responses I was returning server side render

5:44

view which would then have view components

5:46

mixed into the page so what would

5:48

happen is the response would come back

5:50

from the server then view would kick

5:52

in the gear and any of the

5:54

view components on the page there'd be

5:56

like a little flicker and then they

5:58

would show up, right? And then you'd

6:00

have those individual components would be reactive

6:03

and whatnot, right? And so by going,

6:05

but that kind of comes with a

6:07

whole bunch of interesting problems. I mentioned

6:09

the Flickr and just kind of having

6:11

to manage each one of those separate

6:13

components. So by going to go in

6:15

and manage each one of those separate

6:17

components. So by going in this way

6:19

with inertia, you're really like fully committing

6:21

to client-side render views. That is a

6:23

that is a trade-off. But what that

6:25

is a trade-off. and you can do

6:27

whatever you need to do. And it's

6:30

just a really really nice way of

6:32

working it. Yeah, so that's kind of

6:34

a longer description. I would say that

6:36

like, I definitely built it. for people

6:38

who have traditionally worked with server side

6:40

rendered applications, like frameworks like again, Lairbell,

6:42

Ruby, Jango, that kind of stuff. People

6:44

who are familiar with creating controllers and

6:46

getting data from the database and then

6:48

passing that data to a view, the

6:50

whole paradigm is very very similar and

6:52

much different than the classic, the more

6:54

standard SPA approach where you have some

6:57

separate API, some separate app that provides

6:59

like a rest API or GraphUL API.

7:01

So it's definitely targeted at that audience.

7:03

and kind of as I was I've

7:05

said to people before I kind of

7:07

joke that inertia is like the gateway

7:09

drug to creating single-page applications because if

7:11

you're coming from a monolith background inertia

7:13

just makes it so easy to get

7:15

up and running with creating like what

7:17

essentially feels exactly like a client-side single-page

7:19

app but kind of using the technology

7:22

that you know and love already. Yeah

7:24

I actually find it super interesting I

7:26

mean I've been for at least a

7:28

past day or so kind of checking

7:30

out some of the stuff on the

7:32

site and things like this. And there's

7:34

a lot of it. So it kind

7:36

of sounds just to make sure that

7:38

I understand this the way that I

7:40

think that I understand this. You're more

7:42

or less going to obviously being familiar

7:44

with rails here. You're going to create

7:46

like this kind of high level sort

7:49

of meta layout as you will or

7:51

whatever. And then instead of creating a

7:53

whole bunch of views for all of

7:55

my pages. or whatever, and then I.

7:57

just basically returning. data is Jason. So

7:59

kind of a bit like an in

8:01

line API kind of thing almost like

8:03

I'm just kind of rendering Jason almost

8:05

there. And that's more or less how

8:07

my page is going to run. And

8:09

that's how my back end's going to

8:11

run. And then I basically just have

8:14

a single page app on the page.

8:16

That's it. And all these props get

8:18

passed down. And I just do with

8:20

it what I want to in that

8:22

single page. Yep. So a couple of

8:24

interface as you will, if you will.

8:26

Yes. I like. So a couple of

8:28

a couple of a couple of things.

8:30

React router or view router because

8:32

in a way all inertia is

8:34

is a specialized router like client

8:36

side router that lives between your

8:38

server and your controllers which is

8:41

returning data as Jason and your

8:43

client side page components so it's

8:45

the piece that connects it to

8:47

but unlike with a classic app

8:49

you know with view router react

8:51

router whatever you don't have any

8:53

client side state management at all

8:55

so you're not using any client

8:57

side like VUX or whatever the

8:59

react equivalents are, you're not using any

9:01

of that stuff because all your data

9:04

and all your state is essentially at

9:06

the server. So it's not like you're

9:08

making requests to the API client side,

9:11

saving that in your client side, VUX

9:13

library or database or whatever you want

9:15

to call it, and then rendering components

9:17

based on that. Basically every single time

9:20

you visit a page, the data is

9:22

coming straight from your controller and going

9:24

to your client side page component. question.

9:26

You're going to have a few of

9:29

those from me. So I wanted to

9:31

kind of have a get at this

9:33

and I've been building this view app

9:35

and the way I populate my view

9:38

of view view. It's the accent, isn't

9:40

it? I can't even tell. I think

9:42

I'm trying to make it English. The

9:44

way I populate my component is I

9:46

go off my ERB template downloads and

9:49

then I do a get to get

9:51

the initial data from the page and

9:53

then it drops in when the get

9:55

returns you've got your view building. Yeah.

9:58

Now in the examples on the inertia

10:00

JS site, then it uses Laravel and

10:02

we could take a nice divergence here

10:04

because I'm starting to get Laravel envy.

10:06

Some of the tooling, some of the

10:09

tooling that you show off on the

10:11

inertia JS website, I don't think the

10:13

Ruby or Rails community have, I'm sure

10:15

John, no more, but there's a there's

10:17

a plug-in where you can see the

10:20

database queries being done on that page

10:22

like the sequel. And I sort of,

10:24

oh. would have been useful I mean

10:26

for years if I could just see

10:28

what the what the page was hitting

10:31

you know does that exist for rails

10:33

I'm pretty sure I've seen various things

10:35

and you can definitely see it in

10:37

your logs I know I know I

10:40

can see it in my logs but

10:42

you know I can see it in

10:44

my logs but you know to have

10:46

it have it there you know to

10:48

have it there you know hang on

10:51

I mean maybe I could go find

10:53

this I don't know if it's a

10:55

good use in my time but I'm

10:57

pretty sure that I've seen the rails

10:59

examples on the inertia site. No, I

11:02

didn't actually, no, I didn't find the

11:04

tap. Where's the tab? So every code

11:06

snippet, every code snippet, there is on

11:08

the site. It defaults to Laravel, but

11:10

you can switch it over to rails.

11:13

Oh, no. There's some basic fail going

11:15

on here. No way. So what you're

11:17

saying is you're very appreciative of how

11:19

awesome Laravel is on a Ruby podcast.

11:21

All right. I'll be honest, this is

11:24

not the first time this has happened.

11:26

That's a nice workflow, you know, I

11:28

like the tool. Yeah, I can't find

11:30

this thing you're talking about. I don't

11:32

believe it exists. I'm looking at it

11:35

right now. I'll take a screenshot. Yeah,

11:37

so the tool in Laerville and the

11:39

PSP community, it's called the PSP debug

11:41

bar and there's a Laerville debug bar

11:43

version built on top of that and

11:46

it's fantastic because it's exactly. You can

11:48

figure out all your database query. in

11:50

your logs and whatnot, but what the

11:52

layer of the bug bar does is

11:55

it just puts them right in the

11:57

bottom of your screen, just like a,

11:59

it's almost like a, a chrome console,

12:01

right, where it shows you exactly what

12:03

data. queries you're making and what models

12:06

you're loading from the database and how

12:08

much memory you're using it's super super

12:10

helpful helps you to identify n plus

12:12

one issues and slow queries and stuff.

12:14

Where's my rails debug bar that's what

12:17

I want to know moving swiftly on

12:19

from my basic inability to use a

12:21

website so I was asking about the

12:23

the way you cook it in what

12:25

does for the benefit people who can't

12:28

use website like me how does rail

12:30

send down that lump because there's two

12:32

things aren't there's the kind of layout

12:34

and the props, yes? Yeah, yeah, so

12:36

I'll walk you through that's, I often

12:39

fail to kind of explain this just

12:41

because, you know, you forget sometimes kind

12:43

of where to start after you've talked

12:45

about something for long enough, but so

12:47

what essentially happens, and I'll explain it

12:50

as best I can kind of using.

12:52

rails lingo but I'm not super familiar

12:54

with with at all but like work

12:56

with me so basically request is going

12:58

to come in so through the very

13:01

first time that someone hits your inertia

13:03

application your inertia rails application what's going

13:05

to happen is it's going to notice

13:07

that it's going to notice that it's

13:10

just it's a standard full page visit

13:12

right and what it's going to do

13:14

is it's going to go through the

13:16

normal flow and what it's going to

13:18

do is it's going to return your

13:21

base ERB template so your layout file

13:23

Right in that Leo file, it's just

13:25

like a standard Leo file that has

13:27

your head, which is going to have

13:29

your script tags and it's going to

13:32

have your style tags. Refinance your car

13:34

at Kemba Financial Credit Union for quick

13:36

access to cash. Plus get up to

13:38

$500 next day cash. Enjoy no payments

13:40

for 90 cash. And take no payments

13:43

for 90 days and take advantage of

13:45

cash equity from your vehicle. Apply at

13:47

Kemba.org. Restrict. casino.com. Got it. Step two,

13:49

collect your welcome bonus. Come to Papa,

13:51

welcome bonus. Step three, play hundreds of

13:54

casino style games for free. That's a

13:56

lot of games, all for free. Step

13:58

four, unleash your excitement. free welcome bonus

14:00

now and live the Temple Life. Visit

14:02

chemba casino.com. No purchase necessary v.G.W. group

14:05

void for prohibited by law 21 plus

14:07

terms and conditions apply. Kind of just

14:09

your standard layout. The difference is what

14:11

it's not going to do is it's

14:13

not going to do is it's not

14:16

going to so and keep in mind

14:18

that someone may land on your app

14:20

on any different page. It doesn't have

14:22

to be the home page of course

14:25

the index page. It can be any

14:27

page in your application in your request.

14:29

of that server-side rendered HDML file, it's

14:31

not going to have any page content.

14:33

So the page content will not exist.

14:36

So you landed on, say, the user's

14:38

page within your application. It's not going

14:40

to have a bunch of HDML, server-side

14:42

HDML generated and rendered. What it's going

14:44

to do instead is there is a

14:47

base div that it's going to... that

14:49

you need to put in your base

14:51

layout. And that's the div that your

14:53

client side application is going to mount

14:55

to. So what happens is that base

14:58

div, your client side, app, view, react,

15:00

whatever, mounts to that. But what happens

15:02

is server side, it passes this page

15:04

object. So a Jason and coded page

15:06

object as one of the attributes within

15:09

that div. So I think it's called

15:11

data dash page is the page attribute.

15:13

I should probably double check and know

15:15

that off. I'm pretty certain, yeah, it's

15:17

a data dash page, that's the attribute

15:20

on the div. So imagine a div

15:22

has an idea of app, which is

15:24

what your viewer react apps can amount

15:26

into, and then it has an attribute

15:28

called data dash page, and the contents

15:31

of that data dash page attribute is

15:33

just a string, but it's actually a

15:35

Jason encoded string. And what it's including

15:37

is all the necessary information that inertia

15:40

needs in order to boot up that

15:42

particular client side page component. That's the

15:44

most important things to know are one

15:46

the component name so the component name

15:48

is going to be the view or

15:51

react component page component name So in

15:53

this case it might be the user

15:55

page which is going to have a

15:57

corresponding user page view file or user

15:59

page dot react file and then the

16:02

second piece of information that's going to

16:04

be in that Jason payload is the

16:06

props, which is the data. I call

16:08

them props because they're considered when you're

16:10

working with viewer react. Props are the

16:13

properties, the attributes, the data that gets

16:15

passed to that component. So it's essentially

16:17

the data. So it's essentially the data.

16:19

So it's essentially the data. So if

16:21

you imagine now, if we hit the

16:24

rails app, it's the users page which

16:26

causes the routing to go to the

16:28

users controller. for the users that you

16:30

want to display on that page. And

16:32

then in a classic rails app, and

16:35

jump in if I get any of

16:37

the terms wrong here, Gents, because I'm

16:39

going to use more kind of lingo

16:41

that I know, but what it's going

16:43

to do is normally you would then

16:45

return an ERB template that you pass

16:48

a user index view to. and pass

16:50

the data, which is the users you

16:52

just looked up from the database using

16:54

active record, and that's going to go

16:56

off and generate your HTML. In this

16:58

situation, you would instead return an inertia

17:01

response. But the clever thing about

17:03

the inertia response is, so it's,

17:05

but the clever thing about the

17:07

inertia response is, so it's basically

17:09

the exact same thing. You basically

17:11

return inertia, you pass it the

17:13

name of the page component, and

17:15

you pass it. Nursia takes care

17:17

of that. All the controller has

17:19

to do is return the page

17:21

component name, so the client side

17:23

page component name, and the data

17:25

for that component. Then the Nursia

17:27

behind the scenes, it inspects the

17:29

request and says, okay, was this a

17:31

full page? visit, you know, so where

17:33

we need to display the layout. Well,

17:35

if that's the case, well, then we're

17:37

going to display the layout, we're going

17:39

to render it server side, and we're

17:41

going to inject that base div with

17:43

the ID of app and with the

17:45

data page attribute with all the data

17:47

page attribute with all the data for

17:49

it, the data page attribute with all

17:51

the data for it, and then we're

17:53

just going to render it, so if

17:55

you go then and click to a

17:57

different user, you want to view the

17:59

user. What inertia does is it intercepts

18:01

that click, that page visit. And it

18:03

then makes the XHR request to the

18:05

server. It's going to hit in the

18:08

exact same way. Now imagine it's going

18:10

to hit your user's controller again, but

18:12

this time it's going to hit the

18:14

show method. So again, what would you

18:16

do just in a standard layer or

18:18

standard layer of rail or rails app

18:20

is you go off, you'd get that

18:22

user from the database, use an active

18:24

record, right? And then you would normally

18:26

just return a response to show the

18:28

user show page component. client-side page component

18:31

and the data which would be the

18:33

user data maybe their ID and their

18:35

first name their email and their last

18:37

name and whatever else right so when

18:39

that request comes through the XHR request.

18:41

What inertia does is it passes through

18:43

an X inertia header which is set

18:45

to true so that your rails app

18:47

knows that this isn't a full page

18:49

reload. This is like an inertia request.

18:51

So it's an XHR request. And what

18:54

it does instead is it returns not

18:56

the full body and the full layout

18:58

and everything else. It just returns the

19:00

Jason data that it will be put

19:02

in the data page attribute if it

19:04

was like the full. you know, HDML

19:06

layout render kind of on the first

19:08

visit, except it just returns the Jason

19:10

and nothing else. And it returns out,

19:12

obviously, is the Jason response, which that's

19:14

going to have your component name and

19:16

all your props. And then kind of

19:19

getting back to what I explained earlier,

19:21

and Nersha is going to then take

19:23

that, it's going to then take that,

19:25

it's going to the user in the

19:27

browser, it's going to look like you

19:29

went to a whole new. page, but

19:31

the reality is it's just done some

19:33

really nice magical work in the background

19:35

to just kind of flip it for

19:37

you. And then of course, like I

19:39

said, inertia is essentially in its simplest

19:42

form. It is a client-side routing library.

19:44

So it's going to update your URL

19:46

in the browser and it's going to

19:48

update the necessary page state so that

19:50

you have like, you know, proper history

19:52

and stuff so you can navigate back

19:54

and forth and stuff like that. That's

19:56

kind of like the trickiness that we

19:58

do, but the reality is from a

20:00

development experience for people who are using

20:02

rails or layer of all who are

20:05

kind of used to working with that,

20:07

hey, I got a controller, I got

20:09

a controller method, I got to get

20:11

some data from the database, and I

20:13

got to return a view with some

20:15

data, with some data, with some data,

20:17

with some data, with some data, with

20:19

some data, with some data, with some

20:21

data, with some data. Right. There is

20:23

a, this is the, this is the

20:25

key component I was missing. There is

20:27

an inertia under school rails gem that

20:30

does it for you. Yes, yes, I

20:32

should have mentioned that probably too. Yes,

20:34

so you don't gonna do any of

20:36

this work. This, like I said, when

20:38

inertia does all the magical work for

20:40

you, it's actually, and when I say

20:42

magical, it's really not, it's not magical

20:44

at all. It's, in its most basic

20:46

form, it's imagine this, you have, Yeah,

20:48

if it is, then return Jason instead

20:50

of HTML. It's like literally that basic.

20:53

And there is, you know, some other

20:55

interesting features that kind of go along

20:57

with it, such as automatic asset refreshing

20:59

and partial reload. So it does get

21:01

more complicated. But in its basic form,

21:03

like in partial reload, but in its

21:05

basic form, like I tell people that

21:07

if you didn't have the gem, like

21:09

so we do have an official inertia

21:11

gem for rails and we also have

21:13

an official layer of package for other.

21:16

languages and frameworks and it's in its

21:18

most basic form it really does not

21:20

take that much. We actually have a

21:22

page that kind of explains a spec.

21:24

I kind of call it a protocol

21:26

because in a way that's really what

21:28

it is. And as long as you

21:30

implement that protocol, which is a very

21:32

simple protocol, you can do this in

21:34

other language. I tell people, I've literally

21:36

seen this done. Somebody reached out and

21:38

they had done this in cold fusion.

21:41

I didn't even know cold fusion was

21:43

still a thing, but somebody has created

21:45

an inertia cold fusion adapter and there's,

21:47

I know there's been one creative for

21:49

Jango and all kinds of other frameworks

21:51

now. The challenge for me as a

21:53

library for me as a library maintainer

21:55

is a library maintainer is normally. Anytime

21:57

I've created libraries, I've always worked with

21:59

the language that I'm familiar with. I've

22:01

worked with PhD in Laravel, and it's

22:04

not been that, or even JavaScript, and

22:06

it's not been that hard making the,

22:08

you know. maintain the library. The challenge

22:10

with inertia is I'm finding myself becoming

22:12

more proficient in other languages and frameworks

22:14

because in order to maintain the rails

22:16

adapter, I got to now be more

22:18

of a Ruby expert. I'm anything but

22:20

an expert. I shouldn't even think about

22:22

an expert. I shouldn't even think about

22:24

an expert. I shouldn't even said that.

22:27

But like I got to know the

22:29

basics of those frameworks, I'm anything but

22:31

an expert. I shouldn't even said that.

22:33

But I shouldn't. kind of piece because

22:35

they're all they kind of got little

22:37

differences the way they do dynamic component

22:39

swapping the way they do data handling

22:41

the way they do reactivity all that

22:43

stuff is it's a little bit different

22:45

each one of those client side framework

22:47

so that's kind of like really the

22:49

heart of my job and even there

22:52

I actually have somebody who's helped on

22:54

the project one guy who's managing the

22:56

so I managed to view adapter another

22:58

guy manages the react adapter an app

23:00

with inertia? Why am I making an

23:02

app with inertia? Like where do you

23:04

see inertia kind of fitting into the

23:06

space and what kinds of apps are

23:08

we using it for? Things like that.

23:10

Yeah, that's a really good question to

23:12

ask because I think it's important. I

23:15

think it's important. I think sometimes what

23:17

happens is people come out with new

23:19

projects and I think people like the

23:21

idea of saying, well, this, whatever this

23:23

new piece of technology is, this is

23:25

now the one way to do all

23:27

the things. And if it doesn't do

23:29

everything, well, then we don't like it,

23:31

yeah, we get disappointed if it isn't

23:33

appropriate for all use cases. And I'm

23:35

generally like slow to say, use the

23:38

right tool for the job, because I

23:40

find quite often we're just most effective

23:42

using the tool we know, and that's

23:44

tends to be what's worked out better

23:46

for me. I know that, you know,

23:48

yeah, I know that elixir might be

23:50

better or note might be better for

23:52

creating certain apps nowadays, but I'm just.

23:54

so stinking fast with Larabelle that I

23:56

just I use that because it's a

23:58

tool I know and love but I

24:01

do I will say that kind of

24:03

in response to that question I do

24:05

think that inertia is super suited super

24:07

well suited for some situations and not

24:09

others so the one that it's not

24:11

well suited for is in the situation

24:13

where it actually does make sense to

24:15

make a full on API so if

24:17

it makes sense for you to have

24:19

a full rest API and a full

24:21

graph Quel API then inertia may be

24:23

not the right the right choice because

24:26

with inertiaa like my goal with this

24:28

is to avoid you having to create

24:30

this whole separate project, this whole separate API,

24:32

figuring out all the authentication, figuring out all

24:34

the old off stuff and all that hoopla

24:36

and the separate hosting account and everything else.

24:38

Like my goal is that I just want

24:40

to build an app, I want to build

24:43

an app, I want to build an app,

24:45

I want to get some data from the

24:47

database, use an active record, like my goal

24:49

is that I just want to build an

24:51

app, I want to get some data from

24:53

the database, use case, use case, that you

24:55

really, that you really truly, that you really

24:58

truly, app and maybe you have native desktop

25:00

applications or whatever if you have that use

25:02

case then inertia may not be the right

25:04

choice because it might just make sense in

25:06

that situation to actually just go off and

25:09

build that whole API. But in my experience

25:11

there's a ton of applications that get built

25:13

and I would say like especially like a

25:15

lot of just like business level applications that

25:17

never ever go past being a web app.

25:20

That's what they always are. So yeah, is

25:22

there a chance that it could eventually need

25:24

an API? Sure. But so often you don't

25:26

need that. And you know what? You

25:28

think about any application that's built with

25:31

just classic layer of L and built with

25:33

just classic rail and built with just classic

25:35

rails, using classic rails, using classic rails, using

25:37

classic rails, service side rendering, you've already said,

25:39

this is the web app. And if I

25:42

ever need an API, well, then I'm going

25:44

to go off and build a separate and

25:46

build a separate rendered application, already given, you've

25:48

already said no to the API. So my

25:51

thing here is I really wanted inertia to

25:53

be for those developers. Those who said, you

25:55

know, I want to build a server-side application,

25:57

I was going to build it with Larabel.

26:00

or I was going to build with

26:02

rails using the standard monolith approach. I've

26:04

already decided I'm not going to build

26:06

an API. Well, then inertia is a

26:08

wonderful fit because then it allows you

26:10

to build a rich client-side application using

26:12

viewer react will still completely working within

26:15

the paradigm, the monolith approach that you

26:17

know. And you can. It is Ryan

26:19

Secrest here. There was a recent social

26:21

media trend which consisted of flying on

26:23

a plane with no music, no movies,

26:25

no entertainment, no entertainment, no entertainment, no

26:28

entertainment, no entertainment, Chumpa Casino has over

26:30

a hundred online casino style games, all

26:32

absolutely free. It's the most fun you

26:34

can have online and on a plane.

26:36

So grab your free welcome bonus now

26:38

at Chumpa Casino.com. Sponsored by Chumpa Casino.

26:45

can be really really really fast with that

26:47

approach and in my experience as well I

26:49

have built applications that use inertia as kind

26:52

of the the web app tool and even

26:54

in those applications I've had like my own

26:56

application I do have an iOS and Android

26:58

app that I'm building right now but the

27:01

iOS and Android app is so simple compared

27:03

to the web app because that's what makes

27:05

sense for my business that I didn't Even

27:07

then, I still went in my layer of

27:09

the app and I just built a really

27:12

light rest API for my native iOS and

27:14

Android apps. I still didn't need to fully

27:16

double down and make my whole web app

27:18

run on this API. It still made sense

27:21

to build a web app using reactor view

27:23

and inertia without an API. and then literally

27:25

I have like five endpoints five API endpoints

27:27

for this core functionality that I'm making available

27:30

natively to to iOS and Android so I

27:32

hope that kind of explains it so that's

27:34

really I would say the reality is there

27:36

are probably a ton of situations basically any

27:38

time you were planning on building just a

27:41

classic rails application that's a good use case

27:43

for an inertia app if you have any

27:45

sort of more interesting client side needs and

27:47

by that and this is maybe the last

27:50

distinction I should make I wouldn't personally use

27:52

inertia for anything that needs to be public

27:54

facing. So that's, and the reason why is

27:56

inertia is still a client side rendered. application,

27:59

meaning it doesn't work great from an SEO

28:01

perspective. Yes, Google is getting better at indexing,

28:03

view and react apps, it is, and it

28:05

probably only will continue to get better. But

28:08

I think if I was building an application,

28:10

if I was building a blog, if I

28:12

was building a blog, if I was building

28:14

a blog, if I was building a news

28:16

site, or if I was building a news

28:19

site, or if I was building a news

28:21

site, you need to log in, all those

28:23

kind of tools. And one great use cases,

28:25

I've done this as well, is you could

28:28

absolutely say build a rails application that's completely

28:30

server side rendered for your public facing pages,

28:32

be it a, maybe you're building a SAS

28:34

app, you have a bunch of documentation that

28:37

you want to make sure it's SEO friendly,

28:39

you have your pricing page and your about

28:41

page and all those feature pages, you could

28:43

build all that stuff using rails with classic

28:45

server side rendering, while still having the application

28:48

in the application in the background for the.

28:50

So SAS application be an inertia application, but

28:52

that's only available after you log in. And

28:54

that's a really common combo where you use

28:57

server side rendering on the front end and

28:59

you use inertia and client side rendering on

29:01

the back end. Can we talk about the

29:03

flicker? Yes. So the simple answer is there

29:06

is no flicker. No flicker at all. That's

29:08

why it's so wonderful. So there was a

29:10

flicker building it the old way. So the

29:12

old way I do this. classic server-side rendering

29:14

in layer bell, which would return my full.

29:17

document, which would have all the page content,

29:19

but somewhere in the page. So imagine it's

29:21

maybe like a create user page, and maybe

29:23

I want to create the form to create

29:26

the user, maybe I want to build the

29:28

user, maybe I wanted to build that in

29:30

view, because I like the reactivity of it,

29:32

I like being able to handle errors, and

29:35

everything else, just kind of using that, I

29:37

like being able to handle errors, just kind

29:39

of using that, like being the handle errors,

29:41

just kind of using just kind of using

29:44

that, like being the handle errors, like being

29:46

able to handle errors, like being the handle

29:48

errors, and everything else, just, just, like being

29:50

the handle errors, just, like being the handle

29:52

errors, like being, like being the handle errors,

29:55

like being, like being the handle errors, like

29:57

being the handle errors, like being the handle

29:59

errors, like being, like being, like being, like

30:01

being, like being, like being the handle errors,

30:04

like being the handle errors, like being, like

30:06

being the handle errors, just, just notice it

30:08

when that component takes no space at first

30:10

but then then it renders and it takes

30:13

a bunch of space and kind of like

30:15

causes the page to become longer and you

30:17

know things move around and and you and

30:19

if you have a lot of view components

30:21

maybe you have a drop-down component or modal

30:24

or different things like this that problem just

30:26

becomes worse and worse where with inertia that

30:28

totally totally goes away because you're getting exactly

30:30

what you'd have with like a classic view

30:33

or rails or a view or react app

30:35

where when you go to visit another page

30:37

it's gonna just render that new view component

30:39

and nothing's getting destroyed in the in between

30:42

because you're not doing a full page reload,

30:44

view and react are long living. So when

30:46

I go to the next page, it's going

30:48

to load that file in the background. It's

30:50

going to load the data in the background

30:53

via that Exeter request and then when it's

30:55

ready, it's going to swap it out. And

30:57

you know, there's ways to have loading graphics

30:59

and stuff. from between that, but the point

31:02

is nothing's being destroyed when you go from

31:04

one page to the next that's causing any

31:06

sort of flicker. It's really, really smooth. So

31:08

you sound like you care a lot about

31:11

kind of responsibility and user experience, yes? Very

31:13

much so. Let's talk milliseconds here. Let's talk

31:15

some real numbers because I can say, we

31:17

could take an enormous effort into kind of

31:20

making this to help people improve the experience

31:22

of their users. for so what looks like

31:24

good load page for you? Yeah so my

31:26

goal generally on a regular web app is

31:28

200 milliseconds or less if I'm building a

31:31

new application that's really what I'm going for

31:33

now that's what I would consider like a

31:35

typical server response but as you know there's

31:37

more that goes into a website loading than

31:40

just your server response you also have your

31:42

client's side the time that it needs to

31:44

render there the time that it needs to

31:46

actually painted it and JavaScript bundles and different

31:49

things like that so Yeah, for me, this

31:51

is honestly, this is one of the reasons

31:53

why I like this approach so much is

31:55

because I've been very frustrated in the past

31:57

building rest APIs or even GraphQL. GraphQL is

32:00

amazing, but you can run into performance issues

32:02

really easy with GraphQL if you're not careful.

32:04

You can run into N plus one issues.

32:06

just depending on the sort of graph of

32:09

data you're returning, it can be tricky from

32:11

a performance perspective in real applications to have

32:13

every response from your API be really quick.

32:15

And that's because these APIs, especially arrest API,

32:18

is generic. It's generic because it needs to

32:20

work for multiple different, any application that wants

32:22

to consume that that API. The wonderful thing

32:24

about rails and the wonderful thing about layervel

32:26

is that every single control or method you

32:29

are going to get the data exactly as

32:31

you need it for that page. There's no

32:33

there's no generalized API there. It's like, okay,

32:35

I'm displaying the user's page. I want to

32:38

go to the database and I want to

32:40

get these 10 users, if it's paginated, for

32:42

example, and I want to get their name

32:44

and I want to get their ID and

32:47

I want to get their email address and

32:49

maybe I want to either load their company

32:51

along with it. So what inertia, and this

32:53

isn't really an inertia feature, this is really

32:56

an inertia feature, this is really an inertia

32:58

feature, this is really just a rails, this

33:00

is like a monolith feature, this is like

33:02

a monolith feature, it's like a monolith feature,

33:04

for exactly what's needed. monolith apps in general,

33:07

because I feel like that that approach just

33:09

leads to fast applications. And I've talked, you

33:11

know, I mentioned earlier that I'm, I love

33:13

databases and I love writing, learning how to,

33:16

you know, kind of make the most of

33:18

the database, create proper indexes, and return the

33:20

most of the database, create proper indexes, and

33:22

return the minimal amount of data, and run

33:25

the fastest queries, which would be the inertia

33:27

response. But then there's also this whole client

33:29

side. performance side of things. So let me

33:31

talk briefly about that as well, because that

33:33

is absolutely a tradeoff you get when you

33:36

build a client side application. So one of

33:38

the tradeoffs we've talked about already is you,

33:40

the STO tradeoff. If SEO is important to

33:42

you, probably not going to make sense to

33:45

build a fully client side rendered application, unless

33:47

you have some sort of server side rendering

33:49

in place. And there's all kinds of fancy

33:51

tools nowadays even to do that with JavaScript

33:54

stuff, but you know what I'm saying. If

33:56

SEO is. you're not going to want to

33:58

have client-side rendering as your primary way. So

34:00

the other tradeoff is that you now need

34:02

to send all that to all your client-side

34:05

views, so all your page components, all your

34:07

view components, all your view components, or your

34:09

react components, or your spell components, they all

34:11

need to now be sent over the wire

34:14

as JavaScript bundles to the client, right? So

34:16

inertia, what it does, and this is kind

34:18

of like a really just, I think a

34:20

cool feature, a cool feature is it will.

34:23

automatically like it makes you can use because

34:25

it is just really a plain old regular

34:27

view or react app it supports code splitting

34:29

so if you use code splitting what happens

34:31

is you land on the very first page

34:33

so maybe you know going back to our

34:35

example from earlier let's say you hit for

34:37

the very first page the user index page

34:40

what it's going to happen in inertia app

34:42

is it's going to go and get whatever

34:44

only the minimal amount of JavaScript that's required

34:46

to display that page so it's going to

34:48

get your typically a kind of like your

34:50

core bundle, which is going to have like

34:52

view or react, and maybe some like core

34:54

dependencies that are used kind of by, you

34:56

know, all pages on the site. So it's

34:58

going to grab that core bundle, which is

35:00

small, because it doesn't have all

35:02

the pages, through all, because it

35:04

doesn't have all the pages, through

35:06

your whole applications, just small, because

35:08

it doesn't have all the pages

35:10

through your whole applications, just, because

35:12

it doesn't have all the pages

35:14

through your whole applications, to not

35:16

go off. download it again. So

35:18

what that practically means is you

35:21

hit an inertia endpoint, it's gonna...

35:23

it's going to only get the

35:25

minimal amount of JavaScript that you

35:27

need to actually display that page,

35:29

and it's going to get the minimal

35:31

amount of data from the server, because that's

35:33

the way a rails app works, and the

35:35

page can load like loads extremely quick. So

35:37

I actually have a demo app if you

35:39

want to try it. If you call the

35:42

demo app, if you want to try it.

35:44

If you call the demo app, if you

35:46

want to try it. If you call it,

35:48

if you want to try it. If you

35:50

want to try it. cost insane having a

35:52

one-off linod or digital ocean dine, you know,

35:55

server because one, for one, the database is

35:57

a post-crest database which is not hosted on

35:59

the same. site as the actual web dino.

36:01

So there's always a performance cost that

36:03

comes with that, which often, you know,

36:05

of course, makes sense if you want

36:07

to have multiple web dinos and whatnot.

36:09

So I've posted it that way because

36:11

I feel like that's a good representation

36:13

of a real life application. And most

36:15

responses from the server come back in

36:17

about 100 milliseconds. And I think, you

36:19

know, that's a pretty awesome experience. I've

36:21

tried it. It is disgustingly quick. That's

36:23

what I want to hear. For me,

36:25

in the UK, it comes back in

36:27

well under 100, well under 100, to

36:29

the extent that I'm quite suspicious that

36:31

you're loading the next page in the

36:33

background. Is it actually that you mentioned

36:35

the base? 100% absolutely it is. Yep,

36:37

absolutely it is hitting the database. And

36:39

that's interesting. You mentioned that because it

36:41

is. a JavaScript application, there is really

36:43

some cool opportunities to even do stuff

36:45

like that. So if you hover over

36:47

a link for more than a certain

36:49

period of time, go off and eager

36:51

load that data. And even if you

36:53

don't want to eager load the data,

36:55

what we can do is either load

36:57

the data. What we can do is

36:59

either load the next JavaScript page component

37:01

that that that link would require. So

37:04

even if you are using code splitting,

37:06

we can be smart about eager loading

37:08

that next page component that you may

37:10

want to click to. So yeah, that's

37:12

a kind of the neat thing. React

37:14

app, you kind of get some of

37:16

the cool things that you can do

37:18

with those pieces of technology as well.

37:20

I've been working on another feature that

37:22

even allows you to do kind of

37:24

like placeholder pages. So if you were

37:26

to click on a, if you were

37:28

on the user index page and you

37:30

were to click on the user index

37:32

page and you were to click on

37:34

the user, like a show user, user

37:36

page, I've got a working prototype where

37:38

it could show kind of like a

37:40

shell of the show user page, while

37:42

inertia, and these are like. It's not

37:44

necessarily something, so the inertia, so the

37:46

Pink CRM demo doesn't do any of

37:48

that, but I just think it's neat

37:50

that if you had an application that

37:52

you were that concerned about the user

37:54

experience and you just really wanted to

37:56

show something right off the bat when

37:58

someone clicked a link to view a

38:00

new page, that inertia allows you to,

38:02

will allow you to do it. that

38:04

technically doesn't allow you to do that

38:06

yet, but that's something I'm working on.

38:08

Yeah, I certainly like speed, but I

38:10

certainly don't get as excited necessarily as

38:12

other people do about speed, but I

38:14

know that a lot of people do

38:16

care about it. I think the thing

38:18

that's most interesting here is, so I

38:20

know that it might be heresy, but

38:22

I for a long time have have

38:24

more or less said that to me,

38:26

the controller in NBC, right, really is

38:28

an API provider and you're just consuming

38:30

that API with your view. And that's

38:32

sort of like the typical way that

38:34

people use it. And so I think

38:36

that inertiaia like just kind of leverage

38:38

is that in my mind, you're just

38:40

leveraging that and making it really easy

38:42

for people who were just used to

38:44

using views to just be like not

38:46

have to think about it. Yeah, it's

38:48

an awesome evolution in my opinion. Yeah,

38:50

I love that comment. that comment that

38:52

it's just essentially an API it is

38:54

that the difference is with a rails

38:56

or layer of app you've accepted that

38:58

there is this type it is Ryan's

39:00

secrets here there was a recent social

39:02

media trend which consisted of flying on

39:04

a plane with no music no movies

39:06

no entertainment but a better trend would

39:08

be going to chumba casino.com it's like

39:10

having a mini social casino in your

39:12

pocket chumba casino has over a hundred

39:14

online casino-style Welcome bonus now at Chumba

39:16

Casino.com. Sponsored by Chumba Casino. coupling

39:22

between this back end controller and the front

39:25

end view. That's just an accepted, you know,

39:27

and you know, some people would say, well,

39:29

that coupling is bad because now I can't

39:31

use the send point for other things. And

39:34

I say, no, actually that coupling is awesome

39:36

because one, it makes it really fast. You

39:38

can create these these applications really quickly and

39:41

you can optimize them from a performance perspective

39:43

because you're only worrying about this one request.

39:45

30 possible different permutations. It's just one request

39:47

that you're concerned about. Absolutely. Really, the only

39:50

benefit to thinking about it that way is

39:52

when you're suddenly ready to break the rules,

39:54

right? So, yeah, awesome. Anything else that we

39:57

should know about inertia that you, you're just

39:59

like having to. about this, you guys should

40:01

be thinking about this. Yeah, so yes, there's

40:03

maybe a couple different things that I think

40:06

inertia does really well and stuff that I'm

40:08

even approving on is one is scroll management.

40:10

So what happens by default, when you browse

40:13

from one, by default, when you browse from

40:15

one page to the next, when you browse

40:17

from one page to the next, just using

40:19

like standard normal, plain old website, and you

40:22

scroll down and you visit the next page

40:24

and you visit the next. maintain context, right?

40:26

Which is a really nice thing. Inertia allows

40:29

you to do that because that basically is

40:31

for free out of the box if you

40:33

just do a standard page. But where it

40:35

becomes tricky, and this is becoming more and

40:38

more common, is people have like essentially what

40:40

are considered like scroll areas within your UI.

40:42

So one really common use case for this

40:45

is imagine you have kind of like your

40:47

standard layout, left hand side is your navigation,

40:49

and the right hand side is your content,

40:51

and maybe want to scroll the content but

40:54

not have your left-hand nav change or maybe

40:56

the other way around maybe when you scroll

40:58

the content and you want your left-hand nav

41:01

to follow with you or whatever right so

41:03

you do this using scroll areas you know

41:05

overflow auto and stuff with CSS to kind

41:07

of allow that sort of functionality and yeah

41:10

so that's a very common thing with like

41:12

modern applications especially I would say like yeah

41:14

more application style websites so that kind of

41:17

like goes out the window when you're using

41:19

scroll areas like that is scroll position management

41:21

So if you were to do that and

41:23

you would go to visit the next page

41:26

and you go back, the browser has no

41:28

idea that you were scrolled in this container

41:30

down 300 pixels. It's like... don't care, not

41:33

by problem. All it cares about is restoring

41:35

the body scroll position. So inertia, we have

41:37

support for basically automatically, automatic scroll restoration of

41:39

containers as well. And you can, and you

41:42

don't have to, that doesn't happen to all

41:44

containers, you can actually define on a per

41:46

container basis, like inertia track the scroll position

41:48

for this. And that's like a really, really

41:51

nice feature that you basically. Yeah, so that's

41:53

one. Another thing that inertia does really well

41:55

is asset versioning. So this is a problem

41:58

that a lot of people run into with

42:00

modern client-side rendered applications is imagine you have

42:02

a user right and they go to your

42:04

application they go to your website and they

42:07

click through a few different pages and while

42:09

they click, you know, maybe they're on the

42:11

user's page and then we end the user's

42:14

show page. And right at that moment, you

42:16

had to fix a bug or do something

42:18

in that template and you redeployed it. So

42:20

you were deployed those assets to the server.

42:23

The problem is, right now, is with a

42:25

typical client side rendered application, is you now

42:27

go back to visit that user index page

42:30

because it's not doing a full page reload.

42:32

There's no way for the browser to know

42:34

that maybe that user index page template changed.

42:36

So they're going to see the old page

42:39

template, which might be fine or it might

42:41

not, because you might be expecting data from

42:43

back from the server that's now out of

42:46

sync with your template. You remember expecting data

42:48

from the server that's now out of sync

42:50

with your template. You remember that type coupling

42:52

with your template. And it would be expecting

42:55

data from the server that's now out of

42:57

sync with your template. You remember the type

42:59

of the user index page template, the user

43:02

page template, never have to worry about if

43:04

you're using server-side render views because when you

43:06

go to the new page, just doing a

43:08

full page reload, you're getting a full page,

43:11

all the new assets, everything else. So what

43:13

inertia does is we have like, and there's

43:15

like, there are ways to solve this with

43:18

client's side, like, like, there are ways to

43:20

solve this with client's, like, classic, like, there

43:22

are ways to solve this with client's, like,

43:24

classic, like, like, there are ways to solve

43:27

this with client's, like, like, like, like, like,

43:29

like, like, like, like, there are ways to

43:31

solve this, like, like, like, like, like, there

43:34

are ways to solve, like, like, like, like,

43:36

like, like, like, like, like, there are, there

43:38

are, there are, there are ways to solve,

43:40

like, like, like, like, there are, like, like,

43:43

there are, like, there are, there are, there

43:45

are, there are, that's the real benefit because

43:47

we can now let the server and the

43:50

client side frameworks and essentially what it is

43:52

is it's a service side inertia adapter working

43:54

with the client side inertia adapter and they're

43:56

working together to make sure that things are

43:59

working properly so what happens is every single

44:01

time you make an inertia visit we keep

44:03

track of you know what let me back

44:06

up before I even go there might be

44:08

easier if I explain it this way when

44:10

you define your inertia setup in rails, you

44:12

have the option on every single page, like,

44:15

you know, kind of like, does, does rails

44:17

have this concept of like some sort of

44:19

like base, like application service provider where you

44:21

do kind of like default work, could it

44:24

like happen to like a middleware or just

44:26

like kind of like something that gets run

44:28

on every single page request, is that's, I'm

44:31

sure, middleware, right. So imagine, I forget exactly

44:33

how. the gents who put together the inertia

44:35

rails adapter did this but just imagine that

44:37

somewhere in your inertia configuration in your rails

44:40

application you basically say this is the version

44:42

of my assets. Your assets being your JavaScript

44:44

basically could also be your your CSS. So

44:47

yeah, so you you have some sort of

44:49

version number that indicates the current version of

44:51

your assets like the way I do it

44:53

in Laerville is I literally just do I

44:56

just get an MD5 of the assets and

44:58

and if it changes it changes it changes.

45:00

So what you do is you say inertia

45:03

version and you pass it the current version

45:05

and you pass it the current version and

45:07

you pass it the current version and that

45:09

happens on every single request. So I've talked

45:12

about this page object that gets passed around,

45:14

which includes the component name and the props.

45:16

Well, another property in that page object is

45:19

the asset version. So the client side, inertia,

45:21

always, so the client side, inertia, always knows

45:23

what the current version, always knows what the

45:25

current version of the current version of your

45:28

assets are. So then, when you now click

45:30

from one page to the next, you want

45:32

to go to the user index page and

45:35

the data for the index page, page, inertia

45:37

automatically passes what it believes is a current

45:39

version to rails. Then rails, the rails inertia

45:41

adapter says, okay, I got this request coming

45:44

in, it's saying that the current asset version

45:46

is 123, but we can see now that

45:48

it's a new deploy is happened in the

45:51

new asset version that is actually 456. And

45:53

what inertia does is it actually stops the

45:55

request at that point, and it then gives

45:57

returns a four, I believe it's, I think

46:00

it's, it returns, so imagine this XHR request

46:02

gets an immediate. 409 conflict response back from

46:04

rails and then what happens is inertia gets

46:07

that 409 conflict response back and it says

46:09

oh assets are out of date so when

46:11

inertia then does it automatically does not an

46:13

XHR request to that page. So going from

46:16

the user show page to the user index

46:18

page, it's going to say the assets are

46:20

out of date because the server just told

46:23

me that. And it just cuts that XHR

46:25

inertia request short. And it now does an

46:27

automatic full page visit to the user index

46:29

page. And then because you're doing a full

46:32

page visit. you have the opportunity to use

46:34

cash busting to reload your assets and you're

46:36

right back in business. So for the end

46:39

user, it does mean that they'll have to

46:41

redown all those assets, of course, but that's

46:43

what you want because otherwise you want to

46:45

deploy them. So they can continue browsing your

46:48

inertia, like they can continue browsing your inertia

46:50

app like a classic, or they want, because

46:52

otherwise you want to deploy them. So they

46:55

can continue browsing your inertia app like a

46:57

classic app, we make that request, do that

46:59

409 response, and like we automatically reflash data.

47:01

So if there was any, if you had

47:04

any flash data that was going to be

47:06

used, it automatically reflash does that. So even

47:08

though you're doing a full page reload, you're

47:10

going to still get that flash data come

47:13

available. So that's a really, really, really cool

47:15

feature of inertia that is like, I think

47:17

it would be harder to do with a

47:20

classic SBA, but because of the way that

47:22

the client side and service side adapters adapters

47:24

work, work, work, work, refreshing and asset versioning.

47:26

Like you literally all you have to do

47:29

is tell server side tell inertia what the

47:31

current version of the assets are and you're

47:33

done and it handles it. which is also

47:36

really nice from a development perspective because if

47:38

you're developing you're constantly changing your files and

47:40

a nurse you don't have to like constantly

47:42

hit refresh you can just click a link

47:45

and it'll just update automatically for you. No

47:47

I agree that is super cool I mean

47:49

to be frank I've been used to rails

47:52

handling asset management to me for so long

47:54

that it is frustrating every time that I

47:56

have to deal with it because I just

47:58

at this point in my development career I

48:01

just think that I shouldn't have to deal

48:03

with it because I know exactly. I literally

48:05

could not. I mean, shoot. We didn't even

48:08

have that problem in rails one because we

48:10

weren't serving assets on the project that I

48:12

was working on. Yeah. Yeah. Just it was

48:14

so long ago. Yeah. And there's there's some

48:17

really the last thing you so the last

48:19

thing I want to just mention. about inertia

48:21

that we kind of didn't talk about yet

48:24

and is the fact that inertia visits are

48:26

not limited to get requests. So you can

48:28

make inertia visits for post requests, put

48:30

requests, patch requests, and deletes as well.

48:32

And this is really cool. And it's

48:34

kind of a complex thing to explain

48:37

maybe on a podcast, but what it

48:39

does is it makes forms a lot.

48:41

more like classic rails form submissions, except

48:43

it's all done by XHR and it's

48:45

like it's like the most wonderfully simple

48:47

thing ever. So I'll explain kind of

48:49

how it works real briefly in layer

48:52

bell and then you guys hopefully can

48:54

kind of hopefully it'll make sense in

48:56

rails as well. So what you do

48:58

is if you have a form, say

49:00

a view form with all the reactive inputs,

49:02

right? And then you then a user presses

49:05

submit so to submit that data to the

49:07

form. you know down to the server in

49:09

that situation you would still submit that using

49:11

inertia so what you would have is you'd

49:14

have a submit interceptor right where you prevent

49:16

the default browser full page submission and then

49:18

you would say so imagine we're on the

49:20

create user page right and you hit create

49:22

user hit the button the form submits we

49:25

catch it and then in your JavaScript in

49:27

your view page component or in your react

49:29

page component whatever you would then say

49:31

inertia dot post, or we're creating a

49:34

user, yet post, and you would say,

49:36

we're going to post that to slash

49:38

users and pass in the data from

49:41

that component. So it's just like literally

49:43

a one-liner. But you don't then do

49:45

a bunch of work after that. You

49:48

don't say, well, give me the response

49:50

back and let me inspect the response

49:52

back and let me inspect the response

49:55

to see if there's, well, give me

49:57

the response, and let me inspect the

49:59

response, there's a happy path the user

50:01

was created and there's the unhappy path

50:03

there was a validation error service I

50:05

validation error so do happy path first

50:08

user you hit the user create page

50:10

or the user store end point so

50:12

that controller end point to store the

50:14

user validation all passes it creates the

50:16

user and then server side in that

50:18

XHR inertia request you then just do

50:20

a classic redirect to wherever you would

50:22

have normally gone. You would, if it

50:24

was just like a regular standard full

50:26

page application, you would just do a

50:28

redirect to wherever you want that user to

50:31

go after they created the user. So maybe

50:33

you send them to the user show page

50:35

at that point, right? So what you would

50:37

do, you would do the same thing with

50:39

inertia. You'd literally just say, however, in rails

50:41

or in layerbell, you return a redirect to.

50:44

that new user's page. So then that redirects

50:46

going to happen within that XHR request. And

50:48

what's going to do is it's going to

50:50

go now to that show user page. And

50:52

that show user page is going to load.

50:54

Keep in mind, this is all happening within

50:57

the initial inertia, the initial inertia post request.

50:59

So that redirects happening, you're now landing on

51:01

the user show page and it's just giving

51:03

you a response. But it knows that it

51:06

wasn't an inertia request because that X

51:08

inertia header actually gets forwarded on. when

51:10

that redirect happens. And then on the

51:12

user show page, it just returns, because

51:14

it knows it's an inertia request, it

51:16

just returns the the the Jason payload

51:18

back, which includes the the page component

51:20

name and the page data, which would

51:22

be the show user page and the

51:24

user data for that page. So that

51:26

all then comes back to your create

51:28

user. Hello, it is Ryan, and we

51:30

could all use an extra bright spot

51:32

in our day, couldn't we? Just to

51:34

make up for things like sitting in

51:36

traffic, doing the dishes, counting your steps,

51:39

you know, all the mundane stuff.

51:41

That is why I'm such a

51:43

big fan of Chumba Casino. Chumba

51:45

Casino has all your favorite social

51:47

casino style games that you can

51:49

play for free anytime anywhere with

51:52

daily bonuses. That should brighten your

51:54

day, Lop? Actually a lot. So

51:56

sign up now at Chumba Cumba

51:58

Cacino.com. That's Chumba Casino.com. page, you

52:00

know, that form, and inertia automatically now

52:02

dynamically swaps out the create user page

52:05

for the show user page and passes

52:07

the component. So you don't need to

52:09

do any work to like. redirect the

52:11

user, it just automatically happens because you're

52:13

redirecting server side. So that's the happy

52:16

path. The unhappy path is validation fails

52:18

and it essentially works the same way.

52:20

The user submits the form via post,

52:22

inertia post, that goes to the store

52:25

controller endpoint, the validation fails, it automatically

52:27

redirects you back to the page that

52:29

you're back to the page that you're

52:31

on. So, Laravel, if I go to

52:33

create a user and maybe it's missing

52:36

the first name, automatically does a redirect

52:38

back to the user page but then

52:40

includes some flash data saying well there

52:42

was an error and here's the error

52:45

which if you're using server-side classic server-side

52:47

templates you would then take that error

52:49

and repopulate the page with your old

52:51

values and display the errors. However with

52:53

inertia you get an inertia response back

52:56

so what it will do is a

52:58

redirect back to the create user page

53:00

and it will pass along the all

53:02

the data that you would have for

53:05

that page anyway. So the create user

53:07

page, maybe there is no data because

53:09

you're creating a user, but it would

53:11

say it's a create user page, and

53:13

then it would have some data, which

53:16

is the errors that just happened. Those

53:18

errors now get passed back to inertia.

53:20

And inertia now get passed back to

53:22

inertia. And inertia sees that were on

53:25

the same page still. of the page

53:27

component, so you're going to still be

53:29

on the create user page, but what

53:31

it now has is the errors. And

53:33

all you do, and those errors come

53:36

through as props, so they will, you

53:38

don't have to do any work to

53:40

update, as long as you're taking, as

53:42

long as your page component, your client's

53:45

side page components design, that any time

53:47

your create user page component is rendering

53:49

any errors that come through as a

53:51

prop, it's just going to because it's

53:54

all reactive. explain over a podcast. But

53:56

the point is, because it's all reactive,

53:58

because that's the way view and react

54:00

is felt worked, when that response comes

54:02

back and has the errors, the props

54:05

come in and they automatically update. So

54:07

you literally, it just ends up making

54:09

for these really, really simple forms, because

54:11

you literally, it just ends up making

54:14

for these really, really simple forms, because

54:16

you don't have to do a whole

54:18

bunch of wrangling to like, It's not

54:20

like you're having to repopulate that because

54:22

it's all there still because that page

54:25

component wasn't destroyed It was it's still

54:27

persistent there. Does that make sense? Oh,

54:29

it totally makes sense. I think it's

54:31

I think that's very close to what?

54:34

what we would have in rails, right?

54:36

I mean, I think rails does some

54:38

magic with that stuff, right? Like you

54:40

kind of like add some stuff to

54:42

your forms, some JavaScript stuff already, right?

54:45

Well, I mean, if you have rails,

54:47

not really. So the way that it

54:49

would, okay, so if I just had

54:51

vanilla rails, right, I would submit my

54:54

form, right? Happy Path would redirect me

54:56

to like a show page or an

54:58

index page, maybe the failed path, you

55:00

know, I would come back. because rails

55:02

is gonna render that template and rails

55:05

is going to conditionally now render some

55:07

new things kind of depends on maybe

55:09

what gems you have installed other things

55:11

like that but that's that's usually gonna

55:14

be what it is yeah but yeah

55:16

it's really close it's really close yeah

55:18

well that's good yeah so awesome I

55:20

mean yeah I think I think the

55:22

basic gist here that I'm understanding is

55:25

that inertia is going to make it

55:27

pretty easy for me as a rails

55:29

developer to say you know what I

55:31

have this maybe legacy application or something

55:34

Like I'm seeing a lot of use

55:36

cases with already existing applications where I

55:38

then want to sprinkle some view or

55:40

some react or something on a page

55:42

or two and and have it be

55:45

a little bit of a spot there

55:47

for a while. That's kind of what

55:49

I'm seeing the major use case with

55:51

Railsby. I mean I guess you could

55:54

design this with this in mind too.

55:56

I don't see anything wrong with that.

55:58

Yeah that's what most people are. doing.

56:00

People are upgrading like existing apps to

56:03

use inertia but like most people are

56:05

using it. it's kind of like Greenfield

56:07

projects at this point. But that's also

56:09

because it's a pretty new project. Yeah,

56:11

excitement, things like that. Also, always play

56:14

into this stuff. Yep. Any other questions

56:16

from you look before we kind of

56:18

roll into picture? Do we want to

56:20

talk about GitHub sponsorship? Sure. Do we

56:23

want to talk about get hub sponsorship?

56:25

Sure. Do we want to talk about

56:27

get hub sponsorship? Sure. Do we want

56:29

to talk about get hub sponsorship? I've

56:31

been doing open source for a long,

56:34

long time. And it's always a challenge.

56:36

We're going to open source, you know.

56:38

Justifying spending time on if you run

56:40

into business and if you have a

56:43

family and life's busy It's difficult to

56:45

justify committing large large chunks of time

56:47

to open source Just strictly from a

56:49

business or you know personal time management

56:51

perspective And so the what I did

56:54

with inertia when get hub sponsorships came

56:56

out I said you know what this

56:58

is a project that I think has

57:00

legs for the long term and this

57:03

is something I want to work on

57:05

but I've seen how much work tailwind

57:07

CSS took and what it takes to

57:09

make a really really successful project open

57:11

source project and I thought you know

57:14

I want to try to monetize it

57:16

in some way to help me justify

57:18

spending a bit of time on this

57:20

thing so I put out the get

57:23

up sponsorships and it was really I

57:25

totally didn't expect much of a response

57:27

but I got over 50 over 50

57:29

sponsors which is you know not enormous

57:31

amount of money but it's you know

57:34

upwards of about a thousand dollars a

57:36

month which was doubled it was like

57:38

$2,000 a month from get hub for

57:40

a while, which was awesome. I think

57:43

that's just, I didn't know what to

57:45

think of the get hub sponsorship stuff

57:47

at first. I'm like, are people actually

57:49

going to help contribute out of their

57:51

own pockets toward open source? And obviously,

57:54

get hub believed that that would open

57:56

source and obviously get hub believed that

57:58

that would happen. And now, you know,

58:00

it's crazy what some people are working

58:03

on open source. a kind of just

58:05

it's it's recognizing the amount of time

58:07

and effort it takes for for people

58:09

to work on open source and build

58:12

quality software that you know it's crazy

58:14

at the amount of at least for

58:16

me I've always worked in the layer

58:18

of L-P-P-P-P-P space like it's it's all

58:20

free software right and this is what

58:23

we're using to run our businesses and

58:25

everything else and to me it only

58:27

makes sense that some of that money

58:29

goes back if nothing else to just

58:32

help people spend business hours on open

58:34

source and not have to feel like

58:36

they're losing hours on open source and

58:38

not have to feel like they're they're

58:40

losing money or you know running the

58:43

issues with their boss because they feel

58:45

bad working on the journey work hours

58:47

or whatever. enough money and open source,

58:49

but I do think it's a definitely

58:52

piece of the puzzle. I'm pretty pleased

58:54

with it myself. Yeah, yeah, I totally

58:56

agree with that sentiment. Yeah. Awesome. Well,

58:58

I'm glad that you were able to

59:00

get some people to support you. So

59:03

let's, I guess before we move into

59:05

PICS, if people want to like get

59:07

a hold of you, follow you, things

59:09

like that, how do you recommend they

59:12

do that? Yeah, so I'm active on

59:14

Twitter, that's kind of like the go-to

59:16

place, just my last name, Ryan Inc,

59:18

Ryan Inc, Ryan Inc, Ryan Inc, Ryan

59:20

Inc, Ryan Inc, Ryan Inc, Ryan Inc,

59:23

Ryan Inc, Ryan Inc, Ryan Inc, Ryan

59:25

Inc., Ryan Inc., Ryan Inc., Ryan Inc.,

59:27

Ryan Inc., R, R, R, R, R,

59:29

R, R, R, R, R, R, R,

59:32

R, R, R, R, R, R, R,

59:34

R, R, R, R, R, R, R,

59:36

R database and layer of all stuff

59:38

there. So if you're interested, follow me

59:40

there. And then my website, Renwick, so

59:43

same, same handle, Renwick, R-E-I-N-I-N-K-I-N-K-D-C-A, I blog

59:45

on there. And yeah. And then obviously

59:47

in Nursia, if you Google, if you

59:49

Google, if you Google, or Nursia, if

59:52

you Google, if you Google, or Nursia,

59:54

JS, you'll. If you. recently unlucky enough

59:56

to lose our server developer who has

59:58

been building our Kubernetes stack for us

1:00:00

and this means that I've been spending

1:00:03

the whole week doing Kubernetes non-stop Kubernetes

1:00:05

this week. I had used it before

1:00:07

back in 2018 but The Kubernetes is

1:00:09

in a bit of a state of

1:00:12

flux at the moment. So coming back

1:00:14

to it, especially if you're kind of

1:00:16

running on Google, Kubernetes engine or something,

1:00:18

there's been a lot of changes. So

1:00:21

my pick for this week is a

1:00:23

book on Kubernetes. It's by... It is

1:00:25

Ryan here and I have a question

1:00:27

for you. What do you do when

1:00:29

you win? Like are you a fist

1:00:32

pumper? A woo-hooer! A hand clap or

1:00:34

a high fiver? I kind of like

1:00:36

to high five, but if you want

1:00:38

to hone in on those winning moves,

1:00:41

check out Chumba Casino at Chumba Casino.com.

1:00:43

Choose from hundreds of social casino style

1:00:45

games for your chance to redeem casino.

1:00:47

I lost in terms of conditions 18

1:00:49

plus. A English man. the English IT

1:00:52

mafia coming in here and it's called

1:00:54

imaginatively another Kubernetes book. It was updated

1:00:56

in February 2020 and it's been very

1:00:58

helpful getting up the speed with the

1:01:01

Kubernetes. Awesome. Any other picks for us

1:01:03

or is that your zetty force? That's

1:01:05

it. I'm not going to pick Kubernetes

1:01:07

itself. Make that what you will. That's

1:01:09

fair. I'd have to play a plane

1:01:12

if you did. I feel like anything

1:01:14

to make it easier. Do you know

1:01:16

what, we've got time for a quick

1:01:18

run here, we go, Kubernetes, right? You're

1:01:21

learning a Kubernetes, you think, right? I've

1:01:23

got my book, I've got my, my,

1:01:25

my docket desktop, I'm going to go

1:01:27

into settings and tick, tick the box.

1:01:29

I've got a requirement for Windows, so

1:01:32

we're doing all on Windows. And I

1:01:34

say to, I say to, docket desktop,

1:01:36

make me a Kubernetes cluster. Yes. Would

1:01:38

you like to guess how much RAM

1:01:41

this uses on my my desktop machine?

1:01:43

It should take a wild guess how

1:01:45

much this ticking this little box costs

1:01:47

me. All of it. It's free. It's

1:01:49

free gigabytes of RAM and I haven't

1:01:52

I haven't made any pods yet. I

1:01:54

haven't I haven't run my app. It's

1:01:56

just sitting there's each and three. It's

1:01:58

the first time like this machine's cracked

1:02:01

10 gig. two sticks of amnesty and

1:02:03

this is the first time the second

1:02:05

one's had to wake up. Yeah. That

1:02:07

makes sense, the typical Kubernetes cluster, right,

1:02:09

cluster, is you have a box that's

1:02:12

just running Kubernetes, right? All the other

1:02:14

stuff comes later, right, after that box.

1:02:16

I wonder if your little ticked box

1:02:18

right there is just spinning up the

1:02:21

Kubernetes, sort of. Yeah, if you, you

1:02:23

can see what the master machine or

1:02:25

whatever it is. Yeah, sort of. I

1:02:27

found a box, you can see what

1:02:30

it's doing, but, I mean, the plus

1:02:32

side, keep it, keep it's keeping positive.

1:02:34

There's some things to like there. Declaratives

1:02:36

are all good, but that's been around

1:02:38

for a while. The language of it

1:02:41

is nice and clean. So there's some

1:02:43

good signs. I'm a little confused though.

1:02:45

I thought all rails developers use Taroku.

1:02:47

So why are you even on Kubernetes?

1:02:50

Oh, I know. I know there's lots

1:02:52

of people that do. Don't get doing

1:02:54

around. I haven't. I have it. I've

1:02:56

always been very devops like person and

1:02:58

things like that. And things like that.

1:03:01

I don't, because I don't get a

1:03:03

lot of value in it personally. But

1:03:05

if you don't, if you're not really

1:03:07

into that, I can totally see that.

1:03:10

Just a little joke, because I know

1:03:12

that's kind of like a big part

1:03:14

of Rooku's background, right? A lot of

1:03:16

Ruby rules. I think so, yeah. They

1:03:18

came from our community, so yeah. It's

1:03:21

very great. That's my understanding. Yeah, yeah,

1:03:23

no, they're not bad. just I'm not

1:03:25

using them. Okay, I guess guess it's

1:03:27

on me now. So the first thing

1:03:30

that I'm picking today is we grew

1:03:32

tomato plants like we do every year.

1:03:34

So yesterday our tomato plants have been

1:03:36

producing for like about a month and

1:03:38

the average amount that I'm bringing in

1:03:41

is a bowl full that's like about,

1:03:43

you know, 10 or 12 inches big

1:03:45

and like six inches deep. Like we

1:03:47

have like, I don't know, like six

1:03:50

or seven tomato plants and they go

1:03:52

nuts and it all is because we

1:03:54

basically watch some YouTube videos on like

1:03:56

how to like prune them and not

1:03:58

like kill them and all these things

1:04:01

and so I'll paste them I'll paste

1:04:03

them in here so if you like

1:04:05

totally, there's probably more stuff out there.

1:04:07

There's probably somebody that knows how to

1:04:10

like take care of other kinds of

1:04:12

plants, but I'm definitely like pushing the

1:04:14

watch some YouTube videos if you're if

1:04:16

you're doing like some home gardening things,

1:04:18

you know, especially if you're like growing

1:04:21

stuff because it's like COVID and everybody

1:04:23

seems to be into that this year.

1:04:25

Maybe it's a little late for you

1:04:27

because maybe you're growing seasons past, but

1:04:30

definitely for if you keep doing it

1:04:32

next year. in the session, Luke was

1:04:34

like, hey, I don't want to have

1:04:36

to go to my logs to for

1:04:39

queries and stuff. Well, I did some

1:04:41

looking during. Well, I'll tell you why,

1:04:43

I can reveal why now, because blasted

1:04:45

apps and Kubernetes, and you can't get

1:04:47

at the thing. Okay, maybe what I

1:04:50

should give you is a link to

1:04:52

tutorial on how to read logs and

1:04:54

Kubernetes, because that I think is your

1:04:56

actual problem. query, debugging, tracing to the

1:04:59

exact spot in your code, explaining. So

1:05:01

I'll just link those because they were

1:05:03

cool anyway. So yep, those are my

1:05:05

picks. Jonathan, did you have anything for

1:05:07

us? Yeah, I didn't have anything at

1:05:10

the beginning, but I kind of, as

1:05:12

you guys were talking, I've come up

1:05:14

with three. One of them is, as

1:05:16

I've mentioned earlier, project that I was

1:05:19

involved with is called, tailwind CS test,

1:05:21

and this is a kind of a

1:05:23

unique approach to your audience to check

1:05:25

out, it's become really, really popular and

1:05:27

it's honestly changed the way that I,

1:05:30

you know, handle CSS. I pretty much

1:05:32

don't write CSS anymore because I'm using

1:05:34

Tailwind, which is, if that's confusing to

1:05:36

you, then it's, you should definitely check

1:05:39

it out. And I will warn you

1:05:41

if you've come from like a SAS

1:05:43

or a less background or just even

1:05:45

just plain old CSS, and you look

1:05:47

at this approach, you will probably be

1:05:50

disgusted at first. than you were before.

1:05:52

And the maintenance is. wonderful moving forward

1:05:54

because it's just a lot easier to

1:05:56

manage because it's all in each email

1:05:59

and not in CSS. So pick number

1:06:01

one, tail one, CSS. Pick number two

1:06:03

is, I mentioned earlier that I put

1:06:05

out a database course. Now I should

1:06:07

mention that this course was primarily, primarily

1:06:10

designed for Laerville developers. Well. totally designed

1:06:12

for layervel developers, but there is a

1:06:14

lot of a crossover between layervels ORM,

1:06:16

which is called eloquent, and active record

1:06:19

in rails. So there's interesting techniques. So

1:06:21

if you are a Larabelle developer listening

1:06:23

to this, or just even a rails

1:06:25

developer who wants to learn some techniques

1:06:27

about databases and how to make your

1:06:30

database queries faster. Check out my course

1:06:32

eloquent dash course dot rannic.ca which I'm

1:06:34

assuming will end up in the notes.

1:06:36

Yeah, so that's my second pick and

1:06:39

my third one is less software related,

1:06:41

but I live on a farm and

1:06:43

this week I've so a little bit

1:06:45

of background. I live on a farm

1:06:48

so I've wireless internet internet which basically

1:06:50

means that I have an antenna on

1:06:52

a tenantana on my property that points

1:06:54

to another antenna about two kilometers away

1:06:56

from this internet service provider. And this

1:06:59

year the tree line between us and

1:07:01

the tower that we point to is

1:07:03

like really growing in, the trees are

1:07:05

really growing in, the trees are really

1:07:08

growing in, the trees are really growing

1:07:10

in, the trees are really growing in,

1:07:12

the trees are really growing in, the

1:07:14

leaves are really growing in, the leaves

1:07:16

are really growing in, the leaves are

1:07:19

really growing in, the leaves are really

1:07:21

growing in our house is right. the

1:07:23

tower, I get perfect line of vision

1:07:25

to this tower. But the problem is

1:07:28

I have to then get it from

1:07:30

there to my house and my and

1:07:32

my barn as well. So I've been

1:07:34

playing around and been researching a bunch

1:07:36

of ubiquity products. And if you are

1:07:39

in the similar sort of position as

1:07:41

me, I can't recommend this stuff enough.

1:07:43

It's so cool. I've been playing around

1:07:45

with a product called the nano beam,

1:07:48

which are really like they're small little

1:07:50

things or maybe like circular, six or

1:07:52

seven inches wide. 15, I think 15

1:07:54

to 28 kilometers. Like I only need

1:07:56

it for like 300 meters or something

1:07:59

and it just makes it really really

1:08:01

easy to create these wireless connections between

1:08:03

like long-range wireless connections between different places

1:08:05

in my property so whatever I'm just

1:08:08

kind of nerding out on the ubiquity

1:08:10

products right now because I'll give you

1:08:12

a plus one for that. Yeah, you've

1:08:14

worked with them before? Yeah, so my

1:08:16

job that I had like over a

1:08:19

decade ago, one of the things that

1:08:21

we did is we broadcast auctions and

1:08:23

a lot of the barns that these

1:08:25

auctions would be done in, they didn't

1:08:28

have good internet connections. And so we

1:08:30

were using wireless equipment all the time

1:08:32

and we swore by this by ubiquity

1:08:34

so just just saying that was 10

1:08:36

years ago but but as far as

1:08:39

I know like you know good stuff

1:08:41

yeah it's it's pretty cool stuff I

1:08:43

actually have one already set up in

1:08:45

my property between two spots and we

1:08:48

actually had a white like a buried

1:08:50

wire under the ground and it gave

1:08:52

us all kinds of trouble and then

1:08:54

we put in a couple nano beams

1:08:57

and it's just like it's it's almost

1:08:59

like they are wired because that's what

1:09:01

it looks like from a network perspective

1:09:03

and they just they're they just work

1:09:05

flawlessly so that's my picks awesome all

1:09:08

right well thanks everybody for joining us

1:09:10

and we'll see you again another time

1:09:12

how to have fun anytime anywhere step

1:09:14

one go to chumba casino.com got it.

1:09:17

Step two, collect your welcome bonus. Come

1:09:19

to Papa welcome bonus. Step three, play

1:09:21

hundreds of casino style games for free.

1:09:23

That's a lot of games, all for

1:09:25

free. Step four, unleash your excitement.

Rate

Join Podchaser to...

  • Rate podcasts and episodes
  • Follow podcasts and creators
  • Create podcast and episode lists
  • & much more

Episode Tags

Do you host or manage this podcast?
Claim and edit this page to your liking.
,

Unlock more with Podchaser Pro

  • Audience Insights
  • Contact Information
  • Demographics
  • Charts
  • Sponsor History
  • and More!
Pro Features