Speaker 1: Hey, folks, welcome back to another episode of the Ruby
Speaker 1: Rogues podcast. This week on our panel we have a Yushnwatya.
Speaker 2: Hello.
Speaker 1: I'm Charles Maxwett from Top End Devs and this week
Speaker 1: we have a special guest. It is Joe Mazzlati. Joe,
Speaker 1: Welcome to the show. Hello, how are you doing all right?
Speaker 1: I think we had you a while back talking about
Speaker 1: then Turbo Native now hot Wire Native. But yeah, what's new?
Speaker 3: Yeah, So I am writing a book on hot Wire
Speaker 3: Native and it is coming very close to it being
Speaker 3: completely done. So getting the word out talking about hot
Speaker 3: Wire Native and just getting more and more rails developers
Speaker 3: to use it. It's been it's been a fun couple
Speaker 3: months for sure.
Speaker 1: All Right. The book is out right.
Speaker 3: Yeah, So the book is out. You can buy it
Speaker 3: digital only right now as we finish up the last chapter,
Speaker 3: and then when it comes out you know, final version,
Speaker 3: you can start ordering the physical copies and like get
Speaker 3: it at your bookstore and stuff. But if you buy
Speaker 3: it now, you get a discount and then you get
Speaker 3: an update email every two weeks with like the new
Speaker 3: features and everything that have been added to the book.
Speaker 3: So if you're only going digital, it makes sense to
Speaker 3: buy it now for the discount, but if you want
Speaker 3: to wait for physical, wait till you know, a few
Speaker 3: more months, right.
Speaker 1: And that's shows it only available on the Pragmatic Bookshelf.
Speaker 3: Yeah then yeah, it's only available directly from my publisher.
Speaker 1: Awesome. And those guys are amazing. I love those guys.
Speaker 3: It has been such a pleasure working with them. Oh
Speaker 3: my god. I even just from like the initial calls
Speaker 3: with them, I had such a good feeling about them
Speaker 3: as a publisher versus everyone else I spoke to and
Speaker 3: ooof looking back on it, so glad I went with
Speaker 3: a publisher instead of self publishing, because I probably would
Speaker 3: have given up now, to be honest, Yeah what I'm
Speaker 3: talking about.
Speaker 2: Oh yeah, that was one of the questions I was
Speaker 2: going to dig into. His publisher was and no publisher?
Speaker 2: We got to be a bit later on.
Speaker 1: Yeah, for sure, we could just do it now. I
Speaker 1: was going to say, I mean, I've self published a book.
Speaker 1: I know, I used self published a book. I've talked
Speaker 1: to the guys at Pragmatic Bookshelf before, but I've never
Speaker 1: actually gone all the way to hey, maybe we should
Speaker 1: do a book together. But I know a lot of
Speaker 1: folks over there. I don't know who you're working with,
Speaker 1: but over there as your editor and stuff. But yeah,
Speaker 1: it's way back in the day. Ruby Roges was going
Speaker 1: to write a book and we were talking to Pearson.
Speaker 1: O'Reilly kind of folks. And the reason was was because
Speaker 1: we were gonna piggyback on small Talk best practice patterns
Speaker 1: to write Ruby best Practice patterns. And so since we
Speaker 1: were kind of stealing the book a little bit, you know,
Speaker 1: we figured we'd have less legal trouble. But there were
Speaker 1: six of us at the time, and they wanted to
Speaker 1: give us like a ten or fifteen percent royalty to
Speaker 1: splut am on the six of us, and we were
Speaker 1: just we we kind of did all the looking and
Speaker 1: feeling and everything, and I mean they they had a
Speaker 1: clamp down ownership blah blah blah blah blah, and the
Speaker 1: royalty was awful. And then I talked to people who
Speaker 1: have published through Pragmatic Bookshelf and they they're like, oh,
Speaker 1: these guys are a dream, and you know, they're totally
Speaker 1: willing to work with you. As far as like ownership rights,
Speaker 1: I know some people have let them own it and
Speaker 1: other people have kept ownership I've seen it work both ways.
Speaker 1: They've also published books like Abdy Grimm's Exceptional Ruby. He
Speaker 1: self published it and then they picked it up, and so,
Speaker 1: you know, and so they're totally willing to play ball.
Speaker 1: And they're everybody that I've talked to. The royalty rates
Speaker 1: like forty or fifty percent.
Speaker 3: Yeah, yeah, exactly, and we could talk about it more.
Speaker 3: But like if they were giving me zero percent royalties,
Speaker 3: I still would have went with them. Oh really, yeah,
Speaker 3: the the uh perhaps a little you know, insider knowledge here.
Speaker 3: I am not planning on making money off of the book.
Speaker 3: It's not my goal to make money like I you know,
Speaker 3: I do the I did the math on it. However,
Speaker 3: many rails developers there are in the world, However, many
Speaker 3: of those are going to do mobile apps. It's still
Speaker 3: a relatively niche topic. Right Maybe that changes in a
Speaker 3: few years and I'm singing a different tune. But right now,
Speaker 3: if I can get one or like two high ticket
Speaker 3: clients for my consulting business from this book, it will
Speaker 3: pay for itself, like all the work that I put
Speaker 3: into it. Like that's all I need is to land
Speaker 3: two big clients. And that's my kind of marketing plan
Speaker 3: with all of it, Like when I go to conferences,
Speaker 3: I am checking a suitcase full of books to bring
Speaker 3: with me to just throw into the crowd. Essentially, you know,
Speaker 3: like I want to get this thing to as many
Speaker 3: people as possible. So having a publisher that supports really
Speaker 3: good distribution and getting into local bookstores and kick ass
Speaker 3: editor like it worked. It works so well. The forty
Speaker 3: fifty royalties is kind of just a bonus to me.
Speaker 1: Yeah, it's it's interesting that you bring that up, because
Speaker 1: it seems like the only people I really see make
Speaker 1: any kind of real money on books are essentially celebrities, right,
Speaker 1: so you hear that, like Michelle Obama got a gazillion
Speaker 1: dollar and it wasn't royalties, It was an advance on
Speaker 1: royalties for the book, and it was because the publishing
Speaker 1: house knew they could sell a whole bunch of those
Speaker 1: books and they liked her, and so they figured it out. Whereas, yeah,
Speaker 1: you know, for us, we're in a small niche, and
Speaker 1: in your case, it's a small niche of a small niche,
Speaker 1: and so yeah, you know you're you're doing it for
Speaker 1: reputational and other reasons that make a lot of sense.
Speaker 3: Exactly it's not going to be a New York Times bestseller,
Speaker 3: and I'm okay with that.
Speaker 1: I'm disappointed it should be.
Speaker 3: I mean, never wild if it was. But I don't.
Speaker 3: I don't see that happening anytime soon.
Speaker 1: Everybody's doing hot Wire Native these days.
Speaker 3: Hopefully, you know, the broader New York Times audience is
Speaker 3: also doing hot Wire Native and they'll understand what I'm
Speaker 3: talking about. But maybe the second edition.
Speaker 1: Yeah, well, you know, we are in the rails renaissance,
Speaker 1: is what I'm hearing. So but but but let's let's
Speaker 1: move in and talk about hot Wire Native, because I
Speaker 1: think that's probably where most people want to want to
Speaker 1: hear about. I think I think the book Insider Baseball
Speaker 1: is helpful for the people who may want to write
Speaker 1: a book or you know, maybe they're like, oh, this
Speaker 1: publisher does a good job on these things and takes
Speaker 1: good care of their authors, and so I want to
Speaker 1: support them. But yeah, let's let's dive in. So hot
Speaker 1: Wire Native. We've already done a show on Turbo Native,
Speaker 1: and I don't think the overall thing that it does
Speaker 1: is change, So just give us a real quick overview
Speaker 1: on that, and then what I'd like to do is
Speaker 1: get into what's changed. Sure if that makes sense.
Speaker 3: Yeah. So hot Wire Native takes your mobile website and
Speaker 3: shoves it inside of an app that you download from
Speaker 3: the App Store or Google Play. So your app itself,
Speaker 3: the code is essentially a web browser that has you know,
Speaker 3: maybe a native tab bar, native navigation, push onification, stuff
Speaker 3: like that, but the majority of the content is a
Speaker 3: WebView hitting your server, probably your Rails server, and rendering
Speaker 3: your HTML, CSS and JavaScript. And what it gives you
Speaker 3: is like almost full feature parody with your Rails app
Speaker 3: with just a few lines of native code. And once
Speaker 3: you submit to the app stores, you can continue to
Speaker 3: add new features to your Rails app, and because the
Speaker 3: native clients are just hitting your server, they get those
Speaker 3: features essentially for free as long as there is a
Speaker 3: link to that new feature on an existing page. That's
Speaker 3: been the story for a decade since, like turbolinks, native
Speaker 3: was around, and there's also opportunity to dive down into
Speaker 3: native APIs. It's different than like React Native, where it's
Speaker 3: taking over the entire app and you have to write
Speaker 3: React native. Hot Wire Native sits next to iOS or Android,
Speaker 3: and when you want to drop down to you know,
Speaker 3: Pushmification API or the Haptics feedback or health Kit. You
Speaker 3: just write that code and then send some data back
Speaker 3: to your server or back to the WebView. There's no
Speaker 3: health Kit plugin for hot Wire Native. You just write
Speaker 3: health Kit code, so to speak, right, And I think, yeah,
Speaker 3: it's a little bit like, oh, go ahead.
Speaker 2: I think one key point that also needs to be
Speaker 2: made is its separate code basis for iOS and Android,
Speaker 2: which I'm a huge fan of because I don't believe
Speaker 2: the one code based across money platform thing has ever worked.
Speaker 2: So I really like the fact that you have to
Speaker 2: separate code bases which kind of share this common engine
Speaker 2: off the rails app.
Speaker 1: Yeah, I'll say I have done.
Speaker 3: The two code bases are essentially rappers, right Like there's
Speaker 3: until you go into real native implementations of things. The codes,
Speaker 3: the code length in the native apps is relatively minimal.
Speaker 1: Yeah, I've done some Turbo or no, not turbinative. I've
Speaker 1: done some React Native, and I mean they tried to
Speaker 1: sell you on the one code base for everything, but
Speaker 1: I think eventually they just had to acknowledge that sometimes
Speaker 1: you're just going to have to deviate and have this
Speaker 1: for this and that for that, but yeah, it's it's
Speaker 1: like a full takeover on the javascripture, building the interface
Speaker 1: in the whole nine yards and what I've seen and
Speaker 1: done with something like hot wired Native. The nice thing
Speaker 1: is is I can keep the same look and feel
Speaker 1: if I want people to have the same experience on
Speaker 1: the web and on the app. Or I've also seen
Speaker 1: it where people tend, you know, they they kind of
Speaker 1: pick up a style sheet and kind of figure it
Speaker 1: out so that it looks more native. If you're in
Speaker 1: the app, m you get you get a lot of
Speaker 1: mileage out of it that way, Yeah, you get a lot.
Speaker 3: And one of the big recommendations I have is to
Speaker 3: continue using your web design in the apps. Like if
Speaker 3: you're trying to chase iOS specific iOS Native UI and
Speaker 3: Android Native UI, you're always just playing catch up. So
Speaker 3: doing your continuing your you know, your tailwin CSS or
Speaker 3: your Twitter bootstrap, you know styling on the mobile apps
Speaker 3: is usually the best approach because you just have too
Speaker 3: fewer things to worry about. It's like you have your
Speaker 3: Web UI and you that works on your native and
Speaker 3: then maybe you show or hide some content that doesn't
Speaker 3: make sense on the native apps, like your you know,
Speaker 3: Hamburger menu or whatever. That doesn't make sense in a
Speaker 3: mobile context because you have a tab bar. But for
Speaker 3: the most part, you're just like rendering the same stuff
Speaker 3: styled the same way.
Speaker 1: Yeah, so what's new, I mean besides the name change.
Speaker 1: You know, what are we looking at here?
Speaker 3: Yeah? So Turbo Native became hot wire Native a few
Speaker 3: months ago, and the big change is that it now
Speaker 3: encompasses what used to be called Strata. Strata is or
Speaker 3: was the library formerly known as Strata is the way
Speaker 3: to communicate to your webue through JavaScript. It's how you
Speaker 3: can add It's kind of like stimulus for mobile apps.
Speaker 3: You add native sprinkles to your apps. You add a
Speaker 3: button in the top right or the top left. You
Speaker 3: add an interaction with the push notification API. And Strata
Speaker 3: worked with sending Jason back and forth between the native
Speaker 3: code and the WebView, but it required like one hundred
Speaker 3: and fifty lines of code to just integrate into your
Speaker 3: library because you had to subclass something and pass along messages.
Speaker 3: Now Strata is part of hot wire Native and has
Speaker 3: just been renamed like Bridge components lowercase you know, B,
Speaker 3: not a capital S for Strata. They're just a part
Speaker 3: of hot Wire Native now, and what that means is
Speaker 3: that when you use these bridge components, you just use them.
Speaker 3: You don't have to worry about like a whole installation step.
Speaker 3: They're already bundled. That's probably the biggest one. That's for
Speaker 3: probably more not more experienced hot Wire Native developers, but
Speaker 3: more advanced apps. The most relevant change for people that
Speaker 3: have never used it is that the time to market,
Speaker 3: Like from starting a new hot Wire native iOS app
Speaker 3: to running it in the emulator or the simulator went
Speaker 3: from forty five lines of code to like twelve lines
Speaker 3: of code to get something running. And Android went from
Speaker 3: I think like seventy eighty to like twenty five thirty five.
Speaker 3: And those are the things that we're really looking forward
Speaker 3: to as making those even fewer. Is just like how
Speaker 3: quickly can we get from brand new excodeor Android studio
Speaker 3: project to content rendering on the screen in a mobile
Speaker 3: simulator emulator. And we've made some really big progress with
Speaker 3: that by just making a lot of assumptions and letting people,
Speaker 3: you know, giving people some of the higher level abstractions
Speaker 3: than we used to give them with turbonative.
Speaker 1: That makes sense. I have to say, there's this really
Speaker 1: terrific book out there. I don't know if you all
Speaker 1: have heard of it. It's called The Rails and hot
Speaker 1: Wire Code X and I was going through some steps
Speaker 1: in that for Turbonative at the time. And yeah, a
Speaker 1: lot of this stuff that you're talking about, like the
Speaker 1: extra installation step, it wasn't impossible to figure out, but
Speaker 1: it wasn't something that I was regularly doing. So it
Speaker 1: felt like it took an inordinate amount of time to
Speaker 1: figure things out when I messed them up. And so
Speaker 1: it sounds like there are just a lot fewer places
Speaker 1: where Chuck can mess it up, if that makes sense.
Speaker 3: Yeah, the way I look at it, like Turboonative, the
Speaker 3: hot Wire Native is like equivalent on rails to writing
Speaker 3: a routes a route, adding a controller, and adding a view.
Speaker 3: Those are all wired up magically by their name. Right,
Speaker 3: you have a posts controller, it's going to render posts
Speaker 3: slash index or post slash show, depending on the method
Speaker 3: you're in. Turbo Native required you to manually say okay,
Speaker 3: the post, the get request to posts has to go
Speaker 3: to the post's index controller, and the post's index controller
Speaker 3: has to render the post index view. Like all of
Speaker 3: those little places that you could either fat finger or
Speaker 3: just like miss. That's how we love That's why we
Speaker 3: love rails. All of those conventions make sense. Configuration, yeah yeah,
Speaker 3: And like the Turbo Native was way more configuration over convention,
Speaker 3: and now hot Wire Native is way more convention over configuration.
Speaker 3: I hope I got those right. You do a lot
Speaker 3: less code with hot Wire Native, and a lot of
Speaker 3: it is just assumed for you. But we didn't hide
Speaker 3: any of the APIs. They're still public. Like, if you
Speaker 3: still want to drop down and do all the wild
Speaker 3: stuff you were doing in a Turbnative app, those APIs
Speaker 3: are still available to you. It's just like you're, you know,
Speaker 3: a layer below the abstraction we want you to work
Speaker 3: with so you have more freedom, but you also are
Speaker 3: more responsible when something goes wrong.
Speaker 1: I wish, how does that make you feel? With all
Speaker 1: the stuff you wrote in that book.
Speaker 2: Honestly, it not doesn't make too much of a difference
Speaker 2: to me, because uh, like it is it's a false
Speaker 2: moving kind of Hey, yeah, and I knew that, and
Speaker 2: excuse me, and I kind of And that was the
Speaker 2: reason why I decided for the second edition in my book,
Speaker 2: I wasn't going to cover the Native stuff anymore because
Speaker 2: I'm I've got both my feet firmly in the website
Speaker 2: of things, and it was it's quite a lot to
Speaker 2: do keeping up with all three platforms. I'm like, yeah,
Speaker 2: not anymore. But I'm quite happy that these developments are
Speaker 2: happening because it makes life easier for other developers. Like
Speaker 2: when I was writing that the native chapters in my book,
Speaker 2: it drove me to the edge of sanity, like it
Speaker 2: was like and I had done native development professionally before,
Speaker 2: it just had been a few years. I was a
Speaker 2: bit rusty, like for a beginner, I can imagine the
Speaker 2: shut tricky that must have been. So I think removing
Speaker 2: all these hoops that you kind of have to jump
Speaker 2: through is definitely a step in the right direction. And
Speaker 2: really happy to hear that these changes are being made.
Speaker 3: Yeah. So much of the old way of doing things
Speaker 3: was just like totally manual, like here's a link, what
Speaker 3: do you want to do with it? There was no
Speaker 3: routing in place, there was no modal handling, there was
Speaker 3: no dismissing like here's a link, here's a WebView, like,
Speaker 3: go for it. It was so thin around the web view,
Speaker 3: the wrapper that you know your book, the Codex book,
Speaker 3: you had to deal with session delegates and like navigating
Speaker 3: between screens if there's a modal and stuff, and like
Speaker 3: all of that stuff has been abstracted into just one
Speaker 3: line where it's like, here's an object, give it a URL,
Speaker 3: and it will handle everything for you automatically, as long
Speaker 3: as you have the path configuration set up, which we
Speaker 3: could dive into if you want. But that just didn't
Speaker 3: exist back then. And what's kind of wild is like
Speaker 3: it existed in Turboonative Android for quite a while, but
Speaker 3: the iOS library just hadn't been updated in like a
Speaker 3: year to get up to speed with this. And when
Speaker 3: I first learned that, I was, well, first I was
Speaker 3: really upset because I was writing all this iOS code
Speaker 3: for so many clients. And then I was like, well,
Speaker 3: this is also just silly, like why have we not
Speaker 3: gotten up to speed? And that's around the time I
Speaker 3: started working with thirty seven Signals directly and started getting
Speaker 3: contracted by then to bring the iOS library up to
Speaker 3: speed with Android. That's where the Turbo Navigator library came from.
Speaker 3: That we then upstreamed into hot Wire Native, like all
Speaker 3: of this development that was essentially sponsored right by them
Speaker 3: that I could do to bring the two libraries back
Speaker 3: to feature parody. And I'm still working with them, Like
Speaker 3: we have a really cool new demo site coming which
Speaker 3: I'm very excited about that's going to be written in
Speaker 3: Rails instead of JavaScript, so really relevant for rails developers.
Speaker 3: But like all of that stuff took buy in from
Speaker 3: thirty seven signals to finally sit down and say, okay,
Speaker 3: we're focusing on this now. And before that it was
Speaker 3: just like, what is this turbo native thing? Is it
Speaker 3: even supported?
Speaker 1: You know?
Speaker 3: And I'm trying to scream from the from the mountaintops
Speaker 3: of yes it is. I have many, many clients running
Speaker 3: these apps, but it's hard when there's thirty open issues
Speaker 3: in the last commit was six months ago. It's not
Speaker 3: the case anymore.
Speaker 1: Yeah, So speaking to that, right, speaking to kind of
Speaker 1: keeping things up to date and stuff like that, I
Speaker 1: will say that one of the things I ran into
Speaker 1: pretty fast was that. And I think I was working
Speaker 1: off an older version of I Use's book Codex book.
Speaker 1: But and I'm looking forward to this in your book
Speaker 1: because Pragmatic Programmers is usually pretty good, I will say,
Speaker 1: in making sure that what's in the book is pretty
Speaker 1: close to up to date, but I ran into version
Speaker 1: issues almost right away, right, and it's like, okay, do
Speaker 1: you want to run the latest Android? Okay, well, you
Speaker 1: know the example in this book is you know, a
Speaker 1: version old or two versions old. And so I guess
Speaker 1: the question is both for the book and for the framework.
Speaker 1: I don't know as a framework the right term for
Speaker 1: hot Wire Native. I'm going to say framework.
Speaker 3: Yeah, framework, it's technically a library, right, but like I
Speaker 3: call it a framework because we're building hot Wire Native app.
Speaker 1: Yeah. Anyway, so how how well are they doing staying
Speaker 1: on top of those things? Right? So when Apple releases
Speaker 1: a new iOS version or Android releases a new version,
Speaker 1: you know, yeah it is thirty seven signals or whoever's
Speaker 1: working on it keeping that up to date. And then
Speaker 1: is your book going to stay up to date? Yeah?
Speaker 3: So right now we're in this interesting part where Android
Speaker 3: SDK thirty five is like the default with new Android
Speaker 3: studio builds, but hot Wire Native Android works only with
Speaker 3: Android thirty four. So if you like, create a new
Speaker 3: Android project right now, and you know, this is February twentyeth,
Speaker 3: twenty twenty five, we're in really that awkward time where
Speaker 3: the new life that became the default last week, and
Speaker 3: we have an.
Speaker 1: Up there last week, okay, like last.
Speaker 3: Like the SDK has been around for a while, but
Speaker 3: it was became the new default and Android like very
Speaker 3: very recently, right, So if you create a new Android
Speaker 3: app right now, it will be broken. You have to
Speaker 3: drop down to thirty four and you're gonna get all
Speaker 3: these warnings from Android Studio. So there's an open pr
Speaker 3: already for hot Wire I need of Android. You're just
Speaker 3: doing all our due diligence to make sure it works.
Speaker 3: But like things like that are we stay on top
Speaker 3: of them. With the libraries, it's easy to release a
Speaker 3: new version of a library, relatively speaking. For the book,
Speaker 3: it gets a little bit trickier because I can't just
Speaker 3: update someone's physical copy of a book, right. I can
Speaker 3: update the PDF no problem, like the three beta versions
Speaker 3: of the book that have been out already.
Speaker 1: That's why I always buy the digital version from the
Speaker 1: Ragmatic Studio and not from Amazon, just because they'll email me, hey, dude, there's.
Speaker 3: A new one exactly exactly, yeah, direct from the publisher.
Speaker 3: You get an update every time I update it. And
Speaker 3: right now we're in a really good spot with iOS
Speaker 3: iOS just released a new version of x code that
Speaker 3: changes some things about how folders and groups are related
Speaker 3: under the hood, and like, we're using that new stuff,
Speaker 3: so we're on up to speed there. But Android, the
Speaker 3: book is written for thirty four, not thirty five, because
Speaker 3: I have to wait till the hot wire native Android
Speaker 3: support comes out. So what I'm doing as an author
Speaker 3: is making sure that I'm not releasing this thing to
Speaker 3: physical until we are set on both platforms at least
Speaker 3: for a little while. And that won't always be the case.
Speaker 3: Android thirty seven will probably break something when it comes
Speaker 3: out in a few years, but I see this book
Speaker 3: as something that will probably need to be updated every
Speaker 3: eighteen months at a minimum, So I'm making sure that
Speaker 3: every single time I reference a version code or a
Speaker 3: version number or an SDK, it's like, by the way,
Speaker 3: this was tested on version X. If you're using anything newer,
Speaker 3: like you're kind of at your own, but also join
Speaker 3: my discord and I'll help you, like join my private
Speaker 3: discord just for book owned book readers, and I will
Speaker 3: help you get through it because someone else is already
Speaker 3: going to ask that we're already going to be up
Speaker 3: to speed on it, and maybe that just means like, hey,
Speaker 3: here's a PDF version of the book, You're good to go.
Speaker 3: Or it's like, oh, you need to just this one
Speaker 3: change and it's like documented somewhere. The short of it
Speaker 3: is that it sucks, like like there's so many changes
Speaker 3: all the time, and I'm sometimes the one who's making
Speaker 3: the changes to the library, and then I know I
Speaker 3: have to update the book later, so I both have
Speaker 3: insider knowledge into what's coming next, but I also can
Speaker 3: dictate how quickly it happens or slowly. So it's it's
Speaker 3: also this just like fun mental game that I play
Speaker 3: with myself where it's like do we include this in
Speaker 3: the Hotwire native repos but then my book has to
Speaker 3: mention it or do we not? And like I wait,
Speaker 3: So it's all this fun stuff I never really had
Speaker 3: to think about before.
Speaker 2: Yeah, when new stuff comes out in reales, I'm always
Speaker 2: like organizing. I'm still agonizing about what to do with
Speaker 2: the second edition, what to include, what takes It's it's
Speaker 2: a lot harder when you're when you're a nor book
Speaker 2: author as well, which actually segues nicely into another conversation
Speaker 2: I wanted to have, which is, you historically were primarily
Speaker 2: an iOS develop permise, Am I right in saying that?
Speaker 2: And you did Android for this book as well? That like,
Speaker 2: Android is fairly new to you for this book. What
Speaker 2: was that experience like? Because from my point of view,
Speaker 2: Android has been the bane of my life for years
Speaker 2: and years and years, like everything on Android has been
Speaker 2: more difficult to do than iOS. Uh. And I think
Speaker 2: for me, the final straw that made me decide to
Speaker 2: exclude Native from the second edition was when Strata had
Speaker 2: just come out and I needed to update my book
Speaker 2: to include Strada. I was on holiday at my parents'
Speaker 2: house in India, and I opened up the uh, the
Speaker 2: Android Reaper for the book, and I included the Strata
Speaker 2: library and there instantly everything broke. I fixed it. Know
Speaker 2: how I fixed don't know how I fixed it, but
Speaker 2: I fixed it. Closed Android Studio, got back, got back
Speaker 2: home to the UK, open Android Studio again and it
Speaker 2: was broken again.
Speaker 3: Oh yeah, And.
Speaker 2: I'm like, how was your experience like learning Android?
Speaker 3: Yeah? I would say that I didn't really start learning
Speaker 3: Android until the Java to Cotlan migration like change. Like
Speaker 3: once Cotland became the default language for Android apps and
Speaker 3: Android Studio, that was when I seriously started considering Android
Speaker 3: and started doing Android projects for clients. All of my
Speaker 3: public material, like my newsletter, my blog posts, my Twitter
Speaker 3: and everything. I usually talk about iOS because it's such
Speaker 3: a majority of the market and the code is just
Speaker 3: way simpler most of the time, Like there's way less quids,
Speaker 3: like you don't worry about some x random XML file
Speaker 3: or some factory just to wire a little button up
Speaker 3: or whatever. So I usually talk about iOS because it's
Speaker 3: just more elegant and markets better. I've been doing Android
Speaker 3: for a long time, but I've never taught Android in
Speaker 3: the way that I'm teaching it in this book. So
Speaker 3: what I've had to do is get I have an editor,
Speaker 3: or not an editor. I have a beta reviewer who
Speaker 3: is a like hardcore Android developer, doesn't know rails, doesn't
Speaker 3: know hot wire Native. They do Android day in and
Speaker 3: day out, and they are giving every single line of
Speaker 3: Android code like two or three REA read throughs in
Speaker 3: this book, and that has pointed out some small things
Speaker 3: about like where I use it Ruby term instead of
Speaker 3: a Cotland term, but also some larger things where like
Speaker 3: I've made mistakes in the book that are just straight
Speaker 3: up wrong, like I outlined a function and was like,
Speaker 3: here's how you write it in Scotland, and he applied
Speaker 3: and was like, I, no, that doesn't even compile. It's like,
Speaker 3: thanks for that. But he's also bringing up more conventions
Speaker 3: that are more akin to the Android developer or experience.
Speaker 3: And you do things in rails a certain way, you
Speaker 3: do things in iOS a certain way, you do things
Speaker 3: in Android a certain way, and I'm not as privy
Speaker 3: to those because I'm mostly just like slapping what I
Speaker 3: can together. He's coming out and saying, hey, you're managing
Speaker 3: your versions the wrong way, Like you're essentially not adding
Speaker 3: any version numbers to your gem file, Like you should
Speaker 3: probably have a version number in the equivalent for Android.
Speaker 3: Stuff like that. That's just like really helpful to pass
Speaker 3: on to my readers. It'd be really tough without that.
Speaker 3: And also just like the book would be worse because
Speaker 3: it'd be wrong in some places and I looked like
Speaker 3: an idiot. So very grateful for that editor, for that
Speaker 3: beta reviewer. It still doesn't change the fact that writing
Speaker 3: Android chapters usually takes me two to three times as
Speaker 3: long as writing iOS chapters. I have half a chapter
Speaker 3: left to finish my manuscript. All of the content it'll
Speaker 3: still need to go over to through two or three
Speaker 3: rounds of editing. But like the content, I have half
Speaker 3: a chapter left. It is an Android half a chapter.
Speaker 3: I have been writing this half a chapter for three
Speaker 3: weeks and it is killing me. And it's just like
Speaker 3: I wrote the iOS chapter in like two hours, the
Speaker 3: iOS side of the chapter, but the Android side has
Speaker 3: been such a pain in the butt because I just
Speaker 3: like skip a step or forget something, or get locked
Speaker 3: out of my Google Play account because I like said
Speaker 3: that my name was Joseph Mazzilotti instead of Joseph Anthony Mazzolotti,
Speaker 3: and like little silly, nippicky things like that are causing
Speaker 3: this chapter to just take forever. But as soon as
Speaker 3: this call is done, I have a nice three hour
Speaker 3: chunk to work on it, and I'm hoping I can
Speaker 3: finish it.
Speaker 1: It sounds like the old yarn for programmers, where it's
Speaker 1: the first ninety percent of the work and then you
Speaker 1: know the second ninety percent of the work.
Speaker 3: Oh my god, totally, And I know that as soon
Speaker 3: as I finish the manuscript, the real work starts of
Speaker 3: like the editor, get the first round, development editor, the
Speaker 3: beta reviewers, then the publishing editor, and then we talk
Speaker 3: about typos and layout and it's like grammar, Like, we
Speaker 3: haven't even addressed those things yet, you know, and that's
Speaker 3: just going to be i know, the most tedious, tiny changes,
Speaker 3: but they'll all make a better book. And that's why
Speaker 3: I'm working with a publisher.
Speaker 1: Yeah, so, you know, kind of getting into this where
Speaker 1: you have a book, you know, you're walking people through
Speaker 1: building apps. I guess some of the questions that I
Speaker 1: have getting into kind of what you can and can't
Speaker 1: do with hot Wire Native, right, And I think we
Speaker 1: went into some of this in the other episode. But
Speaker 1: the biggest podcast that I do every week is JavaScript Jabber. Right.
Speaker 1: Until you've got the React developers and the view developers,
Speaker 1: and then you've got other people that you know, they're
Speaker 1: kind of into JavaScript, but they're not really like deeply, right,
Speaker 1: so they might have instead of a single page app
Speaker 1: with React and React Router, they've got, you know, something
Speaker 1: that looks a little bit more like a Rails app
Speaker 1: and they've got express or sales or something on the
Speaker 1: back end. And so my question is is can you
Speaker 1: do a hot wire native app if it's not Rails?
Speaker 3: Yeah, short answer is yes. The native frameworks. Hot Wire Native,
Speaker 3: iOS and Android are platform agnostic. They will work on
Speaker 3: any back end, any web rendered content as long as
Speaker 3: you are doing your page to page navigation with TURBOJS.
Speaker 3: So if you're not doing turbo JS, which is the
Speaker 3: default on new Rails apps it has been for a
Speaker 3: number of years, you will not get the callback handlers
Speaker 3: to the native apps to know to present a new screen,
Speaker 3: to know to do the native transition, to give you
Speaker 3: the hooks to make changes. So my recommendation is usually like,
Speaker 3: if you have Rails and you're using hot Wire, hot
Speaker 3: Wire Native is a very easy add on to it.
Speaker 3: You don't have to make many changes to your server.
Speaker 3: If you have a React front end and you have
Speaker 3: like adjase, your Rails app is supplying a Jason endpoint
Speaker 3: type thing, You're going to have a much harder time
Speaker 3: kind of hammering that to make it work with hot
Speaker 3: Wire Native, And honestly, i'd just recommend React Native. But
Speaker 3: if you have a view app or a lower of
Speaker 3: a app, if you change the page navigation to use TURBOJS,
Speaker 3: hot Wire Native will work as if it was a
Speaker 3: Rails app and there's very little that you'll need to
Speaker 3: add to your non rails back end to get some
Speaker 3: of the niceties, like you'll have to create your own
Speaker 3: hot wire native app helper that just checks the user
Speaker 3: agents like things like that that are actually not that
Speaker 3: hard or not that much code. But the most important
Speaker 3: thing is if it's running TURBOJS, you're good.
Speaker 1: Right. So the other question that I have is, I
Speaker 1: know that some people have a tendency to like they'll
Speaker 1: run into some some weird gotcha's. I think my favorite
Speaker 1: one is that you have a form submit and a
Speaker 1: lot of times it'll met with turbo turbo stream and
Speaker 1: then you know, the way that you put your page together,
Speaker 1: it doesn't actually reload anything, and so then people just
Speaker 1: turn it off. Does that make it not work with
Speaker 1: turbo native when you do that kind of a thing,
Speaker 1: or are there other things that people may be doing
Speaker 1: with their rails apps that are going to cause them
Speaker 1: trouble if they try and adopt this approach.
Speaker 3: Yeah, So anything that's happening on the same page that,
Speaker 3: like I use the example is your URL changing. If
Speaker 3: your URL is changing, that will trigger most likely a
Speaker 3: new page, a new screen getting pushed on the native
Speaker 3: apps because you're doing like a full on TURBOJS navigation.
Speaker 3: If you're doing something where you have a turbo frame
Speaker 3: and that's making a request that's happening inside the turbo frame,
Speaker 3: that's not going to push a new screen onto the stack,
Speaker 3: and that's ideal. Like you think about a lazy loaded frame.
Speaker 3: You don't want when that frame loads to push a
Speaker 3: new screen. You just want that content to appear inside
Speaker 3: the website. Turbo streams have their own custom handling, and
Speaker 3: there's some documentation about it on Native dot Hotwired dot dev.
Speaker 3: But the short of it is like, if you're submitting
Speaker 3: a form, you'll most likely want to push a new
Speaker 3: page for the mobile apps because it will create a
Speaker 3: better experience for your mobile users, mostly related to when
Speaker 3: you click a link, it opens a form in a modal.
Speaker 3: It slides in from the bottom to give you that
Speaker 3: context of like you've kind of broken out of the
Speaker 3: standard view, and then when you submit that form, it
Speaker 3: dismisses the modal and either refreshes the page underneath the
Speaker 3: original page you're on or pushes a new screen onto
Speaker 3: the stack, and all of that is handled out with
Speaker 3: the framework. You don't have to do anything custom except
Speaker 3: one line of configuration to say that these screen should
Speaker 3: be presented as modals. But the best part about all
Speaker 3: of that is like all of the caching of the
Speaker 3: previous screens, because you made a post or a non
Speaker 3: get request, all that caching is destroyed. So when you
Speaker 3: go back, that content will be fresh. If you go forward,
Speaker 3: that content will be new. You have all this default
Speaker 3: sane handling around form submissions that didn't exist before. That
Speaker 3: really makes it like most folks won't even know what
Speaker 3: I'm talking about because you never have to deal with it.
Speaker 3: And that's and that's like the way we want it,
Speaker 3: you know.
Speaker 1: Yep.
Speaker 2: Do you want to talk briefly about the I don't
Speaker 2: know if these are still a thing that there are
Speaker 2: three pods which are drawn in rails specific of a
Speaker 2: hot wire native received historical location, Resume historical location, and
Speaker 2: refresh historical location. I don't know if those are still
Speaker 2: a thing and scenes relevant. We could probably chat about
Speaker 2: that as well.
Speaker 3: Yeah, for sure. So those are the historical location routes
Speaker 3: and the turbo rails GEM includes those by default. It's
Speaker 3: also what exposes the hot wire native question mark helper
Speaker 3: to essentially say, is this request coming from a hot
Speaker 3: wire app to do conditional logic. Those three routes were
Speaker 3: something that I didn't know about for a number of years.
Speaker 3: They've kind of flown under the radar. They kind of
Speaker 3: were shoved in turbo rails because base Camp needed them,
Speaker 3: and they were never publicly exposed or documented. You found
Speaker 3: those in your book, and when I was reading your book,
Speaker 3: the Codex book, I was like, Wow, these are really powerful,
Speaker 3: but didn't really understand how to use them because you
Speaker 3: had to set up a lot of default handling around them.
Speaker 3: And there's an open pr right now. Hopefully by the
Speaker 3: time this podcast is released, it's merged in and the
Speaker 3: new version is released where this handling will be automatically
Speaker 3: included in the native wrappers by default. And what that
Speaker 3: means is that at any point you can redirect to
Speaker 3: one of these three special routes and the hot Wire
Speaker 3: Native Apple Tape custom actions receide, refresh, resume, So recede
Speaker 3: will pop the top screen off the stack, kind of
Speaker 3: navigate backwards. If there's a modal presented, it will dismiss
Speaker 3: the modal. Refresh will do the same thing, but then
Speaker 3: refresh the previous page and then resume. Essentially just says
Speaker 3: like don't do anything. I still haven't found to use
Speaker 3: case for that one, so if you're listening and no
Speaker 3: of one, I'd love to hear it. But these are
Speaker 3: really really helpful when you're doing form submissions because like
Speaker 3: most of the time, when you submit a form, you're
Speaker 3: like on the index page, you show the new page,
Speaker 3: and then you go back to the index page. You
Speaker 3: want that index page to refresh to show the new
Speaker 3: entry or like the flash message or whatever, and you
Speaker 3: can use this refresh historical location to dismiss the screen
Speaker 3: and then refresh the one underneath, and your mobile apps
Speaker 3: behave as if it was a rails app, just like perfectly.
Speaker 3: There's also some helpers built in that let you do
Speaker 3: these routes only for hot Wire native apps, but then
Speaker 3: do a normal redirect for reil for your web apps,
Speaker 3: so you actually don't even have to have any conditional logic.
Speaker 3: You can just use these helpers and pass in a
Speaker 3: new route, which make it even easier on your rail
Speaker 3: server because there's less changes to manage. You're essentially changing
Speaker 3: that one line of code instead of you know, anfl statement.
Speaker 2: Yeah. I found that the integration with the redirect helps
Speaker 2: really really isful because you could just do something like
Speaker 2: receid or redirect to.
Speaker 3: Exactly. Yeah, exactly.
Speaker 1: So I have another tangent other question that's not in
Speaker 1: this vein at all. One of the things that I
Speaker 1: see people talk about, you know, when they're talking about
Speaker 1: the different options, right, usually it's in the jobscript world,
Speaker 1: and so they're looking at like ionic capacitor kind of thing,
Speaker 1: which is sort of kind of in this vein and
Speaker 1: sort of kind of not in this vein. And then
Speaker 1: you've got the React native, and then you've just gotten
Speaker 1: like straight up native where you're writing swift or Coughlin.
Speaker 1: And with the React natives and the and the others base.
Speaker 1: One of the things that people get into then is
Speaker 1: what if my app has to be offline? Right? What
Speaker 1: if I have to deliver content or or stuff like
Speaker 1: that offline, or you know, I'm working in a place
Speaker 1: where there's not really good connection, but I need to
Speaker 1: use the app to I don't know, upload pictures or
Speaker 1: crap like that, right, so it needs to cash it
Speaker 1: And then when my WIFEI turns on, then it says, oh,
Speaker 1: here's all the activity I needed to do. Yeah, is
Speaker 1: that just not a good fit for Turbo Native or
Speaker 1: are there mechanisms that allow you to do some of
Speaker 1: these things.
Speaker 3: Short answer is, if you need an offline first app,
Speaker 3: howt wire native is on a good choice.
Speaker 1: Okay, You're you're gonna.
Speaker 3: End up having to build out so much of the
Speaker 3: code base natively to do offline access first that it's
Speaker 3: not worth trying to kind of shove hot wire Native
Speaker 3: into it. If you have an app, you know, kind
Speaker 3: of moving along the spectrum here. If you need an
Speaker 3: app that is mostly web connected but has like one
Speaker 3: or two offline features snapping a photo and uploading it
Speaker 3: when you have Wi Fi, you build a hot wire
Speaker 3: native app and you just build those features natively. So
Speaker 3: maybe okay, twenty percent of your app is native, the
Speaker 3: rest of the eighty percent is driven by the web.
Speaker 3: That's a really good use case because you still get
Speaker 3: all the benefits of hot wire Native and then you
Speaker 3: have this little offline experience. For a very specific use case,
Speaker 3: I did exactly this for a client last year, two
Speaker 3: years ago. At this point, where they were a tour
Speaker 3: guide like reseller. They sold tickets to tour guides to
Speaker 3: tourists going on tours, and oftentimes they were traveling, so
Speaker 3: they didn't have Wi Fi right or internet at all.
Speaker 3: So they would open the hot wire Native app in
Speaker 3: the background, it would download all of their tickets, and
Speaker 3: then when they opened the app without service, it would
Speaker 3: switch into offline mode with some native code and show
Speaker 3: through a native screen all of the tickets that they
Speaker 3: have purchased that are stored on the device. When they
Speaker 3: click one of those, it would show the QR code
Speaker 3: and the map, all this stuff that they needed to
Speaker 3: get to the tour and then show the tour guide, Hey,
Speaker 3: this is my ticket. But all of it was offline,
Speaker 3: All of it was cash to the device, and none
Speaker 3: of it was dealt with with Turbo Native or hot
Speaker 3: Wire Native. It was all done with manual code. And
Speaker 3: then as soon as they got internet access again, it
Speaker 3: would switch to online mode where there was a link
Speaker 3: to the same experience on the web. That's like the
Speaker 3: really I think the best best of both worlds essentially,
Speaker 3: where you have this offline experience for a very important
Speaker 3: specific use case and then everything else is powered by
Speaker 3: hot Wire Native. For complexity, the hot wire Native implementation
Speaker 3: versus the native code, hot Wire Native was about five percent.
Speaker 3: Native implementation was out in ninety five, so like that's
Speaker 3: the level of you know, native code you'll need just
Speaker 3: to build those two screens versus what you need for
Speaker 3: hot wire native to access your entire rail server.
Speaker 1: Right. So I have two use cases that I'm thinking
Speaker 1: of here, and one of them is kind of like
Speaker 1: that where I've talked about, Hey, I'm politically whatever whatever.
Speaker 1: I'm not going to get into all that, but we
Speaker 1: have an issue where we have a caucus night in
Speaker 1: Utah every two years, and last year we tried to
Speaker 1: do a registration and that was a web app, and
Speaker 1: then we wanted to be able to scan people's QR
Speaker 1: codes and check them in, and the Wi Fi at
Speaker 1: the schools was not ideal. And so what you're saying
Speaker 1: is is we could have had the people who were
Speaker 1: scanning QR codes right the QR code scanner and having
Speaker 1: a list of people who have already registered, having that
Speaker 1: that could be a native component, but the rest of
Speaker 1: it's all turbonative, and then the same thing with people
Speaker 1: showing up with a QR code. The other use case
Speaker 1: that I'm looking at is a little different, and that
Speaker 1: is for top end devs. And incidentally, I made it
Speaker 1: into a multi tenant app, So if you wanted to
Speaker 1: run your podcast network on what I'm running. You know,
Speaker 1: I want to open that up to people, and I
Speaker 1: want them to have an app. But one thing that
Speaker 1: I've seen is if you're putting out videos or other content, yeah,
Speaker 1: some people want to access that offline, right, And what
Speaker 1: I've seen from other apps is you kind of hit
Speaker 1: the button and then it says, okay, I'm downloading it,
Speaker 1: and then once is downloaded, it just kind of has
Speaker 1: a flag on it that says this is available offline.
Speaker 1: And so what you're saying is is I could just
Speaker 1: have it then load a native player and play the
Speaker 1: video or a native player for the audio, and then
Speaker 1: the rest of the app, So browsing and knowing what
Speaker 1: you have access to and everything else, I can either
Speaker 1: cash those pages or I can yeah things like that.
Speaker 1: Just let that run as a regular app.
Speaker 3: Yeah, yeah, exactly. And offline cashing is like a whole
Speaker 3: another topic that is not supported right now but is
Speaker 3: supported in like base camp and hay if you notice that,
Speaker 3: So that is something that like maybe there's opportunity to
Speaker 3: upstream that. Maybe there's opportunity for thirty seven signals to
Speaker 3: get like a public Here's how you could enable caching.
Speaker 3: There's been some open prs that have been closed over
Speaker 3: the Reese over the last year or so that it
Speaker 3: wasn't right for public use. But I wouldn't be surprised
Speaker 3: if there is something like that in the future for
Speaker 3: hotwire and Native, where if you've visited a page and
Speaker 3: then you try to access that same page without Internet access,
Speaker 3: like you get a cased version right.
Speaker 1: Well. The other thing that I can see is, and
Speaker 1: I've seen this in another apps, and you can do
Speaker 1: this with PWA's you should be able to do with
Speaker 1: Turbo Native is you've got the offline storage kind of thing,
Speaker 1: and so you just you just cram the state up
Speaker 1: into the offline storage and then when they browse, Yeah,
Speaker 1: it checks to see if you have access to the Internet,
Speaker 1: and if it doesn't, then it just loads the data
Speaker 1: off of what's you know, what's held in memory essentially.
Speaker 3: Yeah, yeah, exactly, Yes.
Speaker 2: That was actually gonna be My next question is how
Speaker 2: do you feel about using like service workers for offline access.
Speaker 3: Yeah, service workers are something that I have very little
Speaker 3: experience with, so I can't comment on anything like firsthand,
Speaker 3: but I do know.
Speaker 1: That it adds it adds to service workers chs in
Speaker 1: RAILS eight, So I'm assuming they're I mean, I'm giving
Speaker 1: you access to that kind of exactly.
Speaker 3: Yeah, so like PWA stuff without how you know, hot
Speaker 3: wire Native removed is already on a great path with
Speaker 3: Rails eight. The Android side has actually a better story here.
Speaker 3: Service workers work better in an embedded web view. Right now,
Speaker 3: there's this issue with WK WebView, which is the WebView
Speaker 3: that powers the iOS apps, and PWA like features don't
Speaker 3: exactly work in the way that they work on the
Speaker 3: web in like Safari dot app. So to make those
Speaker 3: work well, like with service workers and you know, offline
Speaker 3: storage and background processing and all that stuff, like, we
Speaker 3: have to do something either to hot wire native or
Speaker 3: it won't be possible because of WK webew until they
Speaker 3: update that. And it's usually a security thing because you're
Speaker 3: just like injecting JavaScript and stuff into it. But from
Speaker 3: the literature that I've read around this, like WK web
Speaker 3: is actually the biggest blocker on PWA like features in
Speaker 3: an embedded web app. And that's not a hot that
Speaker 3: wouldn't be a hot wire native limitation. That's like an
Speaker 3: embedded web browser limitation.
Speaker 1: Yeah, JavaScript Jabber. We did an episode where it was
Speaker 1: mostly Dan, but he he basically just ripped into Safari
Speaker 1: because there are a lot of features that make web
Speaker 1: enabled apps better, cleaner, easier to run that Safari just
Speaker 1: doesn't implement, and where it causes issues on their end
Speaker 1: on the JavaScript end is that yes, you can get
Speaker 1: Chrome or Brave for your iPhone and it's basically a
Speaker 1: dressed up version of Safari, and so you have the
Speaker 1: same issues. And so yeah, this is this is not
Speaker 1: an isolated issue, and there are people outside of the
Speaker 1: Rails community that are working on workarounds for a lot
Speaker 1: of stuff.
Speaker 3: Yeah, not specific to how our native just Safari, even
Speaker 3: though it's my browser of choice, is a kind of
Speaker 3: a pain in the butt.
Speaker 1: Yep, you can say, Wow, you're the only person I've
Speaker 1: ever heard say that.
Speaker 2: I kind of want to go back to something we
Speaker 2: kind of we touched on at the start of the talk,
Speaker 2: and that like more about the process of a writer book.
Speaker 2: I know, if I remember correctly from your social media,
Speaker 2: you weren't sure whether you wanted to self publish or
Speaker 2: go with the publisher, and eventually you did go with
Speaker 2: the publisher. And I have personally self published, so I
Speaker 2: just wanted to compare notes, What made you go with
Speaker 2: the publisher? What have you liked? What have you not liked?
Speaker 3: Yeah, there's two big re I guess, one big reason
Speaker 3: for going for a publisher and one big reason against
Speaker 3: self publishing, which both led me towards using a publisher.
Speaker 3: The big reason against self publishing is that going self published,
Speaker 3: the benefit is getting one hundred percent royalties or ninety
Speaker 3: x percent royalties, right, like, you make more money per sale.
Speaker 3: My goal was not to make money off of this
Speaker 3: book directly. My goal is to get clients and exposure
Speaker 3: and you know, solidify myself as the expert in the space.
Speaker 3: Having another couple of thousands of dollars, maybe tens of
Speaker 3: thousands of dollars if I got really lucky by self
Speaker 3: publishing was not worth it compared to what I could
Speaker 3: be making off of a couple of clients. So the
Speaker 3: benefits of self publishing were like, not really benefits at all.
Speaker 3: The benefits of having a publisher were having an editor
Speaker 3: I didn't have to hire, having someone keep me to
Speaker 3: a timeline, someone making sure that the last eighty percent
Speaker 3: after I finished the first eighty percent actually gets done,
Speaker 3: you know, things like that, and having someone to review
Speaker 3: cover art, with having a team of beta reviewers that
Speaker 3: are platforms specific that can help me with stuff, having
Speaker 3: a distribution network, talking to my local bookstore to make
Speaker 3: sure my book is on the shelves there instead of
Speaker 3: having to walk in and be like, hey, can you
Speaker 3: stock this for me? Like, the list of going with
Speaker 3: a publisher of any publisher, were just aligned so well
Speaker 3: to my goals of the book book that self publishing
Speaker 3: like didn't stand a chance once I really once I
Speaker 3: finally understood that that was my goals. Those are my goals.
Speaker 3: At the beginning, I didn't really get that. I was like,
Speaker 3: I want to write a book and I want full
Speaker 3: control over it, so I was leaning for it towards
Speaker 3: self publishing. I want to make sure that the margins
Speaker 3: are exactly what I want the code cop the codes
Speaker 3: looks like this, the cover looks like that. But those
Speaker 3: things didn't really matter because of all the extra work
Speaker 3: I would have had to have done going self publishing.
Speaker 2: Yeah, man, self publishing is a hard wack, just to
Speaker 2: kind of give our listeners the other side of the kind.
Speaker 2: Because I decided to solve publish, and I honestly went
Speaker 2: through the same kind of decision process, And yeah, marketing
Speaker 2: myself as a freelancer was a huge part of why
Speaker 2: I wrote my book as well. But for me, the
Speaker 2: kind of clinch I was creative control. I wanted one
Speaker 2: hundred per and creative control top to bottom, from everything
Speaker 2: to do with the cover art to the fond size,
Speaker 2: to content, to silly jokes that I had in the text,
Speaker 2: Like I ended the book with a kling onward. It's like,
Speaker 2: just silly, silly, stupid things like that. And I didn't
Speaker 2: want anybody over my shoulder telling me we can't do
Speaker 2: that or we can't do that. So for me, that
Speaker 2: was the clincher. And yeah, it came with a hell
Speaker 2: of a lot of additional work. And another thing I
Speaker 2: think what kind of pushed me toward self publishing is
Speaker 2: I knew was going to be ebook only. The way
Speaker 2: I've written the book. For anyone who's read it knows
Speaker 2: it's full of hyper links to stuff, It has links
Speaker 2: to other parts of the book, it has links out
Speaker 2: to the Internet. It was never written to be a
Speaker 2: print book, and I knew that from day one. So
Speaker 2: what with an ebook only distribution model as like, and
Speaker 2: the fact that I wanted creative control, I was like, yeah,
Speaker 2: just to get on gum ruth and be done with it. Yeah,
Speaker 2: but obviously it comes with a lot more hard work
Speaker 2: in terms of marketing and self editing and stuff like that.
Speaker 2: So yeah, I just wanted to give the listeners a
Speaker 2: bit of contrast because there's no right onset to this,
Speaker 2: and Joe and I had different goals and I think
Speaker 2: we both found the right both for us. And yeah,
Speaker 2: if you're thinking of writing a book, doing just take
Speaker 2: someone else's answer.
Speaker 3: Yeah, I think that if your goal is to just
Speaker 3: like get something out as quickly as possible, also, like
Speaker 3: you have to self publish. It's going to take me
Speaker 3: almost to the month two years from the time I
Speaker 3: started writing this to the time it will be a
Speaker 3: physical you know, I can hold it in my hands
Speaker 3: done with the printing press.
Speaker 1: Like.
Speaker 3: That's a really long time. And I mean it actually
Speaker 3: worked out for me because during those two years, Tribonnative
Speaker 3: became hot Wire Native. Like I would have self published
Speaker 3: a book for Turbo Native and then had to like
Speaker 3: reado the book entirely for hot Wire Native. So I'm
Speaker 3: glad that it's took longer because I was able to
Speaker 3: do that during the editing process, not during the like
Speaker 3: post published process, but if you want to get something out,
Speaker 3: like you have something to say that you need to
Speaker 3: get out in the next couple of months, like you
Speaker 3: can't go with a publisher. Most likely it's going to
Speaker 3: be way too long. It's going to take that long
Speaker 3: to find a publisher.
Speaker 1: Yeah, one a couple of other things I wanted to
Speaker 1: just push in here. So the book I wrote it
Speaker 1: was on building your career and finding your next job.
Speaker 1: And to be honest, I mean at this point I
Speaker 1: would go back and I would put add a whole
Speaker 1: bunch of stuff about using AI to understand your resume
Speaker 1: and line it up with the job postings and things
Speaker 1: like that. You know. There was a bunch of other
Speaker 1: stuff in there about building your personal brand. That is
Speaker 1: a separate book. But yeah, I didn't really understand what
Speaker 1: the goal was. I thought for sure that I would
Speaker 1: just put the book out there and a whole bunch
Speaker 1: of people would buy it. Yeah, And so I experience,
Speaker 1: having done that now is, Yeah, if I were going
Speaker 1: to write a full on book or manual or you know,
Speaker 1: something that that you know, you kind of think of
Speaker 1: as that technical book you put on your shelf, I
Speaker 1: would one hundred percent go talk to the folks over
Speaker 1: at Pragmatic Bookshelf. I mean, I might shop at to Manning.
Speaker 1: Manning's royalties are higher than like Pearson and them. I've
Speaker 1: got a pretty good relationship with them as well, But
Speaker 1: you know, I'd probably go with one of the two
Speaker 1: and use a lot of their distribution network. One thing
Speaker 1: you have to understand, though, is no matter who you
Speaker 1: go with, most of the marketing and sale of your
Speaker 1: book is going to be down to you and what
Speaker 1: you can do to go get the word out right.
Speaker 1: So you're going to be doing what Joe's doing, coming
Speaker 1: on a show like this and you know, and maybe
Speaker 1: you know, publishing stuff to YouTube or a blog or
Speaker 1: places like that and making sure that people can find it.
Speaker 1: And you have to do that with self published too.
Speaker 1: The difference is is that the book publisher will you know,
Speaker 1: they'll provide you an editor and a lot of those
Speaker 1: other things. And in some cases, like Manning has reached
Speaker 1: out to me many many times for their authors, and
Speaker 1: so you know, they may help you figure out some
Speaker 1: of that marketing. One thing that I'm gonna kind of
Speaker 1: back up on a little bit is I've talked to
Speaker 1: a number of friends who have released like shorter versions
Speaker 1: of things, right, so you know, it's like a thirty
Speaker 1: page book on Hey, here's just how you get the
Speaker 1: thing to run, right, you know, so instead of building
Speaker 1: a car, you know, or building the frame of the
Speaker 1: car with turbine or with hot wire native, right, it's
Speaker 1: just basically a bare bones here's how you get turbo
Speaker 1: running in your app in you know, in thirty pages.
Speaker 1: And typically the publishers aren't so interested in those. Usually
Speaker 1: if you're trying to build your reputation on something like
Speaker 1: that too, like you can crank one of those every
Speaker 1: month and you can build some reputation for putting stuff out.
Speaker 1: And so again, there are a lot of approaches you
Speaker 1: can take. But yeah, if it and I think even
Speaker 1: if you're doing kind of the short content or if
Speaker 1: you're doing podcasts like this or something like that, like
Speaker 1: having that full length technical book on something that you know,
Speaker 1: like Joe saying that he can he can go find
Speaker 1: clients for and build business for, it really will pay
Speaker 1: off for you. But then you can do the other
Speaker 1: things to kind of you know, build your reputation and
Speaker 1: then go back to that and the fact that you
Speaker 1: went through a publisher that helped you make it the
Speaker 1: best thing possible is actually a good thing overall for
Speaker 1: your reputation. And so if I were to go back
Speaker 1: and write my book again, I would have gone to
Speaker 1: prag Prague and I would or you know, and I
Speaker 1: would have said, hey, look, guys, this is the book
Speaker 1: I want to write. Here's kind of an out line.
Speaker 1: They might have given me some other ideas. We don't
Speaker 1: know if we could sell it, or hey, you haven't
Speaker 1: covered this, or if you changed the direction of this
Speaker 1: a little bit. We think it's a better fit for
Speaker 1: the market, which is all healthy. And then they would
Speaker 1: have helped me get the book out and had to
Speaker 1: be the best thing possible. Yeah.
Speaker 3: I think that that last point is something that I
Speaker 3: haven't spoken about, so it might be interesting to cover here.
Speaker 3: One of the first things that I talked with Pragmatic
Speaker 3: about was the structure of my book. I went in
Speaker 3: wanting to do two books, an iOS book and an
Speaker 3: Android book. That was like my original pitch. I was like,
Speaker 3: I can knock out the iOS book in a couple
Speaker 3: of weeks. In terms of writing the Android book's going
Speaker 3: to take me a couple of months, and if someone
Speaker 3: wants both, they'll buy both both, and they'll be like
Speaker 3: some duplicated content on the rail server. And I could
Speaker 3: have easily filled tw hundred fifty pages for each and
Speaker 3: gone much more deeper with both.
Speaker 1: And that was why I can tell you I want
Speaker 1: one book.
Speaker 3: Exactly that, and that's where we kind of it's exactly
Speaker 3: where we ended up, like questions being asked of me
Speaker 3: of like, well, what does the audience want to read?
Speaker 3: Is the audience doing is ninety percent of the audience
Speaker 3: doing iOS and never touching Android? Okay, well, then Android
Speaker 3: goes second. Like all of these little decisions that I
Speaker 3: would have either hemmed and hawed over for months and
Speaker 3: just never made a decision on or made a just
Speaker 3: less educated decision. What I wanted to do as a
Speaker 3: second pass was like section one was all iOS and
Speaker 3: then section two was all Android, and you would build
Speaker 3: the full iOS app and then build the full Android app.
Speaker 3: And that kind of makes sense to how you're building it.
Speaker 3: You know, you're less likely to build both at the
Speaker 3: same time, but when you're learning, it's actually better to
Speaker 3: learn and build both at the same time because you
Speaker 3: can learn and compare and contrast the two frameworks and
Speaker 3: the two platforms, so every chapter is either is like
Speaker 3: Rails than iOS than Android, and that little change in
Speaker 3: the structure of the book book from my editor has
Speaker 3: made the book so much easier to read and understand
Speaker 3: and things like that. I just can't imagine having to
Speaker 3: have full control over and doing it on my own.
Speaker 3: And there's probably countless other ones that I don't even
Speaker 3: remember because we've made you know, we talk every couple
Speaker 3: of weeks on like how the direction and making sure
Speaker 3: that we're aligned with the goals of the book and
Speaker 3: the audience of the book and stuff like that that
Speaker 3: I would have gotten way distracted by now and probably
Speaker 3: just pushed whatever I had and called it done and
Speaker 3: not been happy with it.
Speaker 2: Yeah. Could you talk about a little bit about the
Speaker 2: process of finding a publisher what it entailed.
Speaker 1: Yeah.
Speaker 3: I A lot of my looking for a publisher phase
Speaker 3: was actually do I want to self publish or go
Speaker 3: with a publisher, So most of my research was spent
Speaker 3: talking to folks who had self published or folks who
Speaker 3: had gone with a publisher, you know, in casual calls.
Speaker 3: I think I spoke to like ten people either through
Speaker 3: a zoom call or like a Twitter conversation or email.
Speaker 3: And once I had spoken to everyone that had self
Speaker 3: published or gone through a publisher, I was like, Okay,
Speaker 3: I'm not deciding between self publishing and publisher. I'm deciding
Speaker 3: between self publishing and PRAG, like that was the option.
Speaker 3: It was so clear that PRAG was the best fit
Speaker 3: for me from talking to folks about my writing style,
Speaker 3: about what they valued, about how they manage code, about
Speaker 3: how they do promotions, royalties was great. It was kind
Speaker 3: of just icing on the cake. How they gave me
Speaker 3: an editor and beta reviewers and all this stuff. Like
Speaker 3: it was never is it PRAG or O'Reilly or whatever,
Speaker 3: it was like, self publish or go with PRAG. So
Speaker 3: once I got to that, the decision was actually pretty easy.
Speaker 3: Once I decided my goal of getting more clients, okay PRAG, Yeah.
Speaker 2: Is that just like to send them an email?
Speaker 3: And yeah, I ended up sending an email to PRAG.
Speaker 3: I submitted an official pitch to O'Reilly, and I submitted
Speaker 3: an official pitch to one more publisher that I can't
Speaker 3: I can't recall the name of. The third one that
Speaker 3: I can't remember the name of never got back to
Speaker 3: me at all, and O'Reilly said that they aren't looking
Speaker 3: for such a like cross platform book right now. It
Speaker 3: didn't fit in with their strategy. They're like, if you
Speaker 3: want to do just an iOS app or just a
Speaker 3: rails app, like, we would definitely like to talk more,
Speaker 3: but this weird cross platform thing is not what we're
Speaker 3: looking for right now. And Prag got back to me
Speaker 3: within like twenty four hours and was like, let's go.
Speaker 3: So that was pretty awesome. I was talking. I was
Speaker 3: talking to Dave within like a week, the you know,
Speaker 3: person who owns and runs Prag, and was just like, yes,
Speaker 3: this is this is great. We're really excited about this.
Speaker 1: Let's let's gets to talk to He is so funny.
Speaker 3: He's awesome. I just did an interview with him like
Speaker 3: two weeks ago and it just got published for this week.
Speaker 3: We chatted for like an hour and we cut it
Speaker 3: down to twenty minutes of just like what the books about,
Speaker 3: what hot Wire Native is, and he is such a
Speaker 3: delight to talk to and seeing those little clips of
Speaker 3: him asking like you know, these these naive questions is
Speaker 3: so much fun.
Speaker 1: Yeah. I think the other thing you have to because
Speaker 1: I think some people are probably going to be thinking oh, well,
Speaker 1: you know O'Reilly or you know Pearson owns O'Reilly. But
Speaker 1: you know, they just don't get it that that may
Speaker 1: not be the case. They know the audience they're trying
Speaker 1: to sell to. Yeah, and so does prag right, and
Speaker 1: so Pragmatic Bookshelf. I mean, they know they have pick acts,
Speaker 1: They've got you know, agile web development with rails or
Speaker 1: whatever it's called. You know, they have a handful of
Speaker 1: books in that space, and so they know that they
Speaker 1: are already in front of people who will buy this
Speaker 1: book exactly. And yeah, and so you know, I don't
Speaker 1: want anyone to be thinking, ho, well, you know, they
Speaker 1: blew it over there. They're selling to a different audience.
Speaker 1: It's the same with Manning or Packed or any of
Speaker 1: the other ones that you went to.
Speaker 3: Yeah, Packed, that was the one I reached out to.
Speaker 1: Packed.
Speaker 3: So y, yeah, I mean, my book's been came out
Speaker 3: like officially about a month beginning of January, like January
Speaker 3: sixth or ninth or something, and it's been in the
Speaker 3: best seller list and since then it hasn't dropped out,
Speaker 3: So like there's clearly something aligned with their audience and
Speaker 3: my book content, which is awesome to see.
Speaker 1: Yeah, and they do a good job too. Like if
Speaker 1: it's coming out, you know, because you said you haven't
Speaker 1: quite finished it, Yeah, you buy it now. You get
Speaker 1: a good deal on it for one and then you
Speaker 1: get the finished product anyway, And so if you want
Speaker 1: to get started and get you know, ninety five point
Speaker 1: nine percent of the way down the road and then
Speaker 1: you get that last piece that Joe's working on, yeah,
Speaker 1: it works out pretty well.
Speaker 3: Yeah, it works out pretty well. And like you just
Speaker 3: got it early, you're going to get the rest of
Speaker 3: the content eventually. You just got it early. And for
Speaker 3: cheaper You do have to deal with a terrible layout though,
Speaker 3: because coad snippets are are are smushed across multiple pages
Speaker 3: because the layout editor hasn't gotten in there. So if
Speaker 3: you can deal with that, it's a pretty good trade off.
Speaker 1: Yeah. So a couple of things that I'm just going
Speaker 1: to throw out there as well. So with Ruby Geniuses,
Speaker 1: we're doing a book club every month. For March, we're
Speaker 1: doing a book on prompt engineering because a lot of
Speaker 1: people want to learn AI. But I've already decided that.
Speaker 1: In April and May we're doing the hot Wire Native
Speaker 1: book by Joe, and then We're also going to do
Speaker 1: the Rails and hot Wire Codex because a lot of
Speaker 1: people are kind of looking for that front to back,
Speaker 1: soup to nuts, how do I build this thing the
Speaker 1: best way possible? And what I find with a lot
Speaker 1: of these books is it's not that I couldn't go
Speaker 1: figure it out on my own, right, I'm a smart guy.
Speaker 1: I go figure it out on my own. But the
Speaker 1: difference is is that you've gone through and thought through
Speaker 1: enough of the use cases that I'm gonna run into
Speaker 1: an issue and go, oh, what do I do here?
Speaker 1: And then it turns out it's in your book.
Speaker 3: Yeah.
Speaker 1: That's why I like the books is because you you
Speaker 1: steer me off of the tracks so that I'm not
Speaker 1: heading into an oncoming train that I didn't even know
Speaker 1: was out there. Yeah.
Speaker 3: A lot of my book, I think at least once
Speaker 3: a chapter, you'll do something and you'll get a you know,
Speaker 3: air quotes, unexpected result. That's how I've seen developers try
Speaker 3: to build hot Wire native apps, and you know, during
Speaker 3: the tab when you build tabs, the first time you
Speaker 3: launch the app, the app is just a completely white
Speaker 3: screen and I have a screenshot of that, you know,
Speaker 3: and I'm like, well, what the hell just happened? And
Speaker 3: you realize that you like forgot one line of code
Speaker 3: that almost every developer misses when they build tabs, and
Speaker 3: we walk through that together, so you know that not
Speaker 3: only did you learn that one line, but you will
Speaker 3: never make that mistake again because you saw the problem
Speaker 3: of the blank screen and then you fixed it yourself.
Speaker 3: And I have one of those, at least in every
Speaker 3: single chapter that I adds a lot of content, of course,
Speaker 3: but I just really love it because it really enforces
Speaker 3: the learning, not just the copy pasting from the book
Speaker 3: of code. It's like you're learning how this works.
Speaker 1: Yeah. I used to do that when I did the
Speaker 1: Teach Me to Code screen casts. I'd leave the mistakes in,
Speaker 1: like I would cut the googling the solution out. But yeah,
Speaker 1: I'd have people ask me all the time, why'd you
Speaker 1: leave the mistake in? And I was like, well, I
Speaker 1: talked to people after they watch my videos, and I
Speaker 1: asked them if they ran into the same mistake, and
Speaker 1: like half the people they follow along as I go
Speaker 1: and they make the same mistake I do, right, and
Speaker 1: then and then they fix it when I come back
Speaker 1: with the fixah, and the reason is is because it's
Speaker 1: a common thing. It's a real easy thing to do.
Speaker 1: And so yeah, I like that. I really like that.
Speaker 2: Yes, you mentioned briefly just like the layout of it
Speaker 2: iffy and stuff right now. So another thing, another huge
Speaker 2: challenge which you'll have if you're self publishing, is literally
Speaker 2: just producing a PDF and an e pub Like it
Speaker 2: is stupid hard to just convert something you've written into
Speaker 2: a PDF and EPUB And I was surprised, it's just
Speaker 2: how difficult it was. So when you work with the publisher,
Speaker 2: is that something that do they give you some tools
Speaker 2: to make life easier with that.
Speaker 1: Yeah.
Speaker 3: PRAG has its own markup language and it's like proprietary
Speaker 3: you know, nd under nda all of this awesome stuff,
Speaker 3: and it handles just I write one file and it
Speaker 3: then can output to PDF, to moby, to epub to
Speaker 3: physical copy like it does all of these amazing things
Speaker 3: with its own markup language that I don't have to
Speaker 3: worry about like should this be a link on mobile
Speaker 3: but actually a page number on a physical book? Like
Speaker 3: it's it's all handled for you. And then I can
Speaker 3: just write like in one file and images of course,
Speaker 3: and my code write it all in one file, and
Speaker 3: then when the layout editor gets in there, they can
Speaker 3: add their own special markup that I don't even like,
Speaker 3: know or care about. That's going to make sure that
Speaker 3: we don't have or like orphans or and whatever. The
Speaker 3: other opposite of an orphan is or code snippets spanning
Speaker 3: across two pages, or images that are too small or
Speaker 3: too big like all that's just going to be handled
Speaker 3: by the by the layout editors, and I can just
Speaker 3: worry about writing really good content. And that's a huge
Speaker 3: weight off my shoulders because that's something I don't have
Speaker 3: I do have to worry about when I do, like
Speaker 3: my newsletter or my blog posts. It's like that whole
Speaker 3: last thirty percent is just spent doing producing. I can
Speaker 3: just skip all that with the publisher and just write.
Speaker 2: Yeah, that's sounds like a huge case for a publisher.
Speaker 1: Yeah, yeah. So on one thing that I used brought
Speaker 1: up was the content ownership. So who has rights to
Speaker 1: your book?
Speaker 3: Yeah, PRAC has rights to my book. They have rights
Speaker 3: to the content in the book, and I am able
Speaker 3: to repurpose that content if I want to. So I've
Speaker 3: been thinking about doing like a course that would be
Speaker 3: very similar to the content of that book, but I can't.
Speaker 3: I can't reproduce like the whole content and sell it
Speaker 3: or publish it on my blog or anything. There's also
Speaker 3: exceptions to that, like if I want to sneak peak
Speaker 3: a chapter or two, I can get permission and republish
Speaker 3: it word for word, and as long as I outline
Speaker 3: that it's from the book, that's totally fine. The thing
Speaker 3: that didn't bother me about that is that, like a
Speaker 3: lot of the content from my book exists in the
Speaker 3: wild already, you'd have to piece together every one of
Speaker 3: my newsletters, every single one of my blog posts, every
Speaker 3: single one of your tweets, because that, yeah, like my
Speaker 3: private discord server where I'm answering people's questions, get hub issues,
Speaker 3: discourse discussions. Like if you pieced all of that together,
Speaker 3: you'd have fifty plus percent of the content of the book, right,
Speaker 3: but it all be disparate, and it wouldn't be connected
Speaker 3: to the same app that you're building, like it all
Speaker 3: itould be like spread across and code snippets. So them
Speaker 3: owning the content of my book seemed less. I'm less
Speaker 3: worried about it because I know that I can recreate
Speaker 3: this in my own different, like not my own voice,
Speaker 3: but from my own platforms. When it makes sense when
Speaker 3: I a whole chapters on tabs, If I write tabs
Speaker 3: on my blog, I'm not going to use the same
Speaker 3: techniques that I wrote about in the book. Sorry, I'm
Speaker 3: going to use the same techniques I'm going to write
Speaker 3: about in the book, but it's not going to be
Speaker 3: the same content. By the time you get to tabs
Speaker 3: in the book, you already have an app that does
Speaker 3: a bunch of stuff and we're just adding stuff on top.
Speaker 3: If I write that for my blog, it's like, Okay,
Speaker 3: new ex Code project, new Android studio project, here's how
Speaker 3: to add tabs. And that is a totally different piece
Speaker 3: of content, even if I'm teaching the same concepts and like,
Speaker 3: you know, approach, because of the audience and the context
Speaker 3: that's built into that.
Speaker 1: Awesome. Well, we're at about an hour and ten minutes.
Speaker 1: I think we pretty well covered this too. It seems
Speaker 1: like there's a lot there definitely an option worth looking at.
Speaker 1: If you're looking at putting a mobile app on your
Speaker 1: rails app and you're not super keen to oh now
Speaker 1: I have to add an API and I have to
Speaker 1: authenticate the API, and then I have to turn around
Speaker 1: and write an app that consumes the API, and I've
Speaker 1: got to build new interfaces and blah blah blah blah blah.
Speaker 1: So if people want to get the book, is there
Speaker 1: a link people can follow? You said there was a discount.
Speaker 1: Is that discount just built in? Or is there a
Speaker 1: coupon code? Do you want to tell us about that?
Speaker 3: We will put the coupon code in the show notes,
Speaker 3: because there is one. I cannot remember it right now,
Speaker 3: but you can get the book at if you go
Speaker 3: to my website, Mazziladi dot com. There's a big bounder
Speaker 3: up at the top that links to the purchase page
Speaker 3: on the publisher's website, which is the best way to
Speaker 3: buy it because, as Chuck mentioned earlier, you'll get an
Speaker 3: email from them on any update through the beta every
Speaker 3: two weeks, and then also once the book is published,
Speaker 3: any errata that gets changed, you'll get an email saying like, hey,
Speaker 3: these are all the changes, and a new version of
Speaker 3: that PDF or MOBI or epub for your readers.
Speaker 1: Yeah. And then I'm also just going to put this
Speaker 1: out there. I have an email list for the show,
Speaker 1: and I have two codes to give away free copies
Speaker 1: of the book. And so if you want a copy
Speaker 1: of the book for free, and I'm sure Pragmatic bookshelf's great,
Speaker 1: So if you buy it and then you win a copy,
Speaker 1: they'll they'll figure it out with you. I say that
Speaker 1: confidently without any authority to make promises for him, because
Speaker 1: they've just been so great with everything that I've ever
Speaker 1: done with them. But yeah, So if you go to
Speaker 1: Ruby rogues dot com, I'm adding in the email form
Speaker 1: literally this week, so by the time this is published,
Speaker 1: you'll be able to join the email list. Right now,
Speaker 1: the email list has like one hundred and thirty people
Speaker 1: on it, so you have a decent chance of getting
Speaker 1: the book. I took my old list and I segmented it.
Speaker 1: I just sent an email out and said, if you
Speaker 1: want to be on the Ruby only list. That's why
Speaker 1: they're only one hundred and thirty people on it. But anyway,
Speaker 1: if you want, if you want that, I mean, I'm
Speaker 1: going to be sending out content on doing whatever it
Speaker 1: is that we're in, you know, in the membership, but
Speaker 1: and then you know, dropping hints and tips and stuff
Speaker 1: like that. That'd be a bunch of good content. But
Speaker 1: besides that, if you're on the list, I'm gonna let
Speaker 1: it run through the end of I guess it's February now,
Speaker 1: so we'll let it run through the end of March,
Speaker 1: and then whoever's on the list, I'll take that list,
Speaker 1: I'll drop it into some random picker and we'll we'll
Speaker 1: give away two copies. So if you're interested, Yeah, go
Speaker 1: to Ruby rogues dot com and just join the me
Speaker 1: email list and yeah, I look forward to hearing from
Speaker 1: you there as well.
Speaker 3: Yeah, and the discount code is Ruby Rogues hot Wire.
Speaker 3: We'll get you that thirty five percent discount from the
Speaker 3: Pragmatic bookshelf upsite.
Speaker 1: Awesome. All right, Well, let's go and do some picks
Speaker 1: and then we'll go ahead and wrap up. I usual,
Speaker 1: do you have some picks for us?
Speaker 2: Yeah, so actually thinking of them during the show because
Speaker 2: they didn't think of any before. A couple of non
Speaker 2: technical picks. Again, I always started to do a music pick,
Speaker 2: so I'm going to continue with a music pick. And
Speaker 2: there's an album that I used to that I loved
Speaker 2: when it came out in twenty nineteen and kind of
Speaker 2: fell by the way, so I don't like discovered it again.
Speaker 2: A couple of weeks ago and I was like, Daddie Ill,
Speaker 2: I forgot how amazing the album is. It's called EmPATH
Speaker 2: by Devin Townsend. It's a metal album, but it kind
Speaker 2: of transcends genre. Really. It's like it's predominantly metal, but
Speaker 2: there's a whole lot of other kind of styles on
Speaker 2: there as well. And I think that's what makes it
Speaker 2: interesting for me because I'm not really that much of
Speaker 2: a metal fan, but I absolutely love that record. So yeah,
Speaker 2: I check that out. Mpath by Devin towns End came
Speaker 2: out in twenty nineteen, and I'm rewatching a TV show
Speaker 2: at the moment, which is one of my favorite TV
Speaker 2: shows called The Good Place, and yeah, I love it.
Speaker 2: I'm just doing a rewatch because I'm bored. Since I
Speaker 2: contact of anything else, I'll choose that as one of
Speaker 2: my picks. Yeah, that's all I've got today.
Speaker 1: If you're bored, I've got plenty of stuff that you
Speaker 1: can do for me.
Speaker 2: Else, I mean lazy and can be bothered to do
Speaker 2: the actual stuff I should be doing.
Speaker 1: Nice. Oh, okay, never mind, then I'm gonna jump in
Speaker 1: with some picks. My first pick I always do a
Speaker 1: board game. I don't think I picked this last week,
Speaker 1: but I'm picking groundhog Day the game. Now. Groundhog Day
Speaker 1: is a movie that came out in what ninety something,
Speaker 1: ninety six, I don't know, I'm totally guessing. Anyway, funny movie,
Speaker 1: Bill Murray, classic movie. And I feel no compunctions whatsoever
Speaker 1: in putting out spoilers because the movie is so freaking old.
Speaker 1: Came out in ninety three, ninety three even better, right,
Speaker 1: it's more than thirty years old. So anyway, in the game,
Speaker 1: he goes through and relives the same day over and
Speaker 1: over and over again until he has kind of the
Speaker 1: perfect day, right, you know, he gets the girl, he
Speaker 1: you know, all the things right. And so groundhog Day
Speaker 1: the Game is the same, the same premise. And so
Speaker 1: you have a perfect day if you play all of
Speaker 1: all seven cards in a day as red cards, right,
Speaker 1: and the red cards are for four heart cards, and
Speaker 1: if so, if you do that, you win. The way
Speaker 1: you play on the on each day is you can
Speaker 1: play any number higher than the last number played, and
Speaker 1: then day today, your days have to get better. Right.
Speaker 1: So there are great cards that have no hearts. There
Speaker 1: are blue cards have one heart, there are orange cards
Speaker 1: that have two hearts, and there are yellow cards that
Speaker 1: have three hearts. Some of the yellow cards get more
Speaker 1: red cards into the deck, so when you pass them
Speaker 1: around to everybody is a cooperative game. Anybody can jump
Speaker 1: in at any time and play a number. So on
Speaker 1: your first day, you're usually playing the gray and blue
Speaker 1: cards because they're lower hearts, and so maybe you get
Speaker 1: a day that has four hearts. So the next day,
Speaker 1: you know, you take the rest of the cards, you
Speaker 1: shuffle them, and you pass them out again, and all
Speaker 1: of those lower value cards are gone. So now you
Speaker 1: maybe have a five hard or six heart day if
Speaker 1: you get too far ahead of yourself, right, because you
Speaker 1: has to go up. So if you can't play on
Speaker 1: the day and you need more cards in the day,
Speaker 1: you lose. And then if you don't ever get a
Speaker 1: day full of red cards, you lose. It's a pretty
Speaker 1: simple game. Board game geek says it's a one point too.
Speaker 1: To wait two is like complex ish games. So I
Speaker 1: mean this is one. I think we were playing around
Speaker 1: in like fifteen minutes with five of us. And anyway,
Speaker 1: it's really fun because you literally just pass out the cards,
Speaker 1: fill up the day, shuffle the cards, pass them out again, right,
Speaker 1: and you get fewer cards every round. Here's the other
Speaker 1: thing that comes in and so yeah, so our strategy
Speaker 1: was at the point where you know, somebody has a
Speaker 1: couple of red cards and one of them is reasonably low,
Speaker 1: and you think they're good odds that there are eight
Speaker 1: seven eight cards in the stack in other people's hands, right,
Speaker 1: because you don't deal out all the cards, then you
Speaker 1: go for it. So anyway, fun game really enjoyed it,
Speaker 1: and so I'm going to pick that. In the show notes,
Speaker 1: there will be a link to board game Geek where
Speaker 1: you can kind of check out what other people have thought,
Speaker 1: and then there's going to be an Amazon affiliate link
Speaker 1: so that you can go go check it out. A
Speaker 1: couple of other picks here. If you're watching the video,
Speaker 1: you can see I have a little bit of a
Speaker 1: split lip. So we have cold, dry winters here in Utah,
Speaker 1: And that's just the way it goes. I'm gonna pick
Speaker 1: Chapstick just because it's made my life better the last
Speaker 1: few days. And then, oh, there was something else I
Speaker 1: was gonna pick, and I just can't think of it.
Speaker 1: But anyway, I guess I'll just throw out Ruby Geniuses.
Speaker 1: Real quick, we're doing calls every week. I'm doing the
Speaker 1: all the calls in March, and then I'm starting to
Speaker 1: bring in experts in April and may probably for two
Speaker 1: or three out of the four or five weeks, so
Speaker 1: we'll get people like Joe or and Ayush and you know,
Speaker 1: some of our other guests. I'm probably going to ask
Speaker 1: the guests from the show to just come on and
Speaker 1: you know, we can hear what they're working on, and
Speaker 1: they can kind of help us figure out how to
Speaker 1: do what they're working on and whatever we're working on.
Speaker 1: I'm getting way into AI, and so there are going
Speaker 1: to be some videos as well in the system for AI,
Speaker 1: just everything from here's how you just kind of get
Speaker 1: started with the fundamentals, either with a chat GPT that
Speaker 1: you don't have to set up, or Olama and some
Speaker 1: of the other tools that are out there. That was
Speaker 1: what I was going to pick, but I don't have
Speaker 1: the link in front of me, so I'll pick it
Speaker 1: next week. But there's a web interface that sits on
Speaker 1: top of Olama that you can just basically run it
Speaker 1: like chat GPT, except you're not paying for it, and
Speaker 1: it's slightly less capable because chat GPT will go search
Speaker 1: the web for information and this really doesn't do that,
Speaker 1: but anyway, good stuff. And yeah, so those are my picks, Joe,
Speaker 1: what are your picks?
Speaker 3: I have two picks, a book and also a board game.
Speaker 3: The book is Beauty Land. I read it. I just
Speaker 3: finished it a few nights ago. It is the tale
Speaker 3: of a girl grows up in Philadelphia and has kind
Speaker 3: of a troubled childhood and she gets a fax machine
Speaker 3: and she starts faxing and slowly finds out that she's
Speaker 3: an alien living in Philadelphia and she communicates to her
Speaker 3: home planet through this fax machine. And it's told in
Speaker 3: really digestible, like two three paragraph chapters of her life
Speaker 3: experiences of her growing up from living in Philly to
Speaker 3: like getting a going through high school, getting a job,
Speaker 3: having friends along the way, and it gives this really
Speaker 3: unique point of view of how aliens look at our
Speaker 3: life as humans. And there's a really awesome chapter on
Speaker 3: New York City, where I used to live that's very
Speaker 3: nostalgic but also just like very ironic and really makes
Speaker 3: you think about some of the things that we value,
Speaker 3: and like bagels are a big part of it. It's
Speaker 3: really really good and a pretty quick a pretty quick
Speaker 3: read as well and scratches that sci fi itch that
Speaker 3: I that I really love. My board game is in
Speaker 3: the background right here, Slay the Spire. It is a
Speaker 3: board game based off of a video game based off
Speaker 3: of a board game. So the video game is called
Speaker 3: Slay the Spire, and it's essentially you play a board
Speaker 3: game of a rogue Light deck builder, so you're like,
Speaker 3: you know, you're buying cards, playing them against the computer,
Speaker 3: and like trying to build the optimal deck. The board
Speaker 3: game is exactly that as a board game. I think
Speaker 3: the only thing that changes are some of the scaling
Speaker 3: of the numbers. But like if you've played the video game,
Speaker 3: it is an awesome board game to play because it
Speaker 3: plays really well solo. It's one of the few games
Speaker 3: that I think is like better played on your own
Speaker 3: against the game than playing with other people cooperatively. So
Speaker 3: I really love it because in the evenings that I'm
Speaker 3: wiped and want to just watch TV, I can set
Speaker 3: up a board game and play around by myself and
Speaker 3: not like sit in front of a screen for an
Speaker 3: hour before I go to bed. And it's really challenging.
Speaker 3: It's not too hard to learn if you already know
Speaker 3: the video game. It just does take a little bit
Speaker 3: while to set up physically, but definitely recommend that it's
Speaker 3: a lot of fun.
Speaker 1: So I'm just going to ask a couple of questions
Speaker 1: because one thing that I've run into is I've bought
Speaker 1: games have the solo player mode and it's totally different
Speaker 1: from the regular game, and it's usually not as good.
Speaker 1: So how close does the solo game align with the multiplayer.
Speaker 3: It's the exact same game solo, and then when you
Speaker 3: play with multiplayer, it adds two rules, so it's actually
Speaker 3: meant for solo play, and then multiplayer is like a
Speaker 3: mode almost that lets you play cooperatively. So all of
Speaker 3: the rules, everything is meant to be played solo, with
Speaker 3: a few exceptions.
Speaker 1: Yeah. Board game Geek has this one at a weight
Speaker 1: of two point ninety three.
Speaker 3: Yeah.
Speaker 1: It says it can take anywhere from thirty to one
Speaker 1: hundred and fifteen minutes. It says age twelve plus, So
Speaker 1: it sounds like it's a little involved but probably isn't
Speaker 1: terribly hard to pick up. Is generally how I would
Speaker 1: read that.
Speaker 3: It's it's easy ish to play, it's really hard to master,
Speaker 3: So like learning the rules is reading a couple of
Speaker 3: cards and knowing when damage happens and not being good
Speaker 3: at it and actually beating one of the four levels
Speaker 3: requires a few playthroughs.
Speaker 1: Okay, it looks like fun though.
Speaker 3: It's a lot of fun. It's a lot of fun.
Speaker 3: I back to the Kickstarter version, so I have like
Speaker 3: metal coins and a little pouch and stuff for it.
Speaker 1: It's like, oh, yeah, that's always fun.
Speaker 3: Yeah, it's cool.
Speaker 1: Yeah. I'll buy a game at the game Store or
Speaker 1: on Amazon, and then I'll play it with my friend
Speaker 1: and yeah, the same game will have all these nice
Speaker 1: little pieces in it, and I'm like, did you make
Speaker 1: these or something. It's a Kickstarter version, yep, yep. Yeah.
Speaker 1: Board Game Life. Yeah, that one came out in twenty
Speaker 1: twenty four. That's probably part of the reason I haven't
Speaker 1: played yet.
Speaker 3: It's a good one.
Speaker 1: Yeah, I did come up with the other thing. I'm
Speaker 1: just going to throw it out real quick. It's open
Speaker 1: WebUI and it's really easy to run on top of Olama.
Speaker 1: So you install Olama, you tell it which model you
Speaker 1: want to run. If you've heard about deep Seek, that
Speaker 1: one made a splash. You can run deep Seek versions.
Speaker 1: You can get the uncensored version of deep seek. It's
Speaker 1: fun to ask it about like Kenneman square and stuff
Speaker 1: because the data they trained it on it doesn't know
Speaker 1: anything about anything that China sensors, right, but any it's
Speaker 1: a it's a decent model. It runs fast, and it's
Speaker 1: it's pretty good. So yeah, but it's open open you
Speaker 1: open WebUI, open dash WebUI, and so yeah, you can
Speaker 1: just run that on your local machine. I had somebody
Speaker 1: ask if you can do cursor on it, and cursor
Speaker 1: does other things too, so you really can't. But yeah,
Speaker 1: all right, Joe. If people want to find you on
Speaker 1: the internet, where do they find you?
Speaker 3: Easiest spot is my website Mazzilati dot com. I got
Speaker 3: links to all the socials there, my newsletter, my blog posts,
Speaker 3: and also the book.
Speaker 1: All right, well, one more time. That code if you
Speaker 1: want twenty percent off is Ruby rogues hotwire. That's correct,
Speaker 1: and you just go find it on the Pragmatic bookshelf.
Speaker 1: It's pragprog dot com. And yeah, all right, folks, we'll
Speaker 1: wrap it up here until next time. Max out