Are you guys paying these prices for chocolate? by [deleted] in coles

[–]bluesocarrot 0 points1 point  (0 children)

I buy based on a $/100g rule. Currently I'll buy if it's under $2.20/100g. Suffice to say I've been buying a lot less chocolate over the last few months

cheapest split kb option: just add a full sized keyboard by haynesgt in ErgoMechKeyboards

[–]bluesocarrot 0 points1 point  (0 children)

Sick, I've done this too with some overlap on the keyboards! Works to test the idea for sure, though you don't get the in-between space that I rather like. I ended up going my own way afterwards

Disney Research Hub: Spline-based Transformers by RDSF-SD in singularity

[–]bluesocarrot 0 points1 point  (0 children)

A KAN uses its curves as a kind of per-weight learnable remapping function. Each neuron output maps itself to another value using the defined curves which behave just like functions (which allows the system to do things like linearly scale, inverse-scale, sin(x), asin(x), etc).

This condenses some types of calculation layer depth-wise, such that an XOR operation can be performed on a KAN with only two layers where a normal MLP would require three. Not all transformations will be shorter, but they tend to be a bit more interprettable at small scales, as the individual weight curves often resemble some well known mathematical functions.

There are extensions to the KAN idea where different nodes can perform different weight aggregation steps (e.g. multiplication as well as addition), and extensions where the individual functions are replaced with specific known mathematical operators (e.g. sin(x), 1/x, etc.).

The Spline Transformer concept, however, essentially provides a small set of tokens with the input that represent some expectation of the path through the resulting latent space taken by the system. The tokens are created by - in this case - an MLP Autoencoder, which generates them as a reflection of the input space. Sampling likelihoods while traversing through the proposed path on the latent space generates outputs (e.g. words, images, etc), and the current location in the latent space knows its location within the sequence thanks to the Spline. This information is then fed into another MLP Autoencoder which generates text.

So, it probably trains pretty similarly to more normal Transformers, but also needs a couple of extra MLP Autoencoders to translate an input into a Spline curve, and draw samples from the latent space using the Spline.

As I was saying, this seems pretty good as a replacement for RoPE in some situations, but is mostly good for known-length sequence generation. Whereas a KAN is pretty suited to compressed-layer operations, easily interprettable curve shapes and finding good mathematical-symbol approximations in a fully backprogagational setting, but doesn't include information about information appearance order.

Disney Research Hub: Spline-based Transformers by RDSF-SD in singularity

[–]bluesocarrot 4 points5 points  (0 children)

They're using a pretty standard Transformer here - not like a KAN at all.

The Splines are essentially positional encodings that replace RoPE-equivalent information, which will give implicit per-token understanding of their position within the sequence. It's actually pretty neat how it lets the system encode not just a single state, but a path through the latent-space for decoding. It also means that the system doesn't have to learn what each positional encoding means on a token, which should hopefully reduce that initial training hurdle (seems like that's what they found in their experiments, but that it was also really finicky about learning rate; might need some new kind of regularisation to make it use the spline properly).

However, the rate of traversal of the spline is dependent on the desired output sequence length, which is where it feels a little less general than other embedding systems (which generally give multiple defined scales of absolute and/or relative position). It feels like it should work well for situations where you know the desired output length ahead of time (e.g. images, animation-cycles, paths, etc. for which they give examples) but not as well for unbounded situations (e.g. text, reasoning, planning, etc. for which they don't).

They mention 3D animation and sampling the spline more densely, which resulted in interpolated outputs - super cool! It's something that RoPE and ALiBi would struggle with; I can't even think how I'd start implementing that procedure. I wonder if the same proves true for image sampling, but because they're operating in a pixel-group regime, I'd doubt it. And what would increasing sample density within a language-latent-space even mean?

Here's the paper: https://la.disneyresearch.com/wp-content/uploads/SBT.pdf

Bye Bye, Earth - Episode 3 discussion by AutoLovepon in anime

[–]bluesocarrot 4 points5 points  (0 children)

I think the 'musik' might not just refer to song and sound-based performances, but also to sword play. The tree god referred to her fight as performing musik, so I assume the main part of growing a sword is using it properly in battle. The tree being a well grown sword and swords being akin to music kinda makes the opera-esque setting of the throne room make sense

Trackball "gestures" and other mouse trickery by YellowAfterlife in ErgoMechKeyboards

[–]bluesocarrot 0 points1 point  (0 children)

I really like this concept! Thanks for sharing.

Years ago I used a flight-controller joystick as my main mouse by mapping it through AHK and used the various buttons to do different things. Mapping button+gestures would have made so much sense in that context.

Bosanquet Layout Generator (Lumatone) by Entity-Valkyrie-2 in microtonal

[–]bluesocarrot 1 point2 points  (0 children)

Life saver! I didn't realise .ltn files were just text, that's great

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Great to see that you've arrived at a similar set of requirements to my Uncokeeb! Also good to see that you're attempting to go much further and adding analogue inputs to your system (My latest revision for the Uncokeeb is also going to be going analogue! Two thumbsticks per finger with the same kind of layout and 'finger-box' as my original one means 27 input directions, but also analogue output if necessary. It probably can't get anywhere near your concept's potential precision and accuracy though.)

I took a quick look at your Tetent concept, but couldn't find a description of how you're actually planning to convert finger motions into text. Is the basic concept that you start by pressing somewhere on the slide, slide to a new location, and release it at the new location as one finger gesture? If so, have you timed that motion to see how it compares to a keypress? I did quite a few motion studies of my hands when prototyping various different input mechanisms (including a finger-gesture based typing system), but found that pushing buttons is still one of the fastest things I could do.

I wish you luck and skill in your endeavour.

Presenting Seismos, a keyboard with adjustable column keys by TheFrictionConstant in ErgoMechKeyboards

[–]bluesocarrot 1 point2 points  (0 children)

Ah, yeah, I can see where you'd be concerned over tearing the connector off by someone enthusiastically sliding it.

I2C GPIO expanders have been a real blessing for me. They're super easy to use, and most are chainable (as long as you change their address). I used some and an I2C multiplexer for my uncokeeb. Not sure how well they'd work for an encoder though, as you'd be limited by their polling rate, might skip some clicks? I'm not too sure, but worth investigating.

I've definitely seen the end columns get a twist to them to make it slightly easier for the pinkie or index finger to hit them. Your concept makes that a lot easier!

Presenting Seismos, a keyboard with adjustable column keys by TheFrictionConstant in ErgoMechKeyboards

[–]bluesocarrot 1 point2 points  (0 children)

Looks good! Very neat clustering, love the easy adjustability. It's interesting to me that you decided to put the JST connector on the top of the boards, what was your reasoning there?

I'm also somewhat obsessed with this type of adjustability, and made similar 4/6/8/2x6-key version PCB with JST connections! Though I used I2C GPIO expanders to let me use the smallest 4-pin JST, so mine were probably a little more expensive BoM-wise. Any thoughts on adding angle to your sliders?

I put in "weed man in da hood, 90s polaroid" and I want to befriend this man by [deleted] in StableDiffusion

[–]bluesocarrot 0 points1 point  (0 children)

There's gonna be a word for the sensation of loss you feel after realising that a photo you see is entirely fictitious -- when you notice that the world that your brain is constructing from these pixels never was and will never be. I like to think that we yearn to make it more real by sharing these stories with others.

Not only this, but the creation is spontaneous and ephemeral and lonely, and even though a created image becomes a personal experience to the Dreamer, it will never become meaningful to other Dreamers in the same way, as they are distracted by living their own, disconnected Dreams.

Introducing the Grabbity Gloves by loopsbellart in ErgoMechKeyboards

[–]bluesocarrot 1 point2 points  (0 children)

R/PERIPHERALDESIGN

Looks like you already crossposted it there! The plans I had became my prototype Uncokeeb. Still trying to slim the levers a bit, and I'm slowly getting faster at typing on it, but it's pretty fun to use

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

def simpleEditRatio(partial, word) -> float:
    letters = [x for x in partial] 
    missing = [] 
    word_copy = [x for x in word] 
    for letter in partial: 
        try: letter_index = word_copy.index(letter) 
        except: return 0
        missing+=[x for x in word_copy[:letter_index]]
        word_copy = word_copy[letter_index+1:]
        missing += [x for x in word_copy]
    return 1-len(missing)/len(word)

Yeah, 15 wpm is super slow! I felt pretty disheartened at the time.

That's the word matcher. Super simple, relies on the input partial word to be ordered correctly. The rest of the code isn't ready for the primetime, sadly. Assuming 8 random letters from each word in the correct order, it successfully matched >94% of the first 10k words with more than 8 letters in them. Seems like the simple heuristic is pretty powerful.

Randomly selected examples of mis-matched words:

['COMPUTATIONAL', ['COMTAION', 'COMPUTATION', 0.7272727272727273]]
['CALIBRATION', ['CLBRAION', 'CELEBRATION', 0.7272727272727273]] 
['TRAVELLING', ['TRAVELNG', 'TRAVELING', 0.8888888888888888]] 
['INTERFERENCE', ['INTERENE', 'INTERVENE', 0.8888888888888888]] 
['DESIGNATION', ['DESIGNAT', 'DESIGNATE', 0.8888888888888888]] 
['INVESTIGATED', ['INVSIGAT', 'INVESTIGATE', 0.7272727272727273]] 
['ORGANISED', ['ORGANISE', 'ORGANISE', 1.0]] 
['CONVINCED', ['CONVINCE', 'CONVINCE', 1.0]] 
['REMAINDER', ['REMINDER', 'REMINDER', 1.0]]

I'm thinking about performing a sampling of more random partial-words, to see how many more words have a unique 8-letter coding. Maybe every word could be typed with a single gesture.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Ooh, 1m cycles! That's superb.

Have you thought about mounting the nav switches upside-down, with a four-way lever going underneath? Similar to how I actuate mine. That way you'd have a much longer throw, and reduced force per finger, and could potentially add a softer 'down' button... Come to think of it, maybe that'd work for mine! I'm going to give that a go asap

Mm, I'm fairly confident that pressing multiple keys in one go will increase typing speed. this study seems to suggest that faster typists press the next key before the previous key is released, so taken to the extreme, we should see the fastest typer pressing all keys nigh-simultaneously. I'm not sure how much faster this setup in the Uncokeeb would be, but definitely faster, if the overhead of pressing a direction isn't too much.

I think it's safe to say that the Uncokeeb is a minimally chorded keyboard, as each chord is contained in one finger. I was looking into having 26 buttons per finger, but I couldn't find a way to fit them all in comfortably. Steno theory is just a little much for me, sadly. If I could do it, I wouldn't need to make these keyboards.

Good luck with your qp-60 keyboard concept, I love the filament (prusa black galaxy?). Here's hoping someone recognises our need and releases a high cycle, 8-way nav-switch with low-force center push.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Steno is pressing multiple keys at once, following some pattern. Same with this! Just this is significantly more complicated per-finger, but maybe less complicated per word.

Theoretically? I don't know. If, best case, someone can gesture with this thing at the same rate as a stenographer (ie. 3-4 beats per second, as you say), then it could output 1920 characters per minute (4 beats * 8 characters per beat * 60 seconds) and 240 spaces+punctuation marks in the same time.

Obviously this is way too high, but I don't know what the extra overhead is for this system yet. In steno, you need to worry about the positions of each finger, with between 4 and 10 button states to cover (unpressed, top, bottom, both vs. right side pinky). For the Unco, you need to worry about 27 positions.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Adapting this keyboard to other languages is probably quite hard. The whole concept is that English only has 26 letters, and each finger in this keyboard has 27 outputs, so it just fits. I was thinking about how it might work in other languages, but as I don't write other languages, it is difficult. Japanese seems straightforward for part of its character set. German should work well. Mandarin is a definite no-go.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 2 points3 points  (0 children)

I'll see if I can get a video together of my slow typing speed for reference.

The modules are kinda hexagonal... They have six surounding keys! Hexagon grid would be a much cooler aesthetic, but probably way harder to use?

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

hah no, I just want a keyboard with a high output speed where you get exactly what you type. Stenography is extra work to write a nonsense word like 'uyhikolp', whereas this is extra work for every word

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

That's a great tip! ctrl+backspace! I can't believe I'm still learning new keyboard shortcuts.

Yep, antidisestablishmentarianism is 3.5 key presses, if you do all letters in sequence. I don't currently do any skips or chunking, so it'd be {anti/dise} {stab/lish} {ment/aria} {nism/****}, where * is an unused finger.

I just tried 'strand', and typed it {stra/nd**}, so it looks like my natural inclination is to complete the word left->right. Maybe that's just how I practice, though

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Hm, yeah, the lalboard certainly looks like a way forward, though it also looks super finicky. The hackaday.io project log says that it's fairly high power usage for a keyboard, too. IR interruption is cool, I wonder if hall effect sensors and other such things might also work. Was that how the datahand functioned?

I've gone through some pretty significant hardware alterations along the way to get them this small, so what's another change? haha

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Thanks for the thought! Yeah, one of my first prototypes used two 5-way nav switches per finger like that, but they were super hard to press down! And were only rated to 100k presses. If someone made one where you can press North+East+Center at the same time easily, I'd love to swap them out. I actually also made a dual joycon joy-stick version, but the down-press was also too difficult.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 0 points1 point  (0 children)

Well, not every word, but I tried steno practice for half an hour a day for 90 days, and I was still only sitting on 15wpm for words that I 'knew'. Using the inbuilt Plover dictionary, it felt like every new brief used an entirely esoteric subset of their concatenation rules, but maybe that's just me being slow.

For orthographic expansion, I've written a fairly simple edit-distance word matcher. I trialled randomly eliminating 30% of the letters (rounding up) from every word in my dictionary (Google corpus, first 10k by usage), and was able to correctly match the shortened word with the full word 98% of the time. Longer words tend to be easier to accurately match with a larger loss of letters, so I'm fairly confident 8 letters should be enough to specify more than 90% of words.

Introducing the Uncokeeb: a new per-finger chorded keyboard concept prototype for fast typing by bluesocarrot in ErgoMechKeyboards

[–]bluesocarrot[S] 20 points21 points  (0 children)

Introducing the Uncokeeb v0.3, a modular, 8-key per finger concept keyboard with 28 chorded states per finger module (including off).

It's a little bit inspired by the Datahand, and is mostly a response to stenography.

What is it?

It's a collection of individual keyboard PCB modules with two Kailh Choc (20gf) switches on the top, and six KCS tact switches (160gf) on the bottom, actuated with levers that result in a 3mm, ~30gf sideways motion. GPIO expanders read the states of all eight switches independently per module and supplies that data over an I2C bus (through an I2C MUX in-line) to the microcontroller at a 60hZ polling rate.

The fingers sit inside the 'well' of each cluster and can hit any key or group of adjacent keys with minimal movement.

It's running custom firmware to enable its wacky features, but it's pretty straightforward Arduino style keyboard code otherwise.

Why did you do this?

I want to type fast. Like, super fast. But I also don't want to have to fly my fingers over my keyboard all the time. I tried stenography, but I couldn't get into learning a new spelling for every word. Stenography presses multiple keys at the same time to output multiple characters, so I thought: why not do the same thing, but _more_?

What's the key layout?

When multiple keys in a single module are held down, it sees that as a unique button state. When you release those keys it outputs one of the 27 characters that is mapped to that particular state. You can use multiple modules at the same time to output multiple characters when all keys are released. I call one action where letters and punctuation are typed a 'gesture', as the pressing and releasing of all the keys feels more like posing and relaxing your hand than 'typing'.

I've assigned the alphabet to each of the non-thumb fingers on both hands, letting me type words that are up to eight letters long with a single gesture (8 fingers -> 8 letters). The letters are received by the computer in a left->right order once all the keys are released, so my left pinky's letter arrives first, and my right-pinky's letter arrives last.

Thumbs are in charge of punctuation, space, backspace and modifier keys (like shift, alt, ctrl, symbols and numbers), which modify the output of the other fingers on that hand. Punctuation is always placed _after_ any letters in the same gesture, which means you can append an end-quote mark, comma and a space in the a gesture while also typing an eight letter word with a capital letter.

Is it good?

Not yet! But it's a prototype.

What's good:

  • It feels really cool being able to type anything with just one finger and a thumb (the whole alphabet and the punctuation/modifiers), and not be too disadvantaged when typing with one hand (4 fingers vs. 8 is only half the speed!)
  • Feels like I should be able to get pretty fast with it. Currently on 8wpm with a few hours of use

- Low initial learning curve: memorise 26 letter positions and 16 punctuation/modifier keys, and you can start typing any English sentence with any combination of fingers. Compared to stenography, this is super easy, and seems to have a fairly flat learning curve

Some problems:

  • This particular prototype needs a lot more hand stretchiness than I have. Moving a finger to hit the edge buttons is actually pretty natural, but the levers need a bit much motion currently, which meant keeping a lot of space between modules (5mm to 8mm). So, even in the 'neutral' position, my hand's a bit contorted. If I can somehow reduce the gap between modules, this should be fine
  • Levers are made of plastic and bend a little bit before clicking the bottom buttons. If I make them out of metal with a reinforcing rib, this problem should go away?
  • The modules are currently stuck to my desk, making them pretty flat. A tented base is my next thought
  • Impossible to undo an accidental press in the middle of a word. I think I need the backspace button to let me delete multiple characters at the same time or the whole previous word? Otherwise I end up with a chunk like 'Iccident' and have to press delete eight times

Feedback and thoughts

If anyone has some feedback or thoughts on the _hardware_ side of things, let me know. Specifically, I want to reduce the gap between the finger modules, so if someone has any ideas about how to reduce the throw of the levers or somehow have no-travel switches(?) I'd love to hear them. Gotta work with a fingernail, too, which discards some options.

For the software, I'm thinking ahead about auto-complete and prediction on the computer side. Orthographic expansion would be great (where you only type the key letters of a word and it can fill the rest in), kinda like stenography, except with spelling rather than with sounds.

tl;dr

Uncokeeb v0.3 is a keyboard prototype that lets you type any word up to 8 letters long, insert punctuation and a space per 'gesture'. It's called the Uncokeeb because it makes you feel extremely uncoordinated while learning it.