Chris and Dave are speaking at An Event Apart Seattle - you should come! We've got some COVID updates, Chris' Git journey, issues with Git Hooks, Commit Lint, take a look at Parcel CSS, and pick some fav things.
Time Jump Links
- 00:50 Preppin for 500
- 03:52 An Event Apart Seattle
- 04:40 COVID update
- 06:19 Git journey
- 17:02 Sponsor: Notion
- 18:33 Issues with Git Hooks
- 26:36 Commit Lint
- 28:38 Working on the wrong branch
- 31:55 Sponsor: Jetpack
- 33:53 Remember to set your upstream
- 35:50 Shrinking video on macOS
- 37:42 Issues with screenshots in Discord
- 41:05 Parcel CSS
- 54:31 Healthy Picks
MANTRA: Just Build Websites!
Dave Rupert: Hey there, Shop-o-maniacs. You're listening to another episode of the ShopTalk Show, a podcast all about front-end Web design and development. I'm Dave--498 years old--Rupert. With me is Chris Coyier. How are you?
Chris Coyier: Yay! Good. Yeah, that's really close to 500, isn't it? It's not like we're going to have a spectacular where we're going to podcast for 24 hours a day or something. That's not happening.
Dave: Too late.
Chris: We have a little bit of an idea for it. At least be a little retrospective and talk about ShopTalk, generally, for 500, probably.
Chris: But I would say that if anybody has any ideas of what they would like to see from ShopTalk, we'd be all ears. It's tempting to do, "Let's do a cool clip show," or something. It's funny to think about it. That would take like 100 times more effort than--
Dave: Than a normal ShopTalk. Yeah.
Chris: Yeah because we'd have to listen to 80 shows, mark interesting moments. It's not like we have this pile of clips. I think Chris Enns has some funny little four-second clips, but that's not going to make for a show.
I'm picturing a clip show as being like, "Remember this funny moment when Paul Irish's garage door opened." You know? [Laughter]
Dave: Yeah. Yeah. Yeah. We don't have that really.
Dave: And audio, too, it's like, we cut out all the biffs. It's not like we're a live video podcast where we keep all biffs.
Dave: That would be better. I don't know.
Chris: That'd be neat. Maybe we can think of that in the future. I even noticed right here in Riverside FM -- which is where we're recording this recently, which has been pretty good to us, I'll say -- has a mark clip button now where you can, like, "Ooh, that's an interesting moment." You can kind of just hit the button, which I think is quite a clever little piece of UI.
Chris: If something is exceptionally funny, then you can note it.
Dave: I mean you think of economics. We do this every week, 500 times. Maybe if something funny happens, mark a clip or something. Then you have something else to share - not just the weekly podcast or whatever.
Chris Enns has done that a few times where he'll cut out a clip out of context--
Chris: For the tweet or whatever.
Dave: For the tweets or the video.
Dave: That's good.
Chris: Those get shared mostly in Discord, I'll say.
Dave: Yep. Yep.
Chris: That's cool. That's cool. Just saying. It's so cool. 500 is a special one, more so than 400 - or something. You know?
Chris: 500! Yeah!
Chris: So, that's coming up. That's not here today, though. We don't have a guest. We have some more guests lined up. I really am excited about having more guests on the show. You know we've had guests forever.
Chris: Right now, my mind is at, like, "I want other people's expertise." I get such a kick out of that; knowing that we can bring you more than what's just in our heads.
Dave: Yeah. Well, and I think that was always the intent of the show. Just the pandemic hit, and then everyone was at home.
Dave: We probably could have had a bunch of guests. [Laughter] No one was really leaving their house. But you know it was a lot of, like, "This is just more stuff. Life is already complicated. Now we're doing more planning and more--"
Chris: Yeah. I'll tell you. It's a five-email average getting it all planned out and all that.
Dave: Which we could have done it, but I think we both were just like, "Let's simplify." When conferences come around, we simplify.
Dave: But anyway.
Chris: I think this is official yet that we're both going to be at An Event Apart. Not a sponsor but that's coming up.
Dave: Yeah, we'll be there at An Event Apart in Seattle. I believe -- I don't know if I'm on the website, but--
Chris: We didn't even know. I didn't even know you were going to be there. I was just surprised. Yeah, I'm not sure. I think you are, though. Are we both?
Dave: Let's check it out. Verify. Go to website to verify. Yeah, we're both on the website, so that means we're there.
Chris: All right! Yeah!
Dave: Oh, man. We've got--
Chris: I'm really thinking it's going to happen. I know we're peak Omicron right now, but it seems like such a huge spike, the low end of it will have arrived by then.
Dave: There might be a dip in -- yeah. So, anyway, it could be pretty good. I'm looking forward to it, obviously. Take your personal health in consideration.
Dave: I did get the COVID, Chris.
Dave: That's a personal health update. [Laughter] It was not fun, but I was lucky that it was very minimal impact.
Dave: I got the average experience.
Chris: Getting hit right and left with health crap. I'm sorry. This will be a good year, though. It's only January, early January. Come on. It's all up hill from here. I mean downhill, or whatever the good one is.
Dave: That was it. I had nose surgery. That's a whole thing. But then I had -- like, still getting over that. Then I got a cold like the day vacation started, Chris's vacation started. Then I got COVID. I'm just finally now turning back on, and so I'm just like, "Okay. I can do stuff."
Dave: I can do work.
Dave: I can do podcasts.
Dave: We're back.
Chris: Heck yeah. It was a good week for me that way, too. It feels like my first week where I've been like, "Oh, my god! Stretching my muscles! This is how much work I can get done in a day? I'm amazing! Look at me go!"
Dave: Incredible! Yeah. I've been ripping out this big chunk, basically doing brain surgery on the app we're working on. It's good and things are progressing, hopefully. All two pieces are going to land at the same time but, man, it's been like, I just need to sit down and do this. I haven't really been able to do it until this week. Now it feels good, like I'm doing kind of a big brain surgery on the app.
Chris: Great! Keep at it. I'm going to drag you down a little tech journey here.
Dave: Bring me.
Chris: Chapter marker, five minutes into the show, six minutes. We're going to do Git. I had a thing happen to me with Git. Git has been on my brain all week long - in a way.
I am not particularly a Git expert. I use Git all day every day, like most people. But usually what I do is Git pull, Git commit, Git push.
Chris: Not exactly a Git surgery person, and so that's not what I'm going to get into today either, but we use this thing -- or I do -- called Git hooks. You know what Git hooks are? They're little -- it's built right into the Git language itself that you could, for example, I think the most common use case is "run this bit of code before you allow a commit."
Basically, if return falls from that hook, the commit is not allowed to become a Git commit. It just rejects the commit entirely.
Dave: It could be anything. It could be like, "Please verify your age." [Laughter] You have to type your birthdate in there.
Chris: Totally! It could hit a weather API and say, "No commits while it's raining." But chances are it's not those weird things. It's "your test failed."
Chris: You run your tests. They don't necessarily need to be an integration or a unit test. It could be "I ran Stylelint and Stylelint didn't report all clear. It reported there was some kind of violation, so reject commit. Please fix your Stylelint first.
That's really useful. It means the code that goes to your repo is clean and that it's not somebody else's job to fix your little mistake - or whatever.
Chris: Really convenient. Your CI should probably run that same crap (just in case somebody's commit hooks are broken). It's like you wrote it once anyway. It's not too big of a stretch to have both things run it.
Dave: You might as well. Whatever. If somebody disabled the Git Hook--
Dave: --maliciously or something.
Chris: Can you guess where I'm going with that? Yeah, my Git commits weren't working.
Chris: You know? How weird. One of the things to check is -- because Git Hooks are actual files.
Chris: There's a folder called hooks that sits in your little invisible .git directory inside of things.
Chris: There's a folder called hooks, and your commit hooks are sitting in files there, so go look. Are they there? No? Then they're not running.
Chris: They have to be there.
Dave: It's a pretty -- yeah.
Chris: Now managing those hooks is a little obscure, right? I don't even know what the actual language of a Git Hook is necessarily. Sorry for my ignorance there, but there are so many great tools for managing Git Hooks, it's likely that you're using one of those.
I think Husky is one we used in the past. Right now, we're using one called Left Hook, like the boxing term.
Dave: Oh, interesting.
Chris: Kind of clever.
Dave: Okay. Yeah. Yeah.
Chris: Yeah. I just generally kind of globally install it, and it runs its little script. Then there's configuration files for it for managing that. You use its little language to say, "Hey, just run my Stylelint, will ya?" Great. That's it. Left Hook, it's a great little piece of software. That's what we use at CodePen. I would reach for it for anything because it's a nice little piece of software.
Okay. Let's put a pin in that and say that's the preface to this.
Now, I also want to talk about how you use Git. I'm interested in how you do it. I'll tell you that I use a piece of software called Git Tower. Not a sponsor. I think I chose it to try a long time ago. Built up a little muscle memory for it. Now that ship has sailed. I'm just really into it. Every time I try something else, muscle memory brings me back to Git Tower.
Now, it's a UI, meaning that I go ahead and do some coding. Then I pop over to Tower, and it will tell me, "Oh, you've got four changed files. Would you like to stage them for commit? Would you like to commit them?" It's showing me the diffs of those files. I really like that because I might open one of them and be like, "Dude, there's one line changed, and it's a console.log statement." Oops. I didn't mean to save that. I can just kind of like right click and say, "Discard the changes of that file."
Chris: It helps me keep my commits to the codebase clean.
Chris: I just like it. I'll stop there and say I use Git Tower. I'd like to know. I'm interested to know what you do. I have no idea what you use for Git.
Dave: You have no idea because I don't really have a standard way.
Dave: Since switching to VS Code, I have started using the VS Code command line pretty religiously.
Chris: It's the one built in there.
Dave: The one built in there.
Chris: Control tilde. Yeah.
Dave: Yeah. Then 90% of my Bash history is Git status, and I look and see what files I've changed. Right?
Chris: Right, right, right.
Dave: It's Git status, and then I Git add some directory pages, Git add package.json, packagelog.json.
Chris: So, you're usually pretty specific about your Git add. I know a lot of people are probably just like Git add dot.
Dave: Git add dot, yeah. [Laughter] I don't because I try to chunk my commits up, if possible.
Dave: I was working on this issue, and so this goes with this bit. You know?
Chris: Your command line happens to be in VS Code, but that's kind of irrelevant.
Dave: My command line, but I do like the visual. There's a visual Git tool in VS Code as well.
Chris: There is! It's built right in, right in the sidebar. You can turn it on. It's called Source Control. It's not specific to GitHub. It's specific to Git.
Dave: And what's nice, what I like about that is it's visual, so I can see the diffs. If you go in there and you click the file name, it defaults to a split view of, like, green and red.
Chris: Exactly. Before and after, yeah.
Dave: Yeah. Mexico enchiladas view. [Laughter] It's the green and reds.
Dave: So tasty! Getting Mexican for lunch, I guess. Here we go.
Chris: Damn you!
Dave: I know. Just get some tacos. Okay, here we go.
I use that a lot, too, because like you said, it's like, "Oh, did I just do a console log? Okay, yeah." Then I'll discard changes, and I'd like to discard changes through that UI because - I don't know.
Chris: Yeah. Yeah.
Dave: Git RM is something you can do to un-stage your change, but I find it's just not as easy. I don't like it.
Dave: Maybe Git RM removes the....
Chris: You're doing this with your hand. I'm doing my little, like, "Go away!"
Chris: "I don't want you, file." You know? I don't have any interest in the changes that were made.
Dave: Right, so you can discard changes, and you can un-stage changes from there, too. So, if you accidentally bulk edit everything--
Chris: You can pluck them back out to un-staged.
Dave: Mm-hmm. Yeah.
Chris: It has just enough UI. I'd say I guess it's UI. It feels very in between to me. It's not very native looking.
Dave: [Laughter] It's like the file tree. It's not great. It's very -- I would say it's opaque, too. But I think the killer feature is you get the red and the green view.
Chris: The diff. You get the diff. Yeah, which is great.
Dave: You get the diff, and you can even -- there's another button where you go straight to the file. You can visually build commits. You can commit in that window, too.
Chris: I'm curious. It's built into VS Code and everybody uses VS Code. A huge number of people, is this their Git tool?
Dave: I wonder. I'd be curious. A long time ago, kind of before I'd started just doing it all in here, my coworkers (in order to get them on Git and using that) we would use the GitHub desktop app, and so I still have that.
Chris: Yeah! Yep.
Dave: I love that. It's like Tower or one of those other ones. It's a visual tool. You see the files, you click yes.
Chris: I think a lot of people really like it.
Dave: The files are there. And one nice thing that it does is it does a fetch, and it'll actually pull before it commits.
Dave: It's doing -- because one thing I do, if you look through the Git history, it's like I'm doing merges all the time. That's because I committed my code before I pulled code.
Dave: It does this thing called sync. They call it sync, I think, and it goes and does a pull before you commit, so you never end up in that place where you have to merge changes on top.
Chris: Oh, is that what sync means? Even VS Code uses that terminology, "sync," even though that's weird because there is no Git sync. That's not a command.
Dave: Right. They may do the whole pre-flight thing, too. That's actually pretty baller because less accidents. You know what I mean? Somebody is not -- merge conflict suck. You find out about merge conflict before you commit. That's a lot easier than after you've committed. You know?
Chris: Certainly. Certainly. Yeah, I like that. I like that. See, that sync thing threw me off. I don't even -- now I'm understanding more about what it does. It also fails on some of my repos and not on others. I don't really understand why.
Anyway, okay. VS Code. Sometimes you use command lines. Sometimes you use VS Code. Let's leave it there for one second.
Those Git hooks are neat in that they are irrelevant to how you use Git at all. They're going to run on the command line. They're going to run in VS Code. They're going to run in whatever because they're just built into Git, the language. They're not part of, for example, Git Tower or VS Code.
Dave: Yeah. I looked into my commits or my pre-commit, and it's running Bash, so it runs a shell script.
Dave: I have had problems on Windows, like using the Windows app with pre-commit hooks. It basically doesn't run. Right?
Dave: That could be an issue if you're in a cross-deal. But if you're running WSO Bash, you're just fine. You can do it on there. But I don't know if you can tell the Git app to use the WSO Bash - blah-blah-blah.
Chris: Oh, I see.
Dave: That might be kind of hard. But Git for Windows also ships with this Git Bash kind of package. It basically comes with some Bash stuff it needs, and so--
Dave: That's an option there.
Chris: Nice. Okay.
[Banjo music starts]
Chris: This episode of ShopTalk Show is brought to you in part by Notion. Learn more and get started for free at notion.so. In fact, you can check it out on your own, get a feel for the app and what it's capable of. It's really wonderful to use. Invite as many people as you want to, to your team. See how it works and then decide from there.
Really tremendously good for remote working teams. I know because I have a whole bunch of different remote working teams, and I use Notion for all of them. But also, hybrid work (that concept of some people are in the office, some aren't) that's really kind of becoming the norm.
The really high functioning teams in that category have two things in common: speed and alignment. Meaning how fast they're working and the fact that they're working together on the same goals. Both come from having one hub where everyone can work and share processes, manage projects, and collaborate with clarity. It's just so true.
I feel like Notion is the job some days. Me going into Notion and talking to people, leaving notes for people, adjusting the cards for where they need to be, adjusting priorities, using Notion as the place to talk. Everybody is seeing it. Everybody can reference it. Keeping everybody on the same page, that is my job a lot of days. I'm a developer, too, but keeping people on the same page is more useful than writing code sometimes because it means that, when the code gets written, everybody knows what's going on.
Thanks so much, Notion, for the sponsorship.
[Banjo music stops]
Chris: Again, it sucks to have your Git hooks not work because you commit one file that has a linting problem, for example -- that's one thing a hook can do -- immediately, it's somebody else's problem.
Chris: It will linter your whole project and then be like, "I'm working on something totally unrelated, but this dumb CSS file needs a change before you let me commit it because Jimbo over here commit hooks aren't running?" So, you really want to make sure those are running.
Mine weren't, and I was like, "What the heck?" But I've been in this transitional state with new computers. That's a little foreshadowing - a little bit.
Chris: It turns out, I open Git Tower. I make a commit. It'll say, "Problem." I was like, "Oh, great. My commit hooks are running," and then I would fix the problem. It would run the commit hooks. There'd be no problem, and they would go through. Great! That's exactly what they're supposed to do.
Then I make one more commit, and that was the moment, which took a little figuring out to figure out is that it wouldn't run again. It turned out that a successful running of the hooks would immediately delete the Git hooks from the literal files in that folder.
Chris: How strange, right?
Chris: It took some digging around. Now, to this day, I don't know why. I do not know why it does this. But looking at some docs and stuff, the way that the command that Git Tower runs -- remember, it's just UI. Under the hood, it's literally running Git commands. It has to.
Chris: It does this thing called ENV before Git commit. It'll run env-i then Git commit blah-blah-blah-blah-blah-blah-blah. I don't even really know what ENV does, but I can tell you that I looked that up and then tried that at the command line. Even at the command line, a successful running of the Git hooks would delete the Git hooks.
Chris: So strange. I don't know what it is about ENV - or whatever - but that's what the app used. If I do that on the command line, they delete. And so, I kind of threw my hands up and just was like, "You know what? That sucks. I do not know why Tower does this, but I cannot use it. I can't be a member of my team and not have my commit hooks."
I was like, you know, so many people at CodePen, even Klare, our designer, all command line all the time, Git. Most people at CodePen use it. Not everybody. Even Rachel on our team is like a Git Tower diehard like me.
Chris: But I was like, "I'm going to try it." You know? This is my week. At a moment, I was like, I had the feeling I'm going to grow up.
Dave: Oh, yeah. Yeah.
Chris: Because I feel like real designers use the command line - kind of thing. It's not like I don't know. I know what Git status is. I know what Git add is. I know what Git commit-m is. I know Git fetch. I know what the commands are. I should be able to do this, especially because it's not that big of a deal. I'll just Google it if I don't know real quick.
Dave: Mm-hmm. Mm-hmm.
Chris: Anyway, using the command line is fine. It doesn't delete my hooks, so I'm back in action. Two days later, maybe a day and a half I'm like, "Screw this. I cannot do it. I can't do it on the command line." I can't see the diffs. There's no thing for easily discarding the files. I hate it. I can't do it.
I switched to VS Code, like you've been doing. I was like, "Eh, why not? It's built into the tool I'm using anyway."
Dave: Built in.
Chris: I do another day and a half on it and I'm like, "I just can't. It's just not good enough."
Dave: You want the GUI.
Chris: I don't hate it, but it's just not good enough.
Dave: Yeah. Yeah. You know there are some nice things. I don't know if you use Git lens or the GitHub app and stuff like that. It adds a few Git niceties or Git blames and stuff like that.
Chris: Yeah because you know there is no such thing as a pull request in Git, right? That's a GitHub-ism.
Dave: Mm-hmm. Right.
Chris: The plugin for VS Code is literally separate.
Chris: Source control is built in but if you want the pull request stuff, that's a separate plugin. I think that's great!
Dave: Yeah. Yeah.
Chris: A pull request app in VS Code is sweet. It shows comments on the right files right in line and stuff. It's so good.
Dave: It's got my issues so I don't have to go -- I never use it. I never remember to open this, but it has issues.
Chris: I like that I can even respond to commends in line. I love that. Then, yeah, Git lens is neat, too. I think that's a required VS Code plugin.
Chris: On any given line, it tells me, "Oh, Stephen Shaw updated this file three months ago."
Chris: Wow! That's really useful. Thanks, Git lens.
Dave: Yeah, like while I'm authoring, too. It's kind of annoying. [Laughter]
Chris: Speaking of Stephen, he says, "I don't have that problem with Sourcetree." That's the one that he uses.
Dave: Sourcetree. Oh, he's going Bitbucket? [Laughter]
Chris: I think so. They just give it away for free, and I use it. He kind of bones me up on it a little bit. It's not really that different. None of these are that different.
Chris: There's Git Fox. There's GitKraken. There are three, four other ones, I think, just for Mac. I'm sure Windows has a bunch, too. They're not that different, really. [Laughter]
Chris: They're just like, "Here's your tree view. Here's your changed files view. Here are all your branches. Here's the weird little Git thing with lots of rainbow crap based on branches and stuff."
Chris: What you really need is just -- what I need is a couple of buttons that help make branching easier and stuff like that. I used it for a little while. No problems. But I don't love it.
I was thinking, oh, maybe I'll bounce around apps a little bit and explore Git. But then I find out what's wrong. It's just that if you want Git Tower to run something like a Git hook, it needs to know your path. For some reason, Mac apps just don't have access to that in the same way. I can't articulate that very well, but there is a way (in Git Tower) that you can just teach it what your path is. It has something called a P-list file.
Chris: You just open that environment up (P-list) and you echo your path out into the right place in that file. Then everything just works fine.
Chris: That's a little hard to discover.
Chris: It turns out the source of that information was a Slack thread from me in 2019 where I previously discovered how to make this work.
Dave: [Laughter] Wow! Yeah.
Dave: I just did a quick Bing search for it and found nothing. I mean it was just like--
Dave: It was, yeah. That's wild that you--
Chris: I would still love to know why it deletes the dang things. If anything, just don't delete them. Why on Earth would you ever delete those files?
Chris: I don't know--
Dave: It might be destructive, but maybe it--
Chris: But I'm back to my Tower land and that was my whole journey.
Dave: It might use its own Git or something. Anyway--
Chris: It's that ENV thing because that was replicateable in Tower or not.
Dave: Yeah, because I wonder if that ENV thing says, "No, my Git is here. Use this Git, actually."
Chris: Oh, I see. I see. I see. Yeah.
Dave: But I don't know. Yeah, weird. Glad you figured it out. I was going to say, from what I like, what I like is using GUIs as far as I can and then just doing the commit message. The command line seems to work.
Chris: Yeah, I've done that before, too.
Dave: It seems to be less problems, so--
Chris: Just do that. Use a little split, like stage your files maybe in the GUI and then pop to the command line for the other part. That's not unheard of, especially because we have the command line open anyway.
Dave: You know some people have aliases in their Bash, like GC is Git Commit.
Dave: Then you just say GC updated crap number one, two, three. Bye.
Chris: Yeah. Yeah. I was about ready to get all my aliases going because, yeah, you can't type Git pull origin master that many times before you're just like, "Uh, no thanks."
Dave: Yeah. Have you seen these? Sorry. Can we keep talking? Have you seen these commit lints? Have we talked about this on the show?
Chris: A commit link?
Dave: Commit lint.
Dave: It's basically--
Chris: Oh... I have.
Dave: It's a tool to make your commit messages more uniform.
Dave: Kind of like follow a style guide, I guess, for your--
Chris: Yeah. I'm on two different random community projects. It's been a little minute that have this. What always gets me is that you can't even do a commit that doesn't start with something colon.
Chris: A lot of them are like chore: or design: or whatever, but I didn't have any say in what they are. A lot of times, whatever work I'm doing, none of them really seem to fit.
Chris: It really rubs me the wrong way. I'm like, "So, I just have to pick one of these that doesn't fit? Great. Fun."
Dave: Yeah. You're like, "Just let me exist."
Chris: Chore it is, m'er f'er.
Dave: [Laughter] Beat you. I win the game. Everything is a chore.
Chris: What even does chore even mean in tech? What is chore?
Dave: I think of it as like I move this from this file or I sorted my CSS properties alphabetically. That's a chore.
Dave: It's non-feature related - or whatever. Or it's a very micro change.
Chris: Yeah. I always thought of it as, like, one of those dumb depend -- it's not dumb. I'm sure it's very useful, but those depend-a-bot commits - or something.
Dave: [Laughter] Yeah.
Chris: But you don't have to name those. Those come pre-named, those commits.
Dave: Yeah, well, what I (in theory) like about it, or just even naming -- and this gets into issue naming as well -- what I like about it is maybe you can just be like, "You know I got an hour left in the day. Let me just do a chore," or something like that.
Chris: I see. Yeah.
Dave: You can basically way work -- like just pick up an easy one while you've got some downtime or something, but anyway.
Chris: While we're on Git for a second, here's a classic one. I'm on the wrong branch. For example, I'm on master or main, and I've done a bunch of work (because I just sat down and started doing work). But of course, I shouldn't be on main.
Chris: I should be on my feature branch or something, and I'm not. So, what do you do? Well, to me it's like you stash them all.
Chris: Then you pull from master and make sure main, make sure you're cool there. Then branch it, but make sure you've branched from master because I've screwed this up in the past where I'm on some feature branch and then cut a branch, which makes it a branch of that branch rather than master, which I almost never do that. I know there are use cases, plenty of use cases for that. But that's almost never what I mean. I mean give me a fresh branch off it.
Then you cut the branch. Then you have to move to that branch. Then you--
Chris: Or pull the things out of stash. Then you can commit from there. It's this very multi-step thing. I saw Wes Bos tweet the other day that was like there's new thing called Git Switch that does all that.
Dave: Oh, interesting.
Chris: You're on the wrong branch. You go Git Switch, and you kick over to that new branch.
Chris: You don't have to stash and un-stack, I think, is kind of the point.
Chris: I don't know. Hopefully, I understand it correctly. But I was about ready to get into using that because I would use it every day. But then you actually don't have to do that much rigmarole when you're using a GUI. That's another reason to use a GUI. I can double-click on the branch I want to be on and it will perform that little ceremony for me.
Chris: You know what I mean? And I like that.
Dave: I like that, yeah. This is where I end up going to "Oh shit, Git."
Chris: Yeah. Katie Sylor-Miller's thing? Yeah.
Dave: Yeah, because I'm just like, "You know what? I don't want to do this from--"
Because when it's like, "Is it Git head at curly braces index, or is it head squiggly, or is it head minus one?"
Chris: Mm-hmm. [Laughter]
Dave: Or is it hard reset or soft reset? That stuff, the opacity of that stuff, the opaqueness just drives me nuts just how nerd speak it is. And so, I just follow the tutorial.
I do wish there was [laughter] - I don't know. For a long time, I've wanted to create a command line app or something called -- I'm going to use cuss words, so we'll have to bleep this out. Sorry, Chris.
Call it "Get un-fuck." [Laughter]
Dave: And so you say, "Get un-fuck," and then it says, "What'd you do? It's committed to the wrong branch?" It's like a menu, like yeomen or something.
Dave: You choose what mistake you made.
Chris: Yeah. Yeah.
Dave: Then you just say--
Chris: What if it was called "Fuck That," a CLI.
Chris: And it worked for anything? It wasn't just Git. That whatever last command you did, do whatever it takes to undo whatever you just did.
Dave: Undo the opposite? Yeah.
Dave: Like, "Okay, I uninstalled - whatever - X-code select tools, so could you please just un-F it?"
Chris: Mm-hmm. That'd be cool. That'd be cool.
[Banjo music starts]
Chris: This episode of ShopTalk Show is brought to you in part by Jetpack. Jetpack is a plugin for your WordPress site. It gives it all kinds of extra super cool abilities, many of which are powered by the idea that it would be nice to offload a bunch of work to a cloud server instead of your server, which you're probably on some shared hosting to make it more affordable for yourself. I am. All my sites are. That's what keeps computing more affordable these days. WordPress runs perfectly great and fine on most shared hosting. You know?
There's some stuff that's just particularly taxing for a Web server that's busy running PHP, MySQL, and all that stuff. Stuff like site search, default WordPress search. Not even that great, really. You type in some search terms and it executes. Of course, it needs to go through PHP and it needs to execute an SQL query against all the content on your site. It can be a particularly heavy thing to do.
Honestly, SQL isn't even that good of technology to do it on. There are better search technologies like Elastic Search. Well, guess what. You flip a switch in Jetpack, your content, which kind of gets synced up to the cloud, gets put into Elastic Search. You don't even need to know this. It just doesn't even matter.
What happens to you is that all of a sudden, the search experience on your site is now great instead of kind of bad, and it doesn't tax your server at all because, all of a sudden, better search technologies are being used. It's all happened in the cloud. Way better in that way.
It's the same thing with the backups. The backups happen in the cloud. It's the same thing with your images. They're in the cloud now. They get uploaded to a CDN and handled that way.
It's the same way even with something like related posts, which can be -- you know there's some shared hosts that say you can't even use those plugins. They're so taxing on the database of the site. Not with Jetpack. It all happens in the cloud for you.
So cool. Thanks for the support, Jetpack.
[Banjo music stops]
Chris: All right. Well, thanks for listening to my dumb little Git journey. That just was on my mind this week. So many Git things.
I also learned about Git something prune origin, which is like a little quick way to go, like, "Oh, can you please just ditch all my dead local branches because I probably have 30 of them?"
Dave: Yeah. One thing you have to do -- if you're going to switch to Git to the command line, one thing you have to do is remember when you push, Git push feature my thing, you have to say -U. You have to set up the upstream or else your whole world sucks.
Dave: Apps do that for you and you don't. [Laughter]
Chris: Right. That got me in source tree. That was one of those things. I'd make a new branch and then go to push it up. It'd be like, "You can't push it. Push it where, buddy?"
Dave: What?! What branch?
Chris: Then it would bring up a little dialog. You have to pick the upstream that you wanted. It felt a little silly to me because I'm not used to that. I'm like, I don't even--
My brain had forgotten what an upstream even is.
Dave: Yeah. Yeah. The apps - I don't know. I'm 100% on this stuff should be GUIs because - I don't know. You can do it on the command line. You can and lots of people have for decades now, but if want anybody to enjoy it, it needs to have a GUI. Yeah.
Chris: I couldn't agree more. But not for everything under the sun because - I don't know - I err towards GUIs for things anyway. But for most things, I just think there are a lot of things where it's not just because I like little, pretty buttons. It's because it's literally better UX.
Dave: You know what? The other day in the D-d-d-d-discord, I took a screencap, and I was going to share it with my coworkers, you know a CleanShot X, a screengrab. But it was like 120 megs. You know? I just was like, "Well, whatever. Slack can handle that, but could I make it smaller?" I just was like, "I wish there was a tool I could just drag a video and say, "Make it smaller," maybe like Handbrake does that. But I was like, "Could I just right-click the video and be like, make small?" You know? Please, give me an option for that.
Chris: Yeah, good question.
Dave: On Mac, there's actually right-click and you can encode selected video files. It'll bring up a little dialog.
Dave: For any screencap or anything, and you can basically make it a lower resolution, so I could send it to my coworkers in 720 because they actually don't care. They just want to see--
Chris: So, you needed nothing. Your wish was granted.
Dave: Granted by the OS. I was just like, that's cool. I didn't know that feature existed, but it was actually very helpful. But I wanted a GUI. I wanted to select. I didn't want to FFMPEG because I could have done that. But that's not what I wanted to do here. I wanted just to say, "Make it small." Make it small and optimize it. That's all I need.
Chris: That's cool. I would have kind of thought that you'd have the opportunity to do that as it's coming out of CleanShot X, but I wouldn't blame you of not having thought of it at the moment of recording the video.
Dave: Yeah, well, it's weird, right? It's like it records your screen, but my screen is 1440, and that's kind of a lot of pixels to send out to the cloud.
Dave: But then, yeah, maybe I can record screen and then - I don't know.
Chris: Yeah. You never know how it comes across the other side, either. I opened -- I was in the Astro Discord the other day, and I opened a little support ticket. They have a pretty cool Discord. If you just post anything at all in support, it just instantly makes a thread, which is kind of cool. Which just means that it keeps that channel really clean.
Dave: Dude, that's really smart. Yeah.
Chris: Yeah. Anyway, here's my thread. I take a screenshot that I've crafted just so in CleanShot X that I highlight things. I put arrows on it and stuff. I know that's probably not accessibility-wise really great. I should explain what I'm doing in other ways as well. But at the moment, that's what I did. You know? Draw some arrows on a screenshot and posted it in there.
If I open it -- to this day, if I go to Discord and open it, it looks great. It's super clear.
Chris: Then the person looking at it said, "Could you send me the part in the white over there in another way? Can you post it in here because I can't read it?"
I'm thinking, like, "What are you talking about? It looks great. How can you not read that?" You know?
Chris: What's happening here? Then I needed that same screenshot to share somewhere else later.
Chris: I went into Discord, and I downloaded it. I think I saw what they saw. It was totally unreadably weird.
Dave: Oh, weird.
Chris: What you see in Discord is not what everybody else sees.
Dave: Oh, man!
Chris: Just FYI.
Dave: That's a parallel universe. That's a nightmare to me.
Dave: Because you expect data consistency - or whatever. Right?
Chris: Yeah. I don't know. It just keeps a local pointer to some local cached one for you but, by the time it's over the wire, they blast it.
Dave: Delete it, yeah.
Dave: Huh. That would be something to know about. I know Twitter does that. They just compress the hell out of it. You know?
Chris: Yeah. Yeah. It comes up in my life because we use Dropbox Paper for our editorial flow, and somebody will upload a movie. The paper will just compress the heck out of it. You're like, "Well, that's not useful. I can't use the compressed one."
Dropbox Paper is never the final place something is published.
Chris: You then take it, and you move it somewhere else. But you're using it because it has all this great commenting flow and editorial and permissions and all the stuff that you need for a collaborative thing. But then it's done. Then you go move it somewhere else. So, like, "Don't mess with the videos, please."
If you don't know that ahead of time, you might just download the video and use it in the final thing.
Chris: Well, you can't do that, dude, because it's already been compressed. Anyway, wow. We are jumping all over the place today. Should we take a breather here? Stretch our legs. [Deep exhale]
We have Ruby, when she's frustrated, go blow out a candle. [Loud exhale]
Dave: Oh, that's nice. I should have done that to my daughter this morning when we were fighting over pants and 39-degree weather. So--
Chris: [Laughter] Blow out a candle.
Dave: Wear pants, please. Ugh!
Dave: She's mad the whole way to school because I made her wear pants and it was 39 degrees, so 3 degrees Celsius.
Chris: Doesn't like pants. I'm impressed you even own pants for her. You know?
Dave: Well, yeah. Leggings, Chris. I was not going for full pants. I knew that. I knew I lost that battle.
Dave: We were going for the leggings.
Chris: No jeans.
Dave: Something to cut the wind. Yeah.
Chris: Just yesterday, as we record this -- it'll be a couple of days when you're all listening to this -- Devon Govett -- we know Devon as the creator of Parcel, who I think we brought up on the show. Otherwise, he posted kind of a sad tweet about Vite's success and Parcel's less so success, you know, [laughter] recently. Only because it was a little critical of, I think, Vite's approach to not bundling as well as maybe something like Parcel does.
Dave: Yeah. I think Parcel kind of optimizes the delivery where Vite is a bit more like just optimizes the chunks. You know?
Chris: Yeah. Maybe that's it, and kind of -- yeah. I don't know enough to weigh in on that necessarily. Although, I am ready for the days where bundling is behind us, in a way, and that maybe we bundle nothing because we trust the network so much and that HTTP2 or 3 or 4 - or whatever it is at the time - is so good at delivering small files that it's just the same or better as large files, which would open up the door to caching tinier bits of apps, which sounds kind of great to me, et cetera.
Anyway, he released Parcel CSS, which is, to me, this seems like big news. And it's even bigger news now that I've dug into it a little more. Although, it's not like I have a project or anything. It came out yesterday.
It is a parser, meaning it's like PostCSS. It turns CSS into an abstract syntax tree, and then it can do stuff to CSS.
Chris: You have to have a parser first. Then you can do other stuff. This is based on other parsers but, as far as I can tell, is a unique take, like a fork. This is a specific CSS parser. Just that alone, I think, is a big deal. And it's a transformer (and we can get into that) and it's a minifier. Why would you use this thing? Well, it's a fresh take on all that stuff.
Chris: If you just need a minifier, which you probably should do even though Gzip is good, Gzip minified is better. What's the other one? Brotli, or whatever.
Chris: They still tend to suggest minifying first. It's a fresh minifier. Hey, that's cool. It makes really small files - provably. It does vendor prefixing too, but not with auto-prefixer. It's its own. It's like a new player in vendor prefixing.
Chris: I got that wrong at first because I see auto-prefixer in their package.json, and I was like, "Oh, they just used that." But I was like maybe they found some way to use auto-prefixer without PostCSS, which would be weird.
Chris: But they did not. This is a fresh take on that. It will do CSS Modules, which I like because I use CSS Modules, generally. I think that's a nice approach, and I'm talking about the library not the native ones like CSS imports or whatever.
It makes source maps. Although, you know, I guess that's useful even though it's not quite as different. It's not promising a different CSS syntax, like Sass is. You know?
Chris: There's no syntax differences here. In fact, it doesn't even bundle your CSS, so I don't know why source maps are that important here, but it does that.
But it also does future CSS. There's that PostCSS plugin preset-env.
Chris: It takes new spirit CSS, like new color syntaxes and nesting and stuff like that and it makes it and it outputs CSS that's boiled down to something that browsers understand - just like Babel. I'm starting to get more into that spirit.
Chris: For a while, it kind of scared me. But I think CSS is rapidly changing enough and the specs are kind of generally stable enough seeming that this seems like a smart way to go. This Parcel CSS does all of that. Vendor prefixing, minifying, CSS Modules, source maps, and this syntax lowering thing (based on a browser target that you target). That's big!
Chris: And it does it faster than even esbuild does. It's just a smoking fast new--
I just think this is a shakeup to the CSS processing world.
Dave: Yeah, so it's saying on their blog post, "CSS nano for minification only," right? Ten thousand lines of Bootstrap.
Chris: It's not nano, though. They test against nano, but it's not.
Dave: Well, they're saying, yeah, nano took 542 milliseconds.
Chris: Oh, they're comparing against it.
Chris: Yeah. Okay.
Dave: Parcel takes 4.6 milliseconds, so 2 orders of magnitude faster there.
Chris: Yeah, that's wild.
Dave: That's very fast -- [laughter]
Dave: --to minify Bootstrap and literally like 60 FPS. [Laughter] They're minifying Bootstrap in 60 FPS.
Dave: That's crazy.
Chris: It is crazy, and we know what happens when dev tools see these kinds of leaps forward in their performance that it unlocks doors that you wouldn't consider unlocking before, like doing it on the fly, like typing one character in your code editor and just letting the build run because why not.
Chris: It's imperceptibly fast anyway. So cool.
Dave: I wonder if this will bring back tools like [laughter] CSS Rabbit. What was it?
Dave: Rabbit CSS soup.
Dave: What was it called? They had espresso.
Chris: Well, that didn't have to run a build on it, so it worked. Yeah, I know what you're talking about. Your design on the left and your CSS on the right - kind of thing.
Chris: like CodePen. [Laughter]
Dave: [Laughter] It's basically old CodePen. I forget what it was called. CSS Edit. I should know that. Anyway, that was cool.
Chris: There was one with a rabbit, too, though. Maybe the icon was a rabbit. Yeah, there you go.
Dave: Yeah. Somewhere. Mac Rabbit is the name of the company, but anyway. Yeah. No, that's - I don't know. That's cool. I'd be curious how CSS Modules stuff kind of works.
Chris: That one is a little weird to me because usually that--
Dave: Ties into your React.
Chris: --template, too.
Dave: Basically, yeah.
Chris: Yeah. Doing it all by itself seems less useful.
Dave: But I guess it could do it. It could take over for that.
Chris: Yeah. The point is, if your tool needs that anyway, that you could move to this tool knowing that it's available for you to use.
Chris: I think that's the big deal, right? I know for a fact because the reason I was posting in that Astro Discord to begin with was I wrote a container query, Dave, at container blah-blah-blah, because I was using the Polyfill. I'm like, this is great. I'm going to just do it. This is a little baby site. I'm not that worried about the FOUT or whatever - or FOUC, in this case.
Chris: I just was ready to do that.
Chris: And I'm working on a conference talk for An Event Apart and I think it's relevant to that. Anyway, I run it through Astro's compiler and it just destroys the syntax of a container query.
Chris: Just comes out nothing looking like CSS at all. It was so confused by what a container query is. Astro was -- I think they opened a ticket two months ago - or something - aware of this. Not just container queries, but a couple of other things as well.
They're like bummed out. They don't write CSS compilers. That's a little out of scope of the Astro project to write their own CSS compiler.
Dave: They were just hoping it all worked. Yeah. They're depending on somebody else. Yeah.
Chris: Right. They've got to pick one, right? I don't know. It'd be weird to have multiple of them. I think they're stoked about this because maybe, just maybe this one has a little more momentum. It's fresher. It probably is barfing on less new syntax because the thing is right out the door.
If there was a problem, they'd probably fix it right away, assuming Devon wants people to use Parcel CSS. Probably would jump on a problem like that right away. Anyway, maybe they'll use it. Obviously, Astro supports CSS Modules. Although, they have their own kind of implementation of it. But I would think that they could get on this right away. A tool like Astro could probably use this. If they all got going on it, they could probably switch over in a couple of days. You know?
Dave: Yeah. Well, you know this is -- no, this is cool. I'd be curious. I'm curious.
Chris: It won't run your Sass. You know? [Laughter]
Dave: It won't? It won't.
Chris: I don't think so.
Dave: But Sass could just generate CSS and this could take over. You know?
Chris: Yeah, you run this after it.
Dave: You're asking Sass to do everything. Yeah. I don't know. This is all pretty interesting to me.
Chris: The real crosshairs here is PostCSS. I think that's what it--
Dave: Kind of going to....
Chris: Yeah, it's trying to get rid of, yeah.
Dave: PostCSS is cool. A very popular project - or whatever. But you know it has a lot of stuff. It's written in Node. We know now Node is maybe not the fastest pick for these very machine operations. You know? I welcome new, better competition - for sure.
Chris: Yeah. I agree.
Dave: It was kind of like I'm going to start at your index, and I'm going to run through your whole project and spit out a whole new thing. That's a big buy-in if you're not using it. Right? But something like Parcel CSS is just like, "Oh, I just need to fix my CSS." That's a great tool for this. Just go fix my CSS. [Laughter] Make it good. Make it fast.
Chris: Mm-hmm. Mm-hmm.
Dave: Kind of a gateway chunk to it.
Chris: I was just writing some internal docs the other day about, you know, what's up with PostCSS. What's the--? We're going to still support it forever on CodePen.
Dave: Yeah. Yeah.
Chris: I don't want to be opinionated about what tools you use. I'd support this too. I'm going to support everything going forward.
But PostCSS is so unusual in that it doesn't do anything. You have to pick plugins for it. Otherwise, it's just a parser. That's the point.
What are the two big players these days? I don't think there's any question about it. It's still auto-prefixer, although less and less so. Prefix is largely kind of gone away. There's not new -- there's never -- no browser will ship a new vendor prefix thing, as far as I know. Those are going to fade away, and it's replaced by stuff like flags, origin trials, and all that.
You know there are still a few things. I know mask still needs to be prefixed. There's line clamp still has stuff.
Dave: MS scrollbar. Appearance, maybe.
Chris: Yeah, there's stuff.
Dave: I don't know.
Chris: To not think about it is neat. Yeah, appearances. That's a great one because it's just starting to go away.
Dave: Just starting, like this year. [Laughter]
Chris: Yeah. Anyway, whatever. That's a big one. But traditionally, of course, huge.
Then the newer player is that postcss-preset-env, which is that future CSS today one, which is great. Really super cool. But I think other people have opinions about other ones they pick. I think, if you looked at your average project that really uses PostCSS, they handpick a couple of them. I have always bristled against that. I don't love it how, from project-to-project, the CSS is like, "Well, we use this weird plugin and it has this weird syntax. Thus, our CSS is locked into this processing forever."
Chris: Because somebody picked a weird plugin and it has a weird syntax. It's not that it's impossible to back out of that, but I hate how it's not compatible whereas a Sass project to a Sass project, Sass is consistent. They all run. It's just Sass.
Dave: Yeah. I think about that a lot. I'm having just dug out of a big dependency. Even with Markdown, I want sections in my Markdown, Chris. I want just a little wrapper around some of the content so I can style it differently - or whatever.
Dave: Well, you've got to use a plugin. Guess what. Then you go to the next thing. I put it on my Jekyll block. That doesn't have the plugin. You know? [Laughter]
Chris: Hmm. Hmm.
Dave: These little custom syntaxes could output it as text or tables or something. It's kind of - I don't know. You get kind of hammered down by these "just add plugins" systems that they don't -- they kind of miss something at some point.
Back in the day, we used Compass with Sass. Digging out a compass was like, "Ugh. Man! This is a lot of work."
Chris: Yeah, indeed. Sass has moved away from that. I don't know how intentional it was, but Compass was a thing that you could add onto Sass.
Chris: Then you're not running canonical Sass. You're running Sass plus Compass, and that might be different from the next project that maybe doesn't use that. You don't see that anymore.
Chris: Sass doesn't really have plugins, per se.
Chris: You can have a dependency, which is some Sass file that you just at import. It doesn't change the nature of Sass. [Laughter] You know?
Dave: Yeah. Yeah. Compass was kind of just like an auto-prefixer [laughter] if I recall correctly. It almost just did that--
Chris: Well, it had a weird, random function built into it, for example.
Dave: Ooh, that was nice. Yeah.
Chris: Stuff like that. Anyway, that's interesting. Interesting. Good conversation, I'd say. Do you have any final words for our show here? Anything cool? I have a sick pick, you know, which we can't use.
Chris: Because that's what syntax does, but if you have a cool thing in your life that's not [laughter] medicine.
Dave: I can. So, I do a video game podcast, Aside Quest.
Chris: Mm-hmm. mm-hmm.
Dave: With my friends Danh Hoang and Zach Meyer. I played. I got COVID, and I played a game called Return of the Obra Dinn. It's an old game, but it's basically this two bit game where you have to go explore a pirate ship. [Laughter] It was cool.
Dave: You tour it in 3D, but it looks like a 2D, old - I don't know - dot matrix game for the Commadore. But it was really cool, really fun, and challenged my brain quite a bit.
Dave: That's my--
Chris: I'd love -- I need to play a game. I miss -- usually, the holiday season, almost every year, I'll at least have one kind of deep dive into some game, and I just missed it this year. I was just too busy.
Dave: Yeah. I also watched the Foundation series on Apple TV.
Chris: The Foundation?
Chris: Oh, just Foundation. Yeah. Yeah. Yeah. That was great.
Dave: Based on Isaac Asimov. That was good.
Chris: Mm-hmm. Yeah, I loved that.
Dave: Caught up on that.
Chris: I started watching Yellowstone. Not exactly a new show, but season one, episode one, I was like, "This is a crazy movie! This is a movie quality episode of TV, for sure." Now I'm a couple of more episodes in, and it's gotten more TV-like, but I was really impressed with where that show was going. Now it's like four seasons deep, so I'm way behind.
That's not my sick pick. My sick pick was that I saw an outdoor, little, tiny show. They were playing for, you know, 20 people - maybe - at a local brewery. An old-time band, you know.
Chris: Can't miss that because that's my spirit, so I was happy to go, drink a beer, and watch them jam outside. They played on this really old-time looking microphone that I just thought was so cool looking.
Chris: There was a guy sitting next to me. He said, "Have you seen those before?" I was like, "No. No. It looks amazing."
He said they have different names, but they're from this company called Ear Trumpet Labs. It's out of Portland, Oregon, so kind of close to me. You've got to look at them. They just look amazing. They're just really cool, old-time looking microphones.
Chris: But also really high quality, too. But they're not like thousands of dollars. I think most of them are in the $600 range, which is still incredibly expensive, right? It's not the $100 SM57 or something.
Right now, I'm speaking to an SMB, 7B.
Chris: Yeah, which is a perfectly nice microphone, I think. I've also been at my desk using the old Heil PR40 - or whatever it is - that I used to not like but I'm kind of coming around on (in my desk environment) for some reason. But those are just classics. You know?
Chris: I've always been -- it doesn't seem like there's that much more to go up from that. You know?
Chris: like this one I'm speaking into is what Michael Jackson used for "Thriller," right?
Chris: That's about as good as it can get, you know?
Dave: Yeah. Nothing changed.
Chris: I'm sure there are $40,000 microphones, but that's too high. I'll never do that. But this seems to just scratch a real itch for me in that it's designed for kind of acoustic music stuff and signing into, but also talking into and whatever. So, I buy one because - whatever - nobody is going to buy me a Christmas present anyway. I'll buy my own ass a Christmas present.
Dave: [Laughter] Perfect. Perfect.
Chris: Yeah. I bought the Edwina. Although now I regret it because I'm looking at some other models and I'm like, "Oh, they're all so cool. I want one of each."
Chris: But it's a beautiful looking microphone, and I test it at home, not even in the sound booth or anything, and I think it sounds GREAT.
Chris: Really good, and so that's my sick pick. I'm not sure if I'll use it for this podcast or what, but I set it up at home on a stand and I got foam behind it. I even put it on a thing so I can play music into it. I pop open Garage Band because - whatever - it's free software on your Mac. I had an old Mac that wasn't doing anything, so now it's my little music room Mac - because why not?
Chris: I'm like, "Dang! I've got a little recording studio in here." You know? I'm sure I'll never actually do anything with it, but I did a couple of five track songs right into the Edwina, just be like, "I'm going to play guitar, and then I'm going to get out my little ukulele and play that. I'll play a banjo track over it. Then I'll try to sing something over it," which nobody should ever hear. It was just fun.
Dave: Hey! That's awesome.
Dave: Really fun.
Dave: We might do some family band stuff here in the new year.
Dave: We're kind of like, "We should just get our friends together and record." We could use my little office as a studio.
Chris: You should! Hell yeah.
Dave: We're going to see. You know it'd be worth it.
Chris: Yeah. Well, then you're going to need a diaphragm mic if you're all going to be singing at once, so maybe you should look at these.
Dave: Pony up for one of these cool Ear Trumpets.
Chris: Ear Trumpet Labs.
Dave: These look really cool, like old-time is the right. It's like, "I'm from a 1930s radio show!"
Dave: "Today, the allies are bombing our boys--"
Dave: [Laughter] Our boys in Europe are bombing the Nazis."
Chris: Yeah, like "The King's Speech" or whatever. Yeah. Yeah.
Chris: Maybe a little steam punky, too, because you can see the screws. You know it's cool.
Dave: Yeah, this is cool. Myrtle, I think would be my -- Myrtle. Get Myrtle.
Chris: Yeah, you're a Myrtle guy?
Dave: I don't know.
Chris: Yeah, that looks especially cool. The Josephine looks cool to me. It's got some Paravel stuff going on there. You might want to consider it.
Dave: Oh, yeah. Ooh, that's probably on brand. That's good. Yeah.
Chris: Large diaphragm, too. That'd work out really good for you. All right, man.
Dave: Hey, all right, yeah. Thank you. This is fun. All right, well, hey, we are blasting off to episode 500. Join us on the ride. Join us in the D-d-d-d-discord, patreon.com/shoptalkshow. That's how you get in, and we'd love to have you.
Yeah, follow us on Twitter for 16 tweets a month. We're going to start up videos again, so be sure to subscribe over on the CSS-Tricks YouTube channel. Chris, do you got anything else you'd like to say?