Andrew Morgan (Lead Programmer at Tighten) joins us this week to tell us all about why you should be training your keyboard, how to get started, and a lot more.
Dave Hicking: Welcome to Twenty Percent Time, a podcast that takes you behind the scenes of Tighten, a web consultancy based out of Chicago, but entirely remote and spread out, really at this point, all over the place. We specialize in Laravel, a PHP framework, which we're often pairing with any number of JavaScript frameworks, libraries, and all sorts of tools. I'm your host, Dave Hicking and this week, I'm joined by Andrew Morgan, a lead programmer here at Tighten. How's it going, Andrew?
Andrew Morgan: It's good, Dave. How about you?
Dave Hicking: I'm doing good. This is your second appearance on the show. It's a very elite club. There's only so many folks who've been on the show multiple times, so I'm glad to have you here.
Andrew Morgan: Yeah. Thanks, Dave. Good to be back on.
Dave Hicking: In the intro, I was quickly saying we specialize in Laravel. We do some JavaScript stuff. We're not talking about any of that today, but we are talking about something that is near and dear to your heart, and that is training your keyboard, right?
Andrew Morgan: That's right.
Dave Hicking: Okay. There's a website that I want to ask about at some point, maybe towards the end, but we have a little ways to go before we get there. Let's start all the way at square one. Why does a dev or whoever your target audience is, why would somebody need to train their keyboard? To use one of my favorite phrases, what problem does training your keyboard solve?
Andrew Morgan: Sure. That's a good question. Yeah. For training your keyboard, it's a fancy way of talking about keyboard shortcuts.
Dave Hicking: Okay.
Andrew Morgan: I'll assume that if you're listening to this podcast, you probably would agree that a keyboard shortcut is faster and more efficient than using the UI. The simplest example would be just on a Mac, using Command-S to save a file. It's right up there with copy and paste, one of the first keyboard shortcuts that most people learn and that's much faster than clicking on the file menu and then clicking save. That Command-S shortcut is pretty universal on Mac computers. If you're writing an app that saves things, you're probably going to program that shortcut into your app.
Dave Hicking: I would hope so.
Andrew Morgan: Right. Yeah. If someone were writing a text editor and the shortcut to save something was Command-Shift-Option-B, no one would use that. The problem is once you get away from those universal functionalities like save, copy, and paste, app developers tend to bring their own opinions to the table with what they think is intuitive for a keyboard shortcut. We don't always agree with what app developers think is intuitive and they don't always agree with each other.
Dave Hicking: There's no standard. There's not some sort of ISO keyboard shortcut standard.
Andrew Morgan: Not that I know of. Sometimes you'll see some similarities across apps, but certainly not a standard. Some apps, the app will expose a way of overriding the shortcut in the app itself, in the settings. That's awesome when an app does that, but not all apps do that. It is pretty common to have the shortcut in the menu, in one of the menu items. If the app exposes it there, you can override it in the system level, which is a little clunky to do, but at least it's available to do. Then some have type of keyboard shortcuts that are built into the app, but you literally can't override it at all. They just don't expose that functionality to override it. That's where this idea of train your keyboard comes into play because those apps that just demand that you use their keyboard shortcut, they're basically asking that you retrain your own muscle memory. But instead of retraining your muscle memory, what we'd rather do is train our keyboard or our computer to respond to the keyboard shortcuts that we want to use. I'll give an example. Let's go beyond this Command-S save example. My first point of contention with this type of differing keyboard shortcuts came when I learned about the Slack quick open palette. So I'm a longtime-
Dave Hicking: Even I use that.
Andrew Morgan: Yeah. You probably know about it if you use Slack.
Dave Hicking: Yeah.
Andrew Morgan: You open it with Command-K. I'm a longtime Sublime Text user and Sublime was really the first app that I encountered a quick open pallet affordance like that, just something that at a global level within the app, you can open and search for whatever you want to do, whatever you want to open, and you can type that and hit enter and it will open that thing. For Sublime, that quick open pallet can be triggered with Command-P. I had years of Command-P baked into my muscle memory.
Dave Hicking: Over and over again.
Andrew Morgan: Right. Then I learned about Slack's quick open pallet and, oh, this is great. I've got another app that it feels like the same type of interaction, but it's Command-K. Seems like an easy shortcut to memorize, but I couldn't get my muscle memory to switch over to just using this different shortcut. I wanted to use Command-P for that Slack quick open palette. The problem is, at least at the time, Slack has since updated this, but at the time, Slack fell into the category of apps that had no way to override it. It was not exposed in the settings and it wasn't even in the menu. It's now in the go menu, so you can override it at the system level, still can't override it at the settings level. So I basically set out on this journey to have some type of system where I could type the Command-P that I wanted to type and have it to get translated into a Command-K that Slack expected so I could just keep using the shortcut that I wanted to use and not use Slack's shortcut.
Dave Hicking: Yeah.
Andrew Morgan: That brought me on this journey that I eventually started calling training your keyboard. That's why we're here today.
Dave Hicking: I'm assuming this is 2021. We have the miracles of modern technology. This keyboard training is going to be just like a download one app, maybe some check boxes and I've got my keyboard trained. Well, actually, I take that back. I'm guessing it's probably not that simple, but what does it actually take to get your keyboard trained? What does that entail?
Andrew Morgan: That's a good question. It's not as easy as I would like for it to be, but there are a number of tools to install with it. Well, there are two primary tools and then there's also a companion tool. The first is a tool called Karabiner-Elements.
Dave Hicking: Yeah.
Andrew Morgan: A lot of people are probably familiar with it. It's a tool that allows for key remapping at the system level. It has a config file that is defined in JSON format. Now there's a companion tool on top of that called Goku that if you look at the JSON format for Karabiner, it's a pretty dense and difficult to manage manually. But Goku is a layer on top of that. It just provides a much easier, more tr syntax for defining your key remappings, and then it compiles down into JSON. Then there is also a tool called Hammerspoon. That's a Mac automation tool written in Lua. Going back to Karabiner.
Dave Hicking: Yeah.
Andrew Morgan: I'm using Karabiner. You could think of it, since it's remapping the keys, it's like sending a request basically of here's the action I want to take. Then Hammerspoon is listening to that action and Hammerspoon will recognize your context. Going back to that Command-P example with Sublime and Slack, Hammerspoon will hear that Command-P basically and it will say, oh, if Slack is the current app, then let's convert that into a Command-K.
Dave Hicking: Okay.
Andrew Morgan: Then finally, there is a tool that I've written called Hyperspoon.
Dave Hicking: Okay.
Andrew Morgan: That is-
Dave Hicking: Now we're getting really advanced. You've gone from like, "I'm taking stuff that's off the shelf" to "No, it's time to write my own."
Andrew Morgan: Yeah. Hyperspoon, it's a tool that I've written that is really inspired by how Laravel defines routes. So if you think about a Laravel route, the syntax, there's Route::get and then you put in the path, so say like /login, and then you've got your controller and the method. Hyperspoon is written in that similar type of syntax where it says hyper:app and you put in the first parameter there is your app that you're contextualizing this shortcut in. Then you say :action and you put in the type of action that you're doing. So thinking about that quick open pallet, the action would be open. Then the next parameter after that would be a Lua table, which you can think of like an array-
Dave Hicking: Okay.
Andrew Morgan: ... or like a JSON object. It's a table of mappings.
Dave Hicking: Yeah. Makes sense.
Andrew Morgan: Within that open action, what are the types of things that you might open, which we'll get into more later. But the whole purpose of Hyperspoon is really to remove some of the extra, repetitive things in Hammerspoon and just get down to simplifying this idea of having a system where you have one shortcut that responds differently in different apps.
Dave Hicking: Okay. I think that makes sense, or at least to me. I'm not a dev, but I think I got it. Why call it Hyperspoon?
Andrew Morgan: Yeah. Hyper is its own concept and-
Dave Hicking: Okay. Tell me more.
Andrew Morgan: Yeah. A few years ago, I was on a project with Jose, Jose Soto, formerly of Tighten. He was doing this thing with Karabiner where he was defining the Caps Lock key as an Escape key.
Dave Hicking: Okay.
Andrew Morgan: It's just a lot more convenient than reaching all the way up to Escape. He has also-
Dave Hicking: He probably had an old touch bar. That was the problem, he didn't have an Escape key.
Andrew Morgan: Probably so, yeah. He was also using it as a modifier where if you held down Caps Lock, then he would use the Vim directional keys, the H, J, K, and L directional keys, so saying holding down Caps Lock and J would go down. Traditionally in Vim, J is down, K is up, H is left, L is right.
Dave Hicking: Okay.
Andrew Morgan: He would use Caps Lock to be able to turn those keys into arrow keys basically in any app.
Dave Hicking: Okay.
Andrew Morgan: That got me interested in that whole concept. I was reading and stumbled upon the idea of the Caps Lock key as what's called a Hyper Key, which is basically overriding a key to where holding down that one key converts it into holding down Command, Option, Control, and Shift at the same time. So basically, a keyboard shortcut that no app developer would ever build into their app because no one's going to use that shortcut. The purpose of that is to eliminate these conflicts, because when you start getting into overriding shortcuts, you can easily conflict with shortcuts that are already built into other apps. So the whole purpose of Hyper is to avoid those potential conflicts. As I started really developing the system of contextualizing these keyboard shortcuts, it really turned into using the Caps Lock key and other "Hyper Keys" to be able to trigger these actions in Hammerspoon. In my system, it's no longer directly converting the Caps Lock into Command-Option-Shift-Control, but it's using that as a modifier to call an action in Hammerspoon. But that's really the origins of Hyperspoon.
Dave Hicking: Okay.
Andrew Morgan: It's a callback to the concept of Hyper as a modifier.
Dave Hicking: Okay. If I'm a dev and I'm listening to this and I'm intrigued, but maybe I need a little bit more to push me into the world of training my keyboard, do you have a go-to example for something that you have done with this system that has really made a big difference for you or just made something that's super annoying much easier?
Andrew Morgan: Sure. Yeah. I'll use a simple example first. A few apps that a developer's typically going to have open on your computer is say, a text editor, probably your browser, maybe a chat app like Slack or Discord and a Notes app. Let's use those as an example. One common interaction that you would make with your browser is navigating back to the previous page, maybe less frequently navigating forward, but you would do that sometimes as well. The browser has the back and forward buttons there in the UI in the top left. You also can do it with the mouse or the touch pad, but that can be a little annoying as well. But there are shortcuts for those. In Chrome, I think it is Command-left square bracket for back, right square bracket for forward. But these other apps, say Slack, going back to the Slack example, Slack can go backwards and forward as well and I think they're the same shortcuts, Command-left bracket for back, right bracket for forward. Notes apps can do that as well. Now, depending on the notes app, sometimes the shortcuts are different. As an aside, there seems to be like a little battle going on between the right and left square brackets and the arrow keys. Some apps I'll see as Command-Shift-right arrow and left arrow.
Dave Hicking: I was just going to say, I didn't even know in Slack that the brackets worked because I use Command-left arrow, right arrow. So there you go.
Andrew Morgan: Oh, did you override that?
Dave Hicking: No, that's just how it works.
Andrew Morgan: Oh, really?
Dave Hicking: Yeah.
Andrew Morgan: Oh, maybe they support both. I didn't even know that.
Dave Hicking: Yeah, but-
Andrew Morgan: That's interesting.
Dave Hicking: But as you say, different apps do different things.
Andrew Morgan: Yeah. But on Slack though, I've seen people type in Slack itself and on Twitter like, "Oh, how do you go back?" That's a shortcut that people forget, but if you get used to using it in the browser, going back and forward, then that starts to carry over into other apps. So going back to the idea of using Caps Lock as a modifier with this Hyperspoon tool, the way I have mine set up is it's Caps Lock-H to go back.
Dave Hicking: Okay.
Andrew Morgan: Remember H in Vim?
Dave Hicking: Yeah, in Vim.
Andrew Morgan: This is inspired by Vim that would go left, so left arrow in Vim. So Caps Lock-H goes back, Caps Lock-L goes forward. I have that same keyboard shortcut to go back and forward whether I'm in the browser or in Slack. I can be in a channel in Slack and get a message and open the quick palette to respond to that message and then go back right back to where I was and it's just really simple. Now in a text editor, this is where I start to rely a little bit on a more abstract idea of what going forward is. Most text editors have a go-to definition functionality. It's typically if you're on a function that you're calling, something like that, like you can hold down Shift and click on that function and it will take you to that definition, but typically, there are keyboard shortcuts for that as well. I think about that interaction with my text editor as going forward.
Dave Hicking: Okay.
Andrew Morgan: It's not in the same way as a browser going forward through the history state of the browser, but it's jumping forward to that function definition. So that's something I'll frequently do. In Laravel, maybe I'm on hasManyThrough method and I can't remember the order of the parameters. I'll just use Caps Lock-L to jump to that definition, look at the parameters, use Caps Lock-H to jump right back to where I was. Abstractly, that feels like the same exact experience as I have in the browser or in Slack,-
Dave Hicking: Sure.
Andrew Morgan: ... jumping forward and backwards. So that's navigation.
Dave Hicking: Right.
Andrew Morgan: A little more of a complicated example to expand on this idea of using other keys as Hyper Keys. So we started off with the quick open pallets with Slack and Sublime. As I've gotten used to using the Caps Lock key, I have switched over to using Caps Lock plus O as what I'm calling my default way of opening things.
Dave Hicking: Okay.
Andrew Morgan: That O, it's taken on the meaning in my system of open and over time, I started making other shortcuts that will open a specific thing and jump right to that thing. For example, let's go back to Slack again, I can do Caps Lock-O, get the quick open pallet and type in the channel that I want to open.
Dave Hicking: Right.
Andrew Morgan: But let's think about going to the general channel. That's a channel that I'll go to many times-
Dave Hicking: Sure.
Andrew Morgan: ... throughout the day. It starts to create this friction, this annoyance of, okay, now, over and over, I'm saying Caps Lock-O and then typing G-E-N and then enter. At some point, I flipped this shortcut around and used O, the O key as a modifier. This is all set up in Karabiner and Hammerspoon using the O key as a modifier and then the G key as the target that I want to go to. So to go back to the general channel, I just hit O-G and whatever other channel I'm in, that immediately takes me back to the general channel.
Dave Hicking: Okay.
Andrew Morgan: I do similar things in other apps like in Sublime. I can say O-R and that will open a repository. It will give me a little search menu to type in a repository I want to open. Text editors typically will have a way to search through symbols or functions on a page. In my editor, in Sublime, I have a shortcut that's O-F that it will give me a pallet where I can search a, say a function name at a PHP file and it will jump right to that function name. Here's a case where I'll rely a little bit on the abstraction again. Obsidian, which is a notes-taking app, it allows you to put in Markdown headers.
Dave Hicking: Okay.
Andrew Morgan: You can have one or more pound signs if you know the Markdown syntax, and I use that same shortcut. I have it set up where I can type that same O-F and it pops up a menu where I can search the Markdown headers on the current file that I've opened and jump to that header icon. So that's a case where I lose a little bit of the mnemonic association in Sublime like F is associated with function, but abstractly, it feels like I'm doing the same thing.
Dave Hicking: Right. There's always context switching, I don't want to say eliminating it, but you are maybe slightly lessening it because it's no longer like when I jump, when I switch... Because sometimes, context switching isn't just switching between projects or tasks. Sometimes it's like, "Okay, I got to go over here. I got to remember. Oh, wait, wait." I'm flipping back and forth between Slack and Mail, and then I'm jumping. Maybe I got to go get something. A client has sent you an email, which hopefully we try to keep to a minimum at Tighten. We do it all on Slack, but, oh, I send it to your email. Great. So you're jumping from Slack. Now you're jumping to your email. Now you're grabbing this. Now maybe back to Slack and maybe back to your editor. If you're trying to fly around, it's a pain.
Andrew Morgan: Mm-hmm.
Dave Hicking: Or you could just use the mouse, but as you're saying, the whole point is these are your tools and you're using them day in and day out, make them work for you, right?
Andrew Morgan: Yeah.
Dave Hicking: Have it so that you can just do the same thing and you know what you're doing and you're not trying to remember, oh, in this app, how do I do the same thing? I get it. It's a powerful concept.
Andrew Morgan: Yeah. Another benefit to this as well, to defining these shortcuts in this way, just early on when you're learning how to type, you learn about the concept or the value of keeping your fingers on the home row keys. That's pretty common thing.
Dave Hicking: Oh, they definitely taught us that for sure.
Andrew Morgan: Something that annoys me about a lot of the traditional shortcut modifiers is that often, they force you to take your fingers off of the home row keys to hit those shortcuts. If it's Command-Shift-Option something, you're twisting your hand in a way that you lose that position, but if you're using Caps Lock as a modifier or O as a modifier or something like that, you're always within reach of those home row keys. It just keeps you in that efficient position.
Dave Hicking: Here's a question. How do you decide what you should customize? Because I could see someone getting really into this, but next thing you know, they either are looking at this and going, "Wow, this isn't important enough to customize," and so they don't use it or they go the other way and they're like, "Oh, well, I'm taking this whole weekend. It's shut the blinds, turn off. Sorry, everybody. I got to customize every command possible." How do you decide personally? This doesn't apply to everybody, but how do you decide what needs a shortcut?
Andrew Morgan: Yeah. I hinted at this I guess with the going to the general channel, jumping to that. For me, there's a direct correlation between the frequency that I perform an action, the number of steps that that action requires, and the friction that I'm experiencing when I perform that action. In that Slack general channel, if I'm jumping to the general channel 20, 30 times a day or something, it's annoying to me to open that pallet and always type G-E-N. I want a shortcut that goes directly to that.
Dave Hicking: Right.
Andrew Morgan: But if there's a different channel that I'm going to just once or twice a day, who cares? I can just open the pallet and start typing the name and hit enter. It's a similar feeling with other apps. I think about the frequency. What are the shortcuts that I need closest to me because I use them so often? My editor, the first one that comes to mind really is running tests. In Sublime, I have it set up where I have the period key as a Hyper Key that I think of as an execute action.
Dave Hicking: Okay.
Andrew Morgan: I'll have period plus T as a shortcut that I can use to run the current test that I'm on. Then if I jump around to some other file, I have period plus R as something that it will rerun the most recent test. So that's something I'm doing just constantly all throughout the day. It's not enough to just be able to open up the pallet and type, run this test. I want that as close to almost like thinking it. I can't think it and have it happen, but what are the fewest steps that I can possibly take beyond just thinking it? And to me, period plus T to run the test, it's as instant as it can get.
Dave Hicking: Right, right. So there's a bit of a-
Andrew Morgan: So I let friction really, that's my guiding factor. How much friction am I experiencing? I'm scratching my own itch when I make these shortcuts.
Dave Hicking: Yeah. That's true of any sort of optimization. This is true for every dev, but once you realize, oh, I can make a computer or I can make something do this, all of a sudden, you're like, "Oh, well, I should automate all these things." It's like, all right. I think there's an XKCD comic about if it takes this long to automate, you should only do it if it saves you X amount of time or something like that.
Andrew Morgan: Mm-hmm.
Dave Hicking: Okay. We've talked about what training your keyboard, what that means to you. We've talked a bit about some of the software behind it, some of the reasons you do it, some of the things you can do. Let's say someone wants to learn more, where do they go? Do we have a wonderful central location for people to go to?
Andrew Morgan: Yeah. We're working-
Dave Hicking: We're working on it, so tell us about the website.
Andrew Morgan: Yeah. Well, before I jump on the website, I think it's worth noting it will probably be published by the time this podcast airs.
Dave Hicking: I think that's the plan, yeah.
Andrew Morgan: There's a blog post.
Dave Hicking: Yeah. We got a blog post.
Andrew Morgan: There's a blog post that should be out called How To Train Your Keyboard. That's the first place-
Dave Hicking: Okay.
Andrew Morgan: ... that I would hope that people will look because it really outlines all of the steps of installing these tools and it gives a lot of examples, a lot more examples. It can be a little difficult to talk about these things on a podcast, but the blog post walks through a lot of these examples and really, it goes into the idea of creating your own system. You can even see during these examples today where I'm grouping these like actions, these open actions and execute and navigation, those types of things. The blog post goes over a lot of that stuff.
Dave Hicking: I'll definitely link to that in the show notes. So if you're listening to this, you'll find a link to this blog post in the show notes. We'll make sure that they're timed so that the blog post comes out. Because it's true, the website will be cool when we talk about it, but if you're talking nuts and bolts, you want to get started, yeah, it's great to talk about it, but as Andrew said, this is definitely the kind of thing where reading, seeing visual, this is all very, very helpful, so that's a good point. Thank you.
Andrew Morgan: Yeah. So back to the website, we're working on the idea of, like I said earlier, eliminating the barrier of entry. I'm not the first person in the world to come up with the idea of customizing keyboard shortcuts, but you'll see. There are plenty of excellent blog posts out there of people doing these types of things, but we're trying to make it so just the setup is easier. People have less of a reason to not do this. That's the first goal of the website, is really to just have a place for resources, but it's also, we want a place for people to be able to share what they're doing and get inspired. A lot of these shortcuts that I have mentioned, they're part of my own personal system. They're purposefully opinionated. It's how my brain works in regards to just how I use my keyboard and what's intuitive to me, but what's intuitive to me isn't necessarily intuitive to other people, but it's fun to get inspiration-
Dave Hicking: For sure.
Andrew Morgan: ... from how other people are doing things. I like the idea of just people having their own systems and just having a way to share them and visualize them and just get inspired by one another.
Dave Hicking: Yeah. That goes back to what you were talking about, I think earlier in the episode, which is that developers are often opinionated bunch and the developers of Slack decided on one set of keyboard shortcuts and the developers of Chrome have decided on keyboard shortcuts. There are definitely influential apps that have inspired lots of apps that have similar keyboard shortcuts. I feel like Gmail was somewhat, not a trailblazer, but definitely popularized certain keyboard shortcuts just for even navigating within a list and some of those common keyboard shortcuts that lots of, I think email apps and other apps emulate. But if you're an opinionated dev who you wish that certain apps worked a certain way, that's the whole point of this. It's almost saying, yeah, Andrew's going to be opinionated. People at Tighten are going to be opinionated. You listen to this show, you're going to be opinionated and this gives you the power to be opinionated, basically. You don't have to be boxed in by someone else's opinion, at least for keyboard shortcuts. There's lots of other cases where you might be.
Andrew Morgan: Yeah. Once you have your own system set up and you have these groups of actions, you start to translate those more across apps. Recently, I've been using the Obsidian note-taking app. One of the first things I did with it are just, I'm mapping over my keyboard shortcuts. Okay, where is the quick open palette? How do I go forward and backwards? How do I open specific notes that I want to open frequently? As I'm learning what Obsidian uses for these shortcuts, I'm just putting those straight into my config in Hammerspoon and it works the way that all my other apps work.
Dave Hicking: Yeah. Outside of this podcast, which hopefully people enjoy, and outside of your blog post, if someone wanted to learn even more, dive even deeper into this world of training their keyboard, are there any other resources that you check out or that you link to that you think people should go to in order to learn more?
Andrew Morgan: Yeah. I would first just search for people's dotfiles on GitHub just to see what other people are doing. In the blog post, I have referenced Jose Soto's dotfiles as well as Nathan Morgan now of Tighten. He's been doing this stuff for a while. His dotfile's on there as well as my own. So that's the first thing, is just looking at the dotfiles and config of other people who are doing this type of thing. Second, I think it's worth reading the Hammerspoon documentation. Their documentation, it's really good. Hyperspoon, it's the layer on top of it that makes these keyboard shortcut mappings easier, but there's a lot more that you can do outside of what Hyperspoon gives you. I think it's worth reading the Hammerspoon docs to just get some inspiration. Finally as well, we do have a Twitter account. It's trainyourkb. We're going to start posting on that and just see what interest there is in the community around this and what people are doing. You can always tweet at us there as well if anyone has any questions.
Dave Hicking: That sounds great. Andrew, is there anything about training your keyboard that we didn't get to talk about today or that I didn't ask about that you really want to make sure people know?
Andrew Morgan: Yeah. I would just say, obviously, I think this is very valuable for people using a computer.
Dave Hicking: Yeah.
Andrew Morgan: I think if you're a technical person working on a computer for a living, you can get value from having a system like this. I would encourage people to start with just very basic shortcuts. Even if you don't get into using the semicolon or whatever or the period as a modifier, you can start small and you can build up your own system from there. But I would also encourage people to just really experiment with their own muscle memory and what feels intuitive. I have multiple shortcuts that I have switched back and forth a number of times until I just really landed on what felt intuitive to me. It goes back to the idea of I'm not really training my own muscle memory as much as I'm trying to discover what already feels natural to me. I'm trying to find the most natural way of using keyboard shortcuts to me and then training my keyboard to respond to those shortcuts.
Dave Hicking: Well, all right. Andrew, thank you so much. It's been, honestly, just fascinating for me to learn about. Hopefully, everybody who's listening also enjoyed. Andrew, if people want to find you on Twitter or online, is there a particular place they should go?
Andrew Morgan: Sure. My own Twitter account is AndrewMorgan3. You can ask me any questions there, and once again, trainyourkb. That will be a Twitter account we're using just specifically for this keyboard training type of content.
Dave Hicking: Awesome. Well, Andrew, thank you so much for joining again. Really appreciate it. It's great to have you back in the show.
Andrew Morgan: Thank you.
Dave Hicking: Yeah. Thanks.
We appreciate your interest.
We will get right back to you.