From the Ground Up: How I Built the Developer's Dream Keyboard
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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
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 (218.9 KiB) Viewed 5439 times
-
- toptal-blog-image-1421096602814.00.54.jpg (102.8 KiB) Viewed 5439 times
Last edited by mondalaci on 11 Feb 2015, 14:22, edited 1 time in total.
- Muirium
- µ
- Location: Edinburgh, Scotland
- Main keyboard: HHKB Type-S with Bluetooth by Hasu
- Main mouse: Apple Magic Mouse
- Favorite switch: Gotta Try 'Em All
- DT Pro Member: µ
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?
- XMIT
- [ XMIT ]
- Location: Austin, TX area
- Main keyboard: XMIT Hall Effect
- Main mouse: CST L-Trac Trackball
- Favorite switch: XMIT 60g Tactile Hall Effect
- DT Pro Member: 0093
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!
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!
- Halvar
- Location: Baden, DE
- Main keyboard: IBM Model M SSK / Filco MT 2
- Favorite switch: Beam & buckling spring, Monterey, MX Brown
- DT Pro Member: 0051
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.
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.
- aaron
- Location: Germany (Karlsruhe)
- Main keyboard: Noppoo Choc Mini
- Main mouse: Roccat Kova[+], CST
- Favorite switch: MX-Brown mit O-Rings
- DT Pro Member: -
- Contact:
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.
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.
- seebart
- Offtopicthority Instigator
- Location: Germany
- Main keyboard: Rotation
- Main mouse: Steelseries Sensei
- Favorite switch: IBM capacitive buckling spring
- DT Pro Member: 0061
- Contact:
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!
- Spikebolt
- √(4) != -2
- Location: Portugal
- Main keyboard: HHKB2 Pro
- Main mouse: Roccat Kone Xtd
- Favorite switch: Topre (so far)
- DT Pro Member: -
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
The idea is pretty neat, though, the keyboard "clips" together if you want to. That's a pretty smart design.
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
The idea is pretty neat, though, the keyboard "clips" together if you want to. That's a pretty smart design.
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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.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?
- matt3o
- -[°_°]-
- Location: Italy
- Main keyboard: WhiteFox
- Main mouse: Anywhere MX
- Favorite switch: Anything, really
- DT Pro Member: 0030
- Contact:
we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial
- Muirium
- µ
- Location: Edinburgh, Scotland
- Main keyboard: HHKB Type-S with Bluetooth by Hasu
- Main mouse: Apple Magic Mouse
- Favorite switch: Gotta Try 'Em All
- DT Pro Member: µ
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.
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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: ↑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.
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: ↑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.
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: ↑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?
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.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!
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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.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.
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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.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.
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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.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!
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
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.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
The idea is pretty neat, though, the keyboard "clips" together if you want to. That's a pretty smart design.
- mondalaci
- Location: Szeged, Hungary
- Main keyboard: Ultimate Hacking Keyboard
- Main mouse: Logitech M500
- Favorite switch: Cherry MX blue
- DT Pro Member: -
- Contact:
I better do a video tutorial on KiCad eventuallymatt3o wrote: ↑we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial
- matt3o
- -[°_°]-
- Location: Italy
- Main keyboard: WhiteFox
- Main mouse: Anywhere MX
- Favorite switch: Anything, really
- DT Pro Member: 0030
- Contact:
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.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.
- matt3o
- -[°_°]-
- Location: Italy
- Main keyboard: WhiteFox
- Main mouse: Anywhere MX
- Favorite switch: Anything, really
- DT Pro Member: 0030
- Contact:
please do!mondalaci wrote: ↑I better do a video tutorial on KiCad eventuallymatt3o wrote: ↑we actually already covered the UK, what I would really appreciate is a kicad step by step tutorial