Hey, folks, welcome back to another episode of JavaScript Jabber. This week, on our panel, we have Dan Shapier.
Hey from a still warm Tel Aviv.
We also have Steve Edwards Hello from Oregon where it is finally officially fall, and a j O'Neill.
Yo yo yo, coming at you live from now the fourth straight day of twenty four to seven. Vertigo.
Well that sounds fun. My mom went through something like that. She actually went to the er, but they just told her, yeah, she had some kind of vertigo. Anyway, I'm Charles max Wood from Top End Devs, and this week we are
talking about our stimulus and turbo. If you're if you can't guess, this is something I put forward and I decided that I would just come on and talk about it myself since I use this every day and I'm loving it, so I'm anyway, I'm kind of curious that have you guys heard much about hot wire stimulus or Turbo.
Well, yeah, I use it for to find plane tickets all the time.
I've kind of heard about it. I know that it's big in the rails world where I am not present. I know that it's kind of like HTMX in a way. But that's more or less. Yeah, that's more or less all that I know about it.
Yeah, yeah, it looks like they all go together.
I'm looking at the web page.
You can use them together, you don't have to. So so I'll give a little bit of history on this. So David I was calling David. Everybody else calls him DH and I don't know why. But anyway, so, way back in the day, he created a system for Java in JavaScript for rails apps called turbo Links, And effectively
what it did was it would reload. Initially, I think it just reloaded the body of the page, so if you click the link, then uh, turbo links would intercept the click, and then it would load just the body of the page or just certain sections of the page so that it would load faster, right because it didn't have to re render the entire page. Turbo is kind of the successor to that.
Before before we go into the successor, I want to better understand that aspect. So basically, it did an HTP request to the back end, presumably with a slightly different header, uh, and then it would get the response back. Would it be like HTMX, would it be like basically HTML?
In the response was HTML in the results and.
Then and then it would basically do in like a diff like an HTML equal whatever the response was or something along the lines.
Yeah, basically, and I don't know all the internals on that, but yeah, basically that's what it would do.
And I assumed that it would also like work with the history API, so that back and forward would work properly. Yep. So it's just similar to HTMX in the sense that it would It was a mechanism that allowed you to replace portions of the page rather than the page in its.
Entirety right, But turbo links when it was out was kind of a blunt tool, and so you couldn't target specific areas of your app or different specific dom elements. It would it was literally just the whole page, and so it would effectively figure out what change and then just update the changes. But it would get the HTML from the back end, as opposed to I guess some of the shadowed stuff that we see in JavaScript, where you.
Know, not shadow down virtual dom.
Or virtual dom where it yeah, where it manipulates, it calculates and the manipulates the dom.
And this shadow dome is also a thing, but it's a different thing.
Yeah, yeah, fair enough. But but anyway, so that's that's generally the idea behind turbo links, and you know it did it sped up, you know, rendering on on rails apps in particular, and that's that's almost exclusively where it was used. And then we started to see this proliferation of other Again.
A question before you move on. You said that it was mostly used in the rails world, and I assume dGH created it for rails for those who don't know, the also created rails. Yes, but was there anything specific in the technology that kind of precluded it from being used with other back end systems I don't know, PHP, whatever.
In other words, if someone uses it without Ruby, you could say that they went off the rails.
You could take turbo links off the rails. Yes, yeah, so so in more recent applications they move to Turbo. And so Turbo does more what you're thinking of with HTMX right, where you can target specific areas of your app, and you can you can replace items, you can delete items. Turbo has a number of different pieces to it, and this is probably I don't know, I guess stimulus is probably interesting to more traditional folks as well, But Turbo
Turbo has four pieces to it. We're not going to talk about Turbo Native because Turbo Native is effectively a wrapper around your web app that you can use to deploy and put it up native iOS and Android apps, right, and so it's it's a completely different technology from the other.
So it's basically a way for me again without you know, we won't discuss in detail, but just to generally understand, it's a way to implement a native app using a web component essentially with the Rails back end driving the system.
You can use any website. It just wraps around the website and so it turns your website into your web app or into your native app. And so it's just a native shell that loads without the Chrome your browser or a browser with your web application in it. Cool, and it has a bit more fit so you can provide some native functionality to it, but it's fairly limited. And anyway, if you want to just keep the same experience across your web and native apps, it's actually a
pretty good option. And you know, it does, like I said, have some tie ins to native things that make it kind of a nice seamless experience. It's definitely not the right solution for everybody. But anyway, I've I'm still learning
about turbo natives, so I'm not using it myself. But the other three elements of turbo turbo drive and what turbo drive does is essentially what we talked about with turbolinks, right, And so if you have a link and you've loaded turbo into your web page and you click the link, then it will go and it will retrieve the page, the new page from the server, and it'll bring it back and then it'll diff it against what's already there, and it'll only change the pieces that have actually changed.
I'm kind of curious about this diffing mechanism, like, you know, how sophisticated is it? I mean, you know, all of the v dome kind of exists to do all the sorts of a diffing, so like like any parts that of the page that haven't changed will not be touched, or you know, how does it reconcile? How does it? You know the reconciliation is you know, is the is the challenge, especially if you've got sophisticated pages.
Yeah, it uses another library. I think it's called idiomorph and and so idiomorph is what does a lot of the changes under the hood for Turbo.
But basically it kind of it retrieves the new version but does diffing in order to not replace stuff that hasn't changed.
Right, So let's say you have like a menu bar on the top or down the side. You know, maybe you're clicking a link and it only changes one small part of the page. When it does, the end rent to the back end, and when you click the link, it may give back the HTML for the entire page. But idiomorph is smart enough to look at the two and say, I need to merge these right and get the stuff from the new page into the old page.
And so when you do that, it just replaces that one piece of the page instead of re rendering the entire page.
Now I'm not obviously, I'm not familiar with it because I'm basically learning about it from you right now. But there are like three big advantages to this type of an approach. One is, of course, that you avoid unnecessary flashing. Like you said, if you've got the menu on the side and the menu at the top, if they haven't changed, you don't want them rerendered. You just want them to stay where they are, and you know, stay put and avoid the flash of them being arrested and then re rendered.
Another advantage is that if you've got various form elements that you've already put stuff in as a user, you don't want them reloading and losing their content. So, for example, if you type something into a textbox, if the textbox re renders, then effectively it can lose whatever was in it if you've not taken special steps for preserving that stuff.
So again, if you avoid re rendering those stuff that stuff, that makes it easier not losing the contents of form data just because I don't know, you updated some counter at the top of the page or whatever. And another reason is to avoid videos from jumping to the start. If you reload the video element, the video will you go back to the beginning, and which is often not what you want if the effect that you want to create is the user just staying where they are.
Yeah, one, there are a couple of other things. One is your scroll position.
M hmm, can kind of handle it, but yeah.
Yeah, but but if you if you click to the next page, a lot of times it will take you to the top of that page. And in this case it doesn't because all it does is again it just merges the page in where you want. I could I could see where maybe you don't want that all the time, but it's it's a pretty nice feature. And I think that was the only other benefit that you didn't bring up, but that, Yeah, essentially, that's that's how that goes together.
And anyway, it's it's pretty nice. It's uh. I found that it has sped up the the rendering and work on my web pages where I use it, and you just install Turbo and it just kind of does this thing. Now that it does have an API, so you can tell it how you want it to operate, but for the most part, it just is kind of an automatic.
So a few questions about it, again as somebody who's really not so familiar with the technologies, and it kind of related to some concerns that I had when we spoke with Carson about HTMX. Is how it works with the browser's history, like when you back and forward, how smart it is it about things, how well does it work with the address bar which kind of goes together with the history, and also how well does it work with browser caching.
Yeah, honestly, I haven't had any problems with the history back and forward with that, now we get into turbo turbo frames and turbo streams. Yeah, that that's a little bit different. But with with turbo drive itself, I haven't had any issues, so you know. And and in rails, nearly every page loads using turbo drive, you know, once you click a link it and so that that's worked pretty seamlessly. And I do weird stuff in rails sometimes, and it seems to work, So I'm for that.
Is it called kind of curious? Why is it called turbo drive? Like, is it the drive related to turbo the fact that it drives faster or somehow related to.
I have no idea.
DHH is a race car driver, Okay, okay, he is, But.
Yeah, I don't know. I don't know why they called it turbo turbo drive.
Thought I thought that. I thought the PHP guys were supposed to have the lambos.
Well, you know, there's a lot of joint a lambo group. There's a lot of problems with Lambo's.
Not they're pretty Let's put it this way, it's probably not not the sort of problems that I need to contend with, So.
You probably shouldn't get away.
That's a problem. Is a problem.
I would like to have, okay for me cars for me, cars mostly ways to get from point A to point B.
So I'm gonna jump in he real quick. And obviously you guys are talking about Taylor Otwell and his orange lambeau. But being a devoted inertia JS fanboy has been well documented here, I'm going to say a lot of this
is very similar. I think it's maybe the same thing with just slightly different implementations in terms of what I see in inertia and what I use in innertia on a regular basis, In terms of only loading certain parts of the page, you know, being able to make a query and get specific in preventing or controlling where the page rolls too after a change is updated, just a general speed of it in terms of how that it works.
So it's just from listening to Chuck and reading to the documentation, it's it's sort of just a different implementation of the same idea.
I'm really not surprised that there's a sort of a convergent evolution. I mean, if you want to drive more dynamic web pages and a more dynamic experience for web users, but don't want to build like React application on the front end. It kind of they kind of all pushes you in the same direction.
I guess, yeah, and that's that's where a lot of this came out of, both with stimulus and turbo is. Yeah. The feeling is in communities that I talked to outside of this one, where you know people generally embrace React is that, yeah, we we don't necessarily need a framework that takes over the entire page. We don't need you know, we don't need the heavy handed approach that React has. You know, DH calls them JavaScript sprinkles, right, So you just put in what you need where you need it.
And I have to admit I really like that approach as as far as it goes. And so you know, look at the way that we used to build things with, say jQuery, right, and so you would have a jQuery plug in, you would tell it to act or react on a specific dam element, and you know, you would get what you wanted where you wanted it, and that
would kind of be the entire story. And so you know, it's it's not necessarily an approach that is unfamiliar to people, at least in principle, but a lot of the ideas behind how it's put together and why it works the way it works are definitely not new.
Is it also like HGMX driven by attributes that you put on the HTML elements?
Yes, yes, stimulus much more than turbo, but yes.
Now you can see it on the very front page of the stimulus stocks.
So what is stimulus versus Turbo or are you still talking about turbo?
I still wanted to cover a couple more things with Turbo, So Turbo has a couple of other features. Again, if you're familiar with HTMX, these are going to sound fairly familiar. So one other thing you could do with Turbo is you can break your page up into Turbo frames. And so the different Turbo frames are effectively dom elements in your application that you can and target for specific things. And typically what you do is you use them in
conjunction with turbo streams. And turbostream is where you send the request back to the server with a specific header saying this is a turbostream, and then the turbostream responds with new Turbo frames that either say delete this element or replace the contents of this element, or there are a whole bunch of different ones that you can do that have different actions. You replace, update, append, prepend, You
can add something before, you can add something after. You can just tell it to refresh the turboframe.
So these are kind of like ie frames in a logical sense that they represent parts of the page that update separately. But they're not implemented I would guess as actual eye frames.
No, they're not.
Whether they're just placeholders. I guess that you can update the content of in various different ways.
Right, So for example, if I filled in a form and when it did the post, it sent the post as a turbo stream instead of a and and you know the return header it's saying, give me a turbo stream back instead of an HTML header or an HTML page. What you what you would get back, as you could, you would get back a series of turbo frames in your turbo stream. And the turbo frames might say replace the user's name turbo frame with the new name, and
replace the user's avatar turbo frame. Right, you put a turbo frame around that, And so you can tell it to replace all of those or update all of those, and uh, you know, or if you're doing you using a turbo turbo streams for comments, right, you have a turbo frame around your series of comments, and then when you submit the comment form, instead of making an end run to the server and getting back a full new page with the comment added, it just sends back the
HTML snippet with the comment, and it's inside of a turbo frame that says append this to the comments element or to the comments turbo frame.
Now, again, obviously I'm not really familiar with it, as I've never used it and I'm mostly learning about it listening to you right now. But it does seem on the face of it that it would be a good candidate to use in conjunction with the web components. I don't know if that's maybe what they're doing or not.
If they're not, maybe it's something to consider, because that would really create a strong separation between the various turbo frames, like, for example, thanks to the shadow dom it would mean that SS from one would not impact the other unless you know you specifically want to and stuff like that. It would create an interesting, like clean separation between the various frames. But again, I'm just saying this as a thought that occurs to me off the top of my head.
By the way, I don't know, just as an aside and we won't go there. But there's been all this brew a ha about web components all over again. So you know we were due, Yeah we were, do you. Ryan Carniato, a friend of the show, wrote scathing commentary about it and got all the brew haha started all over again.
Anyway, Yeah, I honestly I haven't looked at the code base for Turbo, so I don't know if they're using web components or not. But yeah, you do put in a turbo frame tag, you know, and.
That's an interesting Yeah, sorry.
Gone, when you respond again, you you were you respond with the turbo frame tag.
So that's an interesting difference from HDMX, where they Carson Gross kind of intentionally did not create special elements as targets and rather made it possible to use any dom element as a target for for updates. Yeah, so it's an interesting distinction between the turbo drive philosophy and HDMX.
Yeah. I believe you can work around things without the frame, but it's much it's much easier to just go with the frames. That's how it's designed to work. But yeah, I mean that's that's effectively the ins and outs of of turbo and so yeah, I gave some examples. I've updated menus and menu items, I've updated you know other things.
I mean, one one place that I've used it is I've loaded a modal and so effectively used stimulus with turbo to update the modal contents and then you stimulus to make it appear.
So so again, now can you now explain what stimulus is.
Right, So, stimulus is it's a model of you controller approach to HTML or to manipulating your dom and so effectively, the way that it works is you assign a controller to a section of your code, so you know, usually what you'll see is you'll see a div is placed around the area that you want your your controller to work on, and then you can define. There are a number of different elements you can use within stimulus to make a lot of this work. So the kind of
the big ones are actions and targets. And what you do is you have data. You use a data elements, so data dash whatever. Right, So let's say your controller is you want drop down menu, so you have a drop down menu controller, so you're on your menu where you have the drop down menu. You would have a data dash controller attribute and you would assign it menu dash drop down right, and so that tells it this area is all operating under a single instance of the
menu drop down controller. And then and then from there you can assign actions and that's usually on links and buttons where if you click it. You can also put it on other elements, so you can have it on forms, you can have them actions on all kinds of other things. And so what you have there is then you have a data action element.
So it's kind of like it sounds kind of like an angular style templating approach to doing things, but instead of creating your own templating language on top of the HTML syntax, you're just making do mostly with HTML standard data elements data.
Yeah, basically, So then the targets are effectively you're telling the controller you need to know where this dumb element is right, and so then in the action you tell it on a click call this function in your controller.
And the function is what is it JavaScript on the front end.
On the front and it's JavaScript on the front end, so all the stimulus controllers are written in JavaScript.
So it's again I'm not familiar with it, so I'm kind of guessing it sounds a little bit like in sort of Angular light in the sense.
I guess. I guess in some ways you could look at it that way. I think it has I think it has more in common with Angular JS or Angular one than Angular two, but it has a lot of those ideas in the sense that, yeah, you put the directives and the elements into into your HTML and then stimulus is able to pick it up when it when the pageloads and it initializes.
I see that it's specifically called a modest JavaScript framework. Yeah, so for the HM Aliority have. So basically it's a way to add a framework light on top of the static Htmailiority have by sprinkling in some data attributes and adding some JavaScript business well business logic. I guess you.
Could call it, yeah, effectively, Chuck, are you familiar with Alpine JS.
I have not looked into it as much as I would.
Like, But okay, so AJ you remember when we interviewed it's been a couple of years where we talked to the guy from Albine J I'm brain farting on his name right now. Starts of the CE. But it's sort of the same thing where he uses data attributes and you just sort of sprinkle a little bit within your HCML to add functionality, you know, some JavaScript functionality to your forms without having to take over the whole thing with a view or reactor Angular you know, template structure.
Yeah right, huh was it Caleb, Yeah, calib Porzio Yeah, yeah.
Yeah, yeah, it's not by any means the only sort of modest. I like the word modest JavaScript framework, and I wouldn't be shocked if Yeah, some of the other ones work in similar ways. But again, it was this idea that an angler does this too. I think React does it to a larger degree. I'm not sure where view fits in on the spectrum, but if you declare an angular component to work on a particular part of the dom, it tends to sort of take over that
part of the dom. And stimulus, in contrast, simply reacts to whatever the HTML is. So the state of the stimulus controller. If you inspect the the HTML on the page, you can see the state of the similar Yeah.
So the state, Yeah, it's done before, it's been done before some you know. Obviously, one place you've put state is in in data attributes. Another place you can put state is in comments. I guess this one. And then another option is to create a JSON in beds within the HML, but then you kind of lose the association with particular elements on the page.
Yeah.
Yeah. The only the the only real downside of doing that is effectively everything gets serialized into strings.
Yeah, essentially, yes, so you know, if it's manipulating say a form, you know, then yeah, I mean may be pulling values out of the form, or it may have value attributes on some of the on some of the elements, right, And that's all done with data elements. And then like I said, you have the targets, and the targets are basically just elements that you're probably gonna wan at manipulating within your controller.
From what I gather, the main motivation for stimulus is that if you just use turbo, then everything becomes a round trip to the back end, and sometimes that's just you can't do that in terms of responsiveness or some sophisticated types of interactions, and then you and then you do need some JavaScript on the client side for more fine grain control.
Yes, I would add that there are some things that are strictly dom manipulations that don't require a back end run, like if if you're managing data and stuff like that, and you can make you know, HTML calls to the back end and then manipulate the domb. In fact, I've seen people do essentially what Turbo does with Stimulus, where you know, they go call the back end and then they come back and they replace parts of the Yeah.
But then but then, but.
Turbo does that, and Turbo does it better.
Yeah, exactly.
So you know, typically those people just weren't aware that Turbo had the capability. Right, It's like, Okay, I'm going to sloct an element here, and I want the next subset. You know, I select the country, and I want the states or provinces or regions to show up in the next thing.
Uh.
Turbos terrific for that, right, But let's say you you want it to that you want that element to appear as well. You know, you can use Turbo to insert it into the page, or you can use Stimulus to make it visible, depending on which way want to.
Now, again, looking at the really simple example on the Stimulus website, I see that the name of the file actually specifies the name of the quote component.
Of the controller. Yes, yep, So if you call it menu dash drop down dash controller or or menu underscore drop down underscore controller, either one. Then it's going to be the menu dash drop down controller and that's what you're going to put in your HTML.
Okay, cool, and rather than rely on the standard dome events it it mechanism it again. It well, basically all the frameworks are kind of going this way, but it uses a click arrow the name of the controller for example, so okay.
Yeah, and so it has for the different elements. If you look at the documentation, is there, but you can click, uh, there's a toggle for like a details element. If you have an input, you can put an input element on it, right, And so you can use it to do things like like a search. You know where you're typing in and it does the look up and then gives you the options that it found when it searched. Right, so it may do a run to the back end on that
as you're typing. That's an input event, submit event on a form, change event on a select. But yeah, you you just yeah, you do the name of the event and then an arrow and then it's controller what hash number sign and then the method.
I'm kind of curious whither you chose hash or than that.
I'm assuming that's straight out of rails. That's the way the rails and U specifies, Hey, this is a this is a call on this method of this class.
Okay, yeah, other way.
Also keyboard events, right, so you can tell it if you hit escape or enter or type a letter type of number, you can you can have it react to those kinds of events as well.
Interesting, I'm would you actually put any data in the controller object itself or all the data should reside on the elements in the HTML.
So control uh so stimulus doesn't really give you a good mechanism to store any of the data in the controller object itself, and so you would that's where a model or value data at comes in, and so you would actually store any of those. So most of the time it's it's going to be in some attribute on your HTML anyway. But let's say that you want some specific value for you know, kind of a global setting within your controller. You would set that up on your
DOM element and so often you put those on. So you have the DIV and then you have the data dash controller attribute, and then after that you have the data dash whatever the controller name is dash value attribute for kind of that global setting, and you can manipulate that if you would like. You can also you know, do do all kinds of other things with it, and those values actually support a number of things you can have or raise Boollion's numbers objects, which are basically Jason objects.
Yeah, but I guess I guess that really it's it's mostly for local transient state. Anyway, if you've got like more persistent state that would.
Resign, you're going to push that.
Yeah, within the within rails obvious.
Or whatever else. Right, Stimulus and turbo are both completely independent of rails.
But again I assume they're mostly used in the rails community probably. Yeah, again, looking looking at the page, I'm actually I actually don't see the word rails on the Stimulus website homepage at least, So so, yeah, it's it's meant to be like you know, it might be used in conjunction with, but it's meant to be independent. And and hot wired is like, what that's the overall term. Is it an actual technology or just like a moniker?
From what I understand, it's just a moniker. There's nothing that's independently part of hot wire that's not part of turbo stimulus or urbinative.
Okay, cool, got it, and you've been using it extensively.
Assume, Yeah, I've been using it quite a bit. It's it's a really really convenient way to write applications that you I guess for one, you know you don't want the heavy handed approach that you get from say a REACT. And it's also a really convenient way to write your applications if you just want really clean and quick ways to manipulate the dom.
So in other words, it's sort of like where if you want to have a statically generated side for the most part and just sprinkle a little bit of functionality on the top of it, and you can do that, so you get your speed and your pre render with the minimal functionality that you need.
Yeah, basically so and again DHH calls it javascrip sprinkles so and that that's the idea, right, So you just sprinkle in what you need where you need it, and you know you don't have this big app managing a whole bunch of state and other things.
Yeah. Very often when I see significant state management on the front end, I mean sometimes it's it's inescapable, but very often it's just wrong.
Yeah. Well, I think in a lot of cases, what you see is you see people that basically say, hey, look, I've worked at four different companies. They all had significant state that they had to manage on the front end, or they felt like they had to manage on the
front end. I'm not convinced that you necessarily have to do that, but anyway, so what they do is when they basically adopt the same stack, can use the same approaches, and you know, maybe you don't need that, Maybe you just need a tiny bit of state management or no state management. You can find other ways to work around it.
Basically, if if you're building dashboards then like sophisticated interactive dashboards, then then you you probably can't escape the need like it's a it's it's an app that happens to be running on the web, uh, and then you can't really
get away from the need for a sophisticated front end. Again, if you're building like an editor for something, also the same for most other things, like if it's for example, an e commerce website, more often than not, you you're going to need to do a lot of your stay at main on the back end anyway for persistence sake, So why not push as much as you can there and avoid doing it on both sides as much as you can.
Yeah, I would also push back just a little bit on the idea of maybe an editor or a dashboard.
I've seen plenty of that kind of a thing done with an Alpine or a stimulus where you know, you pull in some third party library like a chart JS or something and then let it do a lot of that stuff and so and then if you're building it on your own, the other thing is is you can set up how each of the elements react to the different things you do, right, so you know, you can control what happens when you hover things like that, and then effectively, you know, you use something like stimulus, if
you need some kind of animation or something like that, you can trigger that. And so like some of the some of the things i've or that I've built. So again going back to the idea of a menu with drop down you know sub menus. You know, I just used a transition animation library and I just called it in my stimulus controller and so it did a lot
of that stuff. And so I think there are ways to do this that without it being onerous, that you could do it without having to have kind of the full level data control stuff that that a lot of times you reach for in React apt. But that said, I mean, if that's a technology you're familiar with and you're comfortable doing it, I'm not telling you you're doing it wrong. But if you're trying to find.
A profess, would be telling you that you're doing it wrong.
My point is is that there there there are other ways to do it, and in this case, in my experience at least, there's a lot less overhead to doing it this way as opposed to doing it the other way.
Another interesting thing in this context is a lot of developers may not be aware, but HTML and CSS are getting a lot of features yes, make it possible to build quite sophisticated user interfaces without a sophisticated framework, like if you want pop ups, pull down menus, right click menus, et cetera. All these things which used to require fairly sophisticated coding can now be achieved fairly cleanly with HTML,
CSS and minimal JavaScript. And that's especially attractive in the context of a minimal framework like Stimulus.
Yeah, and that's that's kind of the approach that that I've been hitting right. So the library so again you know kind of that that transition where you bring the menu and things. I mean effectively what I'm doing is I mean using a library that uses CSS classes and just swaps the classes out right, and so it you know.
You should definitely be looking at pop ups on the MDN read about it a lot, a lot of the more sophisticated so so that could provide a lot of the sophisticated user interface capabilities that you would like to implement with minimal JavaScript like and it works across quite a number of browsers. I need to check comparsibility with Safari et cetera. But overall it's it's pretty well supported.
And another one that's really interesting in this context is the view Transitions API, making it possible to create sophisticated animations when transitioning between things in between states.
We should do an episode on those anyway.
Actually we actually did on a couple of them. We had we had we had normals intal to talk about the view transitions example.
Yeah, yeah, you talk about stuff that's in HTML that you know used to require a lot of stuff. There's a my nurses seite that I work on quite a bit has you know, a bunch of date fields, and you know it used to be you had your date pickers, you had to import from various jobascripts. Yeah, I just used the native HTML once.
Yeah.
You know they're not and people will complain about them. Oh they're pretty bare bones and they don't do this, and well yeah, I mean I don't know how much expect. But for my you know, functionality where all I need somebody is all I need is for somebody to be able to click select the date, get right to the field that I'm off and running. It's great. And I didn't have to import any JavaScript. I mean, that's the
whole thing about JavaScript performance, right Dan. The less JavaScript that you're downloading to your browser, the faster you're going to be.
So actually it well, it's not just about performance. It's also about performance is one important aspect. Obviously, the less JavaScript the better, but in that regard, but it's in general, I'd say that anything that can be done sufficiently well without with just HTML and CSS and without JavaScript, should be done just with HTML and CSS without JavaScript, vera platforms exactly.
For example, Ja's Rails World from a couple of weeks ago, because this is this is more or less what he's.
Yeah, I know, I started watching it. There are a few issues, but we'll get to that in a second. I just want to mention that Jake Archibald, for example, recently posted an article in which they talk. He talks about various proposals or ideas that they have around uh styling or stylized drop down menus that will be built into the platform. So for if you want more sophisticated drop down menus, like instead of just the regular unstylable select you know fields. Uh So they're working on that
sort of thing. And again, once you've got it as part of the platform, it becomes very easy to use it from within any framework. But the thing is, if you're if it makes the framework code minimal, you start asking yourself, well, why do what do I need the framework for? Like if if my framework stuff is just really thin wrappers around the platform features. Now, obviously we're not,
we're not really quite there yet. Of before I get a lot of hate about Yeah, our design system does a whole lot more than that, And I get it, it's the same for us. But you know, we're getting there lately, probably like ten years too late. In a lot of ways, but we're getting there, and it does make this type of approach, the approach that you're saying that is espousing, a lot more attractive and reasonable. I don't necessarily agree with everything he says. For example, his
stance on bundling. It seems he's slightly backtracked. Again I might be wrong, but off of his extreme stance that you should unbundle everywhere, now it's more about unbundling during development, which I'm totally cool with. I don't know if he's also opposed to bundling in production. That's still problematic or can be problem.
And yeah, and so if if we want to get into that. So that's now now we're getting into more of the weeds of how Rails works. Of course, it's still using you know, an open standard that you could use in other apps. But the way that Rails works with its components or with its JavaScript stuff is it uses import maps, and so you can use a bundler for a lot of that stuff. You know. I've also seen people adopting the vat really or vat Rail's gems
to get their stuff done. But you know, instead of using import maps, but import maps, the idea is is that there's there's no build step, and so I mean, that's that's the big feature that he's touting is that you don't you don't have to go and learn VAT, you don't have to go learn web Pack, you don't
have to go learn whatever. The next bundler is effectively, you put your files into the import map and then you know, you can tell it to preload the ones that you need preloaded, and then you're you're good to go and off to the races. And I mean the approach has worked fairly well in every app that I've used. But but yeah, you know, you get this list of and if you're using Stimulus, you you basically have an import map entry for every single one of your controllers.
But again, it's it's worked fine on anything that I've worked on in production.
Well to do a little bit of Pedantic Devil's Advocate here. Beat is pretty One of the things about Beat is that it's pretty plug and play. I mean, you come, you said a couple of things. It ain't webpacked, you know. That's the thing about Webpack is the can big files, you know, but Beat is pretty plug and play.
Yeah, I've done theat on a couple of rails apps, and I think you have to put in a config file, but it's I mean, you can tell you about one works pretty much out of the box.
Yep. Look, we've had people on our and on the show in the past talking about, you know, like bundling the consequences or not. So obviously getting rid of a built step if you can achieve it is great. It's obviously totally undoable. If you're using a front end framework like React or any other or most of the front and frameworks that require some sort of a built slash
compilation step. It also means getting rid of typescript unless you're using jas DOC so so that's also a significant consequence. Like you know, I think we may have spoken about it with guilta yah. I think about the fact that you know, if you're doing front end, you're going to be using any of the major frameworks, then you're going to have a built step regardless, and then you might as well just do all the stuff that you know, leverage all the benefits that it can provide if you're
going to have to have it anyway. I get that dage Age really wants to avoid it and if you can, that's definitely an advantage, but it's advantage that comes at the price. For example, dage Age doesn't use typescript. He doesn't want to use typeescript.
Nope, he doesn't. In fact, I have some words to eat on that. So last time when we talked to what's his name now, I'm Joanna Blank. Last week it.
Was it was Dan, it was Thomas Gabbin.
Yeah, so I said, I don't know if he's directly opposed to static types. I went and watched some of the talks from rails World. He is definitely not on board with static type. So I will eat those words because I said I didn't know, But it turns out that yeah, absolutely he Yeah. He was talking to Toby from Shopify, CEO of Shopify, and Matt's the guy who created Ruby, and they asked him, so, if you two could swap places, what would you do, and David said, no static types.
Ever, I want to hear the argument for dynamic types because I don't get it.
They argue, Look, first of all, you know, if you're coming from from a dynamic, inherently dynamic language like Ruby or like JavaScript or like Python, then you know there's a certain reason you picked that language. There's a certain reason, like the age ages you know loves working in Ruby, uh and and and the and Ruby is inherently dynamically typed.
So what I meant was loose types. I I like dynamic types. I don't like loose types.
I'm not sure you mean yeah, I.
Mean so dynamic typing meaning the types are assigned at run time. Uh, strict typing meaning that types don't change. Once something's a number, it's a number. So if you like, typescript is strict typing, the types are still dynamic. But well, I guess they're not as dynamic as Go. Like Go has dynamic typing, typescript is probably less dynamic than Go.
But I'm to following. Look, typescript basically is a layer above JavaScript that gets totally stripped that it built slash compiled time. As you know, we discussed the tomel last week if if our listeners are interested in more details about it. But but basically, typescript enforces types at development slash build time. Once you it has zero impact on the actual generated code. And in this regard, it's different
from Go or from Java. Wow, where where where the types that you specify actually impacted the type of code that gets generated.
If that's not entirely true though, because if you once you declare an object in JavaScript, if you never delete and you never add an inconsistent property to it, it is optimized as that struct type.
Yeah, there's a lot of optimizations going on. The optimizations are pretty much dependent on the JavaScript engine figuring out that something has a certain type and then optimizing according to that type. But there's nothing p in the language preventing you from doing something else in in so it's it's kind of the it's kind of like an AI like approach of the on time inferring that something will always be an int and therefore we can put it in an int type you know, register whatever, or or
memory address. But i'll I'll give an example. Okay. In a language like C plus plus, you've got overloading, which means that you can specify the same function to two implementations of the same function based on the type of argument on the that it receives. So you can have a function called ad which takes two numbers and returns the sum of the numbers, and you can have a function called ad which takes two strings and returns the
strings concatenated, and the internal implementation would be different. There would be two different functions just that are The difference between them is just the types of their arguments. That's not something you can do with JavaScript. And because typescript is just like a build layer on top of JavaScript, that's not something you can do in Typescript either. You understand what I'm trying to say.
Yeah, I think my question was what why is it? Why would it be valuable? In what case would you want something that was a number to now be a string or something that was a string to now be a number. Why would you want to be inconsistent in the way that you handle your objects?
Oh, I don't think anything. Anybody wants to be inconsistent in the way that they handle their objects. What they want is not to have to think about about not to have to explicitly specify types at development time. Anybody who's you know, once you have to specify types at development time, sooner or later you're gonna have to do generics. And that's just hard. And if for you, if you can be more fast and loose with types and rely on duct typing and and and stuff like that, you
don't need to deal with in with explicit interfaces. There's a lot of beauty in that the world.
I love, yes, and that's the way ZIG is. By the way, ZIG is all duct types.
So it's it's interesting too. And I know we've kind of gone off on a tangent, but I don't know that I have a whole lot more to present on stimulus and turbo anyway. But I guess the other piece of this is is knowing the Ruby community in particular the way that I do. If there was an implementation that gave people some level of benefit the way that people see benefit from typescript, whether it's perceived or real,
I think people would adopt it. But the implementations that have come out and the way that they've approached it, it just it just feels like busy work that you're adding to the system.
Look.
The other thing, though, is that.
If I can just interject on that for a second, because from my experience, typescript is the value of Typescript increases as your code size increases, even not linearly, like exponentially or at least polynomially. So if your code based size is small, which is kind of the goal with the things that we've been talking about today with turbo drive, with stimulus, you want to keep your JavaScript kind of minimal, then indeed there's relatively little value or benefit in using typescript.
And that's essentially it. I'm currently seeing a lot of value with typescript. I'm putting typescript in to some large legacy systems at the place where I'm working at Scense systems that were built several years ago in just straight on JavaScript, and I'm finding a lot of bugs of you know, people using the wrong field on the wrong object, and you know, and obviously the system worked. You know, JavaScript is really forgiving you read the wrong thing, you
get back undefined. It doesn't crash. You know, that's both good and bad. You know that they had tests in place, so things pass tests, but definitely there were bugs in the code. Like I'm saying that, the biggest challenge for me in adding typescript into this codebase is dealing with all the bugs that get uncovered. Yeah.
One thing that I was just going to point out, because you you started out saying, hey, with a larger code bases, it makes sense and that's effectively so Toby Toby Lutke he's the CEO of Shopify, right, he was one of the initial developers. It's all written in rails. They created a type system called sorbet and they use
it in all of their code. And when DH spoke up and said, hey, you know, don't ever add static types, Toby pointed out, yeah, I can see where you're coming from, and in a lot of cases you don't need it, but at Shopify we have to have it. Their is gigantic, so I think, yeah.
It seems like the the way that everybody would be happy is if we had strong dynamic types, if we had types where once you define an object, if you have a type somewhere later in the code, that should surface.
Again, that's you're talking about safety at run time.
I'm talking all safety as a dev time. There's no such thing as safety at runtime except for like null checks and Java.
What you're talking about knowing you're talking about doing static analysis on the code to try to figure out that you're not reassigning a different type value to the same variable, like yeah.
Which is what Yeah, Well, script checker can help with that if you enable if you just enable it in a JavaScript project. It's not perfect yet, but it's pretty good. And if you want to add something intentionally, if you want to create a polymorphic object, you use object out a sign.
Yeah, which basically does something called type inference, which basically means it figures out the type of variable based on let's say, the initial assignment, and then if you assign something that's incompatible with that type inference, it will complain.
Yeah, this is good. This is like, this seems like the happy medium. Everybody should hopefully be able to be on board with with that, Like we shouldn't. We want to prevent mistakes. We don't want to add boilerplate in overhead. We want to prevent mistakes. And that's what strong dynamic typing duct type strong dynamic duck typing types are.
I will add that especially when you're developing APIs, whether it be for like you're building a library or you're just working on a complex system that has APIs between different parts of it. And I'm talking about in code. APIs like function calls or interfaces not over the wire.
APIs then having static typing strong typing on that that enables the system, even the editor, to help you along and make sure that you're passing in the correct parameters and that you're getting back the correct value is valuable from my experience.
All Right, I'm gonna push us to picks.
Don't we have anything else just to say? In the context of turbone stimulus.
I think we've covered the basics. I mean, there are some other things that you can get into we didn't talk about, like outlets for stimulus, which is effectively how you call methods on one controller instance from another controller instance.
Yeah, those are getting in the weeds.
You're getting way into the weeds. But I mean, you know, like I said, it's been able to do everything I need.
So I have read I have read somewhere that turbo drive is also able to leverage web sockets.
Yes, turbo drive can, and so can stimulus. There's actually a library that was written by some friends of mine that live here in Utah called stimulus Reflex. There's also a stimulus has cable in the name somewhere that specifically works with action cable and rails. But yeah, I believe both of them work fine with web sockets. I know turbo does.
Okay, cool. I guess that's if you're really streaming a lot of data back and forth. It makes life easier that way.
Yep. Okay, all right, well let's let's get to picks, Dan, Why don't you why don't we start.
Put me on the spot so last, So I've got two picks. First of all, last week my pick was the vacation that we had in Italy, and it occurred to me that the way that we work places has really changed over the years. Like now, when I plan, I like to be planned in my trip because unfortunately we can't take really long trips, which means that we kind of need to be efficient. For example, we move
hotels almost every night because we get to someplace. You know, we do it without the kids, so it's easier and we just get to somewhere and we don't want to need to drive back at the end, so we just keep on driving forward all the time. But it does mean that we change hotels almost every day or two.
And so a couple of things. First of all, with with you know, with things like booking dot com or or Airbnb or what or you know, all the other various services, it's really easy to you know, find interesting hotels, book your trip in advance. You don't need to think about getting somewhere and starting to look, which might be an interesting experience if you're there for a week, but not really efficient if you're only there for a night. And the other way in which technology has kind of
shifted the way that we're touring. So obviously everybody now uses GPS while driving, and it makes driving a lot less stressful. I still I'm old enough to remember the days of using maps, and the biggest challenge was that if you straight from your plan, then you were really worried about how you might find your way back. And now with GPS, you know it's no concern. You don't have to worry about it. You make a wrong turn,
it'll get you back on your route. But the interesting thing is that now we do the same thing when
we walk around. So what I like to do again When I know that we'll be in a certain place for a limited amount of time, then I like to kind of check in advance what are the sites that we want to see, the places we want to go, And I do kind of a traveling salesman optimization of finding a good route that goes to all these points, a walking route, and I just have the phone in my pocket with the Google Map and in walking mode, and it just tells me, you know, turn right here,
turn left there, and I can just walk around and see the sites and not look like a tourist holding the map trying to figure out which ways up and you know, where do I need to go and and whatnot.
It just makes it's almost like having this kind of a virtual tour guide, and it's it's actually once you get used to it, it's a great way to turn to tour place, especially again if you've got a more limited amount of time, because again, if you've got a lot of time, just wander around and experience the sights and sounds and smells and what have not, and what have you. But again if you're more limited for time, I found it to be a really efficient way of
turing places. So that would be my kind of non technical pick. My technical pick is a funny kind of joke library that I ran into. It's called let me Quickly find It.
Steve taking notes Absolutely.
It's called you right there. It's called set Big Timeout. Turns out that set time out is limited to about almost twenty five days because the timeout duration is specified in milliseconds and it only uses thirty two bit values for that, so that turns out to be something like twenty four point nine days. And what happens if you want us to set time out for forty days or sixty days or half year or something like that. You
can't use set time out for that. So now you've got set big time out which can even take bigins, and you can specify really lengthy durations for your set timeouts if you need. It. Sounds really useful to me. I'm obviously being sarcastic, but it's kind of a joke. Libraries presented as such. What it does. It actually creates a series of set timeouts. So obviously that's not very accurate, but it's it's amusing, let's put it this way. So
that would be my second pick. And those are my picks for today.
Awesome, all right, Steve, what are your.
Picks before we get to the high point of the episode. I do have one sort of legit pick, and I touched on it earlier in the episode. I think an ursy JS. Their version two is out in beta, and so I'll put a link here to the upgrade guide for version two point zero, and it's got some pretty cool stuff. It's pulling prefetching, deferred props, which is sort of like props you don't load right away. You can say, hey, defer this till the page loads some infinite scrolling capabilities
and so on. So I'll put the link in the in the guide in the show notes. It's a V two dot in nurse jass dot com. I first heard about it, I think on letter VL podcast or seeing it coming from the letterbil world. So but if you just do some quick googling, you'll see all kinds of info. Now for the dad jokes of the week, let's see. So question, did you hear about the guy who got a discount on his plastic surgery? The look on his face was priceless.
Nice.
Oh I wrong?
Now, sorry, there I go. All right, So what do you call a Spanish guy being discharged from the hospital? Manuel? Although technically yeah, just don't stretch that too far. And then finally I had a conversation. I was having a conversation with my wife the other day and I said, Hey, I know you're busy, but can you say wanton backwards? She said not Now, I said, that's right.
All right. AJ's laughing, AJ, what are your picks?
For the fifteenth time? I have to pick The fall Guy yet again. I got the four K Blu ray with the extended cut, and I want to read. One of the negative reviews. Chris Palladino says, one of the dumbest movies in a long time. Agreed, writing was terrible. Agreed tried to be cute and referential but was hack and cliche. Agreed, plot makes zero sense. Agreed all over they mainly just blow a bunch of things up and have over the top unrealistic action sequences NonStop. Yes, it's
an excellent movie. I don't know how this personally like this. We agree on it and he only gave it two stars. No, it is an action romance comedy, which is kind of I don't know how many movies I can say have pulled off all three things well, but I think this one does great. The plot doesn't make any sense, but I don't know, when's the last time you watched the James Bond movie? Does the plot make any sense in that? I mean, when's the last time you watched the movie
where the plot makes sense? This one, you know, it's there's no nuance to the to the you know, the the good guy bad guy thing. You know, it's very it's there's it's just like the person who has evil motives has straight evil motives. The person has good motives has straight good motive, you know whatever. But it's just fun. It is it is. Uh, my wife loved it, you know, I walk Away and one of the positive reviews basically said this, I walk Away, and I'm like, man, that
was such a fun and funny action movie. And my wife walks away with that was such a fun and funny romance movie. And I don't know how like, you know, she and I talked about it the very first time and are like, We're like, did we watch the same movie? Because She's like, oh, the dialogue between her and him was so sweet, and I'm like no, the part where he's jumping over dumpsters and like got the four by four going over the ridge, you know, like anyway, So
I just I totally agree. It's a it's a stupid dumb movie, but it's it's just so good. It's so good. So uh. The one thing that I will say about the four K movie is the extended cut is not on the plain Blu ray. The extended cut is only on the four K. So I but I have one of those defective Blu ray players that happens to accidentally read four K. It's the lg let's see what's and you can still get these on Amazon, and you can
downgrade the firmware. It's the LGWH sixteen n S forty, so it's it's it accidentally reads four K discs and then they patch it in the firmware that chips currently. But you can downgrade the firmware and then you can just read four K discs without any problem whatsoever on it.
I can't tell you the last time that I actually held a disc in my hand or a memory.
You know, that's fine, it's it's for people that want to have movies next year as well. You know. It's because all these movies are going to get pulled from all the services. And we've already had that happen a few times. You know, Disney has done the Vault thing a few times. Whatever, But obviously the digital movies are not going to stick around already. What was what was the service used to be called Ultraviolet that went down, like the entire service went down. Everybody the.
Concept of owning your media, that's really strange.
Right, yeah, but I I I run Plex and and all of the best movies we have, the Super Mario movie, all that, it's all on Plex. So anyway, other thing that I was going, did.
You ever see the TV show, the original TV show The Fall Guy.
I watched one of the episodes, and it does not seem to be in any way related to this movie.
Okay, So for what it's worth, two of the main characters had cameos in your movie.
Yeah, yeah, I know one at the end, like one. I could tell by the camera angle and the guys smile. I could tell like, Okay, this is a reference to something. I just don't get it. And then I found out that it was.
It was Lee Major's and then Heather Thomas was also in the original TV show as well. For any of you who are too young to remember the Majors, he was probably more more well known as the six million dollar Man.
Yeah. That's really funny because these days you can't buy anything with just six million dollars. You know, if they were to do that show again, he would have to be like the six trillion dollars.
Yeah, there you go, right, Yeah, this this Blu ray player was Yeah. Anyway, the other thing. The other thing I was going to pick is passkys. So web off in has had a very sad history and there's a lot of backwards compatibility that people try to keep that makes it really complicated. And over some work that I've done, I have I have found that if you just focus on the paskis aspect, that like the the baseline stuff that works everywhere. Basically it's just a fancy replacement for
a password manager, uh and not. You know, there's there's not really any extra security than that because it's trusted platform computing. I think they were thinking it was going to take off when they made the web offense back and then you know, reality of physics and the physical world we live in hit and we know that like that just can't happen. It's physically not possible. But anyway, so if you just focus on the baseline passkeys, you can have a really good experience. And I got a
demo up on passkeys dot js dot org. And then third thing, not a pick, just a question. If anybody has experienced vertigo for multiple days in a row, please comment or tweet at me with what the what? If you've had success with some sort of solution, let me know because I am now on four days straight of twenty four to seven feeling dizzy. I don't know why, and I cannot find a remedy to it, and it's making life difficult. Is you can imagine if you felt.
Dizzy, I would check if you don't have some problem in your ear, cannot or something.
Yeah, that's that's uh I I I yeah, I'm gonna. I'm gonna go. I'm gonna go see someone about doing the eple maneuver, which is supposed to if the crystal gets dislodged. It's supposed to, like you move your head in certain ways and you get the fluid back. But yeah, I'm I'm four days into a I don't know why I'm feeling like I basically I feel like I have the flu, but only in the sense of dizziness and disorientation.
You might want to see an ear doctor or something. Maybe you've got some sort of inflammation or something.
I don't know. Yeah, but it's it's yeah, I'm gonna I'm gonna try a few things and then and then take that route if I can find someone that will get me in this week. Yes, yeah, it's it's very it's very frustrating and I'm having a hard time focusing because the world feels swimming.
Yeah, with my mom, it's it's interesting you're talking about this because it was literally this weekend. My mom had similar issues and it got so bad that they went to the emergency room. But apparently hers gets aggravated as she lays on one side versus the other when she's sleeping, and I.
Don't know that.
Yeah, he gave her anything that would help.
Yeah, probably she creates a vacuum or something in one ear and that causes a problem or something.
Yeah, I wonder, I wonder if maybe it wasn't When I I was riding my motorcycle without ear plugs the other day. I don't think that was it though, because sometimes I just go do a short ride without ear plugs because it's just nice to feel the full sensation and everything. But usually I have ear plugs and some well, then sometimes I take the ear plugs out. I kind of pop them, you know, because they you know, they're
jammed in there with the ear wax and everything. You pull them out and they're like oh, and I try to twist them so it's not so dramatic. But I don't know, maybe it was one of those things. But I can't pinpoint when it started happening. It's just I think it was Thursday night or Friday morning. I just noticed I was a little dizzy and then thought, oh, whatever, it'll go away, and then it hasn't.
Oh. I sorry to interrupt after I finished my pics, but I just saw really amusing headline. I just remembered that I saw it. Can you guess what the total global debt is in the world in dony?
I mean, guys, one hundred and fifty trillion.
Three hundred and seventeen trillion.
That's more than the GDPs of all the nations combined, isn't it.
I don't know, but I would guess.
So that's good. That's a good place to be.
Yeah, when I headed.
For economic collapse, this is fine.
Yeah, it says. It says as of twenty twenty two, the global GDP amounted to over one hundred trillion, So, oh, good, whole much over the next yeah.
Two times? How is that possible? I mean, that's a.
That's because we don't we don't. We don't need to print the money anymore. It used to be gold, then it used to be printed money. Now it's just digits in a computer.
Right, all right, I'm gonna go ahead and throw in some picks. I'm also when I'm done with this call, I'm gonna go downstairs and tell my kids that dad feels dizzy and that they need to be quiet and leave me alone for a little while. I'm just gonna lay here on the couch and quietly watch the show. You all need to leave anyway. Uh yeah, So picks games, My things have been kind of nuts in lieu of
a game pick. I'm just gonna put out there. So my latest contract, they unexpectedly lost a customer, one of the bigger customers, and so then they unexpectedly let all of their contractors go. So if you are looking for somebody who can help you with I'm I'm into the stimulus turbo stuff or rails if you're if you have a rails system, obviously I'm qualified on that. I'm also getting into AI like chat chatbot agent stuff, and so if you're looking at that, let me know. I'm yeah.
And then I think I'm just gonna do the the other stuff like my stuff picks instead of whatever else stuff picks. So JavaScript JavaScript geniuses dot com what I'm looking to do is put together a group of people who are interested in kind of pushing each other to stay current and learn new things and stuff like that in the JavaScript space. And so if you if you go there, I'm running. Uh, it's the same deal I've had and I'm going to keep that up until Black
Friday is thirty nine dollars a month. There's also yearly in lifetime options if you want to join the group. We have weekly calls. We do accountability calls on Monday and Friday. Monday is here's what I'm gonna do. Friday is what you did, and then you know, we as a group will help you stay on top of an accountable on the stuff that's going to get you where
you want to go. And it could be I just want to learn more JavaScript stuff or get better react some of it, or it could be I want to speak at more conferences or write a book or start a podcast or whatever related to JavaScript. All comers Welcome also includes the book club and I'm going to be putting out videos on how to do stuff. I'm probably gonna start with remix on the JavaScript series. So if you're interested in any of that stuff, you're definitely welcome
to join in. I'm also doing it for Ruby, and I'm eventually a start one for AI. The other one is with the AI stuff that I am picking up. I'm gonna be doing an AI boot camp next year.
It's gonna start in January, so if you're interested, I will have a website up for that here within the next day or so, so you can go sign up or jump on a call with me and we can discuss whether or not it's a good fit for you, because honestly, I want everybody who goes through the boot camp to come out of it and go, huh, I'm set up to do this, and you know, I know what the next steps are to, you know, either go find work or add this to what I'm doing at
work with it. So if I don't think you're going to get that out of it, I won't sell it to you. So anyway, Yeah, that's that's pretty much the stuff I've got going on. As far as movies go, dumb movies, I'll just throw this one in. So I don't know what possessed me to do it, but I started watching the Transformers movies like starting.
Oh no, that's that's that's less than dumb. That's less than dumb. It's like negative stuff.
Man. There, No, it makes atal sense that Anadian culture would build a robot that looks like June Buggy.
No, no, they're they're anyway.
No, it's just they ruined it with the like the soft core and all that and the Romeo and Juliet Laws the pedo stuff like it was.
So oh anyway, it's it's nice mindless entertainment. So anyway, I've watched the first three. I'll probably get around to watching the rest of them. Anyway, those are my picks. I made a j cry.
Yeah, okay, I so I'm gonna pick uh that. You get yourself on the pirate Bay and hit up the Original Transformers, the one where the Transformers are actually the good guys rather than just anti heroes that are not that are a different set of bad than the bad guys.
What's the Original Transformers? The original of the first cartoons.
The cartoons. It's like it's like Captain Planet g I.
Joe cartoons when I was a kid.
Yeah, I like, well, the car in the cartoons, the Transformers are actually good guys. In the movies, they're anti heroes. There's like optimist Prime is mostly good, but the other ones are literally just gangsters.
Okay, I'm laughing, Okay, I don't care.
Yeah, anyway, let's just go ahead and wrap it up. Oh, if you all want to reach out to me about stimulus or turbo or anything else related to that, I am totally open to that. Twitter, cmx W, you can manly chuck at topendevs dot com and yeah, until next time, max out you
