Remote Ruby

Exploring Dependabot-Unraveling Rails LSP-Vim Customization

February 16, 2024 Jason Charnes, Chris Oliver, Andrew Mason Episode 258
Remote Ruby
Exploring Dependabot-Unraveling Rails LSP-Vim Customization
Show Notes Transcript Chapter Markers

In this episode, join Chris and Andrew as they kick things off with Chris’s rant about
computer hardware woes. Andrew contrasts this with tales of automation mishaps and
a firm stance on avoiding Windows, while Chris plans to leverage Proxmox for versatile
virtual machine testing. They touch on past experiences with Hackintosh, the merits of
various software management tools like Homebrew and asdf, and the intricacies of Rust
programming. They explore into the world of SQL learning and the hype around SQLite
and share tips for managing VS Code extensions and the quirks of using MacVim. The
conversation also covers the challenges and solutions for Dependabot configuration,
the business model behind AnyCable, and the lack of a killer app for Apple’s latest tech
offering. Hit download now to hear more!

Honeybadger
Honeybadger is an application health monitoring tool built by developers for developers.

Disclaimer: This post contains affiliate links. If you make a purchase, I may receive a commission at no extra cost to you.

Speaker 1:

This is remote. Have you any?

Speaker 2:

remote ideas to the meaning of the word.

Speaker 1:

Chris.

Speaker 2:

Oh man. So what's up? I'm just going to start on a rant.

Speaker 1:

Dude. Perfect Because I got a rant to roll right after it. Alright, Run it up, dude.

Speaker 2:

Run it up. You see this computer behind me that's disassembled on the floor.

Speaker 1:

Yes, I do.

Speaker 2:

Well, I built that like 10 months ago. This is why I buy Apple products, because everything was working fine until I walk into my office this morning and my computer's on like full tilt, fans, 100%, and I'm like what is going on here? I don't remember running anything overnight and then it reboots 10 seconds later and I'm like oh no, and it boots back up. The fans go full tilt, except for the ones in the front. The case fans just turn lights on, but nothing else, so I am disconnecting everything.

Speaker 2:

I bought another kit of RAM to go because ASUS was like well, the sticks of RAM you bought, even though they worked for the last 10 months, they're not certified or like verified, so we can't rule that out.

Speaker 2:

And I'm like okay, it's one of those days, man, every time I build a computer, every single time, you end up with some weird issues like that, and they can be like 10 months later, which is the worst. So hopefully everything is fine. I don't know if my CPU cooler is working. I can't hear the pump running when I turn it on. So it could be that the guy at Micro Center was like I don't think it would be overheating in 10 seconds like that, and then restarting, and I was like I don't think so either, but there's a red light on the motherboard that says it's the CPU or an issue with that. So no idea, after we record I'm going to pop those RAM sticks in and then probably have to go return them to the store when it doesn't fix the issue. So I hate everything, I just want my stuff to work.

Speaker 1:

It's so frustrating.

Speaker 2:

Yeah, I know, I used to love that stuff Like I used to have fun doing this in high school or college or whatever. Now I got responsibilities, need my stuff to work.

Speaker 1:

See, I broke all my automations the other day. But there's a button on my desk and me and my coworker have an inside joke. Whenever we're about to say something controversial, I say opinion alert and I double tap this button and all the lights in my room shut off and then the light behind me just starts flashing blue and red, like the cops are after you. Nice, so instead of that comment about windows, I was like, oh God, they're going to come. Yeah, I feel the same way. I was on windows up until college, dude. I refurbished windows machines, I built windows machines, I like sold windows machines. I've done a lot with windows and I will never touch it again.

Speaker 2:

You know, I thought things were a lot better and I don't know what caused this issue or whatever, but things have been pretty solid on windows 11 for a while till today. But yeah, my plan is to run proxmox on there and then I can have a whole bunch of boon to virtual machines. Test hatchbox against, and I was running them in windows 11 on virtual box and it was great.

Speaker 1:

But so I have a question.

Speaker 2:

Yeah.

Speaker 1:

So you built that computer right With my bare hands, but you're just running Linux virtual machines off of it. Why not just build a Linux machine?

Speaker 2:

Well, so proxmox is a Debian distro that is kind of a hypervisor, so I'll be able to run Linux on it. I think you can run Docker containers maybe not directly, but depends on, like, if you're running true nas or whatever. There's a whole bunch of other similar things, like unraid, and then what's cool is you can run windows in there and then pass the GPU through to it so you can run it. And if you want to play games or something in your windows, like VM or it's not like a bare metal install of windows, but it's close enough that it knows how to forward the resources to it. And I was like it's gonna be really nice just have some sort of proxmox manager for all the VMs, because we got to be testing the upcoming Ubuntu release and everything on Hatchbox as early as we can. It's kind of perfect for me to do that. And then I just got a $13,900K and so it can run a ton of stuff at the same time, and bought more RAM today than I need Well, more than I had previously.

Speaker 1:

But you installed some more Download, some more RAM.

Speaker 2:

If that, yeah, you wouldn't download a RAM.

Speaker 1:

Not just one.

Speaker 2:

But yeah we'll see.

Speaker 1:

I'm like, I'm jealous that you have a Micro Center. Number one, number two I really don't want to take this the wrong way, but I feel like you're one of those kids that made a Hackintosh.

Speaker 2:

Oh yeah, I used to use a Hackintosh.

Speaker 2:

There you go. I can spot them, dude, when you don't have the four grand to buy, you know, a MacBook Pro or whatever it was. Yeah, I went through that trouble For a while. It was actually really good until Apple started like we're not going to use the Nvidia cards anymore or whatever, right. Then it became a real pain and maybe you can still do it, but there's a ton of people working on that stuff. It's wild, right, and for the longest time, like, I built a $500 desktop that ran OS X, mac OS, and it was killer and it worked great until it didn't. And then it was. This situation again Wasn't usually hardware problems, but sometimes you got more time than money and you don't mind going down that route. Other times you got more money than time and that's a different way to approach problems. Throw money at it, go buy your $40,000 Mac Pro with wheels and a $5,000 monitor with a $1,000 stand. Do it.

Speaker 1:

Dare you? Yeah, I won't. No, you're right, very cheap about computers, I will run them basically till they're dead. I was on like a $30 pulled out of the trash and put parts in it laptop before I got a MacBook Pro for graduation from high school. Going into college, oh yeah, that was the first time I ever had a Mac. I was doing fine before that. I felt no need to install Hackintosh. But my buddy a few years older than me, probably right around your age that was all he was into at the time. The reason.

Speaker 2:

I did the Hackintosh was actually because I wanted, when I was screencasting, like more or less, to have a ton of storage in there. So the only real option you had was like build a Hackintosh and then you can put eight hard drives in your desktop machine or something and, you know, have tons of storage for all your screencasts and the raw recordings and whatever else. So that was like led me to it because I had a MacBook Pro, which became a very easy sell Once I saw how easy it was in 2010, how to install Rails on a Mac versus on Linux. And I was like compiling stuff and whatever from source and Linux. And watch my co-worker while I was in school we were working on stuff for a professor and he sets a new iMac up and was like brew, install this, brew install that. And I'm like what is happening? Why is this so easy?

Speaker 1:

So I was pretty sold, but yeah, so when you need to install an application on your Mac, do you install it with brew or do you go to the website or the App Store?

Speaker 2:

It depends. I've been avoiding homebrew more and more because Wait why.

Speaker 1:

I need to hear why.

Speaker 2:

Well, stuff like installing Postgres on there. It's like you brew, install Postgres and it picks whatever, the curve. Well, that's the thing. Like you really need four certain things. You don't just want the latest version, you want to be able to run two versions or three versions at the same time. So I would use ASDF for Ruby.

Speaker 1:

So you know your database.

Speaker 2:

You can also do Docker for all that, but it's a different kind of worms. Have you seen Table Plus? They have another project called DB Engine and it can detect your homebrew services, but it can also download, install any or most any Postgres version. They're missing 16 and I don't know if they haven't been working on it a lot or maybe it hasn't got the adoption that they want. It's awesome. It's just a little app that runs up in your menu bar and then it shows me Caddy from homebrew, Grafana, Melee, Search, Memcached, Postgres 15 and 16. Apparently I have both of those installed Redis, MySQL but then you just click plus and it's like do you want to install Postgres, MySQL or Redis, or is it the ARM version, the Intel version, whatever? They can set those up and run them separately, because that is one of the annoying things about homebrews. It's kind of is written same with like Linux packages where it's like you want to install Redis, Will you get the version of Redis?

Speaker 1:

and that's it, not my sequel at 5.7. Yeah, literally everything you mentioned. Asdf can be used to manage just ASDF, everything.

Speaker 2:

Yeah, I love ASDF. It is killer. Somebody asked for us to support Bun on Hatchbox because we use ASDF. It was as simple as install the bun plugin and then it's done, and that was it. It just worked and I was like yes.

Speaker 1:

Installing Rust with ASDF for YGIT was perfect and fine, but I will say I had tried to do something with WebAssembly several months ago and everything online was like use Rust up. Just trust me, brother, use Rust up, do not use anything else. Use Rust up, I promise. And I was like now I'm going to use ASDF. An hour or two later I'm like messing through, like these dependencies that won't do anything and I'm like I don't understand why this is happening. So I uninstalled the ASDF Rust package, used Rust up. It worked perfectly Nice, but I haven't had any trouble this time around.

Speaker 2:

So yeah, I guess that's what I used too, because the official install page for Rust uses Rust up. So that must be what I've done too. Because, yeah, we compile Ruby with YGIT for Hatchbox. So I think one of my VMs or something I was compiling on one of our live servers but I ran out of disk space because I went back and had it compile, like like we had for older rubies that are end of life. We had just compiled like the latest version, because we were like look, if you're going to be running Ruby 2.2, there's no reason you shouldn't be on the latest version of 2.2 or whatever. You should upgrade anyways. But we're just going to pre compile those.

Speaker 2:

But the other day I was like you know what, screw it, it's just a little storage. Let's get them all compiled and then it's easier for any new customers that want to use that. But that was like install Rust and then that was like a gig and a half and then every version of Ruby, the source code, and then the compiled version of it and whatever. Like I blew through with some disk space pretty fast and then one of them failed because that's a lot of time to compile that stuff. It was like a long, long script. It was trying to run for every version and I don't know how many. We made it through, but it was halfway through and then I had to wait another hour or something for it to finish everything else out when I detected that it was crashed or whatever from disk space but I learned a trick the other day, what you reminded me of it while you were talking about figuring out which version of Ruby.

Speaker 1:

So in your terminal do type and then Ruby, yeah, yeah, yeah. And then you do type Rust C as well to figure out which one. Now this morning I don't know why it was listing both the homebrew path and user bin Ruby, which I was like why are you doing this?

Speaker 2:

But I restarted my computer and then it stopped, so yeah, I can't remember, because type will let you know if it's shell function or correct alias or something.

Speaker 1:

Yeah, I always use which and that works pretty well, but I always forget about type Type is nice because for a while I was trying to figure out what the difference between a CLI and a built-in command was, and that's the easiest way to tell you. Type type cat. It's not going to link to a CLI. I don't think it is a program. Default is one. Oh, ls.

Speaker 2:

Yeah, unless you have that alias. It says LS is an alias for LS, dash capital G for me, because I got it.

Speaker 1:

I saw how to break through the alias the other day, but I forget now what else. You got A CD type CD, I think that's a program too. Is it really?

Speaker 2:

No, it's a shell built in at least in CSH.

Speaker 1:

Yeah, yeah, yeah yeah, it's kind of cool that I can show you that stuff.

Speaker 2:

It's pretty similar to type in JavaScript or whatever, for Ruby even is a whatever. What is your rant? Oh yeah, okay. Glad you asked me, let's just take a little delay or a little tangent for 30 minutes and talk about your idea.

Speaker 1:

It will actually segue straight into there. So it's actually perfect. I'm having a problem. So today we had someone come and speak at work during a meeting and educate us more post-gruss. Right, nice, nice. I'm sitting in that meeting and I'm like on my goal list for this year is to become much more confident in my sequel skills. Yes, and I'm reading a post-gruss book by Andy Atkinson. I'm doing the work. I'm trying to like use sequel more instead of just bumping into the Rails console and then all of a sudden, like nobody's problem, here comes fricking sequel light just banging down the door like the Kool-Aid man.

Speaker 1:

Remember when we had Derek Sivers? Oh yeah, do you remember when we had Derek Sivers on the podcast? Yes, he got me really, really excited about this idea of building my own database that just does what I want it to. And like I started learning about data warehouses and started exploring like different tools to build them up and I was like I'm going to build it in post-gruss, dude, I'm going to build a post-gruss database. I'm going to get really good at post-gruss. And then sequel light came out and I saw a tool, or I remembered a tool called data set that I had seen in the past, which basically does all this really great stuff for you. I'm not going to explain it, just can't do it justice by explaining it on audio, so go watch the video on the homepage. It's really cool. It basically gives you all these tools to quickly build your own data warehouse with sequel light, and I want it.

Speaker 2:

Nice, you reminded me that the other day I was helping a customer on a hatchbox who wanted to use Table Plus to connect to their database. Well, as it turns out, you can't just connect to sequel light remotely over SSH because, well, it's just a file and not a network service. So apparently Table Plus will download the file if it's not that big, but if it's of whatever size, basically you can download the file. They're like yeah, that's actually way harder than it sounds. We don't support that. So you can't use Table Plus to connect to a remote sequel light database, which kind of sucks. I was like man.

Speaker 1:

So I use sequel pro and they have an app on the iPhone and it has sequel light, the ability to connect to a sequel light database. And the only reason why I hadn't pulled the trigger on sequel light was because of what you just said, where I was like well, if I'm going to make a database, what's the point of having a database I can only access on my computer?

Speaker 2:

Yeah, and so I was like would you ideal copy it to your phone or what Exactly? I don't want to do all that so, and I don't want to make an app and then you're going to merge it somehow if you want to change it or whatever.

Speaker 1:

No, no, no, no, I don't want to do that. Actually kind of curious. I'm going to have to try that after this. See what it does for sequel light on iPhone.

Speaker 2:

What's cool is how simple it is and like how powerful it is for that simplicity. But there's sort of the reason why it's too simple for a lot of cases like that, where you're like I want to access it remotely, well, like you could clone it and then use a separate copy to access it. But that's just not sort of what it was designed for. So it's interesting to see that and it's like no, no, super deeper amount of hype around sequel light the last few months. It's wild.

Speaker 1:

Yes, jamie dropped us. Dude. Whenever Jamie starts cooking, dude, oh my God, I grabbed like the popcorn. And I'm not going to lie. I save everything. Anytime Jamie cooks. I put it into a file and I put it into a folder on my computer and you put it in your local sequel light database. Exactly.

Speaker 2:

Well, in the future. This is about to be.

Speaker 1:

We were talking about sequel light earlier and he was like gathering a lot of momentum, but you know what it really feels like. It feels like a hype train. And then he started like listing off reasons why you should use one or the other like actual reasons, and he just kind of capped off. Well, most people are just going to be like, well, I don't have to pay for a database server, and that's the advantage, and that's the dumbest way to make that decision.

Speaker 2:

It is one of those things that happens way too often in just general online discussions is like when you're hyping something up, you like never talk about the downsides of it, and that is kind of I feel like what's going on at the moment. Or it's like there's a bunch of cool stuff going on and maybe some of these things are like going to be solved because people are like well, we'd like to include the adoption, or improve the adoption of sequel light, so maybe someone's will build a little tool for you to access it remotely or something. But yeah, at the moment it feels like the hype cycle where people are like, oh my God, look at how perfect react is. And then it's like, well, until people start actually using it, the nuances come in then, so it's easy to gloss over a lot of stuff.

Speaker 3:

But did you know that the number one reason startups fail is that they run out of money? There are so many ways for startups to lose money, but downtime shouldn't be one. Recent studies found that downtime can cost $427 per minute for small businesses and up to $9,000 per minute for medium sized businesses. That's every single minute, but a monthly subscription with Honey Badger helps you prevent costly downtime by giving you all the monitoring you need in one easy-to-use platform so you can quickly understand what's going on and how to fix it, which, my friend, helps you stay in business. And, best of all, honey Badger is free for small teams and setup takes as little as five minutes. Get started today at Honey Badgerio. Again, that's wwwhoneybadgerio.

Speaker 2:

This is a side tangent, but this week in Rails just got tweeted about 59 seconds ago. Shout out to your boy, colin Gilbert, for being the number one today. He and I were talking about one of our Go Rails community members. He had not set an instance variable and then FormWidth was like yo, what are you talking about? This model you pass in is nil. So we've been talking a lot about the ergonomics of stuff and he was like I'm going to go try and see what it would take to refactor Rails to give a friendlier error if that happens.

Speaker 2:

And his solution was cool. It turned out that rather than the default value of model being nil in FormWidth you could just change it to false. So it was like there's either an object or false or nil, so sort of three cases. And by looking at that, if you ever pass a nil, it's like hey, we know that you passed something into this argument because it wasn't false, the default value, but it also wasn't like an active record object. So he was able to do that and that got merged. But then it's actually getting pulled back temporarily because that was a breaking change and so he's got to introduce deprecation warnings first that, whatever the next release of Rails is 7.2, and then the next release. After that the original pull request can be added in there. So he had a pull request in today that was like here's the deprecation of it. We're effectively going to sort of revert what we got and then add that functionality in later permanently. It was cool to see that. I was excited for him to get all those things merged. That's a great contribution.

Speaker 1:

Yeah, I was talking to him on Monday and he was like I'm thinking about maybe doing a Rails PR and I was like, dude, do it. If I had one that I was like, yeah, this is the one that I can make you best believe I'd be cooking, so shout out to Colin, that's awesome.

Speaker 2:

So, along those lines, did you grab a copy of Campfire and look at the source code?

Speaker 1:

No, no, I did not, and you want to know why? Actually, I can't say why, but I'll tell you why after they're hitting me with that flobby diss bro.

Speaker 2:

Yeah, I grabbed a copy and it was funny because the initial sort of reaction I had was this is all pretty standard, what I would expect. There wasn't anything like terribly exciting. If you pay close enough attention, there's a lot of interesting ways that they do things. But, most importantly, I feel like the naming of everything was done really, really well. But it was also one of those moments where I was like, oh, I felt like I expected it to be some really interesting sort of complex things.

Speaker 2:

That's actually the beauty of the whole thing is, like how easy it is to comprehend and how simple every controller is or every model, because they've given them proper names to things and organized it into concerns and active record objects and controllers and everything in the way that you should have done it. And I was like, for one, this is probably a good sign that, like I felt almost underwhelmed looking at the code because it was like, yeah, this is exactly what I expected. This is how I would have done it for most of it, which is a good sign, because I'm like, oh, I picked up a lot of interesting things along the way.

Speaker 1:

Humble brag or not, dude.

Speaker 2:

Well, it's like I remember watching. You remember the on writing software while videos that yes. I posted.

Speaker 1:

Came right when I started becoming a developer.

Speaker 2:

Yeah, I remember seeing those and being like mind blown because there was just some really basic things that he would do in those videos that I was like I never thought about doing it that way and so I've like over the years tried to what would David do, or whatever you know, as I'm working and like how would they write it at 37 signals? It was kind of fun because I realized like I feel a little underwhelmed because actually I realized now that I've adopted a lot of those same practices and stuff and I was like, oh, this is actually really good and encouraging because I feel like I actually did have a way to sort of measure my learnings and skill levels, that it rails, developer or whatever. So that was kind of cool. There's little things.

Speaker 2:

I just made a screencast on this before reading the source code and noticing that they use the same thing but most people don't know that it has. Many can have a block given to it where you can add methods to your associations that are not on the original associated record model. That stuff they use in a few places, which is super cool, and I was like I literally just recorded a screencast about it the other morning and I was like you never see this, but it can be very handy. And then to see it confirmed in campfire, I was like, oh, perfect timing. But you guys have any of those in Podia?

Speaker 1:

Maybe I don't know what you speak of. I do, but I don't. I was just reading the docs, so like maybe I saw it somewhere in there.

Speaker 2:

Here's why it came up this week and we talk about this in the screencast. So basically, like you say a user has many accounts, for example, what you can do on that is you can say has many accounts do, and a block inside of it and that block gets evaluated on. So when you say current user dot accounts, that is called a collection proxy, which is like a class inside of the account model that active record like dynamically defines for you. This is all like very top of mind for me because I'm doing the same stuff in the new version of noticed, where we're defining these classes. When you inherit from a noticed event or notifier thing, so these collection proxies are like defined where it's what keeps track of. Like we're going to inject the current user ID and every query when you use this association. So you can add methods to it there. And one of the ways that the prefixed ID gem that I've written, one of the ways that works, is by tapping that has many associations and saying, hey, let's include these class methods. So you can do like current user dot accounts, dot find by prefix ID and that method is just added automatically to it. But that doesn't work if you're going through associations and the parent model is also not a prefixed ID model. So I was able to inject those methods on the association by saying has many accounts and instead of doing the block, you can actually give it a lambda and you can call extending, and extending will take a module and then extend the proxy with that module. Or there's an extend option.

Speaker 2:

That's not in the docs and Rails at all but that works too, was what I was using.

Speaker 2:

I didn't get any deprecation warnings for it, so it's just not documented, but I remember finding that reading the Rails, the Active Record Source Code or whatever. But you can do some powerful stuff with that and it's one of the things that's like yeah, there's a paragraph in the docs about it, but unless you have a real need for it, you're never going to use it. But it's super handy when you want to do something like the user will have a default account or something and I want to be able to say like current user dot accounts, dot default, and default doesn't need to be a scope or a class method. On the account model, I can just make a method only available from the user association, which is like freaking sweet. I was like oh cool, they use that too in Campfire. Another one that I remember and I've seen this looking at Hay or BaseCamps JavaScript, but they have like a currentjs file that will look at the meta tags and look at the current user ID and current account ID or room ID.

Speaker 1:

Yeah, they got that in Campfire too. I borrowed that pattern. It's not the current part of it, but I borrowed the like using a meta tag for like storing state on the front end.

Speaker 2:

Yeah, freaking awesome it works beautifully, dude.

Speaker 1:

It's all in Poteat now.

Speaker 2:

I don't remember where I first saw it, but I was like no way, of course. Like this is genius and yeah, it's the same thing. Basically, they put it in a current lib file and then you say current dot room, just like you would do with current attribute server side. And it's freaking awesome to have that accessible in your JavaScript as well, with effectively the same interface. All they do is make a JavaScript object and put the ID in there. That's it. There's no other attributes in there, but you totally could, if you needed to keep track of, like, current dot user and have their ID and their email and maybe their name on the client side, just put that in an object and bam, you're done.

Speaker 2:

It's another one of those really great patterns. So, shout out, it's like $299. I thought it was going to be like on the high end of the under $1,000 range that they had talked about, but it's super affordable. If you just want to buy it to learn from, it's worth it. So I've been poking at it every day or something. Is there another file that I haven't looked at that might give me some ideas on how I could refactor something or just think through a problem in a different way. So worth it.

Speaker 1:

Yeah, 100%. All right, I was looking for something for the past like two minutes because when you were talking about that method, that active record method, I found a method in active record the other day. That truly blessed me at the right time. So you probably know that you can pass context into your validations so you can call valid question mark and pass it context.

Speaker 2:

Yes, I always forget about that.

Speaker 1:

So I solved a problem and, honestly, I don't care what anyone says, I think it was the most beautiful thing ever. I found this thing called validation context, which is very hard to find. Validation context, though, is available inside of the validates proc, so, like you can do, validates name presence true, if, and then open your curly brackets. Validation context does not equal custom, for instance. You can do a little bit more than just that simple thing, and I was like how about we only validate this thing under this specific circumstance, using this validation context?

Speaker 1:

and then we can avoid this issue with this callback.

Speaker 2:

Oh, that's, interesting it felt good.

Speaker 1:

It felt real good.

Speaker 2:

Yeah, that's such an interesting thing because, like, my favorite applications are the ones where it's like hey, you want to start creating something, just fill out whatever you'll feel like filling out or whatever you can right now, and we'll save it in a draft state until it's like ready to go. You know, like some applications, it's like you want to create a new project and you click new project and it takes you to a page and it's saved a new project without any data in it and you can just refer back to it. You can refresh the page and it's like a same record and it just saved it without anything. It's like such an odd thing because most Rails applications you go in immediately. You're like validate this, validate that, validate everything, as if your user is going to always put in every piece of data in the one form before they even save it. And it's like, no, the real world best flow for this is almost always if you're in campfire, like you want to create a new room. What if we just create a new room with a blank name or a random name and then you can edit it, instead of having to force you to decide on the name exactly before we even let you do that. It's such a cool flow.

Speaker 2:

But yeah, I think it's one of those situations where like validate context is like incredibly useful because you could be like well, we need to validate X, y or Z, even if you didn't put any data in. But then once you have and you're like actually doing this or you're updating the record, if you're going to update the room, we're going to force you to put in the name. At this point, it's a great way of breaking the validations down. Instead of having some sort of like well, we're going to validate the room presence If the state of this is pending or something, you don't have to do any of the conditionals all over your validations, which get crazy in the weeds, especially if your record has multiple steps or whatever. Yeah, I've got a perfect example for you.

Speaker 2:

I was just thinking about if you're building a wizard with multiple steps. You could use the step name as the context, Exactly.

Speaker 1:

I was using it in an auto saving context. So imagine this you are on an auto saving form. Let's say there's a title and then there's several other fields. Let's say you come to the form and delete the title, making that object invalid, right? Then you continue editing, let's say for 30 minutes, and then you finally fix that title. Rails will update that title and everything else is gone off into the ether. It's only because nothing that happened once it became invalid was persisting. So by using the validation context, you can be like I don't care if this is like nil, I want you to save everything else. Yeah, and don't do this check under this certain circumstance, because we're okay with it being nil in this situation.

Speaker 2:

Right, it's definitely not super simple. It is complex to set that up properly. But yeah, I think it's almost too easy for people to just look at forms and database models and just think, oh, we set all the rules here, we always require everything and you really for good applications. Creating probably most anything on Podia is a sort of multi step process. Imagine you had to create a course on Podia and you had to edit everything on one form.

Speaker 2:

It's like the title. Every single you throw cocoon at it. Every single step in the course is a title, maybe a file upload, maybe a description, maybe whatever, and then save all of it at once. You would never do that, but even the tiny little bits of it, having that auto save and the flexibility of all that is super duper useful. I'm going to have to do a video on the validation context, because I don't believe I ever have, and every time that I remember it exists I'm like this is awesome and I forget about it, and I actually don't use it almost ever. So why doesn't everybody know about this feature? Whenever I see it, why do I not use this? I just forget about it.

Speaker 1:

So I love it. Great way to skip a validation, which is a very hard thing to do.

Speaker 2:

Yeah, I installed the Rails LSP the other day and I love it.

Speaker 1:

So you're in VS Code now Trying.

Speaker 2:

Dude.

Speaker 1:

I'm so freaking offended right now.

Speaker 2:

It's crazy I reinstalled VS Code, neo Vim, and it's going to be my savior that will convert me.

Speaker 1:

Is it that good? I haven't tried the Neo Vim in VS Code because I heard someone not give a good review on it.

Speaker 2:

Yeah, I know, what I was reading was basically the same thing. It's still not VIM, but the VS Code VIM plugin just constantly drives me nuts because little basic things that I do, like Shift J and K or whatever.

Speaker 1:

You have to add in your own bindings to do that. Yeah, yeah.

Speaker 2:

You can add custom bindings.

Speaker 2:

Some of those will actually move a line instead of highlighting a line in visual mode or whatever. Those differences drive me nuts. And then I don't have time or really want to go and fix all the bindings so that they match what I'm used to. So I'm hoping that the Neo Vim will be closer than I could get used to it and I haven't gone through and tried to do the LSP and VIM and set all that up and it's so nice to just click install and have that in VS Code. So we recently were like you know what We've used Annotate forever.

Speaker 2:

I loved it at the time but Rails LSP, like what Tenderlove showed at Rails Confidence, you know it was like I can just hover over the user class and then see all of the schema. I wouldn't much rather have that. And like Annotate, it's fine but it gets out of date pretty easily and it just ends up with if you have a big table, you have a crap load of comments at the top of your file and you can't easily get to the code. It also caused a lot of merge conflicts for, like Jumpstart Pro customers, modified stuff. So we're like I think it's time to go.

Speaker 2:

I'll miss you because, honestly, reading through the DV schema. To do the equivalent is really annoying trying to find the right table, because you might be like I want to go to the users table. Well, users count and users columns are in other places too and you find those first. So you can't like jump directly to where you want to go, usually searching the schema. But that feature in the Rails LSP is phenomenal. So but I was kind of curious because I had a little trouble setting it up initially and I think it had just not received the slash activate request or whatever it is.

Speaker 1:

Yeah, it starts it like it installs its own gem file and like a hidden folder that can't see, that that's the problematic in the beginning.

Speaker 2:

That's actually the Ruby LSP will do that in a dot Ruby LSP folder. But for the Rails LSP it actually needs inside your Rails server. So it's an additional gem. You add it to your development group in your gem file and then VS code or the extension will basically hit slash ruby, underscore LSP, rails and then there's like an activate route and it's a rack middleware that gets added to the Rails server only in development and it's kind of cool because you can just poke at the request yourself.

Speaker 2:

So I was looking at the middleware and I was like, oh, there's a slash models and slash whatever and it takes that string and looks up the model and then gives you the schema back. And I was like, oh, I can just go to slash model, slash user and get a JSON response back of email, string, id, integer, whatever. This is, at the end of the day, pretty simple. I really love how easy that is. I think they're talking about possibly making it the Ruby LSP, where it could run a separate Rails server so it doesn't have to be added to your app directly as a dependency or development dependency.

Speaker 2:

But I'm just very excited about the cool features we can get from tools like this, because there's so many things that it can introspect, because you know what you're hovering over in your views, this root path or user's path. It can be detecting that and then check the routes or check the models or check the helpers or whatever the heck you've written in your code, because it's actually running your code and it can introspect that stuff. It's wild. So just such a cool idea. Can't wait to see where it goes. But I was like you know what let's? Maybe I'll try and do this in Vim, but for now I'm going to just try and use VS code more and see if I can use that and get it working. But again, same thing as my computer that's torn apart on the floor. I don't really want to have to configure my editor a whole ton. I've got work to do.

Speaker 1:

I had almost finished adding this gem tip podium. By the time you finish that, all I'm saying is that, yeah, I'm not really good at much, but I'm good at configuring stuff, dude. So I've got years of experience configuring VS code. I run it lean, very lean.

Speaker 2:

I'm in the same boat and that's kind of what I wanted in Vim as well was like if I SSH into a server I'm going to have Vim, but it's going to be no plugins. So the more I can get used to using Vim with no plugins and not having these very custom things, I can at least be a lot more portable when I'm jumping around doing stuff. So I kind of feel the same way about extensions in my VS code editor, but these are worth it.

Speaker 1:

Yeah, I go through and delete ones that I don't think I've used in the last month, like every month. Oh, nice.

Speaker 2:

It's like the advice for moving. If you move into a new place and you've not opened this box in three months, get rid of it. That's stuff you don't care about, it's probably junk. Or if it's sentimental, take photos of it. Then you can get rid of it, because you can always look at the photo and that's why you have it for the memories, and the photo will trigger that same thing for you?

Speaker 1:

You don't use Neo Vim, do you? But you're using Neo Vim. I still use Mac Vim.

Speaker 2:

Mac Vim has like an actual Mac GUI window, so it's not just in my terminal. So I can command, save and like some normalish Mac shortcuts. That's really all I use. And then the other integration is like the mouse cursor you can click and highlight code and it knows exactly where you intended. So if you're doing that in your terminal, you just be like highlighting text in the terminal but not actually like inside Vim. I initially started on Mac Vim like many, many, many years ago, and just keep using it for that convenience. Oh, this is a good one. The yesterday, what was I doing? I was trying to set like an environment variable or something in my terminal. So I open up VS code, then I open up the terminal in VS code, then I open up Vim in the terminal in VS code this is got it.

Speaker 2:

Yeah, I posted in our chat for Go Rails to call it in and I was like I think I accidentally just committed treason, did you?

Speaker 1:

bust. Open a Tmux terminal while you're in there. Open this electron app. Open this terminal inside of electron app. Open this Tmux. Open this Vim inside Tmux.

Speaker 2:

Yeah, then open Chrome again inside electron. Yeah, it was one of those moments I was like, oh, what the hell am I doing? But it was just like muscle memory Can't beat it.

Speaker 1:

As a Vim guru. I'm going to call you that because you're probably the second or third Rails developer I ever saw use Vim. I'm not going to lie you weren't as impressive as the first guy I saw use Vim, because the first guy I saw use Vim I was like I have to learn Vim or I'll never be a good developer.

Speaker 2:

Is that?

Speaker 1:

Ben Ornstein. No, it wasn't Ben Ornstein is probably way better than that guy, but I think it was just the like what the hell is happening right now?

Speaker 2:

Yeah, I only kind of learned the bare minimum Vim to be like faster, and I don't spend enough time practicing the other things I can do with it like I should. So there you go, practical Vim yeah.

Speaker 1:

Sitting right here have you read it?

Speaker 2:

Have you read parts of?

Speaker 1:

it. It's kind of like a cookbook, at least that's what I would call it. To me, this is like filled with recipes, and whenever I need to cook, I'll just open my recipe.

Speaker 2:

Which is all the time. That's all you do as you cook.

Speaker 1:

Dude, I was cooking earlier.

Speaker 3:

Dude, I'm not a lie to you.

Speaker 1:

What this book allowed me to do is realize the capabilities of what was available to do in Vim. Like I had no idea that all this stuff was in Vim until I read this book and it's just like oh well. Also for people out there like this dude's reading a freaking book about a text editor, you would be surprised at how helpful it is just to have like a concise clean. Someone already went to the trouble of weeding out all the crap out of this Right Think straightforward. I'm curious, though ever since I've decided that I was going to move to Vim probably know I'm already doing that in VS Code.

Speaker 1:

Vim keybinding is cool. I don't use the name of them, but I have never installed or tried to configure Vim on my Mac. I went straight to NeoVim. So like I had like a very, very, very minimal NeoVim setup with one or two or three extensions, and as I slowly work more into it I will add like another one. But I'm curious. You were talking to me and didn't know me yet and I was like I want to be a Vim user. Would you still tell people to use Mac Vim or regular Vim, or would you tell them to use NeoVim?

Speaker 2:

So my thing was like when I went from sublime to Vim, I was like I get paid to code. I can't become completely useless for three weeks. So my approach was there used to be.

Speaker 1:

I don't know if it still exists, but there was a set of scripts to yeah, like are you talking about from Thoughtbot or from online tool that would like build?

Speaker 2:

It was from one of the GitHubbers.

Speaker 1:

Okay, oh, was it from the homebrew guy.

Speaker 2:

No, I don't think so.

Speaker 1:

Janice is what it was called. I know exactly what you're talking about.

Speaker 2:

And that was what got me to switch. Yeah, carl Huda, janice, vim distribution hasn't been in touch for seven years, so do with it what you will. But that was my first introduction to Vim because my goal was just I need something to sort of make Vim as close to sublime text as possible, so that I can retain my speed but also like learn Vim.

Speaker 2:

So that was part of the reason why I used Mac Vim as well, because then I was used to like command S and whatever else for saving and just sort of the convenience features. That stuff's not a big deal anymore but at the time it was annoying so and it's still, I guess, a bit to that day like not using Vim in my terminal, still use it in Mac Vim. So if I transition to VS code I'm trying to do the same kind of stuff where it's like switching and retaining maybe as best of Vim shortcuts and stuff as I can.

Speaker 1:

But right In Neo Vim there is a package manager called lazy and then there is a distribution called lazy and Vem or something like that. Lazy and them is like they use, like the lazy package bundler, and they made their own. Like here you go, it's got all the stuff and things. I think a long time ago I originally downloaded that and it was like I can't use this because there's so much in here that I don't know what it is that you know I can't learn like this. So I gave up on that a long, long time ago and when I started rewriting my things from scratch, I used lazy, because packers now deprecated and lazy is just the thing to use these days, I guess.

Speaker 2:

I think I'm still using this thing called Vundal.

Speaker 1:

Yes, I know exactly what you're talking about.

Speaker 2:

One of these days I'm going to like throw it all out and start from scratch again, because one point, like I got rid of Janus and I was like, well, I still need at least these core things that I did. So I've got a bunch of like configuration stuff and shortcuts that were kind of mirroring that or whatever, but it was kind of just the things I used and nothing more. It was a good way to learn. Oh, that's how they configured Vim in Janus.

Speaker 3:

I didn't need to do that.

Speaker 2:

I understand it, so maybe I'll change that because it was a little annoying the way they did it or something. It's a good experience but you can get so in the weeds. With that. I got to be productive and I think that's probably why you see, like DHH still using text mate and stuff. If it works and you're productive with it, you're not going to be 10% more productive because you switched to hot editor of the day like Zed, the just 1.0 or whatever of Zeddev came out.

Speaker 1:

I'm sure it'll be cool to check out, but yes, the reason I brought up lazyVim is because I recently read their docs. But even though I'm not using it, I read all of the documentation and I started reading and trying to get an understanding of how they were setting like key bindings. And I've now taken that and put it back into VS code, thinking about how to like trigger shortcuts more effectively but also using like them key bindings to do as well, but also like redoing the VS code shortcut. So it's like, okay, well, if I want to view something, I can have like a standard operation to do that and it makes a lot more sense than some of the land in there.

Speaker 2:

Yeah, I could have figured out a couple little things like double equals in VIM for me will correctly auto indent everything. So if I had copied code from the browser or chat or something and paste it in highlight it double equals, it gets tapped over correctly. And I don't know if that they call that necessarily auto indenting in VS code. It might be like formatting these lines or something, but you just trying to add it or indent, or whatever.

Speaker 2:

Like if it was too tapped over it would pull it back. Yeah, we just like fix it. Just run auto format.

Speaker 1:

Yeah, there's some indentation commands to do that. That's why I asked like would your format or fix all the problems? Because if so, I would just run a format, which is what I do.

Speaker 2:

Yeah, and I think that'll probably be the way I go. It's just one of those things where I'm like I do it out of habit and I'm annoyed that it doesn't work the way I used to. So setting up something like that, to have an alternative, will help quite a bit. It just takes time to get those things switched over. It's annoying.

Speaker 1:

At one point long ago, working on a course called VS code for Rails developers.

Speaker 2:

Didn't Caleb Porzio have a really good, awesome VS code or something? Of course, that was pretty damn popular.

Speaker 1:

It was very popular. I did use that. Yes, it was not for Vim or anything. It was just like how to set up VS code.

Speaker 2:

Yeah, yeah, because he had kind of a unique, no sidebars and whatever.

Speaker 1:

I used it and I tried it, and I just really didn't. There were some things. I definitely kept some things because I rewrite my like config from scratch like every several months, get rid of commands that no longer exist, make sure, like anything, that's oh, I don't need to do this anymore because this got fixed, or yada yada. So I definitely still have some of the things that he had, but for the majority of it, no. It was a really enlightening course, though at the time.

Speaker 2:

I don't think I ever picked it up so I like his stuff. Make some good stuff Before we wrap up. A long time ago I remember saying the words mission control. We were going to talk about that, we'll just touch on it, but it's pretty cool. I was actually surprised at support rescue, but I think 37 signals uses rescue quite a bit.

Speaker 2:

But that's cool because it's like Redis backend example, because I know everybody was kind of like what about sidekick? It's got a web UI. Can it work with this? I'm sure it can. Someone's just going to have to go build the integration and maybe that'll be Mike or maybe it'll be somebody contributes it. But it's cool.

Speaker 2:

There's shows, your cues, shows the failed jobs and in progress jobs and block jobs and your workers. That are connected like you would expect and basically like what David had shown at Rails world. But what's really neat is you can actually connect in the Rails console to any of your applications, not just the application looking at in the Rails console if you want to configure that. So their example is they have set up Basecamp for and hey, and inside of mission control you can actually like see the cues and the workers and just switch between them and then they can actually have rescue and solid queue running in hay and you can click on tabs between them. It's pretty cool and it's got an extension that I didn't even realize.

Speaker 2:

I don't think that in Rails engines in your engine file normally you're putting like config initializer things in there. You can actually do a console block and inject things like this jobs help or something command and a connects to connect to command in the Rails console. So you can basically mix in features and if you run jobs help, it'll be like hey, you can connect to any job server using this command and it'll show you the available options and then you can just run it and then you can say active job jobs and it will tell you exactly what's happening on that specific server, which is cool, and that active job jobs doesn't exist. So when you run the connect to command, it's actually defining that for you and whatever is pretty neat. I did not expect that to be like part of the library for mission control, but you have a dashboard but also programmatic access to any of those workers and queues and stuff that you might want through a generic interface.

Speaker 1:

So pretty sweet. That's another reason why I kind of want to try SQLite, just to be like I really am kind of interested in what they're doing over there, although I don't envision myself switching off of Postgres and Sidekick, but still would be very interested.

Speaker 2:

You can run solid queue on Postgres. So if you want to play with mission control, you can still have it on Postgres, so you don't have to use SQLite for this. It's more or less for like an app like Campfire maybe something simple. Actually, did you see Paulkin's tweets about? He took Campfire and then replaced ActionCable with any cable. It was like the one server could easily handle a thousand users or whatever, and it was like a one gig of RAM server or something. Something small.

Speaker 1:

What is that?

Speaker 2:

Real good. It was just awesome to see like yeah, you know you could support a thousand users with ActionCable, but you're going to need a fairly good size server. And then if you want to just swap out the internals of that, boom, here you go. Any cable to the rescue, and that was the open source version too.

Speaker 1:

So very nice, dude, you love to see it.

Speaker 2:

Yeah, it's just awesome, like that is a great well library and product because the paid versions are going to be killer for anybody that needs the extra support and the extra features. And it's a really good example of another library, like Sidekick, that is open source but has the enterprise level tier to it or whatever. It's a great business model for those libraries where it's like here you want a taste of how good ActionCable could be, replace it with any cable and then, if that works and you got a heavy load of web sockets, enterprise version is always there for you.

Speaker 1:

So it's pretty sweet. I'm excited to take a look at that.

Speaker 2:

Before we go, happy Apple vision pro day. I was just looking forward to signing on to the podcast in my Apple iGoogle Goggles whatever.

Speaker 1:

I didn't even realize it, because I saw MKBHD's video on it, or like watched some of it the other day. Now I realize he probably gets it early, doesn't he?

Speaker 2:

Every video of his is. I've been living with this for two weeks now.

Speaker 1:

He's our hero. He's a freaking hero. I did so funny. Mkbhd.

Speaker 2:

Yeah, I watched that too and he had some good points on it and stuff. But it was like there's like no killer app in it, yet you can watch Apple TV. Yeah, that's pretty cool, I guess.

Speaker 1:

But that's exactly what the problem was with the Facebook one. Oh sure, the Oculus. That's exactly the same problem. There was like one game that was fun. Did you ever see anyone playing anything other than freaking Beat Saber for real.

Speaker 2:

Yeah, not really. There was some zombie. Was there a Resident Evil game? That was pretty good. I think I might have.

Speaker 1:

Dude sitting in our room. I'm never going to touch it again because it has to have a Facebook account now and I ain't doing that I know yeah. Ridiculous.

Speaker 2:

Yep, last thing before we go. This will be a long episode. Do you know anything about how Dependabot works? Because I did not. So in Jumpstart Pro I used to have it set up where you configure it and it will create a YAML file and add gem, but it would generate a separate gem file that gets evalled and at a point you talked about your nesting issue.

Speaker 2:

Well, yeah, that was part of it and then we got that nesting fixed.

Speaker 2:

But it turns out that the gems that are conditional, where they're like reading from the YAML file and whatever, that part does not work because Dependabot only copies over specific files from the repository. So it will pull, like your gem file, maybe your gem spec, Any of those eval gem files or require relatives it will pull in. So we fixed that part, but it does not copy over the config jumpstartyml. So when we go to parse it it's just like oh, that file doesn't exist, so it's just a default config with no extra gems. So then our gem file is just false for all of those optional ones and I don't have a way to tell it copy over the YAML file. So I've been trying to figure out a solution for that, and one of our customers, Zilviness, mentioned what if you made it a Ruby file instead? It was like oh, that could work, Like we could assign instead of a YAML file, just take Ruby and dump a Ruby hash with correct Ruby syntax out to a file and then we could require relative that and that could work.

Speaker 1:

I was basically going to tell you to do something akin to that in a GitHub action.

Speaker 2:

Yeah, we got to do it, you can use the API though. I think we have an API.

Speaker 1:

I'm not sure. Actually, that's a good question. Well, they integrated with GitHub, right? It's a real sign.

Speaker 2:

Yeah, I downloaded the Docker image for dependabot and you can run it yourself for development and stuff and it's fairly complex to get running.

Speaker 1:

I've done it in the past. I don't know the answer to your question all the time ahead, but I've figured this out in the past so I'm sure I could figure out again if you need help with it.

Speaker 2:

Yeah, no, I think his suggestion was going to be like really crafty.

Speaker 1:

Yeah. When he said that, I was like oh you know what, as long as we can spit out a Ruby hash, basically with inspect, then we can just drop that out into a Ruby file and I think that could work Very similar to what I was going to say to do Not the same type of idea of like okay, we're going to have to hack this together here. Yeah, we're going to have to trick someone.

Speaker 2:

Right. So part of me was like I hate that we're going through these hoops just to, yeah, make dependabot work. I feel like it should be more configurable or something, and maybe there is a config option. I missed, but I didn't see anything. It just seems like this is not like. 99% of Ruby applications are going to be just a gem file or a gem spec with no conditionals in it, which I understand. It depends about core as open source or whatever, but trying to contribute to that is not going to be very trivial, so I won't be able to. Just hey, could we add a config option for this? Really?

Speaker 1:

obscure, really obscure, edge case. You're going to have to take this on, guys.

Speaker 2:

I'm telling you, you guys definitely need to have this feature and maintain it. For me, that's important. I do really love the idea of we have the configuration and memory. We can write it to YAML, like to JSON or to oh you know what you totally could do to you. You could write it to this file, Even if you wanted to preserve JSON or YAML. You could just put it in like the data section of the file, Do all kinds of interesting things.

Speaker 1:

So we could like, like a little parser or whatever.

Speaker 2:

But honestly it was like we have such a trivial thing that if we just can take a Ruby hash and print it out as valid Ruby code, it's easier than our YAML thing because we don't have to have a YAML parser Like we were talking about before, where we can't require psych or YAML library because we might require the wrong version of it because we're in the middle of running bundler. So that's not safe to do. So I will probably be reporting back next week on how this goes. It sounds like it should be very easy.

Speaker 1:

No, it's not going to be. It's not going to be yeah.

Speaker 2:

famous last words.

Speaker 1:

I already know you're going to hit something dude.

Speaker 2:

That's a great place to leave it. But yeah, I think, converting. How do we detect that you have the YAML file and then convert it to the new format automatically? Those little things that actually shouldn't be too bad, but famous last words again.

Speaker 1:

It all sounds great, right, but so do most of my ideas. I just know you're going to hit something really frustrating. This is either going to go great or you're going to lose the next two days of your life.

Speaker 2:

I'm already on that. Lost several days trying to get dependent bot working with fancy stuff we got, so you know we're already there. What's? Another few days lost, right?

Speaker 1:

Just send it, dude, full, send it. I support this. I support the rabbit holes, dude. Yes, sir. Well, if you do wind up down that rabbit hole and you get a hand, I have a little bit, so let me know.

Speaker 2:

You got a little hand.

Speaker 1:

I have had a little hand around dependent bot before.

Speaker 3:

Obviously.

Speaker 1:

I have been on nothing. I knew it was Rails app and I remember somewhat the structure of it.

Speaker 2:

Yeah, now it supports like all these other languages and crazy stuff. It's cool.

Speaker 1:

Yeah, it is really nice.

Speaker 2:

Enough ranting. I'm going to go plug in some new RAM sticks in my computer and then go punch the wall when it doesn't work.

Speaker 1:

After that, plug in your frigging PlayStation controller Boy, it's time to get nasty.

Speaker 2:

I have a PlayStation 4. I don't even have a PS5 yet, so does Kent, I kind of get a PS5 at some point.

Speaker 1:

I swear I saw one in your house. Uh-uh, Dude, big baller, Chris, don't got the PS5. Dude, you slipping. Kent's cooking on the PS4, dude.

Speaker 2:

I was waiting on the pro that was supposedly going to come out, and then the slim comes out. It just is like all right, I'll just play on my PC. That doesn't work.

Speaker 1:

Well, you could obviously just do that, oh, but your computer. Okay, now I understand. Now I understand now.

Speaker 2:

Yeah, I understand, but now I got to get the whatever Nintendo Switch 2 or whatever that comes out this year.

Speaker 1:

Dude, little kids are cooking on mobile call of duty. What they got? They're little fingers on their phone and they're just sitting there frying people oh yeah, get Jackson started on that. Get him from Fortnite as quickly as possible.

Speaker 2:

Get him signed to an eSports team before he's two years old.

Speaker 1:

He'll have ADHD by like a year and a half.

Speaker 2:

Yeah, and he's going to have spent like $10,000 on skins.

Speaker 1:

That's not that much, this chump change for the skin. I call them the Boynes boys because those are the boys that took their credit card out and they bought it. I will admit I have homelander. It's fine to buy a few, but some of the people like oh my God, Collecting them is crazy.

Speaker 2:

Or the people who are like the Counter Strike skins that do the knives and pubg All the gambling sites and whatever praying on kids, yeah. And then like the streamers that actually secretly owned the gambling sites. That stuff was crazy, yep.

Speaker 1:

And it's such a big business. I remember like walking into my friend's dorm room in college and like watching him like sell virtual shit on this game and I'm like, do I've been playing games like this my entire life. I have no idea what you're doing right now and I have no idea why there are three zeros behind that comma.

Speaker 2:

Yeah, and then I was like what are you hearing about? You can sell your Diablo three character on eBay for like $900 or something. I was like.

Speaker 1:

what are you talking about, boy? That wasn't my rescape character worth Cute.

Speaker 3:

I got a good club penguin going out.

Speaker 1:

Cloping was dead too. Rip Jeez.

Speaker 2:

It's kind of crazy, but thank goodness I didn't grow up where. That was the thing that I wanted.

Speaker 1:

I value money, so I have never, ever really wanted it ever.

Speaker 2:

Well, that's the thing. The kids just like they don't know how.

Speaker 1:

It's a status symbol, dude.

Speaker 2:

It's yeah, so for them it's just like I just want this stuff.

Speaker 1:

Like you don't have to work, micro pay for everything, dude.

Speaker 2:

Yeah, it's like oh, just slip all here, slip all there, you know what, maybe we start charging a dollar for everybody that downloads this episode.

Speaker 1:

We're taking it out of them in the crypto. We're mining their crypto anyway, dude.

Speaker 2:

Yeah, go fix your computer or punch the wall, but I have a feeling it's going to be one of those days. For you, a hole in the wall.

Speaker 1:

Hole in the wall.

Speaker 2:

All right, man, until next week, when I have more.

Speaker 1:

Depend-a-bot things Next time More them, more rails, more codes. Let's go.

Computer Issues and Hackintosh Nostalgia
ASDF, Rust, and Ruby Compilation Discussion
Hype and Challenges of Sequel Database
Rails Source Code and Development Techniques
Validation Context in Ruby on Rails
Vim vs NeoVim for Text Editing
Mission Control and Cable Discussion
Discussion on Docker, Dependabot, and Gaming
Views on Money and Technology