Joe Masilotti on Hotwire Native Updates, Challenges, and Opportunities - RUBY_672

In this episode of the Ruby Rogues podcast, we dive deep into the world of Hotwire Native with our special guest, Joe Masilotti. Hosted by Charles Max Wood, along with panelist Ayush Nwatiya, we explore the evolution from Turbo Native to Hotwire Native and the exciting new features and improvements that come with this transition. Joe shares insights from his journey of writing "The Rails and Hotwire Codex" and collaborates with Pragmatic Bookshelf to make the integration of web and mobile technologies more seamless for Ruby on Rails developers.

Special Guests: Joe Masilotti

Show Notes

In this episode of the Ruby Rogues podcast, we dive deep into the world of Hotwire Native with our special guest, Joe Masilotti. Hosted by Charles Max Wood, along with panelist Ayush Nwatiya, we explore the evolution from Turbo Native to Hotwire Native and the exciting new features and improvements that come with this transition. Joe shares insights from his journey of writing "The Rails and Hotwire Codex" and collaborates with Pragmatic Bookshelf to make the integration of web and mobile technologies more seamless for Ruby on Rails developers. Whether you're considering mobile applications for your Rails projects or pondering the benefits of working with a publisher versus self-publishing, this episode is packed with valuable advice and motivation. Tune in to learn about the intricacies of launching mobile apps with Hotwire Native and gain behind-the-scenes knowledge from Joe's experience as an author and developer in this ever-evolving tech landscape. Don't miss out on this compelling discussion that bridges the gap between Rails and mobile app development!

Transcript

Charles Max Wood [00:00:04]:
Hey, folks. Welcome back to another episode of the Ruby Rogues podcast. This week on our panel, we have Ayush Nowatia.

Ayush Nwatiya [00:00:13]:
Hello. Hello.

Charles Max Wood [00:00:14]:
I'm Charles Max Wood from Top End Devs. And this week, we have a special guest. It is Joe Mazzalotti. Joe, welcome to the show.

Joe Masilotti [00:00:22]:
Hello. How are you?

Charles Max Wood [00:00:24]:
Doing alright. I think we had you a while back talking about, then turbo native, now hot wire native. But, yeah, what's new?

Joe Masilotti [00:00:35]:
Yeah. So I am writing a book on hot wire native, and it is coming very close to it being completely done. So getting the word out, talking about Hotwire Native, and just getting more and more Rails developers to use it. It's been an it's been a fun couple months

Ayush Nwatiya [00:00:56]:
for sure.

Charles Max Wood [00:00:57]:
Alright. The book is out. Right?

Joe Masilotti [00:00:59]:
Yeah. So the book is out. You can buy it, digital only right now as we finish up the last chapter. And then when it comes out, you know, final version, you can start ordering the physical copies and, like, get it at your bookstore and stuff. But if you buy it now, you get a discount, and then you get an update email every two weeks with, like, the new features and everything that have been added to the book. So if you're only going digital, it makes sense to buy it now for the discount. But if you wanna wait for physical, wait till, you know, a few more months.

Charles Max Wood [00:01:31]:
Right. And that's so is it only available on the Pragmatic bookshelf

Ayush Nwatiya [00:01:35]:
Yeah.

Joe Masilotti [00:01:35]:
Then? Yeah. It's only available directly from my publisher.

Charles Max Wood [00:01:39]:
Awesome. And those guys are amazing. I love those guys.

Joe Masilotti [00:01:42]:
It has been such a pleasure working with them. Oh my god. I even just from, like, the initial calls with them, I had such a good feeling about them as a publisher versus everyone else I spoke to. And, oof, looking back on it, so glad I went with a publisher instead of self publishing because I probably would have given up by now, to be honest.

Charles Max Wood [00:02:03]:
Yeah.

Joe Masilotti [00:02:04]:
So know what I'm talking about.

Ayush Nwatiya [00:02:06]:
Oh, yeah. I that was one of the questions I was gonna dig into as publisher versus no publisher. We'll get to that a bit later on. Yeah.

Joe Masilotti [00:02:12]:
For sure.

Charles Max Wood [00:02:14]:
We could just do it now. I was gonna say, I mean, I've self published a book. I I know I used to self publish a book. I've talked to the guys at Pragmatic Bookshelf before, but I've never actually gone all the way to, hey. Maybe we should do a book together.

Joe Masilotti [00:02:29]:
Mhmm.

Charles Max Wood [00:02:30]:
But I know a lot of folks over there. I don't know who you're working with, but over there is your editor and stuff. But, yeah, it's way back in the day, Ruby Rogues was gonna write a book. Mhmm. And we were talking to Pearson, O'Reilly, kind of folks. And the reason was was because we were gonna, piggyback on small talk best practice patterns to write Ruby best practice patterns.

Joe Masilotti [00:02:55]:
Nice.

Charles Max Wood [00:02:55]:
And so since we were kind of stealing the book title a little bit Mhmm.

Joe Masilotti [00:03:02]:
You

Charles Max Wood [00:03:02]:
know, we figured we'd have less legal trouble. But there were six of us at the time, and they wanted to give us, like, a 10 or 15% royalty to put them on the six of us.

Joe Masilotti [00:03:15]:
And we

Charles Max Wood [00:03:15]:
were just we we kinda did all the looking and feeling and everything. And, I mean, they they had a clamp down ownership, blah blah blah blah, and the royalty was awful. And then I talked to people who have published through Pragmatic Bookshelf, and they they're like, Oh, these guys are a dream. And, you know, they're totally willing to work with you as far as, like, ownership rights. I know some people have let them own it and other people have kept ownership. I've seen it work both ways. They've also published books like Avdi Grimm's Exceptional Ruby. He self published it, and then they picked it up.

Charles Max Wood [00:03:49]:
Yeah. And so, you know, and so they're totally willing to play ball, and they're everybody that I've talked to, the royalty rate's, like, 40 or 50%.

Joe Masilotti [00:03:57]:
Yeah. Yeah. Exactly. And we could talk about it more, but, like, if they were giving me 0% royalties, I still would've went with them.

Charles Max Wood [00:04:05]:
Oh, really?

Joe Masilotti [00:04:06]:
Yeah. They're the, perhaps a little, you know, insider knowledge here. I am not planning on making money off of the book.

Charles Max Wood [00:04:14]:
Uh-huh.

Joe Masilotti [00:04:15]:
It's not my goal to make money. Like, I you know, I do the I did the math on it. However many rails developers there are in the world, however many of those are gonna do mobile apps, it's still a relatively niche topic. Right? Maybe that changes in a few years, and it and then I'm singing a different tune. But right now, if I can get one or, like, two high ticket clients for my consulting business from this book, it will pay for itself. Like, all the work that I put into it. Like, that's all I need is to land two big clients, and that's my kind of marketing plan with all of it. Like, when I go to conferences, I am checking a suitcase full of books to bring with me, to just throw into the crowd, essentially.

Joe Masilotti [00:04:58]:
You know, like, I wanna get this thing to as many people as possible. So having a publisher that supports just really good distribution and getting into local bookstores and a kick ass editor, like, it worked it worked so well. The 50% royalties is kind of just a bonus to me.

Charles Max Wood [00:05:18]:
Yeah. It's it's interesting that you bring that up because it seems like the only people I really see make any kind of real money on books are essentially celebrities. Right? Mhmm. So you hear that, like, Michelle Obama got a gazillion dollar and it wasn't royalties. It was an advance on royalties Exactly. For the book. And it was because, the publishing house knew they could sell a whole bunch of those books, and they liked her. And so they figured it out, whereas yeah.

Charles Max Wood [00:05:45]:
You know, for us, we're in a small niche. And in your case, it's a small niche of a small niche.

Joe Masilotti [00:05:51]:
Mhmm.

Charles Max Wood [00:05:51]:
And so yeah. You know, you're you're doing it for reputational and other reasons that make a lot of sense.

Joe Masilotti [00:05:57]:
Exactly.

Ayush Nwatiya [00:05:59]:
So, yeah, that democracy

Joe Masilotti [00:06:00]:
not gonna be a New York Times bestseller, and I'm okay with that.

Charles Max Wood [00:06:03]:
I'm disappointed it should be.

Joe Masilotti [00:06:05]:
I mean, that'd be wild if it was, but I don't I don't see that happening anytime soon.

Charles Max Wood [00:06:11]:
Everybody's doing Hotwire native these days. Hopefully,

Joe Masilotti [00:06:16]:
the broader New York Times audience is also doing Hotwire Native, and they'll understand what I'm talking about. But, you know, maybe not this year. Maybe it's a second edition.

Charles Max Wood [00:06:25]:
Yeah. Well, you know, we are in the rails renaissance is what I'm hearing. So, but but but let's let's move in and talk about Hotwire Native because I think that's probably where most people want to, want to hear about. I think I think the book insider baseball is helpful for the people who may wanna write a book or, you know, maybe they're like, oh, this publisher does a good job on these things and takes good care of their authors, and so I wanna support them. But, yeah, let's let's dive in. So Hotwire Native, we've already done a show on Turbo Native, and I don't think the overall thing that it does has changed. So just give us a real quick overview on that. And then what I'd like to do is get into what's changed Sure.

Charles Max Wood [00:07:06]:
If that makes sense.

Joe Masilotti [00:07:07]:
Yeah. So Hotwire native takes your mobile website and shoves it inside of a an app that you download from the App Store or Google Play. So your app itself, the code is essentially a web browser that has, you know, maybe a native tab bar, native navigation, push notifications, stuff like that. But the majority of the content is a web view hitting your server, probably your Rails server, and rendering your HTML, CSS, and JavaScript. And what it gives you is, like, almost full feature parity with your Rails app with just a few lines of native code. And once you submit to the app stores, you can continue to add new features to your Rails app. And because the native clients are just hitting your server, they get those features essentially for free as long as there's a a link to that new feature on an existing page. That's been the story for a decade since, like, Turbolinks native was around.

Joe Masilotti [00:08:13]:
And there's also opportunity to dive down into native APIs. It's different than, like, React Native where it's taking over the entire app, and you have to write React Native. Hotwire Native sits next to iOS or Android. And when you wanna drop down to, you know, push notification API or the haptics feedback or health kit, you just write that code and then send some data back to your server or back to the web view. There's no HealthKit, plugin for Hotwire native. You just write HealthKit code, so to speak.

Charles Max Wood [00:08:45]:
Right.

Ayush Nwatiya [00:08:45]:
And I think Yeah.

Charles Max Wood [00:08:46]:
It's a little bit like oh, go ahead.

Ayush Nwatiya [00:08:48]:
I think one key point that also needs to be made is, it's separate code bases for iOS and Android, which I'm a huge fan of because, I don't believe the one code base across many platforms thing has ever worked. So I really like the fact that you have two separate code bases, which kinda share this common engine of the Rails app.

Joe Masilotti [00:09:13]:
Yeah. For

Charles Max Wood [00:09:13]:
sure. I'll say haven't done

Joe Masilotti [00:09:14]:
The two code bases are essentially wrappers. Right? Like, there's until you go into real native implementations of things, the codes the code length in the native apps is relatively minimal.

Charles Max Wood [00:09:30]:
Yeah. I've done some turbo or no. Not turbo native. I've done some, React native. And, I mean, they they tried to sell you on the the one code base for everything, but

Joe Masilotti [00:09:42]:
Mhmm.

Charles Max Wood [00:09:43]:
I think, eventually, they just had to acknowledge that sometimes you're just gonna have to deviate and have this for this and that for that. But, yeah, it's it's like a full takeover on the JavaScript. You're building the interface and the whole nine yards. And what I've seen and done with something like Hotwire Native, the nice thing is is I can keep the same look and feel if I want people to have the same experience on the web and on the app, or I've also seen it where people tend you know, they they kind of pick up a style sheet and kind of figure it out so that it looks more native if you're in the app. And

Joe Masilotti [00:10:20]:
Mhmm.

Charles Max Wood [00:10:20]:
You get a you get a lot of mileage out of it that way.

Joe Masilotti [00:10:24]:
Yeah. You get a lot. And one of the big recommendations I have is to continue using your web design in the apps. Like, if you're trying to chase iOS, like, iOS native UI and Android native UI, you're always just playing catch up. So doing your continuing your, you know, your Tailwind CSS or your boot Twitter bootstrap, you know, styling on the mobile apps is usually the best approach because you just have two fewer things to worry about. It's like you have your web UI and you that works on your native, and then maybe you show or hide some content that doesn't make sense on the native apps like your, you know, hamburger menu or whatever that doesn't make sense in a mobile context because you have a tab bar. But for the most part, you're just, like, rendering the same stuff, styled the same way.

Charles Max Wood [00:11:16]:
Yeah. So what what's new? I mean Yeah. Besides the name change, you know, what what are we looking at here?

Joe Masilotti [00:11:24]:
Yeah. So turbo native became hot wire native, a few months ago, and the big change is that it now encompasses what used to be called Strata. Strata is or was the library formerly known as Strata is the way to communicate to your web view through JavaScript. It's how you can add it's kinda like stimulus for mobile apps. You add native sprinkles to your apps. You add a button in the top right or the top left. You add interaction with the push notification API. And Strata worked with sending JSON back and forth between the native code and the web view, but it required, like, a 50 lines of code to just integrate into your library because you had a subclass something and pass along messages.

Joe Masilotti [00:12:14]:
Now Strata is part of Hotwire native and has just been renamed, like, bridge components, lowercase, you know, b, not a capital s for Strata. They're just a part of Hotwire native now. And what that means is that when you use these bridge components, you just use them. You don't have to worry about, like, a whole installation step. They're already bundled. That's probably the biggest one. That's for probably more not more experienced Hotwire native developers, but more advanced apps. The most relevant change for people that have never used it is that the time to market, like, from starting a new Hotwire native iOS app to running it in the emulator or the simulator went from 45 lines of code to, like, 12 lines of code to get something running.

Joe Masilotti [00:12:59]:
And Android went from, I think, like, seventy, eighty to, like, twenty five thirty five. And those are the things that we're really looking forward to as making those even fewer is just, like, how quickly can we get from brand new Xcode or Android Studio project to content rendering on the screen in a mobile app simulator emulator. And we've made some really big progress with that by just making a lot of assumptions and letting people, you know, giving people some of the higher level abstractions than we used to give them with turbo native.

Charles Max Wood [00:13:34]:
That makes sense. I have to say, there's this really terrific book out there. I don't know if you all have heard of it. It's called, the rails and hot wire codex. And and I was going through some steps in that, for, for turbo native at the time. And, yeah, a lot of this stuff that you're talking about, like the extra installation step, it it wasn't impossible to figure out, but it wasn't something that I was regularly doing. And so it felt like it took an inordinate amount of time to figure things out when I messed them up. And so it sounds like there are just a lot fewer places where Chuck can mess it up, if that makes sense.

Joe Masilotti [00:14:13]:
Yeah. The way I look at it, like, turbo native Hotwire native is, like, equivalent on rails to writing a routes a route, adding a controller, and adding a view. Those are all wired up magically by their name. Right? You have a posts controller. It's gonna render posts slash index or posts slash show depending on the method you're in. Turbo native required you to manually say, okay. The post the get request to posts has to go to the post's index controller, and the post's index controller has to render the post index view. Like, all of those little places that you could either fat finger or or just, like, miss, that's how we love that's why we love Rails.

Joe Masilotti [00:14:57]:
All of those conventions make sense.

Charles Max Wood [00:14:59]:
Conventional configuration. Yep.

Joe Masilotti [00:15:01]:
Yeah. And, like, the turbo native was way more configuration over convention, and now hot wire native is way more convention over configuration. I I hope I got those right. You do a lot less code, with Hotwire native, and a lot of it is just assumed for you. But we didn't hide any of the APIs. They're still public. Like, if you still wanna drop down and do all the wild stuff you were doing in a turbo native app, those APIs are still available to you. It's just like you're, you know, a layer below the abstraction we want you to work with.

Joe Masilotti [00:15:29]:
So you have more freedom, but you also are more responsible when something goes wrong.

Charles Max Wood [00:15:34]:
Ayush, how does that make you feel with all the stuff you wrote in that book?

Ayush Nwatiya [00:15:40]:
Honestly, it not doesn't make too much of a difference to me because, like, it is it's a fast moving kinda Uh-huh. Area, and I knew that. And, excuse me, and I kinda and that was the reason why I decided for the second edition of my book. I wasn't gonna cover the native stuff anymore because I'm I've got both my feet firmly in the website of things, and it was it's quite a lot to do keeping up with all three platforms. I'm like, yeah, not anymore. But I'm I'm quite happy that these developments are happening because it makes life easier for other developers. Like, the when I was writing the the native chapters in my book, it drove me to the edge of sanity. Like, it was, like and I had done native development professionally before.

Ayush Nwatiya [00:16:30]:
It just had been a few years I was a bit rusty. Like, for a beginner, I can imagine just how tricky that must have been. So I think removing all these hoops that you kinda have to jump through is definitely a a step in the right direction. I'm really happy to hear that these, changes are being made. Yep.

Joe Masilotti [00:16:51]:
Yeah. So much of the old way of doing things was just, like, totally manual. Like, here's a link. What do you wanna do with it? There was no routing in place. There was no modal handling. There was no dismissing. Like Mhmm. Here's a link.

Joe Masilotti [00:17:08]:
Here's a web view. Like, go for it. It was so thin around the web view, the wrapper, that, you know, your book, the the codex book, you had to deal with session delegates and, like, navigating between screens if there's a modal and stuff. And, like, all of that stuff has been abstracted into just one line where it's like, here's an object. Give it a URL, and it will handle everything for you automatically as long as you have the path configuration set up, which we could dive into if you want. But that just didn't exist back then. And what's kinda wild is, like, it existed in turbo native Android for quite a while, but the iOS library just hadn't been updated in, like, a year to get up to speed with this. And when I first learned that, I was well, first, I was really upset because I was writing all this iOS code for so many clients.

Joe Masilotti [00:17:58]:
And then I was like, well, this is also just silly. Like, why have we not gotten up to speed? And that's around the time I started working with 37 signals directly and started getting contracted by then to bring the iOS library up to speed with Android. That's where the turbo navigator library came from that we then upstreamed into Hotwire native. Like, all of this development that was essentially sponsored, right, by them that I could do to bring the two libraries back to feature parity. And I'm still working with them. Like, we have a really cool new demo site coming, which I'm very excited about that's gonna be written in Rails instead of JavaScript, so really relevant for Rails developers. But, like, all of that stuff took buy in from 37 signals to finally sit down and say, okay. We're we're focusing on this now.

Joe Masilotti [00:18:44]:
And before that, it was just like, what is this turbo native thing? Is it even supported? You know? And I'm trying to scream from the from the the mountaintops of, yes, it is. I have many, many clients running these apps, but it's hard when there's 30 open issues and the last commit was six months ago. It's not the case anymore. Yeah.

Charles Max Wood [00:19:03]:
So speaking to that, right, speaking to kind of keeping things up to date and stuff like that, I will say that one of the things I ran into pretty fast was that, and and I think I was working off an older version of of Ayush's book, Codex book. But and and I'm looking forward to this in your book because pragmatic programmers is usually pretty good, I will say, in making sure that what's in the book is pretty close to up to date. But I ran into version issues almost right away.

Ayush Nwatiya [00:19:33]:
Mhmm.

Charles Max Wood [00:19:34]:
Right? And it's like, okay. Do you wanna run the latest Android? Okay. Well, you know, the example in this book is, you know, a version old or two versions old. And so I guess the question is both for the book and for the the framework.

Joe Masilotti [00:19:50]:
Mhmm.

Charles Max Wood [00:19:51]:
I don't know. Is the framework the right term for Hotwire native? I'm gonna say framework.

Joe Masilotti [00:19:55]:
Yeah. Framework. It's technically a library. Right? But, like, I call it a framework because we're building a Hotwire native app.

Charles Max Wood [00:20:01]:
Yeah. Anyway, so so how how well are they doing staying on top of those things? Right? So when Apple releases a new iOS version or Android releases a new version, you know, yeah, is 37 signals or whoever's working on it keeping that up to date? And then is your book gonna stay up to date?

Joe Masilotti [00:20:21]:
Yeah. So right now, we're in this interesting part where Android SDK 35 is, like, the default with new Android Studio builds. But Hotwire native Android works only with Android 34. So if you, like, create a new Android project right now and, you know, this is 02/20/2025, We're in the really that awkward time where the new live became the default last week, and we have an upgrade.

Charles Max Wood [00:20:50]:
Week. Okay.

Joe Masilotti [00:20:51]:
Android changes, like, last like, the the SDK has been around for a while, but it it was became the new default in Android, like, very, very recently. Right? So if you create a new Android app right now, it will be broken. You have to drop down to 34, and you're gonna get all these warnings from Android Studio. So there's an open PR already for Hotwire native Android. We're just doing all our due diligence to make sure it works. But, like, things like that are we stay on top of them with the libraries. It's easy to release a new version of a library, relatively speaking. For the book, it gets a little bit trickier because I can't just update someone's physical copy of a book.

Joe Masilotti [00:21:29]:
Right? I can update the PDF. No problem. Like, the three beta versions of the book that have been out already

Charles Max Wood [00:21:35]:
That's why I always buy the digital version instantly from Yeah. Pragmatic studio and not from Amazon is because they'll email me. Hey, dude. There's a new one. Exactly. Exactly. Yeah.

Joe Masilotti [00:21:45]:
You buy it direct from the publisher. You get an update every time I update it. And and right now, we're in a really good spot with iOS. IOS, just released a new version of Xcode that changes some things about how folders and groups are related under the hood, and, like, we're using that new stuff. So we're on up to speed there. But Android, the book is written for '34, not '35 because I have to wait till the Hotwire native Android support comes out. So what I'm doing as an author is making sure that I'm not releasing this thing to physical until we are set on both platforms, at least for a little while. And that won't always be the case.

Joe Masilotti [00:22:23]:
Android 37 will probably break something when it comes out in a few years. But I see this book as something that will probably need to be updated every eighteen months, at a minimum. So I'm making sure that every single time I reference a version code or a version number or an SDK, it's like, by the way, this was tested on version x. If you're using anything newer, like, you're kind about your own, but also join my Discord, and I'll help you. Like, join my private Discord just for book own book readers, and and I will help you get through it. Because someone else is already gonna ask that. We're already gonna be up to speed on it. And maybe that just means, like, hey.

Joe Masilotti [00:23:03]:
Here's a PDF version of the book. You're good to go. Or it's like, oh, you need to just make this one change, and it's, like, documented somewhere. The short of it is that it sucks. Like like, there's so many changes all the time, and I'm sometimes the one who's making the changes to the library, and then I know I have to update the book later. So I'm I both have insider knowledge into what's coming next, but I also can dictate how quickly it happens or slowly. So it's it's also this just, like, fun mental game that I play with myself where it's like, do we include this in the Hotwire native repos, but then my book has to mention it? Or do we not? And, like, I wait. So it's all this fun stuff I never really had to think think about before.

Ayush Nwatiya [00:23:48]:
Yeah. I feel your pain, man. It's when when, new stuff comes out in reels, I'm always, like Yeah. Agonizing. I'm still agonizing over what to do with the second edition, what to include, what to exclude. It's, it's a lot harder when you're when you're not a book author as well, which actually, segues nicely into another conversation I wanted to have, which is, you historically were primarily an iOS developer. Am I am I right in saying that? Mhmm. And you did Android, for this book as well.

Ayush Nwatiya [00:24:19]:
Like, Android is fairly new to you for this book. What was that experience like? Because from my point of view, Android has been the bane of my life for years and years and years. Like, everything on Android has been more difficult to do than iOS. Yeah. And I think for me, the the final straw that made me decide to exclude, native from the second edition was when Strada had just come out, and I needed to update my book to include Strada. I was at I was on holiday at my parents' house in India, and I opened up the, the Android Reaper for the book, and I included the Strata library in there. Instantly, everything broke. I fixed it.

Ayush Nwatiya [00:24:59]:
God knows how I fixed it, but I fixed it. Closed Android Studio, got back got back home to The UK, opened Android Studio again, and it was broken again.

Joe Masilotti [00:25:09]:
Oh, yeah.

Ayush Nwatiya [00:25:10]:
And I'm like, gah. Yeah. How was your experience like learning Android?

Joe Masilotti [00:25:16]:
Yeah. I would say that I didn't really start learning Android until the Java to Kotlin migration like, change. Like, once Kotlin became the default language for Android apps and Android Studio, that was when I seriously started considering Android and started doing Android projects for clients. All of my public material, like my newsletter, my blog posts, my my Twitter, and everything, I usually talk about iOS because it's such a majority of the market, and the code is just way simpler most of the time. Like, there's way less code. It's like you don't worry about some x random XML file or some factory just to wire a little button up or whatever. So I usually talk about iOS because it's just more elegant and markets better. I've been doing Android for a long time, but I've never taught Android in the way that I'm teaching it in this book.

Joe Masilotti [00:26:12]:
So what I've had to do is get I have an editor or not an editor. I have a beta reviewer who is a, like, hardcore Android developer. Doesn't know Rails, doesn't know Hotwire native. They do Android day in and day out, and they are giving every single line of Android code, like, two or three reads through read throughs in this book. And that has pointed out some small things about, like, where I I use a Ruby term instead of a Kotlin term, but also some larger things where, like, I've made mistakes in the book that are just straight up wrong. Like, I I outlined a function and was like, here's how you write it in Kotlin. And you and you replied and was like, no. That doesn't even compile.

Joe Masilotti [00:26:51]:
It was like, oops. You know, like, thanks for that. But but he's also bringing up more conventions that are more akin to the Android developer experience. Like and you do things in Rails a certain way. You do things in iOS a certain way. You do things in Android a certain way. And I'm not as privy to those because I'm mostly just, like, slapping what I can together. He's coming out and saying, hey.

Joe Masilotti [00:27:11]:
You're you're you're managing your versions the wrong way. Like, you you're essentially not adding any version numbers to your gem file. Like, you should probably have a version number in the equivalent for Android. Stuff like that that's just, like, really helpful to to pass on to my readers. It'd be really tough without that. And, also, just like the book would be worse because it'd be wrong in some places, and I look like an idiot. So very grateful for for for that editor, for that beta reviewer. It still doesn't change the fact that writing Android chapters usually takes me two to three times as long as writing the iOS chapters.

Joe Masilotti [00:27:46]:
I have a half a chapter left to finish my manuscript. All of the content, it it'll still need to be over to through two or three rounds of editing, but, like, the content, I have half a chapter left. It is an Android, half a chapter. I have been writing this half a chapter for three weeks, and it is killing me. And it's just like, I wrote the iOS chapter in, like, two hours, the iOS side of the chapter. But the Android side has been such a pain in the butt because I just, like, skip a step or forget something or get locked out of my Google Play account because I, like, said that my name was Joseph Mazzalotti instead of Joseph Anthony Mazzalotti. And, like, little silly nitpicky things like that are causing this chapter to just take forever. But as soon as this call is done, I have a nice three hour chunk to work on it, and I'm hoping I can finish it.

Charles Max Wood [00:28:37]:
It sounds like the the old yarn for programmers where it's, the the first the first ninety percent of the work and then, you know, the second ninety percent of the work.

Joe Masilotti [00:28:47]:
Oh my god. Totally. And I know that as soon as I finish the manuscript, the real work starts of, like, the editor get the first round development editor, the beta reviewers, then the the publishing editor. And then we talk about typos and layout, and it's like and grammar. Like, we haven't even addressed those things yet. You know? And that's just gonna be, I know, the most tedious, tiny changes. But they'll all make a better book, and that's why I'm working with a publisher.

Charles Max Wood [00:29:13]:
Yeah. So, you know, kinda getting into this where you have a book, you know, you're walking people through, building apps. I guess some of the questions that I have getting into kind of, what you can and can't do with Hotwire native. Right? And And I think we went into some of this in the other episode, but, the biggest podcast that I do every week is JavaScript Jabber. Right?

Ayush Nwatiya [00:29:39]:
Mhmm.

Charles Max Wood [00:29:39]:
And so you've got the React developers and the Vue developers, and then you've got other people that, you know, they're kind of into JavaScript, but they're not really, like, deeply right? So they might have instead of a single page app with React and React router, they've got, you know, something that looks a little bit more like a Rails app, and they've got Express or Sales or something on the back end. Mhmm. And so, my question is is can you do a a Hotwire native app if it's not Rails?

Joe Masilotti [00:30:07]:
Yeah. Short answer is yes. The native frameworks, hardware native iOS and Android are platform agnostic. They will work on any back end, any web rendered content as long as you are doing your page to page navigation with Turbo JS. So if you're not doing Turbo JS, which is the default on new Rails apps, it has been for a number of years, you will not get the callback handlers to the native apps to know to present a new screen, to know to do the native transition, to give you the hooks to make changes. So my recommendation is usually, like, if you have Rails and you're using Hotwire, Hotwire native is is a very easy add on to it. You don't have to make many changes to your server. If you have a React front end and you have, like, a Jace your Rails app is supplying a JSON endpoint type thing, you're gonna have a much harder time kinda hammering that to make it work with Hotwire native.

Joe Masilotti [00:31:08]:
And, honestly, I'd just recommend React native. But if you have a a a view app or a even a Laravel app, if you change the page navigation to use Turbo JS, Hotwire native will work as if it was a Rails app. And there's very little that you'll need to add to your non Rails back end to get some of the niceties. Like, you'll have to create your own Hotwire native app helper that just checks the user agents. Like, things like that that are actually not that hard or not that much code. The but the most important thing is if it's running turbo JS, you're good.

Charles Max Wood [00:31:45]:
Right. So the other question that I have is I know that some people have a tendency to like, they'll run into some some weird gotchas. I think my favorite one is that you have a form submit

Joe Masilotti [00:31:58]:
Mhmm.

Charles Max Wood [00:31:58]:
And a lot of times, it'll submit with turbo TurboStream. And then, you know, the way that you put your page together, it doesn't actually reload anything, and so then people just turn it off.

Joe Masilotti [00:32:09]:
Mhmm.

Charles Max Wood [00:32:09]:
Does that does that make it not work with turbo native when you do that kind of a thing? Or are there other things that people may be doing with their rails apps that are gonna cause them trouble if they try and adopt this approach?

Joe Masilotti [00:32:21]:
Yeah. So anything that's happening on the same page that, like I use the example, is your URL changing? If your URL is changing, that will trigger most likely a new page, a new screen getting pushed on the native apps because you're doing, like, a full on turbo JS, navigation. If you're doing something where you have a turbo frame and that's making a request that's happening inside the turbo frame, that's not gonna push a new screen onto the stack. And that's ideal. Like, you think about a lazy loaded frame, you don't want when that frame loads to push a new screen. You just want that content to appear inside the website. Turbo Streams have their own custom handling, and there's some documentation about it on native.hotwire.dev. But the the short of it is, like, if you're submitting a form, you'll most likely wanna push a new page for the mobile apps because it will create a better experience for your mobile users, mostly related to when you click a link, it opens a form in a model.

Joe Masilotti [00:33:28]:
It slides in from the bottom to give you that context of, like, you've kinda broken out of the standard view. And then when you submit that form, it dismisses the model and either refreshes the page underneath the original page you're on or pushes a new screen onto the stack. And all of that is handled out with the framework. You don't have to do anything custom except one line of configuration to say that these screens should be presented as modals. But the the best part about all of that is, like, all of the caching of the previous screens because you made a post or a non get request, all of that caching is destroyed. So when you go back, that content will be fresh. If you go forward, that content will be new. You you have all of this default sane handling around form submissions that didn't exist before that really makes it like, most folks won't even know what I'm talking about because you never have to deal with it.

Joe Masilotti [00:34:19]:
And that's and that's, like, the way we want it. You know?

Charles Max Wood [00:34:22]:
Yep. Do you

Ayush Nwatiya [00:34:24]:
wanna talk briefly about, the the, I don't know if these are still a thing, but there are three pods, which are drawn in Rails specific for Terburn for Hotwire native, receive historical location, resume historical location, and refresh historical location. I don't know if those are still a thing and seems relevant. We could probably chat about that as well.

Joe Masilotti [00:34:46]:
Yeah. For sure. So those are the historical location routes, and the Turborail's jam includes those by default. It's also what exposes the Hotwire native question mark, helper to essentially say, is this request coming from a Hotwire native app to do conditional logic? Those three routes were something that I didn't know about for a number of years. They've kind of flown under the radar. They kinda were shoved in Turborails because, Basecamp needed them, and they were never publicly exposed or documented. Ayush, you found those in your book. And when I was reading your book, the codex book, I was like, wow.

Joe Masilotti [00:35:21]:
These are really powerful. And but didn't really understand how to use them because you had to set up a lot of default handling around them. And there's an open PR right now. Hopefully, by the time this podcast is released, it's merged in and a new version is released where this handling will be automatically included in the native wrappers by default. And what that means is that at any point, you can redirect to one of these three special routes, and the Hotwire native app will take custom actions. Receive, refresh, resume. So recede will pop the top screen off the stack, kinda navigate backwards. If there's a modal presented, it will dismiss the modal.

Joe Masilotti [00:36:03]:
Refresh will do the same thing, but then refresh the previous page. And then resume essentially just says, like, don't do anything. I still haven't found a use case for that one. So if you're listening and, know of one, I'd love to hear it. But these are really, really helpful when you're doing form submissions because, like, most of the time when you submit a form, you're, like, on the index page, you show the new page, and then you go back to the index page. You want that index page to refresh to to show the new, entry or, like, the flash message or whatever. And you can use this refresh historical location to dismiss the screen and then refresh the one underneath. And your mobile apps behave as if it was a Rails app just, like, perfectly.

Joe Masilotti [00:36:44]:
There's also some helpers built in that let you do these routes only for Hotwire native apps, but then do a normal redirect for rail for your web apps. So you actually don't even have to have any conditional logic. You can just use these helpers and pass in a new route, which make it even easier on your rail server because there's less changes to manage. You're essentially changing that one line of code instead of, you know, an if else statement.

Ayush Nwatiya [00:37:10]:
Yeah. I found that, the integration with the redirect helper is really, really useful because you could just do something like receipt or redirect to on on the real side.

Joe Masilotti [00:37:22]:
Yeah. Exactly. So I

Charles Max Wood [00:37:24]:
I have a another tangent, another question that's not in this vein at all. One of the things that I see people talk about, you know, when they're talking about the different options. Right? Usually, it's in the JavaScript world, and so they're looking at, like, ionic capacitor kind of thing, which is sorta kinda in this vein and sorta kinda not in this vein. And then you've got, the re the React Native, and then you've just gotten, like, straight up native where you're writing Swift or Kotlin. Yeah. And with the React Natives and and the others, basically, one of the things that people get into then is, well, what if my app has to be offline? Right? What if I have to deliver content or or stuff like that offline? Or, you know, I'm working in a place where there's not really good connection, but I need to use the app to, I don't know, upload pictures or crap like that. Right? So it needs to cache it. And then when my Wi Fi turns on, then it says, oh, here's all the activity I needed to do.

Charles Max Wood [00:38:25]:
Yeah. The is that just not a good fit for turbo native, or are there mechanisms that allow you to do some of these things?

Joe Masilotti [00:38:32]:
Short answer is if you need an offline first app, Hotwire native is not a good choice. K. You're you're gonna end up having to build out so much of the code base natively to do offline access first that it's not worth trying to kinda shove Hotwire Native into it. If you have an app, you know, kinda moving along the spectrum here. If you need an app that is mostly web connected but has, like, one or two offline features, snapping a photo and uploading it when you have Wi Fi, you build a Hotwire native app, and you just build those features natively. So maybe

Charles Max Wood [00:39:08]:
Okay.

Joe Masilotti [00:39:09]:
20% of your app is native. The rest of the 80% is driven by the web. That's a really good use case because you still get all the benefits of Hotwire native, and then you have this little offline, experience for a very specific use case. I did exactly this for a client last year, two years ago at this point, where they were a tour guide, like, reseller. They sold tickets to tour guides, to to to tourists going on tours. And oftentimes, they were traveling, so they didn't have Wi Fi, right, or or Internet at all. So they would open the Hotwire native app. In the background, it would download all of their tickets.

Joe Masilotti [00:39:48]:
And then when they opened the app without service, it would switch into offline mode with some native code and show through a native screen all of the tickets that they have purchased that are stored on the device. Then when they click one of those, it would show the QR code and the map, All this stuff that they needed to get to the tour and then show the tour guide, hey. This is my ticket. But all of it was offline. All of it was cached to the device, and none of it was dealt with with turbo native or hot wire native. It was all done with manual code. And then as soon as they got Internet access again, it would switch to online mode where there was a link to the same experience on the web. That's, like, the really, I think, the best best of both worlds, essentially, where you have this offline experience for a very important specific use case, and then everything else is powered by Hotwire native.

Joe Masilotti [00:40:38]:
For for complexity, the Hotwire native implementation versus the native code, Hotwire native was about 5%. Native implementation was out 95. So, like, that's the level of, you know, native code you'll need just to build those two screens versus what you need for hotwire. I need to access your entire rail server.

Charles Max Wood [00:41:00]:
Right. So I have I have two use cases that I'm thinking of here, and one of them is kinda like that where

Joe Masilotti [00:41:06]:
Mhmm.

Charles Max Wood [00:41:08]:
I've talked about, hey. I'm politically whatever whatever. I'm I'm not gonna get into all that, but we we have an issue where we have a caucus night in Utah every two years. And last year, we tried to do a registration, and that that was a web app. And then we wanted to be able to scan people's QR codes and check them in. Mhmm. And the Wi Fi at the schools was not ideal. Yeah.

Charles Max Wood [00:41:28]:
And so what you're saying is is we could have the people who were scanning QR codes. Right? The the the QR code scanner and having a list of people who have already registered, having that, that that could be a a native component, but the rest of it's all turbo native. And then the same thing with people showing up with a QR code. The other use case that I'm looking at is a little different, and that is for top end devs.

Joe Masilotti [00:41:59]:
Mhmm.

Charles Max Wood [00:41:59]:
And and and, incidentally, I made it into a multitenant app. So if you wanted to run your podcast network on what I'm running, you know, I want to open that up to people and I want them to have an app.

Joe Masilotti [00:42:10]:
Mhmm. Mhmm.

Charles Max Wood [00:42:10]:
But, one thing that I've seen is if you're putting out videos or other content, yeah, some people wanna access that offline.

Joe Masilotti [00:42:19]:
Right.

Charles Max Wood [00:42:20]:
And what I've seen from other apps is is you kinda hit the button, and then it says, okay. I'm downloading it. And then once it's downloaded, it just kinda has a flag on it that says, this is available offline. So what you're saying is is I could just have it then load a native player and play the video or a native player for the audio. And then the rest of the app, so browsing and knowing what you have access to and everything else, I can either cache those pages or I can yeah. Things like that. Just let that run as a regular app.

Joe Masilotti [00:42:54]:
Yeah. Yeah. Exactly. And, offline caching is, like, a whole another topic that is not supported right now, but is supported in, like, base camp and hay, if you notice that. So Uh-huh. That is something that, like, maybe there's opportunity to upstream that. Maybe there's opportunity for 37 signals to get, like, a public here's how you could enable caching. There's been some open PRs that have been closed over the over the last year or so that just it wasn't right for public use, But I wouldn't be surprised if there is something like that in the future for Hotwire native, where if you visited a page and then try to access that same page without Internet access, like, you get a cached version.

Charles Max Wood [00:43:41]:
Right. Well, the other thing that I can see is and then I've seen this in another apps, and and you can do this with PWAs. You should be able to do it. Turbo native is you've got the offline storage kind of thing. And so you just you just cram the state up into the offline storage. And then when they browse yeah. It checks to see if you have access to the Internet. And if it doesn't, then it just loads the data off of what's, you know, what's held in memory essentially

Joe Masilotti [00:44:12]:
in the browser. Yeah. Exactly.

Ayush Nwatiya [00:44:15]:
Yes. So that that was actually gonna be my next question is how do you feel about using, like, service workers for offline access?

Joe Masilotti [00:44:22]:
Yeah. Service workers are something that I have very little experience with, so I can't comment on anything, like, firsthand. But I do know that

Charles Max Wood [00:44:33]:
It adds it adds the servers workers JS in Rails eight. So I'm assuming they're planning on giving you access to that kind of

Joe Masilotti [00:44:40]:
thing. Exactly. Yeah. So, like, PWA stuff without hot like, you know, hot wire native removed is already on a great path with with Rails eight. The Android side has actually a better story here. Service workers work better the in an embedded web view. Right now, there's this issue with WKWebView, which is the web view that powers the iOS apps, and PWA like features don't exactly work in the way that they work on the web and, like, Safari.app. So to make those work well, like, with service workers and, you know, offline storage and background processing and all that stuff, like, we have to do something either to hot wire native or it won't be possible because of WKWebView until they update that.

Joe Masilotti [00:45:28]:
And it's usually a security thing because you're just, like, injecting JavaScript and stuff into it. But from the literature that I've read around this, like, WKWebView is actually the biggest blocker on PWA like features in an embedded web app. And that's not a hot that wouldn't be a Hotwire native limitation. That's like an embedded web browser limitation.

Charles Max Wood [00:45:51]:
Yeah. JavaScript Jabber, we did an episode where it was mostly Dan, but he he basically just ripped into Safari. Yeah. Because there are a lot of features that make web enabled apps better, cleaner, easier to run that Safari just doesn't implement. And where it causes issues on their end, on on the JavaScript end, is that, yes, you can get Chrome or Brave for your iPhone. And it's basically a dressed up version of Safari, and so you have the same issues. And so, yeah, The this is this is not an isolated issue, and there are people outside of the Rails community that are working on workarounds for a lot of this stuff.

Joe Masilotti [00:46:36]:
Yeah. Not specific to Hotwire Native, just Safari, even though it's my browser of choice, is a kind of a pain in the butt.

Ayush Nwatiya [00:46:45]:
Yep. You can say that. Wow.

Charles Max Wood [00:46:46]:
You're the only person I've ever heard say that.

Ayush Nwatiya [00:46:52]:
I kinda wanna go back to something we kinda we touched on at the start of the talk and but, like, more about the process of writing a book. I know if I if I remember correctly from your social media, you weren't sure whether you wanted to self publish or go with the publisher. And eventually, you did go with the publisher and I've personally self published. So I just wanted to compare notes. Mhmm. What made you go with a publisher? What what have you liked? What have you not liked?

Joe Masilotti [00:47:19]:
Yeah. There's two big re I guess, one big reason for going for a publisher and one big reason against self publishing, which both led me towards using a publisher. The big reason against self publishing is that going self published, the benefit is getting a % royalties or 90 x percent royalties. Right? Like, you make more money per sale. My goal was not to make money off of this book directly. My goal is to get clients and exposure and, you know, solidify myself as the expert in the space. Having another couple of thousands of dollars, maybe tens of thousands of dollars if I got really lucky by self publishing, was not, like, worth it compared to what I could be making off of a couple of clients. So the benefits of self publishing were, like, not really benefits at all.

Joe Masilotti [00:48:21]:
The benefits of having a publisher were having an editor I didn't have to hire, having someone keep me to a timeline, someone making sure that the last 80% after I finish the first eighty percent actually gets done, you know, things like that, and having someone to review cover art with, having a team of of beta reviewers that are platform specific that can help me with stuff, having a distribution network, talking to my local bookstore to make sure my book is on the shelves there instead of having to, like, walk in and be like, hey. Can you can you stock stock this for me? Like, the list of going with a publisher of any publisher were were just aligned so well to my goals of the book, that self publishing, like, didn't stand a chance once I really once I I I finally understood that that was my goals. That those are my goals. At the beginning, I didn't really get that. I was like, I wanna write a book, and I want full control over it. So I was leaning for it towards self publishing. I wanna make sure that the margins are exactly what I want. The code cop the codes looks like this.

Joe Masilotti [00:49:24]:
The cover looks like that. But those things didn't really matter because of all the extra work I would have had to have done going self publishing.

Ayush Nwatiya [00:49:34]:
Yeah, man. Self publishing is hard work. Just to kinda give give, our listeners the other side of the coin because I decided to self publish, and I obviously went through the same kind of decision process. And, yeah, marketing myself as a freelancer was a huge part of why I wrote my book as well. But, for me, the kind of clincher was creative control. I wanted 100% creative control, top to bottom, from everything to do with the cover art, to the font size, to content, to silly jokes that I had in the text. Like, I I end the book with a Klingon word. It's, like, just silly, silly, stupid things like that.

Ayush Nwatiya [00:50:15]:
And I didn't want anybody over my shoulder telling me, oh, we we can't do that or you can't do that. So for me, that was the clincher. And, yeah, it came with a hell of a lot of additional work. Like and another thing I think what kinda pushed me towards self publishing is I knew it was gonna be ebook only. Mhmm. The way I've written the book, for anyone who's read it knows it's full of hyperlinks to stuff. It has links to other parts of the book. It has links out to the Internet.

Ayush Nwatiya [00:50:45]:
It was never written to be a print book, and I knew that from day one. Yeah. So what with an ebook only distribution model as, like and the fact that I wanted creative control, I was like, you know, just stick it on Gumroad and be done with it. Yeah. But obviously, it comes with a lot more hard work in terms of marketing and self editing and stuff like that. So, yeah, this is I just wanted to give the listeners a bit of contrast because there's no right answer to this. And, Joe and I had different goals, and I think we both found the right path for us. And, yeah, if you are thinking of writing a book, don't just take someone else's answer.

Charles Max Wood [00:51:25]:
Yeah. Yeah. I think that

Joe Masilotti [00:51:26]:
if your goal is to just, like, get something out as quickly as possible, also, like, you have to self publish. It's gonna take me almost to the month, two years from the time I started writing this to the time it will be a physical you know, I can hold it in my hands done with the printing press. Like, that's a really long time. And, I mean, it actually worked out for me because during those two years, TurboNative became Hotwire Native. Like, I would have self published a book for TurboNative and then had to, like, redo the book entirely for Hotwire Native. So I'm glad that it took took longer because I was able to do that during the editing process, not during the, like, post publish process. But if you wanna get something out, like, you have something to say that you need to get out in the next couple of months, like, you can't go with a publisher most likely. It's gonna be way too long.

Joe Masilotti [00:52:15]:
It's gonna take that long to find a publisher.

Charles Max Wood [00:52:18]:
Yeah. One a couple of other things I wanna just push in here. So the book I wrote, it was on building your career and finding your next job. And, to be honest, I mean, at this point, I would go back and I would put add a whole bunch of stuff about using AI to understand your resume and line it up with, with the job postings and things like that. You know, there was a bunch of other stuff in there about building your personal brand that is a separate book. Mhmm. But yeah. I didn't really understand what the goal was.

Charles Max Wood [00:52:53]:
I thought for sure that I would just put the book out there and a whole bunch of people would buy it.

Joe Masilotti [00:52:58]:
Yeah.

Charles Max Wood [00:52:58]:
And so my experience having done that now

Ayush Nwatiya [00:53:02]:
Mhmm.

Charles Max Wood [00:53:03]:
Is, yeah, if I were gonna write a full on book or manual or, you know, something that that, you know, you kinda think of as that, technical book you put on your shelf Yeah. I would a % go talk to the folks over at Pragmatic Bookshelf. I mean, I might shop at Manning. Manning's, royalties are higher than, like, Pearson and

Joe Masilotti [00:53:25]:
Mhmm.

Charles Max Wood [00:53:25]:
And them. I've got a pretty good relationship with them as well. But, you know, I'd probably go with one of the two and use a lot of their distribution network. One thing you have to understand though is no matter who you go with, most of the marketing and sale of your book is gonna be down to you and what you can do to go get the word out. Right? So you're gonna be doing what Joe's doing coming on a show like this and, you know, and maybe, you know, publishing stuff to YouTube or a blog or places like that and and making sure that people can find it. And you have to do that with the, with self published too. The difference is is that, the book publisher will you know, they'll provide you an editor and a lot of those other things. And in some cases, like, Manning has reached out to me many, many times for their authors.

Charles Max Wood [00:54:14]:
And so, you know, they may help you figure out some of that marketing. One thing that I'm gonna kind of, back up on a little bit is I've talked to a number of friends who have released, like, shorter versions of things. Right? So, you know, it's like a 30 page book on, hey. Here's just how you get the the the thing to run. Right?

Joe Masilotti [00:54:39]:
Mhmm.

Charles Max Wood [00:54:40]:
You know? So instead of building a car, you know, or building the frame of the car with turbo or with Hotwire native, right, it's just basically a a bare bones. Here's how you get turbo running in your app in, you know, in 30 pages. Mhmm. And, typically, the publishers aren't so interested in those. Usually, if you're trying to build your reputation on something like that too, like, you can crank one of those every month, and you can build some reputation for putting stuff out. And so, again, there are a lot of approaches you can take. But, yeah, if it and and I think even if you're doing kind of the short content or if you're doing podcast like this or something like that, like, having that full length technical book on something that you know, like Joe saying, that he can he can go find clients for and build business for, it it really will pay off for you. But but then you can do the other things to kind of, you know, build your reputation and then go back to that.

Charles Max Wood [00:55:41]:
And the fact that you went through a publisher that helped you make it the best thing possible is is actually a good thing overall for your reputation. And so if I were to go back and write my book again, I I would have gone to Prag Prague, and I would've or, you know, and I would've said, hey. Look, guys. This is the book I wanna write. Yeah. Here's kind of an outline. They might have given me some other ideas. We we don't know if we could sell it or, hey.

Charles Max Wood [00:56:05]:
You you you haven't covered this or, if if you change the direction of this a little bit, we think it's a better fit for the market, which is all healthy, and then they would have helped me get the book out and had it be the best thing

Joe Masilotti [00:56:17]:
possible. Yeah. I think that that last point is something that I haven't spoken about, so it might be interesting to cover here. One of the first things that I talked with Pragmatic about was the structure of my book. I went in wanting to do two books, an iOS book and an Android book. That was, like, my original pitch. I was like, I can knock out the iOS book in a couple weeks in terms of writing. The Android book's gonna take me a couple months.

Joe Masilotti [00:56:46]:
And if someone wants both, they'll buy both both, and there'll be, like, some duplicated content on the rail server. And I could have easily filled 250 pages for each and gone much more deeper with both. And we that was

Charles Max Wood [00:56:59]:
where target market. I can tell you I want one book.

Joe Masilotti [00:57:02]:
Exactly. That and that's where we kinda it's exactly where we ended up. Like, questions being asked of me of, like, well, what does the audience want to read? Is the audience doing is 90% of the audience doing iOS and never touching Android? Okay. Well, then Android goes second. Like, all of these little decisions that I would have either hemmed and hawed over for months and just never made a decision on or made a just less educated decision. What I wanted to do as a second pass was, like, section one was all iOS, and then section two was all Android. And you would build the full iOS app and then build the full Android app. And that kinda makes sense to how you're building it.

Joe Masilotti [00:57:39]:
You know, you're less likely to build both at the same time. But when you're learning, it's actually better to learn and build both at the same time because you can learn and compare and contrast the two frameworks and the two platforms. So every chapter is either is like Rails, then iOS, then Android. And that little change in the structure of the book from my editor has made the book so much easier to read and understand. And things like that, I just can't imagine having to have full control over and doing it on my own. And there's probably countless other ones that I don't even remember because we've made you know, we we talk every couple of weeks on, like, how the direction and making sure that we're aligned with the the the goals of the book and the audience of the book and stuff like that that I would have gotten way distracted by now and probably just pushed whatever I had and called it done and not been happy with it. Yeah.

Ayush Nwatiya [00:58:34]:
Could you, could you talk about a little bit about the process of finding a publisher, what it entailed?

Joe Masilotti [00:58:41]:
Yeah. I a lot of my looking for a publisher phase was actually, do I wanna self publish or go with a publisher? So most of my research was spent talking to folks who had self published or folks who had gone with a publisher, you know, in in casual calls. I think I spoke to, like, 10 people either through a Zoom call or or, like, a Twitter conversation or email. And once I had spoken to everyone that had self published or gone through a publisher, I was like, okay. I'm not deciding between self publishing and publisher. I'm deciding between self publishing and Prague. Like, that was the the option. It was so clear that Prague was the best fit for me from talking to folks about my writing style, about what they valued, about how they manage code, about how they do promotions.

Joe Masilotti [00:59:30]:
Royalties was great. It was kind of just icing on the cake. How they gave me an editor and beta reviewers and all this stuff. Like, it was never is it Prag or O'Reilly or or or whatever. It was like self publish or go with Prag. So once I got to that, the decision was actually pretty easy once I decided my goal of getting more clients. Okay. Prag.

Charles Max Wood [00:59:55]:
Yep.

Ayush Nwatiya [00:59:57]:
And so did you just, like, send them an email and and and download it? Like

Joe Masilotti [01:00:01]:
I ended up sending an email to Craig. I submitted an official pitch to O'Reilly, and I submitted an official pitch to one more publisher that I can't I can't recall the name of. The third one that I can't remember the name of never got back to me at all. And, O'Reilly, said that they aren't looking for such a, like, cross platform book right now. It didn't fit in with their strategy. They're like, if you wanna do just an iOS app or just a Rails app, like, we would definitely like to talk more. But this weird cross platform thing is not what we're looking for right now. And Prag got back to me within, like, twenty four hours and was like, let's go.

Joe Masilotti [01:00:47]:
So that was pretty awesome. I was talking Yeah. I was talking to Dave within, like, a week, the the, you know, person who owns and runs Prague. Yeah. And was just like, yes. This is this is great. We're really excited about this. Let's let's get stuff

Charles Max Wood [01:01:01]:
to talk to. He is so funny.

Joe Masilotti [01:01:03]:
He's awesome. I I just did an interview with him, like, two weeks ago, and it just got published this week. We chatted for, like, an hour, and we cut it down to twenty minutes of just, like, what the book's about, what Hotwire Native is, and he is such a delight to talk to. Yeah. And seeing those little clips of him asking, like, you know, these these naive questions is so much fun.

Charles Max Wood [01:01:24]:
Yeah. I I think the other thing you have to because I think some people are probably gonna be thinking, oh, well, you know, O'Reilly or, you know, Pearson owns O'Reilly, but, you know, they just don't get it. That that may not be the case. They know the audience they're trying to sell to.

Joe Masilotti [01:01:40]:
Yeah.

Charles Max Wood [01:01:40]:
And so does Prag. Right? Yeah. And so, Pragmatic Bookshelf, I mean, they know they have pickaxe. They've got, you know, agile web development with rails or whatever it's called. Mhmm. You know, they have a handful of books in that space, and so they know that they are already in front of people who will buy this book.

Joe Masilotti [01:02:01]:
Exactly.

Charles Max Wood [01:02:01]:
And

Joe Masilotti [01:02:02]:
Yeah.

Charles Max Wood [01:02:02]:
And so, you know, I don't want anyone to be thinking, oh, well, you know, they they blew it over there. They they're they're selling to a different audience. It's the same with Manning or Pact or any of the other ones that you went Yeah.

Joe Masilotti [01:02:15]:
Pact. That was the the one I reached out to. Pact.

Charles Max Wood [01:02:18]:
So Yeah. Yeah.

Joe Masilotti [01:02:20]:
I mean, my book's been came out, like, officially about a month January, like, January 6 or ninth or something, and it's been in the bestseller list since then. It hasn't dropped out. So, like, there's clearly something aligned with their audience and and my book content, which is awesome to see.

Charles Max Wood [01:02:40]:
Yeah. And they they do a good job too. Like, if it's coming out, you know, because you said you haven't quite finished it. Yeah. You buy it now. You get a good deal on it for one, and then you get the finished product anyway.

Joe Masilotti [01:02:54]:
Mhmm.

Charles Max Wood [01:02:55]:
And so if you wanna get started and get, you know, 95.9% of the way down the road, and then you get that last piece that Joe's working on, it yeah. It it works out pretty well.

Joe Masilotti [01:03:11]:
Yeah. It works out pretty well, and, like, you just get it early. You're gonna get the rest of the content eventually. You just get it early and for cheaper. You do have to deal with a terrible layout, though, because code snippets are are are smooshed across multiple pages because the layout editor hasn't gotten in there. So if you can deal with that, it's a pretty good trade off.

Charles Max Wood [01:03:30]:
Yep. So a couple of things that I'm just gonna throw out there as well. So, with Ruby Geniuses, we we're doing a book club every month. For March, we're doing, a book on prompt engineering because a lot of people wanna learn AI. But I've already decided that in April and May, we're doing the Hotwire native book by Joe, and then, we're also gonna do the, rails and Hotwire codecs because a lot of people are kinda looking for that front to back, soup to nuts. How do I build this thing the best way possible? And what I find with a lot of these books is it's not that I couldn't go figure it out on my own. Right? I'm a smart guy. I can go figure it out on my own.

Charles Max Wood [01:04:16]:
But the difference is is that you've gone through and thought through enough of the use cases that I'm gonna run into an issue and go, oh, what do I do here? And then it turns out it's in your book.

Joe Masilotti [01:04:28]:
Yeah.

Charles Max Wood [01:04:28]:
That's why I like the books. Yeah. It's because you you you steer me off of the tracks so that I'm not heading into an oncoming train that I didn't even know was out there.

Joe Masilotti [01:04:39]:
Yeah. A lot of my book, I think at least once a chapter, you'll do something, and you'll get a, you know, air quotes unexpected result. That's how I've seen developers try to build Hotwire native apps. And, you know, during the tab when you build tabs, the first time you launch the app, it the app is just a completely white screen. And I have a screenshot of that, you know, and I'm like, well, what the hell just happened? And you realize that you, like, forgot one line of code that almost every developer misses when they build tabs.

Charles Max Wood [01:05:08]:
Mhmm.

Joe Masilotti [01:05:09]:
And we walk through that together so you know that not only did you learn that one line, but you will never make that mistake again because you saw the problem of the blank screen, and then you fixed it yourself. And I have one of those at least in every single chapter that I that adds a lot of content, of course, but I just really love it because it really enforces the learning, not just the copy pasting from the book of code. It's like you're learning how this works.

Charles Max Wood [01:05:35]:
Yeah. I used to do that when I did the teach me to code screen casts.

Joe Masilotti [01:05:38]:
Mhmm.

Charles Max Wood [01:05:39]:
I'd leave the mistakes in. Like, I would cut the googling the solution out. But, yeah, I I'd have I'd have people ask me all the time, why'd you leave the mistake in? And I was like, well, I talk to people after they watch my videos, and I ask them if they ran into the same mistake. And, like, half the people, they follow along as I go, and they make the same mistake I do. Right? And then and then they fix it when I come back with the fix. Yeah. And the reason is is because it's a common thing. It's a real easy thing to do.

Charles Max Wood [01:06:10]:
And so, yeah, I like that. I really like that.

Ayush Nwatiya [01:06:13]:
Nice. Nice. You mentioned, briefly just, like, the layout of it, iffy and stuff right now. So another thing another huge challenge which you'll have if you're self publishing is literally just producing a PDF and an EPUB. Like, it is stupid hard to just convert something you've written into a PDF and EPUB. And, I was surprised at just how difficult it was. So when you work with a publisher, is that something that's do they give you some tools to make life easier with that?

Joe Masilotti [01:06:44]:
Yeah. Prague has its own markup language. And it's, like, proprietary, you know, n d under NDA, all of this awesome stuff, and it handles just I write one file, and it then can output to PDF, to Mobi, to EPUB, to physical copy. Like, it does all of these amazing things with its own markup language that I don't have to worry about. Like, should this be a link on mobile, but actually a page number on, a physical book? Like, it's it's all handled for you. And then I can just write, like, in one file and images, of course, and my code, write it all in one file. And then when the layout editor gets in there, they can add their own special markup that I don't even, like, know or care about that's gonna make sure that we don't have, or, like, orphans or ants whatever the opposite of an orphan is or, code snippets spanning across two pages or images that are too small or too big. Like, all that's just gonna be handled by the by the the layout editors, and I can just worry about writing really good content.

Joe Masilotti [01:07:56]:
And that's a huge weight off my shoulders because that's something I don't have I do have to worry about when I do, like, my newsletter or my blog posts. It's like that whole last 30% is just spent doing producing, I can just skip all that with the publisher and just write.

Ayush Nwatiya [01:08:14]:
Yeah. That sounds like a huge case for a publisher.

Charles Max Wood [01:08:18]:
Yeah. Yeah. So one quick one thing that Ayush brought up was, the content ownership.

Joe Masilotti [01:08:23]:
Mhmm.

Charles Max Wood [01:08:24]:
So who has rights to your book?

Joe Masilotti [01:08:28]:
Yeah. Prague has rights to my book. They have rights to the content in the book, and I am able to repurpose that content if I want to. So I'm a I've been thinking about doing, like, a course that would be very similar to the content of that book, but I can't re I can't reproduce, like, the whole content and sell it or or publish it on my blog or anything. There's also exceptions to that. Like, if I wanna sneak peek a chapter or two, I can get permission and republish it word for word. And as long as I outline that it's from the book, that's totally fine. The thing that didn't bother me about that is that, like, a lot of the content from my book exists in the wild already.

Joe Masilotti [01:09:11]:
You'd have to piece together every one of my newsletters, every single one of my blog posts, every single one

Charles Max Wood [01:09:17]:
of my tweets book because because you don't wanna do that.

Joe Masilotti [01:09:19]:
Yeah. Like, my private Discord server where I'm answering people's questions, GitHub issues, discourse discussions. Like, if you pieced all of that together, you'd have 50 plus percent of the content of the of the book. Right? Mhmm. But it'll all be disparate, and it wouldn't be connected to the same app that you're building. Like, it all be it should be, like, spread across and code snippets. So them owning the content of my book seemed less I'm less worried about it because I know that I can recreate this in my own different like, not my own voice, but for my own platforms when it makes sense. When I a chat a whole chapter is on tabs.

Joe Masilotti [01:09:57]:
If I write tabs on my blog, I'm not gonna use the same techniques that I wrote about in the book. Sorry. Sorry. I'm gonna use the same techniques I'm gonna write about in the book, but it's not gonna be the same content. By the time you get to tabs in the book, you already have an app that does a bunch of stuff, and we're just adding stuff on top. If I write that for my blog, it's like, okay. New Xcode project, new Android Studio project. Here's how to add to that.

Joe Masilotti [01:10:18]:
And that is a totally different piece of content even if I'm teaching the same concepts and, like, you know, approach because of the audience and the context that's built into that.

Charles Max Wood [01:10:30]:
Awesome. Well, we're at about an hour and ten minutes. I think we've pretty well covered this too. It seems like there's a lot there. Definitely an an option worth looking at if you're looking at putting a mobile app on your Rails app and you're not super keen to, oh, now I have to add an API and I have to authenticate the API, and then I have to turn around and write an app that consumes the API, and I've gotta build new interfaces and blah blah blah blah blah. So if people wanna get the book, is there a link people can follow? You said there was a discount. Is that discount just built in, or is there a coupon code? Do you wanna tell us about that?

Joe Masilotti [01:11:10]:
We will put the coupon code in the show notes because there is one. I cannot remember it right now. But you can get the book at if you go to my website, mazelati.com, there's a big banner up at the top that links to the purchase page on the publisher's website, which is the best way to buy it because as Chuck mentioned earlier, you'll get an email from them on any update through the beta every two weeks. And then also once the book is published, any errata that gets changed, you'll get an email saying, like, hey. This these are all the changes and the new version of that PDF or Mobi or EPUB for your readers.

Charles Max Wood [01:11:54]:
Yep. And then I'm also just gonna put this out there. I have an email list for the show, and I have two codes to give away free copies of the book. And so if you want a copy of the book for free, and I'm sure Pragmatic Bookshelf's great. So if you buy it and then you win a copy, they'll they'll figure it out with you. I I say that confidently without any authority to make promises for them because they've just been so great with everything that I've ever done with them. But yeah. So if you go to rubyrogues.com, I'm adding in the email form literally this week.

Charles Max Wood [01:12:33]:
So by the time this is published, you'll be able to join the email list. Right now, the email list has, like, a 30 people on it, so you have a decent chance of getting the book. Yeah. I took my old list and I segmented it. I just sent email out. It said if you wanna be on the Ruby only list. That's why there are only a 30 people on it. But, anyway, if you want if you want that, I mean, I'm gonna be sending out content on doing, whatever it is that we're covering in, you know, in the membership.

Charles Max Wood [01:13:03]:
But, and then, you know, dropping hints and tips and stuff like that. There'll be a bunch of good content. But besides that, if you're on the list, I'm gonna let it run through the end of, I guess, it's February now. So we'll we'll let it run through the March. And then whoever's on the list, I'll take that list. I'll drop it into some random picker, and we'll give we'll give away two copies. So, if you're interested, yeah, go to rubyrogues.com and just join the me email list. And, yeah, I look forward to hearing from you there as well.

Joe Masilotti [01:13:38]:
Yeah. And the discount code is, ruby rogues hotwire. We'll get you that 35% discount from the Pragmatic Bookshelf website.

Charles Max Wood [01:13:48]:
Awesome. Alright. Well, let's go ahead and do some picks, and then, we'll go ahead and wrap up. Ayush, do you have some picks for us?

Ayush Nwatiya [01:13:57]:
Yeah. I was actually thinking of them during the show because I didn't didn't think of any before. Couple of nontechnical picks again. I always start to do a music pick. So I'm gonna continue with a music pick. And, there's an album that I used to that I I loved when it came out in 2019 and kind of fell by the way. So I had, like, discovered it again a couple of weeks ago. I was like, bloody hell.

Ayush Nwatiya [01:14:19]:
I forgot how amazing this album is. It's called, Empath by Devin Townsend. It's a it's a metal album, but it kinda transcends genre, really. It's like it's predominantly metal, but there's a whole lot of other kind of styles on there as well. And I think that's what makes it interesting for me because I'm not really that much of a metal fan, but I absolutely love that record. So, yeah, check that out. Empath by Evan Tanzan came out in 2019. And, I'm rewatching a TV show at the moment, which is one of my favorite TV shows called The Good Place.

Ayush Nwatiya [01:14:55]:
And, yeah, I love it. I'm just doing a rewatch because, I'm bored. So since I can't think of anything else, I'll I'll I'll choose that as one of my picks. Yeah, that's all I've got today.

Charles Max Wood [01:15:09]:
If you're bored, I've got plenty of stuff that you can do for me.

Ayush Nwatiya [01:15:12]:
Yeah. When when I say bored, I also mean lazy and can't be bothered to do the actual stuff I should be doing. Nice.

Charles Max Wood [01:15:19]:
Oh, okay. Never mind then. I'm gonna jump in with some picks. My first pick, I always do a board game. I don't think I picked this last week, but I'm I'm picking Groundhog Day the game. Now Groundhog Day is a movie that came out in, what, ninety something? Ninety '6? I don't know. I'm totally guessing. Anyway, funny movie, Bill Murray, classic movie.

Charles Max Wood [01:15:52]:
And, I feel no compunctions whatsoever in, putting out spoilers because the movie is so freaking old.

Ayush Nwatiya [01:15:58]:
I came out in '93.

Charles Max Wood [01:16:01]:
Ninety '3. Even better. Right? It's more than 30 years old. So, anyway, in the game, he goes through and relives the same day over and over and over again until he has kind of the perfect day. Right? You know, he gets the girl. He you know, all all the things. Right? And so Groundhog Day the game is the same, the same premise. And so you have a perfect day if you play all of all seven cards in a day as red cards.

Charles Max Wood [01:16:35]:
Right? And the red cards are force four heart cards. If you and if so if you do that, you win. The way you play on the on each day is you can play any number higher than the last number played. And then day to day, your days have to get better. Right? So there are gray cards that have no hearts. There are blue cards that have one heart. There are orange cards that have two hearts, and there are yellow cards that have three hearts. Some of the yellow cards get more red cards into the deck.

Charles Max Wood [01:17:03]:
So when you pass them around to everybody as a cooperative game, anybody can jump in at any time and play a number. So on your first day, you're usually playing the the gray and blue cards because they're lower hearts. And so maybe you get a day that has four hearts. So the next day, you know, you you you take the rest of the cards, you shuffle them, and you pass them out again, and all of those lower value cards are gone. So now you maybe have a five five heart or six heart day. If if you get too far ahead of yourself, right, because you you it has to has to go up. So if you can't play on the day and you need more cards in the day you lose, and then if you don't ever get a day full of red cards, you lose. It's a pretty simple game.

Charles Max Wood [01:17:50]:
Board game geek says it's a 1.22 wait. Two is, like, complex ish games. So, I mean, this is one I I think we were playing around in, like, fifteen minutes with five of us. And, anyway, it's it's really fun because you literally just pass out the cards, fill up the day, shuffle the cards, pass them out again. Right? Same and you and you get fewer cards every round is the other thing that comes in. And so yeah. So our strategy was at the point where, you know, somebody has a a couple of red cards and one of them is reasonably low. And you think they're good odds that there are eight, seven, eight cards in in the stack in other people's hands, right, because you don't deal out all the cards, then then you go for it.

Charles Max Wood [01:18:45]:
So, anyway, fun game. Really enjoyed it. And so, I'm gonna pick that. In the show notes, there will be a link to BoardGameGeek where you can kinda check out what other people have thought, and then there's gonna be an Amazon affiliate link so that you can go go check it out. Couple of other picks here. If you're watching the video, you can see I have a little bit of a split lip. So, we have cold dry winters here in Utah, and that's just the way it goes. So I'm gonna pick ChapStick just because it's made my life better the last few days.

Charles Max Wood [01:19:20]:
And then, oh, there was something else I was gonna pick, and I just can't think of it. But, anyway, I I guess I'll just throw out Ruby Geniuses real quick. We're doing calls every week. I'm doing the all the calls in March, and then I'm starting to bring in experts in April and May probably for two or three out of the four or five weeks. So we'll get people like Joe or an Ayush and, you know, some of our other guests. I'm probably gonna ask the guests from the show to just come on and, you know, we can hear what they're working on, and they can kinda help us figure out how to do what they're working on and whatever we're working on. I'm getting way into AI, and so there are gonna be some videos as well in the system for AI. Just everything from here's how you just kinda get started with the fundamentals either with the chat g p t that you don't have to set up or Ollama and some of the other tools that are out there.

Charles Max Wood [01:20:17]:
That was what I was gonna pick, but I don't have the link in front of me, so I'll pick it next week. But there's a web interface that sits on top of Ollama that you can just basically run it like ChatGPT, except you're not paying for it. And and it's slightly less capable because ChatGPT will go search the web for information, and and this really doesn't do that. But, anyway, good stuff. And, yeah. So those are my picks. Joe, what are your picks?

Joe Masilotti [01:20:44]:
I have two picks, a book and also a board game. The the book is Beautyland. I read it I just finished it a few nights ago. It is the tale of a girl who grows up in Philadelphia and has kind of a troubled childhood, and she gets a fax machine. And she starts faxing and slowly finds out that she's an alien living in Philadelphia. And she communicates to her home planet through this fax machine. And it's told in really digestible, like, two, three paragraph chapters of her life experiences of her growing up from living in Philly to, like, getting a going through high school, getting a job, having friends along the way. And it gives this really unique point of view of how aliens look at our life as humans.

Joe Masilotti [01:21:36]:
And there's a really awesome chapter on New York City where I used to live that's very nostalgic, but also just, like, very ironic and really makes you think about some of the things that we value. And, like, bagels are a big part of it. It's really, really good and a pretty quick a pretty quick read as well and scratches that sci fi itch that I that I really love. My board game is in the background right here, Slay the Spire. It is a board game based off of a video game based off of a board game. So the video game is called Slay the Spire, and it's essentially you play a board game of, rogue lite deck builder. So you're, like, you know, you're you're buying cards, playing them against the the computer, and, like, trying to build an optimal deck. The board game is exactly that as a board game.

Joe Masilotti [01:22:26]:
I think the only thing that changes are some of the scaling of the numbers. But, like, if you've played the video game, it is an awesome board game to play because it plays really well solo. It's one of the few games that I think is, like, better played on your own against the game than playing with other people cooperatively. So I really love it because in the evenings when I'm wiped and wanna just watch TV, I can set up a board game and play around by myself and not, like, sit in front of a screen for an hour before I go to bed. And it's really challenging. It's not too hard to learn if you already know the the video game. It just does take a little bit while to set up physically, but, definitely recommend that. It's a lot of fun.

Charles Max Wood [01:23:08]:
So I'm I'm just gonna ask a couple of questions because one one thing that I've run into is I've bought games that have the solo player mode, and it's totally different from the regular game, and it's usually not as good. So how how close does the solo game align with the multiplayer?

Joe Masilotti [01:23:25]:
It's the exact same game, solo. And then when you play with multiplayer, it adds two rules. So it's actually meant for solo play, and then multiplayer is, like, a a mode almost that lets you play cooperatively. So all of the rules, everything is meant to be played solo, with a few exceptions.

Charles Max Wood [01:23:44]:
Yeah. Board Game Geek has this one at a weight of 2.93.

Joe Masilotti [01:23:48]:
Yeah. Makes sense. It says

Charles Max Wood [01:23:49]:
it can take anywhere from 30 a hundred and 50 minutes. It says age 12 plus, so it sounds like it's a little involved, but probably isn't terribly hard to pick up is generally how I would read that.

Joe Masilotti [01:24:03]:
It's easy it's easy ish to play. It's really hard to master. So, like, learning the rules is reading a couple cards and knowing when damage happens and not. Being good at it and actually beating one of the four levels requires a few playthroughs.

Charles Max Wood [01:24:20]:
Okay. It looks like fun, though.

Joe Masilotti [01:24:22]:
It's a lot of fun. It's a lot of fun. I backed the Kickstarter version, so I have, like, metal coins and a little pouch and stuff for it. It's like

Charles Max Wood [01:24:29]:
Oh, yeah. That's always fun.

Joe Masilotti [01:24:31]:
Yeah. It's cool.

Charles Max Wood [01:24:32]:
Yeah. I'll buy a game at the game store or on Amazon, and then I'll play it with my friend.

Joe Masilotti [01:24:38]:
Mhmm.

Charles Max Wood [01:24:38]:
And, yeah, the same game will have all these nice little pieces in it. I'm like, did you make these or something? No. It's a Kickstarter version. Yep.

Ayush Nwatiya [01:24:47]:
Yep.

Charles Max Wood [01:24:48]:
Yeah. Board game life. Yeah. That one came out in 02/2024. That's part probably part of the reason why I haven't played it yet.

Joe Masilotti [01:24:56]:
It's a good one.

Charles Max Wood [01:24:58]:
Yeah. I did come up with the other thing. I'm just gonna throw it out real quick. It's open web UI, and it's really easy to run on top of Ollama. So you install Ollama. You tell it which, model you wanna run. If you've heard about DeepSeq, that one made a splash. You can run DeepSeq versions.

Charles Max Wood [01:25:16]:
You can get the uncensored version of DeepSeq. It's fun to ask it about, like, Tiananmen Square and stuff because the data they trained it on, it doesn't know anything about anything that China censors. Right? But any it it it's a it's a decent model. It runs fast, and it's it's pretty good. So, yeah. But it's open open u open web UI open dash web UI. And, so, yeah, you can just run that on your local machine. I had somebody ask if you can do cursor on it, and Cursor does other things too, so you really can't.

Charles Max Wood [01:25:52]:
But yeah. Alright, Joe. If people wanna find you on the Internet, where do they find you?

Joe Masilotti [01:25:59]:
Easiest spot is my website, mazelati.com. I got links to all the socials there, my newsletter, my, blog posts, and also the book.

Charles Max Wood [01:26:10]:
Alright. Well, one more time that, code, if you want 20% off, is Ruby Rogues Hotwire.

Joe Masilotti [01:26:17]:
That's correct.

Charles Max Wood [01:26:18]:
And you just go find it on the Pragmatic Bookshelf. It's prag pragprog.com. Mhmm. And, yeah. Alright, folks. We'll wrap it up here. Until next time, Max out.
Album Art
Joe Masilotti on Hotwire Native Updates, Challenges, and Opportunities - RUBY_672
0:00
1:26:32
Playback Speed: