From the Ground Up: How I Built the Developer's Dream Keyboard

User avatar
mondalaci

11 Feb 2015, 12:03

Hi guys,

Lately, I've written an article titled From the Ground Up: How I Built the Developer's Dream Keyboard which was featured on the Toptal blog and had a great reception. It's about building the Ultimate Hacking Keyboard step by step, starting with an Arduino. I thought that some of you may find it interesting.

Cheers!
Laci
Attachments
toptal-blog-image-1421096567929.18.31.jpg
toptal-blog-image-1421096567929.18.31.jpg (218.9 KiB) Viewed 5402 times
toptal-blog-image-1421096602814.00.54.jpg
toptal-blog-image-1421096602814.00.54.jpg (102.8 KiB) Viewed 5402 times
Last edited by mondalaci on 11 Feb 2015, 14:22, edited 1 time in total.

User avatar
Muirium
µ

11 Feb 2015, 12:31

Can't say I understand a lick of what the diagram's about. But looks like a 3D printed split ergo with custom PCB and MX switches… and 3D printed caps?

User avatar
XMIT
[ XMIT ]

11 Feb 2015, 13:19

Everything below the "device" line looks sane to me.

I don't understand why (or particularly like that) there must be so much client side state in the form of what is effectively a daemon running in some slow interpreted language. Whatever it offers can likely be handled with software running on the microcontroller and/or a better device driver for the keyboard.

I expect my keyboards to offer almost no latency between a key press and something registering on the screen. How does your software stack promise this? Note that at 144Hz frames are ticking off on the screen every 6.94 milliseconds.

The software features of the agent you describe involve storing a fair amount of client state. What happens to e.g. your key press count when you switch computers?

I like my keyboards as clean and stateless as possible. I've seen just how tiny 64GB microSD cards are. Why I could hide one in a USB cable connector to make a neat little keylogger and most folks wouldn't notice. No sense in being paranoid but keep it simple!

User avatar
Halvar

11 Feb 2015, 14:02

Is the software needed for using the keyboard, or just for configuring it? I understoood that it's only configuration software. I think it's nice to use node for that.

Otherwise, sure, why not, let's see what price you can offer this for. Seperated halves is definitely the way to go for an ergonomic keyboard, and with a good configuration software this might become a really nice keyboard. Nothing revolutionary, but if you can make this a real product for a good price, this could be interesting.

User avatar
Muirium
µ

11 Feb 2015, 14:10

Configuration options for this one include your choice of hip language: Node's yesterday, man, go Go!

User avatar
aaron

11 Feb 2015, 14:12

Nice keyboard layout!
But the Host side is very strange for me. I think I don't want to send all my keystrokes over HTTP to a local daemon which itself communicate with the keyboard itself. This sounds incredible slow. I want my kernel to handle my keystrokes (fast) and my keyboard to handle all the logic (no settings on the host side). I like the TMK Firmware a lot for that.

I work a lot with virtual machines and remote servers at work. I also have two different PCs I switch between with synergy. I absolutely don't want (and can't) set up this Javascript/HTTP environment on all the machines. It also seems a very weak setting for me. What if the daemon crashes? What if I want to configure some stuff in my Bios? What if I need to boot a recovery OS from CD? No keyboard at all :(

EDIT: Ok, I think I've misinterpreted the image, sorry.
Agent is the configurator application that customizes your keyboard to your needs. You can already see the layers of the factory keymap, but numerous, custom, application-specific keymaps can also be created and stored in the on-board memory.
Last edited by aaron on 11 Feb 2015, 14:17, edited 1 time in total.

User avatar
seebart
Offtopicthority Instigator

11 Feb 2015, 14:16

so this is your own personal project? Is the prototype (visually) going to stay the way it is now? It's a very specific design with that middle connector!

User avatar
Spikebolt
√(4) != -2

11 Feb 2015, 14:20

The first part is a typical "dynamic" website architecture. Express.js is used to expose information in a REST api.

Not sure whythis is being used in a keyboard but most likely to expose keyboard configurations as an API. Why it is using web languages to connect with keyboard components is beyond me, there must be faster native ways to do this.... Gotta read his article when I get home :P

The idea is pretty neat, though, the keyboard "clips" together if you want to. That's a pretty smart design.

User avatar
mondalaci

11 Feb 2015, 14:25

Muirium wrote: Can't say I understand a lick of what the diagram's about. But looks like a 3D printed split ergo with custom PCB and MX switches… and 3D printed caps?
I removed the diagram in the meantime because it's not so important and made people falsely assume things. Yes, it's a 3D printed split ergo keyboard featuring MX switches, soon to be kickstarted. Our keycaps are standard DSA keycaps.

User avatar
matt3o
-[°_°]-

11 Feb 2015, 14:30

we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial :)

User avatar
Muirium
µ

11 Feb 2015, 14:43

Has anyone around here actually bought/"backed" much via Kickstarter? I haven't. It's very expensive to do so outside of the US, thanks to our ludicrous and arbitrary import taxes in Europe.

User avatar
mondalaci

11 Feb 2015, 14:46

jsoltren wrote: Everything below the "device" line looks sane to me.

I don't understand why (or particularly like that) there must be so much client side state in the form of what is effectively a daemon running in some slow interpreted language. Whatever it offers can likely be handled with software running on the microcontroller and/or a better device driver for the keyboard.
Actually, node.js is pretty darn fast for an interpreted language. Also, you should only run Agent when configuring the keyboard or if you want to use some fancy features like auto-switching application-specific keymaps. Some of the fancy features like per key keypress counting could save state into the EEPROM regularly but it'd wear off the memory cells over time.
jsoltren wrote: I expect my keyboards to offer almost no latency between a key press and something registering on the screen. How does your software stack promise this? Note that at 144Hz frames are ticking off on the screen every 6.94 milliseconds.
Special control request are fairly intermittent compared to standard polling requests so I don't expect the special features to degrade the responsivity of the keyboard in any ways. Worst case scenario: you could disable the fancy features but again, I don't think they'll impact performance negatively.
jsoltren wrote: The software features of the agent you describe involve storing a fair amount of client state. What happens to e.g. your key press count when you switch computers?
Good question! Cloud storage could be an (optional) approach. Alternatively, this data could be saved into the EEPROM regularly, which again would degrade the EEPROM over time. Not sure about the final approach yet.
jsoltren wrote: I like my keyboards as clean and stateless as possible. I've seen just how tiny 64GB microSD cards are. Why I could hide one in a USB cable connector to make a neat little keylogger and most folks wouldn't notice. No sense in being paranoid but keep it simple!
Sure! Way too much emphasis was given to the architecture diagram (which I just removed but can be found in the referenced article). First up, we're focusing on the basics and move towards advanced features as time permits.

User avatar
mondalaci

11 Feb 2015, 14:49

Halvar wrote: Is the software needed for using the keyboard, or just for configuring it? I understoood that it's only configuration software. I think it's nice to use node for that.

Otherwise, sure, why not, let's see what price you can offer this for. Seperated halves is definitely the way to go for an ergonomic keyboard, and with a good configuration software this might become a really nice keyboard. Nothing revolutionary, but if you can make this a real product for a good price, this could be interesting.
Agent is only needed for configuration purposes and for some optional, fancy features like key wear heat map and such. All the configuration information is saved into the EEPROM of the keyboard.

User avatar
mondalaci

11 Feb 2015, 14:53

aaron wrote: Nice keyboard layout!
But the Host side is very strange for me. I think I don't want to send all my keystrokes over HTTP to a local daemon which itself communicate with the keyboard itself. This sounds incredible slow. I want my kernel to handle my keystrokes (fast) and my keyboard to handle all the logic (no settings on the host side). I like the TMK Firmware a lot for that.

I work a lot with virtual machines and remote servers at work. I also have two different PCs I switch between with synergy. I absolutely don't want (and can't) set up this Javascript/HTTP environment on all the machines. It also seems a very weak setting for me. What if the daemon crashes? What if I want to configure some stuff in my Bios? What if I need to boot a recovery OS from CD? No keyboard at all :(

EDIT: Ok, I think I've misinterpreted the image, sorry.
Agent is the configurator application that customizes your keyboard to your needs. You can already see the layers of the factory keymap, but numerous, custom, application-specific keymaps can also be created and stored in the on-board memory.
You don't have to set up a HTTP server or anything like that. All the settings get saved into the on-board memory of the keyboard and you only need Agent if you want to configure the keyboard or want to do something fancy. Also, the keyboard uses standard USB control requests and works with any OS without special device drivers.

User avatar
mondalaci

11 Feb 2015, 14:56

seebart wrote: so this is your own personal project? Is the prototype (visually) going to stay the way it is now? It's a very specific design with that middle connector!
I'm the lead developer but I'm not doing this alone. Luckily we have a small team. Yes, the prototype will stay the same visually. If you take a look at our website you'll have an very good idea about how the final product will look like. Only very subtle changes are to be expected.

User avatar
mondalaci

11 Feb 2015, 14:59

Spikebolt wrote: The first part is a typical "dynamic" website architecture. Express.js is used to expose information in a REST api.

Not sure whythis is being used in a keyboard but most likely to expose keyboard configurations as an API. Why it is using web languages to connect with keyboard components is beyond me, there must be faster native ways to do this.... Gotta read his article when I get home :P

The idea is pretty neat, though, the keyboard "clips" together if you want to. That's a pretty smart design.
You're totally right that it'll be possible to expose configuration state and advanced featuers via an API. Native ways usually also mean platform specific ways. We could do this a number of ways but the current approach is fairly simple, clean, fast enough and cross-platform.

User avatar
mondalaci

11 Feb 2015, 15:00

matt3o wrote: we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial :)
I better do a video tutorial on KiCad eventually :)

User avatar
matt3o
-[°_°]-

11 Feb 2015, 15:17

Muirium wrote: Has anyone around here actually bought/"backed" much via Kickstarter? I haven't. It's very expensive to do so outside of the US, thanks to our ludicrous and arbitrary import taxes in Europe.
I backed a couple of projects. Never went as expected. Not participating in those buys anymore. I eventually buy the thing when it is released.

User avatar
matt3o
-[°_°]-

11 Feb 2015, 15:17

mondalaci wrote:
matt3o wrote: we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial :)
I better do a video tutorial on KiCad eventually :)
please do!

Post Reply

Return to “Keyboards”