I don’t claim to be good at meditation, but I’ve come to understand the benefits of it, especially for someone with ADHD. I’m also probably bad enough at it that I wouldn’t dream of telling anyone how to do it. That said, I figured something out today that I think is worth sharing; maybe it will be of use to others, especially ADHD folks with a meditation practice.
A common thread through just about every meditation style that I’ve been exposed to is letting thoughts go. Letting them exist, acknowledging them, and then letting them pass. I’ve always viewed it as a front to back process, and taken that literally. My conscious thoughts exist in my frontal lobes, and I’m trying to clear those out, visualizing the thoughts passing to the sides or to the back of my brain.
This morning my yoga instructor misspoke and suggested letting conscious thoughts stay in the foreground instead of the background. I knew it was a slip-up, but, as is my way, I immediately wanted to know what would happen if I looked at it backwards. Magic, that’s what.
The front of my brain is always awash with thoughts. A constant buzzing. It’s probably common to more than just ADHD sufferers, but it’s something I’ve accepted I’ll always need to deal with. Today I found that I can acknowledge individual thoughts, but rather than consciously try to let them go, I can let them stay. Right there in the front, instead moving my focus to the background. I became aware of all the buzzing in my frontal lobes, but from the outside of it, separated from it. It became just a noise, not individual thoughts I needed to process. I visualized it as a noisy neighbor to my empty chamber, and one that I could ask to quiet down, or simply begin to tune out.
As a sleep aid I’ve often visualized my brain like a radio tuned to static. Let the static override conscious thoughts, and then slowly turn down the volume. It’s generally worked, and this little exercise had the same effect, but with a mindfully awake result.
Like I said, I’m no expert. This reverse in my visualization is a surprise to me, but it’s probably actually what I was supposed to be doing all along. Or at least another way of getting there. It just struck me that maybe others for whom meditation seems like an uphill battle might benefit.
Feel free to use the comments to share your own experiences, or just to tell me I’m unqualified to be opining about this stuff publicly. It’s ok, I can take it.
This is a post about keyboards. Well, about one keyboard, but we’ll probably go through a bunch to get there. It’s going to be long, and some of my less Tinder-profile-worthy personality traits will probably become obvious, but we can get there together.
There are two types of people who will want to continue past this point. First, those interested in mechanical keyboards to the extent that they care what other people think about them. Second, those who enjoy reading about other people’s nerd stuff. Maybe specifically about keyboards, but it’s likely that this person enjoys reading anything decidedly nerdy. Either because they’re nerdy, too, and it makes them feel better to know they’re not alone, or they’re so normal — and fine with that — that it amuses them to see other people go off the deep end.1 It’s ok. Everyone loves Sheldon. Everyone is welcome.
The first keyboard I can remember liking to the extent that I would talk about it was the diNovo Edge. That was around 2001. Up until then keyboards had just been a tool, not something I noticed or cared about. I went through a few iterations of the Edge, eventually ditching them because Logitech makes horrible drivers for Mac. Oh, and they required drivers on a Mac. And dongles.
For years since then I’ve always come back to my aluminum Apple bluetooth keyboard. I don’t even use the latest one, the Magic Keyboard, but the one that still had a workable arrow key cluster.2 Not for lack of curiosity, and certainly not for lack of trying: I have a Das Keyboard, a Matias Laptop Pro,3 a Matias Tactile Pro, an ErgoDox,4 a couple old diNovo Edges, and a few others, mechanical and non, just laying around, moping, and hoping that I’ll put them up for sale to someone who’ll actually use them. I have piles of keycaps, a couple switch testers, and a fancy key puller. I’ve spent hundreds of dollars (probably over a thousand over the years) trying to find a keyboard that made me feel more powerful than I did on my trusty Apple aluminum keyboard. Even the ones that got really close still had deal-breakers for me.
I have a litany of reasons why every fancy keyboard I try might fail to make it into the “primary keyboard” spot. The foremost thing that always kills my momentum is that moving any key in the modifier cluster (Cmd, Opt, Ctrl, Fn) too far from where my muscle memory has known them to be for years inhibits my ability to function efficiently. It’s a crippling dependency I’ve created for myself, but I feel that the time and effort it would take to get as good with a new layout as I am with the standard layout (on every single laptop and Apple keyboard) I use would be too arduous to be practical.
I’ll also admit that the feel of typing on most mechanical keyboards doesn’t thrill me the way it seems to thrill some others. The less clicky the better for me; I prefer Cherry Browns and Reds to Cherry Blue, but they all feel awkward and slightly laborious to me. I’ll concede that I do like to use the Matias Laptop Pro with my iPad for writing. I do get that mechanical keys can be pleasurable. Once I get used to the key travel, it’s possible for me to dig it.
I’ll also admit that, despite the above complaint, I type more accurately on mechanicals most days, owing partly to the fact that my fingertips have some numbness, especially in my right hand, as well as guitar string callouses, and feeling flat key edges isn’t always possible. It’s certainly easier to feel big, tall keycaps. But I still never loved the feel of hitting the keys. That’s not to say I think the Apple Aluminum is the top tier of typing pleasure. It’s ok — nothing to write home about, but with that one I can work.
Here’s what always happens: I’ll try a keyboard out for a while, just for writing. That will usually go well and I’ll see hope for it. Then I’ll start launching other apps and run into confusion with my shortcuts and muscle memory. Then it always seems to compound once I get into a code editor, especially if my bracket keys have shifted at all. Pretty soon, no matter how determined I am, I just can’t justify the lost minutes of productivity every hour as I look down at the keyboard and watch my fingers still repeatedly trigger the wrong shortcut, operating of their own accord. Then I start to think about how even if I spend a whole weekend mastering this keyboard, I’ll need to shift my keybindings and BetterTouchTool and Karabiner and Keyboard Maestro shortcuts to make them more efficient on this new layout, and then they won’t work well on my MacBook’s built-in keyboard… and then I give up.
I think this might finally have changed.
The Ultimate Hacking Keyboard
My penultimate keyboard in this story was the ErgoDox from MassDrop, a Teensy-driven hacker keyboard. While it didn’t pan out for me, I realized that if I was going to make a mechanical work, it had to be utterly programmable.
I backed this “Ultimate Hacking Keyboard” when it was crowdfunded. I don’t even remember when I committed myself to the purchase. Judging by the price tag (>$200 US), it was long enough ago that I wasn’t as broke, and not as phased by the future ding to my wallet as I was when it finally came around. Turns out it might have been worth it, and that this one might be the best bet for getting me on to a new keyboard. Smart money says I’ll be back on the Apple aluminum within 2 weeks (just judging by history), but here’s why I think there’s a chance.
The Ultimate Hacking Keyboard, henceforth referred to as “UHK,” can function as a one-piece keyboard, or you can break it in two to create more ergonomic layouts. I liked the split nature of the ErgoDox, but I find the best position for me is just barely split apart; the ErgoDox at the same angle required the halves to sit farther apart than I found comfortable. You can also attach the lift stands at any of the 8 corners (when it’s split apart), which means I had the chance to find out I really like the “tenting” arrangement (raised in the middle, sloping to the sides).
Like the ErgoDox, it’s hardware-programmable. You can control exactly what key code(s) each key sends, and it has a visual layout editor for your computer. It can switch between different keyboard layouts; it comes stocked with Mac and PC versions of Dvorak, Colemak, and Qwerty layouts, and you can add your own and replace the buttons or assign new ones for switching between them.
The programming happens in “layers,” each layer being a different layout with certain keys triggering the switch between layers. Same thing that happens when you hit the Fn key on any keyboard, most keys suddenly have a different function and some no longer do anything at all. The ErgoDox had six layers, which got to be a little too much fun for me. I had to have printed diagrams to use the beast I created.
The UHK has more keys than the ErgoDox to begin with, which means it requires less creativity to assign all the usual keyboard keys. As such, I don’t find the three layers the UHK offers to be limiting. There’s a Function layer (when you’re holding the Fn key) and a Mod layer (holding the proprietary Mod key). It comes with some thoughtful defaults, but you can (and I did) completely modify every key to your own liking.
Because the Space bar is split in half, the UHK turns one half of it into an extra button (a Mod button). Below the space bar on each side is a flat button you can also program. By default they’re assigned to Space and Mod, opposite of the button above it, so you have both keys on each hand. The default layout takes one handed keyboard use very seriously.
It also has a Mouse layer. When you hold down the Mouse key, the i/j/k/l cluster becomes controls for your mouse cursor, and the mod key that’s under your thumb becomes left click. The extra mod button at the thumb becomes right click. Y/H scroll vertically, U/O scroll horizontally. It’s nifty, but I can’t see being so desperate to avoid my trackpad (I really love my Magic Trackpad) that I’d spend the time to actually be comfortable doing it. You can, however, use the Mouse layer as an additional keyboard layer, simply reassigning the mouse movement keys. Numeric keypad, anyone?
All of the keys can have secondary functions, much the way that the Hyper key5 does one thing when you hold it while pressing another key, and something else (escape) if you just tap it. On the UHK, I used this to turn my tab key into the Mouse key when I hold it, and replace the Mouse key with a caps lock key. So I can have my Hyper key and not have to relearn all of that, too.
Layers can be activated while holding down modifier keys, but you can also set keys to toggle them into one state or the other. You can use this to switch fully into a layout with task-specific keys for web browsing or media consumption, just a click away from having your regular keyboard back. I’ve actually found this pretty handy.
It has add-on thumb modules available that you can attach where the halves break apart. According to the shipping notice I got, I apparently also have two of those coming (an extra button cluster and a trackball) but I’m kind of happy I can just spend some time getting used to the keyboard before I go trying to extend it.
Why I think it’s working for me
Short answer, obviously, is “because it’s really expensive and it has to, dammit,” but I could say that about any of the other half dozen pricey keyboards on my shelf.
First, I like the mostly-standard modifier key layout on my left hand. I shuffled some keys around to get it right, and I made the left half of the space bar the actual spacebar (by default it’s a Mod key). It turns out I always hit the spacebar with my left thumb, and that was going to be a nearly impossible habit to break.6
Next, having more keys in standard locations, combined with total programmability, allows it to cover all of the things I need and not leave me feeling like I compromised on anything or had to make too-tough decisions about where to put a key when it couldn’t be where I needed it to be.
As I said before, the split layout and option for “tenting” risers is great for ergonomics. I need that. Yes, there are less expensive keyboards that do exactly that, but… programmability.
I don’t even know how to measure or quantify key travel, but I know that this one has the right amount for me. I was instantly accurate while typing on it. I can’t say that for the Matias or Das keyboards, and definitely not for the ErgoDox.
The switches are Cherry Brown (I think), and make no click noise of their own. So it’s still noisy like a mechanical always is, but not thunderous on a desk or annoyingly “buzzy” once you get up to speed.
Lastly, it’s not generally considered a feature, and is obviously the standard for mechanicals, but I like that it’s USB. It’s for my desk. I have USB ports everywhere. Why would I want a keyboard that needs batteries or recharging? Hardwire me.
The arrow keys
You may have noticed my obsession over the years with keys related to cursor movement. I like my arrow keys a certain way, I create Karabiner hacks to enable vim navigation, and use a bunch of keybindings to avoid having to use the arrow keys as much. I also know all of the emacs bindings for cursor movement that are built into macOS. All of that to say that I was immediately enamored with the lack of arrow keys on the UHK.
On the UHK, the arrow keys are part of the Mod layer (in the default settings), so holding Mod down you can use i/j/k/l as an arrow cluster. This means not having to leave the home row to use them, but also means that something as simple as an arrow key now requires a key combination. At first this was daunting, but after 2 days it became natural for me. The toughest part for me happens when using a combo like “select by word,” which is Option-Shift-Arrow. Now it’s Option-Shift-Mod-[i/j/k/l]. And when I want to switch to selecting by character in the same selection, I have to think for a second to remember which of those three modifiers to let go of. Like I said, a bit of practice and it’s becoming quite intuitive, and definitely beats sliding off the home row just to move the cursor.
The same issue exists with the escape key, which is now Mod-backtick. I usually use the Hyper (caps lock) key as escape anyway, but sometimes hit that upper left key out of habit. Now doing that sticks a backtick into whatever I’m writing. Switching the habit fully over to the Hyper key will alleviate that issuue.
A short list of grievances, because if you’re still reading, there’s a 96.541% chance that’s what you’re looking for.
Update: The UHK team contacted me about all of these and between firmware updates and some tips, they’ve all been resolved
It’s easy to hit bottom space/mod keys accidentally when not paying attention, which is especially annoying if they’re set to permanently toggle a mod or function layer
Sometimes the bottom space/mod keys stick. If I wanted that to be a toggle, I’d have told you, UHK.
Occasionally after a Command-Shift(-Mod)-arrow, the Command modifier sticks and requires releasing and re-pressing the mod key before getting normal arrow function again. If I thought that three modifier keys got confusing, remembering which finger needs to tap before the other finger presses is a nightmare.
Just as a record/inspiration for the masses, here’s some of what I’ve changed so far, because if you’re still reading, you get a kick out of this kind of thing.
- Duplicated the escape, delete, and fn keys from Mod layer to Fn layer for consistency
- Replaces the layout switching keys, which I’m not going to be using enough for them to be worth accidentally hitting
- Tab key to mouse as secondary function
- Mouse key to Hyper (caps lock/Karabiner)
- Swap thumb space/mods (I always space with my left)
- Re-order the left modifier keys to Apple layout: Fn, Ctrl, Opt, Cmd
- Moved the media keys in the Fn layer and added Pg up, Pg dn, Home and End to their appropriate spots on the i/j/k/l cluster
- Updated the app switching shortcuts so Mod-D brings up the app switcher (Cmd-Tab), then D moves right and S moves left (Cmd-Shift-Tab), and F sends Cmd-Q, which closes whatever app is highlighted when the App Switcher is up
I’ve been using this keyboard for 3 days now. That’s not very long, but I’m more comfortable on it after three days than I have been with any other mechanical after a week. That’s promising. And I’m actually having fun (obviously, enough fun to think “I should write about this”). Over breakfast when I thought about heading to my office, my next thought was “cool, I get to use the UHK.” I never got to that point with other attempts — even with the ErgoDox, and I really wanted to love that keyboard.
The backers are slowly getting their keyboards now, and if you want to pre-order one, it’s estimated to ship by October. Just in case this rabbit hole sounded like fun to you, too.
I’ve kept my promise of shipping smaller updates to Marked 2 more frequently. Marked is now at 2.5.21, so here’s a rundown of what’s new in the last 5 updates.
First, a bunch of fixes. I’m fixing every day.
New support for hover preview of footnotes rendered by Pandoc instead of the built-in processors.
Improved support for Highland 2 and Fountain text. Marked can once again open Highland files natively and update automatically on save.
Improved support for MarsEdit, and Marked can now open MindNode files regardless of whether you save them in Single or Package format.
A new option that will really only pertain to coders: “Only syntax highlight when language is specified.” This mimics the behavior of some other platforms, and only applies to fenced code blocks. All indented code blocks will still get syntax highlighting. If you enable this option under Preferences->Style, a fenced code block with a(ny) language specified will get syntax highlighting, e.g.
If the opening fence doesn’t have alphanumeric characters after it (and no language is specified using Markdown Extra syntax), the code will be ignored when highlighting.
I also updated the internal MathJax library, and Leanpub syntax will now work in every document if it’s enabled (Preferences->Apps). Previously it was only rendered if the current document was “Book.txt”.
Please enjoy the latest updates with my regards. If you’re updating through the automatic updater (Marked->Check for Updates), read all the way through the release notes, it’ll be worth it. Trust me.
To get Marked 2, visit marked2app.com and grab the free trial! (Also available on Setapp and the Mac App Store).
I’ve added a few new shortcuts to my astounding1 collection of macOS keybindings. You can check them all out on the project page (and, if needed, figure out what the heck I’m talking about), but here’s what’s new.
First, a simple command that’s just for convenience: shift-space to move forward one character without inserting a space or deleting anything that’s selected. It’s exactly the same as hitting the right arrow key or pressing ⌃f. I just wanted the convenience of having it in a handier location when typing. You might hate it, especially if you often linger on the shift key when hitting space, because it will lead to unexpected behavior when you’re using one of the most ingrained keys in your muscle memory (the spacebar).
As a solution to the lingering shift, if you’re not already using your hyper key with the spacebar for something else, it might make a better option (setting the binding to
^@~$\040. Mine’s been the shortcut for Dash for long enough that it would take too much getting used to.
Second, some shortcuts for changing programmer-style casing in a string. These will only be useful for people who regularly want to convert from snake_case to camelCase or vice versa. I often find myself needing to do this outside of an editor with built-in case conversion, so I made a couple of quick shortcuts.
These are all multi-stroke, mostly because I’m running out of keys these days. Ctrl-Option-c starts them, then the second key chooses the function. The first one is snake_case to camelCase. If you place your caret (edit cursor) before the underscore in “snake_case” and hit
⌃⌥c, c, it will delete the underscore and capitalize the next character, giving you “snakeCase”. It deletes the character following the caret indiscriminately, so it also works with a hyphen, or a space, or possibly a character you didn’t actually mean to delete (if your caret is in the wrong place). It just replaces the need to delete, select, and then re-type the first character as uppercase.
The second one converts to snake_case by an inverse method, inserting an underscore and lowercasing the next character. Put the caret between the “lC” in “camelCase” and hit
⌃⌥c, s and you’ll get “camel_case”.
That’s it. As always the project page and GitHub repo are updated with the new bindings.