Bernhardt
Hardware, Software and Ring0 shenanigans.
Not Dead Yet!
I'm back, actually. There's a pile of messages to still clear though and the previous post still applies.
After the last update I thought I was doing better, turns out my medications didn't work well and left me with the worlds worst case of anxiety and executive dysfunction. The good news is those are out of my system, the new ones have settled in and it's time to get back to work. Being a bag of chemical soup is fun!
If you know someone who's "going through it." as they say, reach out and give them a hug. Maybe get them out for a night circumstances allowing.
Thank you for all the patience and understanding during all of this. Your support means more then you could ever know.
-- Jane
Mental Health, Suicide and the time in-between
Long time no update,
>What's been going on? Where are you? Why haven't you responded? What the fuck?
In short, this past bit has been hard, really hard. There's no easy way to say this, so I'll just say it. I made two attempts on my life and ended up in a hospital for a few weeks. When I came out, I was put on new medications and they left me in a state not fitting to be running operations, or handling pretty much anything.
Over the past bit here I've been getting stable, and relying on my support network. I'm at a point where I can return and catch up on everything, but it's strange. I haven't been in this office in over a month and a half, the drinks I left out just got cleaned up, my hands aren't used to my GergoPlex and I'm trying to figure out inventory for whatever I need to order. In addition it all feels a bit foreign, like a old childhood bedroom.
It's a mess to say the least, but I'm here and writing this aren't I? Finding the words/courage to express this has taken a ton of time and at least four different rewrites of this. The words aren't perfect, and this is curt but just know I'm doing my best.
As an aside, mental health has been one of the biggest challenges I've ever faced. I thought I was stronger then this and above it, I was wrong. It has taken finding a community of similar experiences to allow me to find the words, people to support and be supported by, lots of raw conversations and being amazingly honest, open and empathetic to myself and the folks who have supported me and in kind. Some of my experiences are unique, many are not, but understanding that I have a community, a support network and people to lean on is a weight off.
If you or anyone you know has struggled with mental health, please send them a message with you phone number, let them know a 4AM phone call is OK. Just having that can make all the difference. But please, please don't crowd them, just reach out.
Anyway, back on to business.
> Where's my package? It shipped a month ago?
I had issues with Canada Post returning all of my last runs parcels. One of my partners received these while I was still in hospital, but they are being re-labeled and shipped out by end of week. Thankfully the issue has been cleared up. You should expect 2-3weeks for US destinations
> You posted this but haven't responded?
I'm working through the backlog of comms right now, to say there's a ton is an understatement. I should get to yours within the next 24 hours.
> What do you think the turn around time for kits is?
Hard to say, I need to inventory everything and I have a feeling I'm going to need to source some parts. I'll try and keep this updated, but for now assume a week or two minimum.
> Any chance of getting a Ready?
If you're okay waiting, send me a DM. Just be aware that _there still is a backlog_ and those orders will be processed after the backlog is cleared.
> My order hasn't shipped, can I still get a refund?
Of course, as long as it doesn't contain a group buy item! Just reach out via Discord.
> How are you?
I'm getting there, I'm trying not to lie to myself anymore about thinking I can handle everything. In good news though, my documents are all updated and I'm working on getting my surgery date! If you want to help out with those costs, donate a pile Red Bulls, buy a toque or something of the sort, every bit helps!
I'm glad to still be here and getting through this. Thanks for being along,
-- Jane
gBoards Update: Fighting Fires
Greetings, sometimes words are hard to get out, but I'm going to try. I'm not doing well in the least, and if you've tried to contact me, order anything off the store you'd have noticed a severe absence on my part. There's reasons for that, but they don't matter, I should have taken care of this sooner.
May/June was a disaster for me. There was multiple deaths in the family and me and my siblings were called on to clean up their properties, me and my long term partner split, I've been in and out of hospitals dealing with a hell of a throat infection that I can't shake and my mental health entered a negative feedback loop. My life has become messy and I'm at a very low point, throw on the ever growing backlog to the stresses and I haven't been functional. The good news is a bit of therapy seems to go a long way, and a few of my friends have stuck around. So we're on the upswing (I bloody hope)
The problem with gBoards is been getting more popular, and I'm a one-person shop. Keeping up with demand was hard enough as it was before all of this happened. And now that I'm trying to rectify it, catch up and get back into the swing of things the mountain of orders feels insurmountable. I've been trying to get help put together, but there's not many people I can pull from. I thought I was in the clear with the last blog post, but life decided to throw more shit at me.
As such, I've shut down the main site to only Kit orders (or other things I can pop into bags and mail quickly). In addition, if you have an outstanding order with me and wish to refund it *please reach out* and I'll get that taken care of, it will make my life easier and get this back to normal quicker.
How am I going to rectify this going forward? There are some changes to gBoards coming.
- Order queue will be limited to 100 open orders (excluding GB items)
- Try to maintain a more active presence on Discord/Email
- Constantly updated realistic estimates for Partial/Ready orders on the site
- Recognizing when I'm not doing well *and take proactive steps to care for myself to avoid a repeat spiral*
Here's a few notes
- The last mailbag was taken about two and a half weeks ago, so if you received a shipping email in that timespan, it's still going out, just needs labels, but it's en route.
- Springs from the last week need to be shipped, those are happening in the next few days
- Some kits are waiting on PCBs to arrive. DHL has those and I should have them in a few days here, shipping after that
- The backlog of Partials/Readies is about two months deep now, hence the shutdown
- There's a ton of comfy cases waiting to go into the store
Looking at everything in the queue, I'm hoping to have this cleared out in a month or two, maybe sooner depending on how finding helpers goes and their availability.
I'm sorry for not handling this sooner, I thought I was more capable of more then I actually was, and denial is a hell of a drug. If this was your first experience with gBoards, let me assure you it's not par for course around here, I'm just in the middle of a transitory period and trying to handle.
I'm sorry you had to be here at this time, and I thank you for your understanding.
Reach out to me on Discord!
-- Jane
Order Delays and News
Hey everyone,
Right now I'm dealing with the loss of a close family member and all that entails. I've been running between my hometown and Saskatoon a ton and orders from the past two weeks need to be filled. We have the main stuff taken care of now, so it's going to be a slow return to normal over here.
Backlog:
Kits/Springs/Pack-and-mail items should all be bagged up here in 2-3 days. You should get emails about that.
Partials/Readies/Georgis are caught up to the 4th of April. I'm calling in more help to the shop to get these out and am hoping to be caught up a week after the kits and co are you.
Sorry again for the delays, if this wasn't a one person shop, this wouldn't be an issue.
-- Jane, May 13th
Well that was a lie, turns out May wasn't done with me. I had to spend some time up north taking care of cleaning a property, deal with a move and my long term relationship imploding. Add the stress of those together and I spent a few days in a hospital with a nasty infection. Thanks May, really did me a solid there.
Anyway! I'm back (knock on wood) and clearing through my outstanding communications. Springs will be cleared in the next 1-2 days, Kits should take another 1-2 after that. Partials/Readies/Georgis will be going out after that and filled in chronological order.
Feel free to reach out. I'm able to keep on top of communications now, and will try to respond within 24hours, if you don't hear back just bump the conversation!
Thanks again for bearing with me during all of this, it's been a mess but is only looking up :)
- Jane, June 02
Life Changes / Contact!
Holy! It's been a year and a half over here!
Lets start with the biggest changes to gBoards, moving forward all contact is going to be done over Discord (you can find my tag on the Contact page of the main site.) There's a few reasons for this change, mainly, I am terrible at responding to emails in a prompt manner. Discord, while less formal, allows for a quicker turn around time. I'm hoping this alleviates the issues I've been having with email backing up.
I'm going to try and get through that backlog of communications. If you don't hear back soon, reach out via discord!
Also, if you still use BBM for some reason (lol), my ID is EF061352. Feel free to reach out there for fun.
You might have noticed if you've been paying attention that I've been having my own bag of changes with the migration to the new email address and all of that. To say it's been a trip to get used to is an understatement, thank you for being patient as everything stabilizes and I adjust everything.
Just do me a favour and don't pay attention to the PCB silkscreens until the next revision ok? :P
Stay Tuned,
-- Jane
COVID-19 Status
As with almost everything, gBoards is effected by COVID-19 in a few ways. Namely I have a reduced fabrication capacity with my local fab, shipments are taking longer to get to and from me and the border is operating at a reduced capacity.
I've been limiting my mail runs to every week and a half. Mainly to reduce the exposure of my local posties. So be aware that if you get a shipping notification, it may not have hit the post yet!
As usual, expected delays/events will be logged in the post at the top of this blog. Thankfully with layoffs and all the time I've been spending at home the backlog is being destroyed at a good rate! Feel free to send me a email, I try to respond within 24hours to any and all inquiries :)
Stay safe and sane,
-- Germ
Adventures in Obscure C Features (2020)
Context:
I make very small keyboards, that abuse lesser used features of the QMK project, a open source general purpose keyboard firmware that is extremely powerful. If you like programmable devices, get a programmable keyboard. Once you to ~30 keys or under QMK becomes a bit painful, and this is why I wrote a onboard chording engine that layers onto QMK. Rather then using software like Plover or AHK everything happens on the keyboard itself allowing for a portable and independent setup (Because moving configurations around is a pain!).
The Problem:
For these smaller keyboards, reliance on Chords and Combos is absolutely necessary. Here's a image of GergoPlex's vim-orientated combos that it ships with.
This is a trivial case, Ginny requires over 500 different chords to function!
Now let's look at the code to generate this
To add a combo a enum and a define must be updated, a entry added to an array and a sequence stored in flash memory. Needless to say this can be cleaned up. In it's current state there's 50 lines for a handful of macros, this is only going to get worse as more are added. Let's mock up a macro and see if it can be implemented and maybe we can clean this up. Note: We can't simply embed the PROGMEM'd arrays into here, we need them to be processed into flash storage properly. We're working on an embedded device here with 32K of flash, 2.5K of SRAM and 1K of EEPROM (Who needs memory protection anyway?)!
That's a non starter. What about making up 3 different macros?
Looks OK and might compile but we still have the root problem: A unmaintainable mess of code that's about the same length. What if we could change how macros are evaluated on the fly? Turns out with a bit of #undef and finesse we can! But in order to do this, all the arguments must be the same between invocations. So lets clean that up.
Now for the fun part, we give our macro a name and slam it off into it's own file and #include it multiple times! A caveat to this process is that we need to generate valid identifiers. So Macro-String-Hashing isn't an option. Hold my preprocessor!
Well that's pretty neat. Now the combo defs are slammed into their own little file and we have a mess of C in the keymap.c file. We can tuck that away later into a header. But right now there's a more pressing matter: Sending multiple keystrokes! This is how you do that using QMK Combo features.
...That's not pleasant. We can do the X Macro shenanigans again, but including arbitrary C in a macro doesn't seem ideal. Thankfully there's a good function called SEND_STRING() that handles 99% of what we would want to do in here. So we'll abuse that and add in the SUBS() macro alongside the COMB() macro.
So with the crazyness that is the C preprocessor lines can now be blanked out or modified as needed. In theory this system can be extended as much as we need. And we're going to go a little bit farther. One property we can abuse of the C include system is the fact that it's recursive. So we tuck the gory internals into g/keymap_combo.h and have that call combos.def. In combos.def we include other submodules to compose the combos from here's a light example.
The major benefit to this is that now modules are small one-line includes that are logical as opposed to a mess of keyboard data. More importantly meta-defs are possible that compose other structures. Think of just importing awesome-vim-combos or awesome-emacs-combos and they pull in everything that's deemed 'awesome'. Configuration is also possible with the a PREFIX define that modules/the user can test this or override this if wanted.
Lastly, let's put this all together
Keymap.c
Combos.def
User.def
So now instead of having a keymap that looks like how we started, there's organization, structure and exportability. Also this runs in a generic way on top of QMK. That's pretty cool eh?
Why not just use a generator?
This hit me multiple times while working on this portion of the project. It's doable but requires external tooling. To even use this feature you're already compiling your own firmware locally (as QMK config doesn't support the extended features), so having a extremely quick turn around time is important. As well using the tooling that is expected to build a firmware in the first place cuts down on external cruft.
This only works on GergoPlex though?
Nope! It's board agnostic, and hooks basic keycodes. In time a virtual keymap will be hooked and easily translated to physical keys (similar to how the chording engine works, but that's for next week!)
Looks cool! How can I help?
Grab a keyboard, clone this repo, and whack any cool dicts you come up with against this organization! And if a GergoPlex or Gergo seems like a neat board, grab one ;)
Next time: Using this methodology to create a composable dictionary for onboard stenography. When a whole language fits on 30 keys, things get fun!
Weird Keyboards, Programmable Keyboards
Hi! My names Germ and I make really tiny and strange keyboards. Currently on a 36 key keyboard! How did this happen?
10 years ago, at my high school I found this behemoth of a keyboard. I didn't know anything about it all I knew is that this thing weighed about 5lbs and was louder then all hell. The worst part is that it even felt really good to use. Of course what we had dug out of the CS closet was a old dusty IBM Model M.


This is the primary interface for z/OS, straight 1980s vibe right? Unsurprisingly this isn't going to play nice with a tiny laptop keyboard. Hell the interface expects PF24 in places! We needed to go bigger, and that's when I bought a old mechanical keyboard off a friend and gave it the 5 minute custom. This managed to get me through Master The Mainframe and even make a neat little react frontend for a Cobol/DB2 database with a JSON API (fun fact JSON GENERATE and JSON PARSE were added a few years ago, and there's even VSCode support for COBOL :) But the main issue was transporting this thing to work, it's not a small board by any means! But with the Windows only software you could do some neat remapping and macroing so I looked into programmable keyboards.
Here's the thing about a keyboard like this, it only takes a few minutes to modify and reflash a layout! Naturally as I found issues and moved stuff about the layout became more personal. Thumbkeys + Layers really change the manner in which a keyboard can be used allowing holding of a thumbkey to entirely change the keys that will be send (and that's only the tip of the iceberg).
But the ErgoDox suffers on massive flaw, the thumb cluster is horrible for the outer thumb keys, half the buttons on the cluster are unusable/reachable and it's got this giant top. Hell, once you get into layering there's way too many keys. Looking for a project this little guy happened.

Intermission:
I ended up making a few different designs while using a Gergo daily, namely the Georgi (stenography writer), ButterStick (20% ortholinear), Ginni (10% Split Ergo) and BuzzSaw (60% keyboard that transforms to a proper ergo with a bunch of snapoff parts). A few of these heavily rely on a custom chording engine that lives on top of QMK, needless to say between writing that engine and trying to learn stenography I learned a bunch about the wonders of chording and how you can really push the notion of what a keyboard is with it.
Chording, for those that don't know is a fancy word for pressing multiple keys to send an action, similar to combos that we know and love. An example of a chord would be IU -> Esc, when I + U are depressed the escape code is sent by the keyboard. Due to the sheer number of combinations available on even a tiny board layouts are highly personalized. A stenographer will have a custom dictionary that is full of their own briefs/snippets that's been crafted over the years and personal. And that's in addition to the entire English language fitting onto 30 keys :)
There is a issue with chording, spring force. With chording you'll sometime push two vertical keys with the same finger (applying force along the edges). A typical key has about 60-70gf of resistance, so a vertical chord is 120-140, and a edge chord (4 keys pushed by one finger such as TSDZ on a steno board) is 240-280! Needless to say that isn't very ergonomic, comfortable or fun. The solution is very light switches. 35gf are the lightest commercial switches you can get (Gateron Clear/Kailh Choc Red Pro), but I take it even further.
12gf springs custom from Korea for Kailh Chocs. Very light typing, and only 24gf/48gf of force required in the very worst scenarios. The downside is that every other board I touch feels extremely hard.
End Intermission
Sadly, while functional those boards are just a bit too much for me. I took the lessons on chording and ran with it, including "User-Hostile Design Principles", there's a bit of a write up over here. In the interest of ergonomics the outer mod column, inner extras and outer thumb 2us were also ripped off. The idea being that you can't hurt yourself on what isn't there. To compensate dotted around the keyboard are a handful of small two-key chords powered by QMKs Combo feature. These are the game-changer for typing/vim/programming. Look at this layout, but most importantly the two finger chords. Think about how this would impact your typical workflow. If you've never seen one of these before it'll look a little dense.
Here's the layout for Gergo:
And this here is GergoPlex
A little complex eh? The symbol/Number layers are controlled by the two thumb keys where your hands naturally rest, Vim style arrow/mouse movement and all modifiers are easily withing reach. The main downside of overloading keys with modifiers is that conflicts arise (For example, Control-A. You must use the opposite control!) but the reduction in motion is worth it. When using this layout the fingers only ever travel 1u from homerow (with the exception of the inner thumb 1u).
The real fun comes with those chords, for many often used keys you never need to leave home row. Take a second and find the following combos and what keys would need to be pressed.
Alt-Tab, Control-Enter, Escape, :wq, Volume Up, Control-Shift-V, The_Quick_Brown_Fox
Now compare how you would do those on a traditional keyboard. How many times a day to you make these motions? That's why GergoPlex is designed in a user hostile way :)
It's been a fun year over here, many new designs have been made and friends been met. Here's hoping 2020 leads to more Input Device shenanigans
P.S. ButterKnife launched today, find it over in the store!
Store Reopen!
I'm pleased to announce I've been crunching orders for the past week and things are starting to get back to normal around here. With the impending launch of ButterKnife I've opened up orders again!
Just like before, any orders that need to be thrown into a bag (Kits, Springs, Books, Caps) will ship immediately. And the banner will now show any expected wait time on new orders.
There's still a few boards left in the queue however (primarily anything with a Gergo, GergoPlex or BuzzSaw) but it's manageable. Expect those to ship out later this week (as always, feel free to ping me for an expected wait time!)
Thanks again for the patience!
Family Emergency + Backlog Mode
Until this gets cleared anything that requires a serious time investment (Partials/Readies, Georgi, ButterStick) are unable to be ordered. I've zeroed out the stocks for these until the queue is cleared. During this time Kits, Springs and Books will still be available for purchase. These orders take minimal time to clear as I'm just shoving stuff into a mailer, hence why they're still available.
Currently there are
Feel free to email me for a estimated timeframe or refunds on outstanding orders. It's been a bumpy year at gBoards finding our feet, but we're trying to be honest and transparent.
Thanks for staying tuned!
Updates:
Queue:
Qlavier // Buttersticks 95% shipped
ButterSticks: 90% shipped
Georgis: 80%
ButterStick Update // Wait Times
Just got back from my trip to a giant pile of mail, including these!
Sorry about how long this entire group buy took. But we're in the homestretch now, assembling and shipping these out pretty quick here.
If you haven't seen it already, check out the photos I archived from Twitter/took myself from the Japan meetup.Some cool stuff! Album 1 Album 2
Also brought back a ton of cool magazines, books and keyboards. Look forward to those going up in the next few days here.
Lastly, the queue! I've got a ton of orders and am clearing them up now. As usual Kits, Springs and anything I can just shove in a bag will ship quickly. Anything that needs assembly (Partials, Readies) will be filled in chronological order. Either way, until I get through this mess use THEGOOSEISLOOSE for 10% off as a apology.
Thanks again and stay tuned!
-- Germ
On GergoPlex (and updates!)
- JLC fucked up the front BuzzSaw silks so those are going back into production. If you can deal with a pure white front side (the Asphalt texture, not the IKEA stuff) shoot me an email and I'll work something out.
- Ginni, FaunchPad, Gergo, and GergoPlex are working just fine. Orders are being filled right now
- Kailh order came on in, Georgis is going out again
- Sprit restock should be next week. Unless it gets stuck at customs for a month again. Fingers crossed.
- Stickers should be coming in soon and be added to all orders :)
u/ataraxy on Reddit pointed out that there were some major differences between the initial post about GergoPlex and what it eventually became. I thought I'd use this post to explain just what went on there.
So the original idea was to make a bigass flight of XanaDocs and make a big cohesive post about ergonomics. Mostly something I could point people to with sources and all that stuff instead of having the same conversation about why using a TKL isn't a good time or how single-board-ortho is worse than row stagger. That never materialized as things got very busy around here with boards and orders. Maybe one day.
Instead, the project turned in a new direction. Every year (assuming gBoards doesn't tank) I'm going to 'fork' the current iteration of the Gergo line and develop it from there. This is NOT to say that Gergo or GergoPlex will disappear, they will still have their revisions and updates. But this process will allow me to push on with what I feel is the next step in the line (and that doesn't mean fewer keys, Ginni is a thing lol)
Anyway, once I finally found time to sit down and design the board itself I realized a few things since the initial conception and after a year of Gergo.
- Having the inner 1us lead to a _ton_ of wrist motion between the mods and the inner columns
- The weakest finger ends up doing a lot of work
- LEDs add no real value and add complexity to a board. I'd rather have lower costing boards instead of a more saleable board.
- My understanding of augmenting layouts with chording (how much is too much) increased a ton.
- Users will undermine themselves
So let's walk through these. The main issue with having the 1us and the outer mods is that it promotes wrist motion. I heavily utilize those inner 1u mods and a side effect of this is that the wrist is constantly pitching back and forth. It doesn't seem like much but over months this can add up. This leads to the main issue with pinkies, they're very weak! The outer 1.5us are almost exclusively used for mods, and there's a ton of work placed on them (as they're not only responsible for the mods but QAZ and even WSX if the hand is shifted to inner 1us!). This in my eyes is unacceptable.
As far as LEDs, I can't expect a user to assemble a bunch of tiny RGB LEDs and debug that. It also adds cost, complexity and requires PCBA services for these boards. A big draw of my boards is that they're a fun way to work on your SMD skills and get a keyboard out of it to boot. This is half of the fun of keyboards, the assembly and debugging process (whether anyone will admit that is another story), by doing PCBA that disappears to just another kit keyboard.
Chording has been the big development of this year. Some of you may remember ErgoTaco, well that's all Ginni is! The difference is that Ginni can be used (not that any sane person would, but you're probably not sane if you're reading this!). Joking aside, there's been a ton of effort and thought put into chording and how that works to augment the typing experience. I believe that this is extremely important to the development of ergonomics, but a line must be walked between understandability, usability, and ergonomics. Go too far into any one of these categories and bad things will happen. Look at stenography, extremely ergonomic and efficient, but it takes years to learn. Georgi tries to take some of that and package it down for us mere mortals to use via a modified QWERTY engine. Everyone can use a 104 with little to no knowledge, but ergonomics and efficiency will take a massive hit. A balance must be made.
-- Germs Law
The smaller a keyboard is, the more ergonomic it becomes but the complexity of the device skyrockets to the point of impracticality.
Lastly, (and most importantly) users will undermine themselves. If you give me a rope, I'll find a way to hang myself with it. This is the design philosophy of GergoPlex: Just don't give the rope. By actively being user-hostile, the user is left to find a way to manage and adapt. Similar to learning to live without a numrow it comes with time and usage. If this seems a little extreme, I'm not stopping running Gergo anytime soon! I've been typing on this GergoPlex all day, and the first 3 hours were mixed with a good amount of mashing my fingers into a desk. Now that I've stopped doing that it's pretty damn comfy!
So that's what lead to GergoPlex, kind of in a weird way. :)
Anyway, thanks for keeping up with me this year, let's see how GergoNext develops! Stay tuned!
-- Germ