I've been using this for about a year now - I parsed 6 months of my messages on slack and found the most common phrases I use and generated keyboard shortcuts for them.
However, I realize that I would never want to use something like this that would change over time. E.g. if I ran it every 6 months and last year "db" produced "debug", while this year it produces "database". Because talk about messing up my muscle memory and habits. And the language I write changes very much over time.
So I'd actually be much more interested in a "universal" version of this -- if you ran it across books and e-mails and text messages from thousands of authors covering diverse backgrounds and contexts, then what would most reliably help everyone?
E.g. expanding "t" to "the" seems like a no-brainer, just like "st" to "something". Is there a minimal set of, say, 200-500 of these that could simply be turned into a "standard keyboard" that everyone could learn?
> E.g. expanding "t" to "the" seems like a no-brainer, just like "st" to "something". Is there a minimal set of, say, 200-500 of these that could simply be turned into a "standard keyboard" that everyone could learn?
Take a look at Evans Basic English Code, a shorthand system based off of Phillips Code (for telegraphs). It's a little dated, but the most common words are quite useful for writing or typing.
I appreciate the fact that it contains shortcuts for such words as "endeavour" (EDV), "ecclesiastic" (EC), "notwithstanding" (NWG) or "vehemence" (VMC) being a dictionary of the "basic and most frequently used words". Also, the suggested abbreviation for "sex" is "SEX".
Yup, it doesn't run automatically for exactly this reason. It outputs "suggested_shortcuts.yaml" and I can copy and paste from that into "shortcuts.yaml" so I have manual control over which shortcuts are live :)
This is good I can imagine all of the embarrassing auto typing. It is the reason I hate Android phones. I will be typing and it will try to predict what I am writing. Some of it not sure what data it is built on came out hilarious or down right inappropriate. Not like swears or vulgar just the punch of the expressions.
There are different stenography systems, each with their own shortcuts and abbreviations, but at core they're all about producing large volumes of text with minimal physical effort at very high speeds.
A good mechanical keyboard (e.g. the ErgoDox EZ) and Plover mean the only thing standing between you and >200 WPM typing is the time and effort to learn it.
I hit this invisible wall at about 165 WPM that I can't just get beyond, and it kills me. I wonder how fast I could get with stenography... I see dem 400 WPM videos and they look awesome.
Curious what kind of work you are doing where WPM is a limiting factor. I’m in software, like a lot of people here, so being able to type in speed is rarely the limiting factor. Besides stenographers, the only other line of work off the top of my head that needs this kind of speed are people who are paid to write subtitles for TV shows and movies in another language. Which I guess is just another form of stenography, when you unwrap it.
Or is it not for work and it’s just purely to see how fast you can type?
Typing fast is one of the greatest strengths for programming for me personally, especially when compared with Vim. It's that that it's a limiting factor, but rather I max out typing quite often, and also I have always wanted to hit 200 just for fun, but it currently feels not attainable.
Some people say they spend more time than they do typing, but I definitely don't find that to be the case very often.
I am a bit jealous (maybe?) that typing speed is a factor for you. I am the kind of person that will think for minutes at a time before writing a single line of code
It's definitely situation dependent. When writing a lot of frontend code (vue, typescript, css, tailwind, html) I know what I'm typing several mental steps before I actually type it, so speed gains there are most pronounced.
Sitting somewhere in the middle are dynamic languages where there might be certain implementations (say... some random api integration) where it's simply a lot of code I've typed thousands of times before. This still benefits from fast typing, especially when needing to operate surgically with vim, it's one of the moments I love the most (basically getting 20x combos with perfect typing at high speed when moving/modifying/transforming blocks of text etc etc)
What benefits least of the 3 is writing things like Golang where it still definitely helps typing fast, don't get me wrong, but I usually have to think more there. Pace is slower, and symbols can become a pain in the ass.
At the end of the day... you're still typing thousands of lines of code regardless of whether you're thinking or not. I never understood the argument "I spend more time thinking than coding". You are still going to write the same amount of code whether you're thinking or not. My ideal world (why I love typing fast) is that that time of me coding gets brought down by 50-200% over someone who types slow. I use that time for accelerating ahead. Ie... prototyping and deleting tons of code before refining/cementing in a design is painless.
> I never understood the argument "I spend more time thinking than coding". You are still going to write the same amount of code whether you're thinking or not.
The argument is that time spent typing is insignificant compared to time spent thinking, so optimizing for WPM seems like a less relevant endeavor.
So if you spend (say) 1 day thinking about the problem and 1 hour typing, it matters little if you can speed up your typing by 50% or whatever: you still spend the bulk of your day thinking, and optimizing typing speed is not going to change your deadlines.
It sometimes seems people fetishize typing speed because that's easier to get better at (and measure), while there are no shortcuts for thinking "better".
Typing is bursty. You don’t type much usually, but sometimes there’s a lot of it. Effortless typing minimizes interruptions and allows to stay in the zone for longer. It isn’t just about the time spent typing, it’s about typing at the speed of thought so you don’t switch contexts from thinking to typing.
Typing is bursty, agreed. I'm not saying someone who is an extremely slow hunt-and-pecker is ideal.
What I'm saying is that, past an average typing speed, obsessing over WPM gets you diminishing returns, because that's not where the bottleneck is. You should rather spend time improving other aspects of your process, but of course, "thinking better/smarter" is harder to improve.
For the record, I never measured WPM but I'm mostly a fast 2-fingers typist. All keys are typed with my index fingers, and the spacebar with the thumb and some of the special (shift, CTRL, etc) keys with some other finger.
I will lose every competition with a WPM-focused typist, but I can guarantee you my effective tasks -- the actual job we're meant to complete -- will not take me longer, unless said job is transcribing a document (which is never my job).
If you are a 2 finger typist and also think people are "obsessing over WPM" because they're wanting to utilize their own tools to the fullest advantage, that sounds like some mental block kind of thing.
If you can type at least 80 consistently then thats probably would I imagine the dividing line is between "flow/concentration not breaking" and "breaks constantly"
> If you are a 2 finger typist and also think people are "obsessing over WPM" because they're wanting to utilize their own tools to the fullest advantage, that sounds like some mental block kind of thing.
I get frustrated by this kind of replies on HN.
Please don't try to "fix" me. I'm telling you my WPM are not limiting, because -- like almost ALL coders and engineers -- I spend most of my time elsewhere, and that 2-fingers is fast enough. I will not solve a Data Engineering problem by typing fast.
I probably type faster with 2 fingers than you. Maybe not, but I've seen me "win" over people who type with all fingers, and that's good enough for me.
I'm not trying to fix it, just engaging in a dialog, and I said it "sounds like", because your first thought when reading about people using their tools effectively is that they're "obsessing" about it. A lot of people care greatly about efficiency (me), and having someone who can't actually type fast or seem to care about efficiency then tells you you're obsessing about it seems like the hallmark "I cant do X thing so I will criticize it instead"
Are you at least over 60 WPM? I think I said in another comment that I think 60 WPM is probably the lowest I can imagine not constantly breaking your focus while trying to hold ideas in your mind, especially if you do data engineering and youre going multiple layers deep.
I can guarantee you it's not a case of "I can't do this, so I'll criticize it". I'm actually a decent 2-finger typist, and this has never limited me when troubleshooting a problem or designing a solution. Engineering problems are seldom solved by typing really fast.
I'm fine with you improving your WPM, I just don't think it's a worthwhile endeavor -- it's not making you more efficient where it matters. Likewise, I could improve my WPM, this is not rocket science and anyone can do it with training. It's not even hard training.
But why? I could also train to run faster, but would it help me do my job better?
edit: out of curiosity, and this proves nothing either way, I tried your monkeytype link and got 90 WPM with 97% ACC.
Are you sure about that? I trust you if you are truly, TRULY sure...
Imagine you had a tool similar to those ChatGPT IDE auto-complete plugins, except instead of doing chat GPT it typed what was in your mind.
Imagine you start work in the morning, and there is a 0ms response time from what you think, and huge blocks of code would appear instantly.
Is your work such that you TRULY only type 300 words per day? Or, do you also... write tests, write boilerplate, write for loops you've written thousands of times, write and read files, call/build APIs, write command line tools.
If you can imagine some kind of "instant feedback" typing thing quite literally not improving your quality of life whatsoever, then I guess you are just in a rare boat. I can't visualize any circumstance where 80WPM typing would not benefit them, but I suppose there might be a world of developers out there who truly live in a vaccuum like one of my other comments said... they just come in to work, dont communicate with anyone, dont write anything other than a 50 line file with a few hundred words in it, and leave after 8 hours)
> Are you sure about that? I trust you if you are truly, TRULY sure...
Yes, I'm sure. Isn't this what I'm saying?
Are you sure running faster wouldn't improve your engineering job?
> Imagine you had a tool similar to those ChatGPT IDE auto-complete plugins, except instead of doing chat GPT it typed what was in your mind.
I use ChatGPT on occasion. I spend way more time trying to frame the question and understanding whether what ChatGPT spewed out makes sense than actually typing the question.
> Is your work such that you TRULY only type 300 words per day? Or, do you also... write tests, write boilerplate, write for loops you've written thousands of times, write and read files, call/build APIs, write command line tools.
I've spent more time typing words in this thread with you than I'll write the rest of the day for my job.
(If you find yourself writing lots of boilerplate, may I suggest that may be a real place to focus on improving, rather than on how fast you can type boilerplate?)
The only other place where I'll spend time typing is in chat. Let me assure you my typing speed is more than enough there too, and I really don't want stream of consciousness typing in my job chat -- that would get me fired fast. And for social typing, how much speed do you truly need to type "hey, what's for lunch?" or "hey, did you read this news? <link>".
Yes I don't mean literally chatGPT, thats why I said "except it would type from your mind" to eliminate the focus on chatGPT being wrong.
Alright I concede if that's really your use case. I wrote in another comment but I manage 3 separate companies that I started, and I'm the single developer on all of them, and I do everything on them (frontend, backend, infrastructure, data architecture/analysis, etc). So it's definitely not true for me. I have enough experience with my friends working at companies though to know they STILL would benefit, but it sounds like you escape this characterization somehow, so I believe you.
I spend over 10+ hours a day typing at the computer, across slack, writing specs, writing code, etc. So really I suppose in my mind I don't live in a vaccuum.
I don't fetishize it at all, in my mind it is a simple objective fact that I actually experience myself. Fast typing is up there with Vim as one of the literal most productive things I have ever done, with the 3rd being memorizing hundreds if not thousands of OS/app hotkeys.
Writing specs is a key bit here that I'd generalize as: I think by typing. The hardest problems I troubleshoot are worked through with best quality if I am typing up a worklog of stuff tried, rather than taking no notes at all. And like mentioned in other comments, the effort of typing these notes is a limiting factor on the quality of my notes (too much time spent typing slows the troubleshooting iteration loop).
It is either an objective fact, or something you experience, but it cannot be both. Having said it, have you actually measured how much time you spend typing, to claim a huge boost in productivity? Developers very often overstate the amount they type p.d.
I can imagine, that going from pecking on keyboard to 10 fingers is actually huge - it is just a bump disappearing. But going from 80 wpm to 160 should have diminishing returns, even more so going from 160 to 320 - here, the Pareto principle should kick in.
I was saying an "objective fact" for me, not globally. I was responding to the idea of "fetishizing" WPM when I'm saying, no, with 100% certainty, WPM is extremely beneficial to me with no grey area.
Also I did say in another comment 80 WPM would be where I'd put the barrier of not having to constantly break mental focus. BUT ALSO.. I'll take this a step further...
Have you ever gone from a 60hz monitor to 120?
Have you gone from non retina iphone to retina or remember that?
Have you gone from 32gb to 96gb in your computer and noticed things open THAT much faster?
Have you ever optimized something like the load speed of your terminal and removed 200ms from its boot time?
Now could you imagine ever going back after doing any of those things?
To me, thats what its like beyond 80. I can't imagine having to go back to 80 after I've felt 160. It's just THAT much more freeing when I'm really really deep in thought. quite literally I can type as fast as I can think, and it becomes truly seemless, like "programming in lisp" when the language gets out of the way (I dont program in lisp regularly, just seems like a good analogy)
Counterpoint: the best engineers I've worked with had beat up, old crappy laptops with low res screens.
I'm thinking of 2-3 guys I really admire, and they had this in common: when asked "but don't you need the latest Mac with a retina screen!?" they looked puzzled. Like, the common answer was, give or take: "yeah, I guess, if there's one to spare, but don't other people need it more? I do most of my thinking away from the screen anyway, and I run my stuff on a server".
The fetishization of hardware is yet another thing that puzzles me. Yeah, better hardware makes our lives easier and nobody will deny that, but (barring some obvious stuff like "this will take 1 hour to run vs 1 week") does it really impact how effective you are at completing tasks in your job? To some degree it does, but programmers tend to overemphasize it because it's easier to obsess about getting better hardware than about solving harder problems ;)
For me? Yes it does, and I'm not fetishizing hardware, etc. In my mind, it's very "this is the way it is"
I'm a single developer/entrepreneur who as put dozens of products to market single handedly, and a number of them have done really well (some getting over 10M/yr another getting much higher than that). Right now I'm managing 3 full time... and Some days I code upwards of 15+ hours a day when building.
So basically efficiency is important to me. I literally am doing the job of like 3-4 developers at once (I do all design, frontend, backend, data analysis, reporting, infrastructure, etc).
"yeah, I guess, if there's one to spare, but don't other people need it more? I do most of my thinking away from the screen anyway, and I run my stuff on a server"
This just sounds like a mopey slow answer, sorry. I'm not hating on what they're saying but I'm not going to intentionally make my life slower/worse because of some disjointed idea that doesn't make sense. "Someone else needs it" sounds like fake ... modesty or something. MOST of my time is spent thinking in the shower, in my sleep, or with a physical pencial/notebook in my hand where I architect things. That doesnt mean the hours upon hours .... 30,000+ hours at this point in my life, that I've been on the computer actually building that I'm not going to use the very best tools at my disposal.
When people constantly call nice things "fetishizing" it sounds to me they're just different kinds of thinkers, more like scientists or objective experience-driven, domain-knowledge heavy type programmers. I'm not like that, I'm more about pattern recognition when information is missing, and filling in the gaps and moving quickly/efficiently/elegantly, and design and aesthetics are extremely critical to me. Elegantly designed/efficient code is extremely important to me, just as much as an efficient workflow.
You could call it "being creative" or whatever you want, but those things are very important to me as they all feed into my mind as fuel... into this giant arc reactor of mental substrate, and I look through this kaleidescope connections and I refine refine refine go go go.
> This just sounds like a mopey slow answer, sorry. I'm not hating on what they're saying but I'm not going to intentionally make my life slower/worse because of some disjointed idea that doesn't make sense. "Someone else needs it" sounds like fake ... modesty or something.
Well, you'll have to take my word for it: these people I'm describing are brilliant and accomplished engineers who advanced lots of projects in their jobs, and taught me a lot. I saw what they did. I saw them troubleshoot hard engineering problems, and solve them. This is not hearsay, I saw them at work.
I'm not questioning their skill or your observation, I believe you fully.
I also know just because someone is smart doesn't mean that all their ideas make sense in terms of efficiency. The smartest people I know are also generally the sloppiest, or have the most rigid unbending ideas that are not adaptable.
I'm not saying that's what you've seen of course, just wanted to explain that what I'm saying doesn't necessarily contradict what you're saying.
> I never understood the argument "I spend more time thinking than coding". You are still going to write the same amount of code whether you're thinking or not. My ideal world (why I love typing fast) is that that time of me coding gets brought down by 50-200% over someone who types slow.
My perspective on this (I'm not a fast typist, but don't feel it's a big limitation) is that I can think while typing, so if I can type at least as fast as I can plan the next bit of code, there isn't any benefit to typing faster.
Of course, that isn't the complete picture, and I wouldn't be surprised if typing out less concrete thoughts (which might mean the same as when you say "prototyping and deleting tons of code") might improve my code or speed me up in plenty of situations. It's also possible there are things I avoid more than I should (such as writing short programs to see how some interface behaves) because I'm too slow at typing.
If you want my unsolicited 2 cents to help speed up (if you care!)
1. put your fingers on home row keys with pointer fingers feeling the bumps on F and J
2. DONT move your wrists all around, try to keep them still and let your fingers do all the work. try to keep your entire palms as still as possible, they really shouldnt move. I rest mine on my laptop surface.
Thanks for the advice - I do 1 & 3 and I think I do 2 & 4 although that's less true when writing things with symbols (such as code), or when navigating text (I don't use vim). According to monkeytype.com, my typing speed is ~40wpm, which is apparently around average (not average for monkeytype users).
Thinking time definitely dominates, I'm hesitant to write something unless I'm confident in it, which I feel serves me well when writing code, but less well in other contexts (except perhaps HN, which has an unusually high fondness for accurate rebuttals of minor technical points). I spent ~20 minutes writing each of my 3 replies to you (longer on this one now that I've finished it). Perhaps being able to type at the speed I could talk would deny me the chance to think about it while waiting to finish typing, speeding me up indirectly.
You definitely hit the nail on something you said, which is when I'm forced to type on my phone, my replies are always MUCH more succinct, clear, as I can only type like 30 WPM probably on my phone.
I don't know how it is working on large teams, but for my daily work working alone I usually write maybe 10-15 emails, I issue a dozen or more commits, I outline specs (a vague word I'm using which could mean writing documentation, writing technical explanations to clients, writing comments, commits, boilerplate, talking about technical things to my peers via chat).
The entire technical burden of all things fall on me, so I suspect I'm editing code a good 6-8 hours of the day, and the other 3-4 hours at the computer are spent communicating of some form. I wish I knew how many words I typed per day but it must be seriously 10's of thousands. Maybe 5000-15,000 depending on the day. Now I imagine doing that.......... 3 times slower. That gives me excrutiating physical pain.
If I sat in a vaccum, with no outside communication, and nothing else dependent on me whatsoever, and I was basically given a single task to produce a 50 line file by the end of the day, and the other 7 hours was spent deep in thought, then i could see typing not being important.
My point was intended to be with regard to code specifically, I don't dispute that typing speed is beneficial for other communication. My recent coding experiences have been much closer to your last paragraph than your first (talking to peers about technical things has often been via audio).
I think it matters a great deal too, and not just for typing code but for reading it too, and this goes beyond simply typing fast but also writing short concise code, especially for parts of the code that are closer to defining program architect than implementing the details: it's better to have everything fit in one page of code rather than being dispersed throughout multiple files.
The reason for that is that a codebase will condition the complexity and thus time it takes to add features to it, in a way that is similar to algorithmic complexity and big o notation, except we as human can't even afford polynomial complexity and constant factors matter a lot.
Imagine you're developing an API, both server and client. You can cut your time in half by automatically deriving the client code from the server side specs. Of course you may have to develop that tool yourself and it takes time. The point is that the time invested developing it will be repaid each time you implement a new endpoint in your API, cutting development time in half:
for me philosophically code is a liability. Every line of code I write is a liability for me and future generations. So I try as hard as I can to not write code at all so it takes me quite a long time to decide to write code. I see it like that in the places I work too, I get paid to decide when it makes sense to write code eg introduce liability to the business
I agree. Code is a liability, and you should think as hard as possible so that you can write the smallest amount to produce value.
But at the end of the day, you are often going to be writing something, and once you figure out what that is, it should transmit from your brain to the editor as fast as possible.
Interesting perspective. I am a solo developer for all my own companies, and I basically work alone managing a number of high volume businesses. I look at code as "art" oddly enough, and not a liability. I look for elegant solutions that wrap complexity up in the most elegant way possible, and I think a lot of "liability" comes from people not knowing what they want, and not refining features, as opposed to code (at least in the business I work on, it sounds different for you in your case)
Edit: Not that "high volume" means anything but I put that there to illustrate there's millions of dollars of liability on the line, not just pet projects or something. It just sounds like a different kind of business I'd guess. Working on a team is definitely something a lot different, that I don't really deal with, nor have much experience with.
This perspective makes total sense if you never have to write code that is maintained by someone else or deal with code that some else has written.
All of our abstractions make sense to us. We wouldn’t have written them otherwise. But unless we are gods at documentation passing that context off to someone else is hard. It’s very easy to casually dismiss a bunch of code as over engineered by also casually dismissing requirements. By being extremely diligent about what you introduce in terms of code you will save yourself and other engineers hundred of hours down the line (if not thousands)
That being said, if you’re a startup who won’t survive without working code and your end users don’t ever see the code you write, who the fuck cares about the 10,000 lines of code you write that would take some other engineer half a month to understand? 10,000 lines of code that make money are worth infinitely more than 10 elegant ones that don’t
I’ve come to that realization consciously not long ago after two decades in software, but felt this tingling for a while.
Code not written is code not using up resources of your colleagues… and future you. It might be an asset if you sell code, otherwise it’s strictly a liability if you sell a service which the code provides.
It’s not just writing code though. So much of my time is spent typing, whether in slack, notes, shared documents, or code, that typing speed is a quality of life improvement across the board.
When coding, I prefer to spend my thinking time thinking and my typing time typing, so typing fast gives me more time for thinking, makes playing around with little ideas feel easier, and again provides what I feel like is a significant quality of life improvement.
What keyboard are you using? If you have a good, ergonomic desk (required prerequisite), then try the Matias Ergo Pro. It is the most comfortable keyboard I've ever typed on, and I've owned literally dozens of mechanical, ergonomic, split, and specialty keyboards. Just be aware that the build quality is terrible. I had two Matias keyboards, neither lasted a year... And I type lightly, preferring 35 gram keys. At $250 each it is quite the investment. But, honestly, they are worth the price. They are _that_ comfortable.
Yes, I am a heavy VIM and bash user. I'm sure that some days I do not touch the mouse at all.
I'm using the latest MBP keyboard which is an insane upgrade over the previous. For some reason I think working on a 16" laptop is much better for speed and efficiency than huge desktops, it's like the keyboard and screen is a direct extension of my mind rather than the feeling of writing while holding a pen with gloves on.
> I’m in software, like a lot of people here, so being able to type in speed is rarely the limiting factor
I think of typing speed in coding the same way I think of cardio in boxing – it won’t win you the round, but the lack of it can easily lose you the round.
You want topping to feel seamless and reliable. Whatever you think should come out on the keyboard reliably and without friction. Any time you have to stop and think about typing or go back to check for typos, is time you’re losing focus and flow.
Take an extreme example – search-and-peck typing where every character takes 2 seconds. Can you really hold a complex programming context sharp in your mind while it takes a minute to type a few instructions? I sure couldn’t.
But you probably also can’t think fast enough to fill a 200wpm typing buffer.
Somewhere in between those extremes lies the sweet spot where your typing speed and your thinking speed match.
Indeed, being able to type quickly is invaluable in minimizing the time your mind is blocked from continuing onwards.
Or, in general, being able to use keyboard quickly. I've seen a lot of people who, when troubleshooting some issue in a SSH session, are v e r y s l o w in shell (quick sequence of little tasks like: type a command, find a particular command in your recent shell history, bring it back up, change something in it, navigate to a different directory, grep some log output).
If even the simplest of those tasks takes you a few seconds, you risk losing the train of thought.
Interesting perspective. I have a decent wpm (like 120 if we are doing mavis beacon shit) but otherwise I usually go at like 70. I cannot think of a single time in my 10 year software engineer career where I have been like “damn, I wish I could have typed that faster and my typing speed was a limiting factor in my job”
That’s the fun part! You don’t notice it’s a problem until you pair with someone who can’t type fast or makes a lot of typing errors and you want to bang your face through the screen because it’s so frustrating to watch them struggle.
They don’t even realize they’re being held back by this. It’s an invisible friction until you notice it.
Easiest way to notice the effect is by switching to a new IDE where you don’t have the keyboard shortcuts in muscle memory yet. Or a language that’s easy but you have to think about the syntax because it’s new.
It might not be a limiting factor as much as an enabling factor.
Sometimes being able to type fast can also mean thinking broad or deep quickly.
Coding at WPM is very different than communicating at WPM. The latter might be valuable.
If you can type faster you can help teammates a bit more easily.
WPM isn’t a high score for me, but there’s probably a floor.
Virtual assistants for example is one area where the average of 3 typeracers can be interesting.
In fairness to your comment, the ability to speak to text accurately can be faster than typing too, and maybe it’s a combination of clarity meeting WPM.
One thing I would check out is short key travel distance.
I love my Bloody B975, but I know I type faster on both my Apple keyboard and especially the Magic Keyboard Folio just because of the super short travel. I can hit 80-90sh on the gaming keyboard, but I'm probably at least tickling 120 the iPad.
It would be nice to be able to find a keyboard that was comfortable to learn how to steno type with that didn't cost $100-$300. $50 would be a sweet spot. It doesn't need to be a premium kit with expensive switches and LEDs and whatnot. It just needs to be the right form factor. It feels like the people selling kits are taking advantage of its niche nature. (Though, it really shouldn't be niche; being able to type at the speed of speech/thought is more of a "bicycle for the mind" than any AI.)
I always see wpm come up for steno stuff and while it can be faster, that's more of a professional thing. There are three cool things about plover for me. One you get to type pressing more than one or two keys at a time. Two the inputs are sent on key up or release, so can take your time pressing all the letters down, and then release them. Three, you have almost no hand movement at all, so its really, really, really comfortable to type on.
once you get that, you have the steno theories to expand all the words. plover comes with a stened dictionary, but thats just for the words. you can also do phrases, symbols, emoji, macros, and more. once you start adding dictionaries, using a computer becomes a lot more fun. plover is like really crazy layers.
for these, where it says starter, you just press all those keys down, and then on the other side you press the keys listed for what you want. so for example, I can enter like ~104 symbols without moving my hands. the average sybmol layer has like 20. the crossplatform movement dict lets me move around much easier in any text field. (note that you don't really even need to know what the key names you are pressing are as its all a pattern) I currently have six other dictionaries that I use some of the time. you can see more here: https://www.openstenoproject.org/stenodict/.
plover has made using a computer much more fun. its a bit of a hard sell for a lot of people, but I recommend trying out some of the other dictionaries to see what you can do besides type words fast. its seriously really crazy that we are only pressing one key at a time using a keyboard.
I discovered [Yublin](https://jonaquino.blogspot.com/2007/06/yublin-shorthand-for-...) a while back which set out to do exactly this: create 1-3 letter shorthands for the 600 most common words in English. And sure enough, "the -> t" is at the top of the list.
> However, I realize that I would never want to use something like this that would change over time. E.g. if I ran it every 6 months and last year "db" produced "debug", while this year it produces "database". Because talk about messing up my muscle memory and habits. And the language I write changes very much over time.
> However, I realize that I would never want to use something like this that would change over time.
> And the language I write changes very much over time.
Sounds like exactly you want something that evolves after time, since how you write changes over time.
An universal version would maximize the amount of helpfulness on an average for everyone, but a tool that learns from your individual actions, can be much better improvement for you. And by making the tool available to everyone, more people could get bigger benefits from it, rather than just "average" benefits.
> Sounds like exactly you want something that evolves after time, since how you write changes over time.
No, because I don't want the shortcuts to be changing on me. That would drive me nuts. The whole point for me would be to establish new habits and then keep them. To turn into muscle memory, not something to be thinking about.
It's like toolbars that "learn" which actions you're currently using the most, but the buttons are constantly moving around and are never where they were last week. It's an exercise in frustration.
> a "universal" version of this -- if you ran it across books and e-mails and text messages from thousands of authors covering diverse backgrounds and contexts, then what would most reliably help everyone
No, this is simple statistics. Just list all the words in your corpus in order by how frequently they're used, then use a dedicated software solution like the one given here to make shorthand from it and expand as you type. Machine learning is massive overkill for this, like nuking a fly-- it's a massive waste of resources (time, energy, energy over time, every metric I can think of), and you're going to have targeting issues at that scale (how exactly do you propose to ensure a LLM stays on target and doesn't duplicate answers, make up words, skip words, etc? Are you sure your LLM actually knows what the correct distribution is? If you know it does because you checked, doesn't that mean you already have a word list you can use?)
I was thinking the exact same thing. That sounds like a small ByT5 LLM model. Upon space you auto-complete the past word based on a moving context window of the past 32 characters or so.
You could make it append only by default. Only ever add new shortcuts - if db was debug for you before then database would have to take on a new shortcut (e.g. dtb)
That would lead to pointless verbosity over time because the older shortcuts would squat on useful shorter shortcuts for words that are no longer used. It would lead to the "horseless carriage" effect for shortcuts.
Even then, universal doesn't mean time-independent.
A universal set of shortcuts trained on a giant corpus in 2018 wouldn't have a shortcut for "covid" or "pandemic" but in 2020, it would be really handy.
> expanding "t" to "the" seems like a no-brainer, just like "st" to "something"
I have jk mapped to escape in vim, and for a key combo that seems like it should never occur naturally, I’m often surprised how often it misfires when I actually need to type “jk”.
Globally remapping hundreds of things like “t” and “st” would actually be quite frustrating I think.
Like imagine you’re emailing your friend about a trip to st petersburg, or about some code containing the variable t, etc.
>I have jk mapped to escape in vim, and for a key combo that seems like it should never occur naturally, I’m often surprised how often it misfires when I actually need to type “jk”.
I saw that great recommendation somewhere so immediately set that up in vim. But those are my initials, and usually the beginning of my username... So took that out real quick.
> E.g. expanding "t" to "the" seems like a no-brainer, just like "st" to "something". Is there a minimal set of, say, 200-500 of these that could simply be turned into a "standard keyboard" that everyone could learn?
looks like we have a choice, to see the Cardinals game, would you rather go to Something Louis or Start Louis? Or we could wait till they play the Twins and visit Start Paul at the same time.
Even if you don't use Shuangpin officially, most Chinese input methods supports a similar feature (简拼) for popular phrases, where you type first English character of each word to type out a phrase of several words.
For example, to type "thank you" in Chinese (xiexie), you just type "xx" and it should automatically give you "xiexie" (Chinese characters) in most popular Chinese input methods.
I was working on a similar problem this weekend, but with whole words instead of abbreviations I had made in a dictionary, and in the general case, fine-tuned on any given corpus of text.
I wanted to know: could I write an autocorrect that is "fine-tuned" on a given corpus of text? Use case: I write a lot of docs with long phrases (i.e. "data augmentation"). Could I automate them?
I arrived at:
1. Calculate "surprisal" of unigrams and bigrams (entropy) from a general dataset (an NYT corpus), give a boost to words in the "fine-tuned" index;
2. Create a trie data structure that is weighed by surprisals. The more surprising a word, the more weight it gets.
3. Use that as advanced autocomplete.
By the way, this project is _awesome_! My programming language [1] does OCR correction via heuristics (possible because there is a restricted grammar) but this project looks like it could help _a lot_ with improving the accuracy of the OCR output. Thank you!
I definitely need to write more docs on this project! I will share them when I'm done. It looks like SymSpell is doing spelling correction, which is part of what my code does.
The "surprisal" (information theory: Shannon information) component is doing statistical next word prediction. For example, given a corpus of data in which "data augmentation" is a common phrase, "da" could complete to "data augmentation".
"data augmentation" starts with "da", and would be determined as a likely candidate for the next word because it was common in the dataset on which the statistical model was "fine-tuned".
Idea for extending this: keylogger (yeah, that's a downside...) that'll watch what you type, learn common phrases, identify common ones, then come up with shortcuts, then each time you type the full phrase it gently reminds you of the shortcut.
Then anyone can install it, no friction, and over time it'll slowly start making you gently more productive.
I wanted to build a keyboard with a keylogger built-in that autocompletes for you with the press of a special key. My idea was to keep the data in a secure vault on device, so that it could not become a security risk.
You could do some of this with an input method editor (IME). It's pretty much an authorized keylogger that can edit your inputs, and is mainly needed for Chinese/Japanese typing. An IME that provides English autocomplete on the desktop (like phones) or shortcuts using an IME framework (like fcitx5) would be an interesting concept.
Would it be better to have some standardized abbreviation? It could gravitate towards those. That should help consistency between different computers (also helps if you have multiple computers..)
I once built a typing tutor that did something like this - it monitored all the mistakes I'd make, and would surface the most typo-ed words for practice.
I guess you are half right, the tool this repo configures is a shortcut engine (autokey). It has access to the key presses, but afaik does not log them.
I feel like typing is never really the bottleneck for me except maybe in some chat interactions would have benefited from the extra bandwidth of video or audio. Do you actually save time on task with these kinds of shortcuts?
My main motivation was very fast slack conversations (Can you post a screenshot?) and a bunch of email responses that are pretty formulaic (sending my calendly link, etc).
For longer writing I'm often frustrated that I can think faster than I can type, so it does help with that too!
For longer writing, why not write anchor words on the scratch notes and then flesh out details? Or do you think, that in the flow of ideas, all sentence details need to be jotted down too? Because you feel they come out perfect the first time?
I certainly write outlines first, but when I do sit down to write a full draft I really like to get to something that's "complete" even if it's really bad. Then I can switch into "editing" mode mentally.
[0] "The Last Question" ranks with "Nightfall" (1941) as one of Asimov's best-known and most acclaimed short stories. He wrote in 1973:[3]
Why is it my favorite? For one thing I got the idea all at once and didn't have to fiddle with it; and I wrote it in white-heat and scarcely had to change a word. This sort of thing endears any story to any writer. Then, too, it has had the strangest effect on my readers. Frequently someone writes to ask me if I can give them the name of a story, which they think I may have written, and tell them where to find it. They don't remember the title but when they describe the story it is invariably 'The Last Question'. This has reached the point where I recently received a long-distance phone call from a desperate man who began, "Dr. Asimov, there's a story I think you wrote, whose title I can't remember—" at which point I interrupted to tell him it was 'The Last Question' and when I described the plot it proved to be indeed the story he was after. I left him convinced I could read minds at a distance of a thousand miles.
For me, faster typing isn't about saving time in total, it's about reducing the time between thoughts. Typing is a manual process that hinders my thinking, so the faster I can dip into and out of typing, the faster I can get back to typing.
I have spent a good deal of time trying to create text expansions for myself.
(manually)
It is a lot harder than I thought it would be.
To find aliases that dont misfire too often and provide enough value.
Give that I daily communicate in several languages that adds even more
trouble.
I have now split it by application.
Different aliases for different applications.
I still have misfires.
Mostly I have found I need delinators.
I prefix my aliases with letter combinations that are unlikely to appear as first letters of words and variable names like kk, zz, qq. For example, qqme is my email signature.
I wish OP's tool suggested aliases for longer phrases than what I saw in the readme. I heard TextExpander for MacOs does that but I am not a Mac user.
maybe a sweet spot would be to use abbreviations for only the most common words and then
have some sort of simple gui pop up where you can fuzzy search things and then have it pasted in
ooh yeah, with multiple languages I bet there are WAY fewer available shortcuts. one of my TODOs is to use the actual corpus of text I analyze to also generate the "blacklist" of aliases to avoid
First, I have to make a personal confession — I never liked the SMS short-hand thingy that worked with pre-iPhone phones. That was one of the reason I seldom use SMS/Text-Messages unless I really need to.
I have been using text-expansion since the early days of TextExpander[1], an app that works on iOS and macOS. However good the iPhone keyboard was, it was always not convenient to type and retype details such as home address, home/work map, and many other work/personal related info. TextExpander helped a lot.
I started looking for an alternative when TextExpander converted to a subscription model, which I (personal) believe is not suitable for such a tool. I found a better alternative in Alfred[2], bundled with its Powerpack — Snippets.
macOS/iOS also has its built-in “Text Replacements” but it fails me quite often in non-Apple apps. What you have here is similar to that of Apple’s Text Replacement. I let that remain and the others are managed via Alfred. Honestly, I may move to this once I can totally walk out of Alfred (Spotlight is becoming good enough.)
However, I’d like to use a delimiter to expand so it does not come in the way of my normal typing (I can touch type). Currently, I use “,” (comma) as a delimiter (Affix) because, in English, there is always a space after a comma and my expansion is only after I type a comma and the short-text without a space. Also the comma key is located conveniently when you touch type.
If I do reconcile and stay with the OS’s Text Replacement, I might still introduce the delimiter to prevent automatic expansion of the word which wasn’t intended for that particular scenario.
The problem with "." as a delimiter is that, unlike written English, it is actually pretty common in the computer world -- for instance, file extensions -- .jpg, .txt, .md.
Years of autocomplete has already made my second language i.e. English poorer. I know words but I often forget to pronounce them because I can no longer remember their spelling. A tool like this would completely obliterate all of my skills.
Instead of keywords and memorizing it, why not just use the first letters? I played around with ChatGPT with this few weeks ago and I don't think there is an existing software for this, I am not good in programming but hopefully somebody will create. Please see screenshot below.
I built a prototype similar in concept to this, where you can just abbreviate arbitrarily, doing whatever, and ChatGPT fixes it after each sentence.
It’s decently accurate (although very annoying when it misses), but I found that even when it’s working perfectly, using it is just way more cognitive effort than typing normally. Concentrating very hard, I could just about match my normal casual typing speed while using the abbreviations, but I couldn’t beat it, and I found myself just gravitating back to normal typing.
That said, I’m a fast typist, and I write a lot, so I’m trying to make a prototype beat a process in my brain that has been intensively optimized over 30 years or so. It might work better with someone who isn’t a fast typist in the first place.
Out of curiosity...sure you type less, but do you need to think more about which abbreviation was which word?
In iOS I maintain a small list of abbreviations (@@ expands to my e-mail address, lk expands to my name etc.) but if it was hundred(s) I'd probably lose more time thinking about "what was the abbreviation of 'online meeting' again" or correcting accidental abbreviations that are part of normal words, than I'd save time typing...but maybe that's just me.
In iOS, I tried some very simple abbreviations (like 2 characters), and it drove me insane when a typo triggered the abbreviation expansion when I didn't want it, so never got that feature working for me.
I think it depends on your typing speed, your target speed, and how much time you want to spend learning the method. On desktop I type 110-130 WPM so such a shortcut wouldn't really help in all but the most extreme examples in day to day work.
On mobile my typing speed is much, much lower and I extensively use autocomplete.
But even at the high end of typing speed there's still a use case for shortcuts, it's just called stenography and it requires specialized software and/or hardware and tons of training.
Also the most surprising part of doing this was seeing that abbreviating super short words like "the" -> "t" actually saves far more characters overall than abbreviating long words and phrases that are less common, like "what do you think" -> "wdytk".
It would be interesting to see how much time you save.
I guess average typists will type "the" much faster than a complex word. Through muscle memory. I think it will be less noticeable for fast typists, who get their speed by being consistently fast.
I thought a bit about this... I feel like for me most of my slowdown comes from needing to get timing correct between my right and left hand. When I go too fast I start to get the letters in the wrong order, which isn't as much of a risk for letters all coming from the same hand (for me at least shrug)
I might go look for some research on typing times for different kinds of words beyond letter count!
I think you'd dig Ikcelaks Magic Sturdy layout, which has a dedicated Adaptive Key (ie. morphing based on your last keypress, while fitting in with the overall layout by keeping finger usage and comfortable motions in mind). I mention it here because it expands to "the" if your last "letter" was space.
I did something similar on Mac, but completely manually. I'm using Espanso now, but I suffix every shortcut with an ";" character which causes the expansion. Since it's home row, it's incredibly easy to actually type it right after typing some letters, making it ideal, cause then I can use whatever shortcuts I want and very rarely have collisions.
I do think this automated generation of suggestions is a great idea, and I it made me realize I hadn't thought enough about the amount of times I type something vs. how big the word is. Since I have an extra letter, I don't want to do this for very very short words, but possibly something I type a lot is still worth it even if it's very short. I tend to use it for semi-long words that I have a hard time typing for whatever reason.
Anyways, very cool, I'll probably be running this script sometime soon to get a list of suggestions, then converting them into Espanso scripts!
r and f are usually pressed with the left index finger, which would have to move between keypresses. With r0, your right hand could align to press the 0 while the r is being pressed, saving time.
Solution: press both keys with a single "rolling" motion of one finger. I don't do that very often while typing, but when playing some games I'll hold down shift with the tip of my pinky and tap ctrl at the same time by flexing the middle of my pinky downwards.
I use a similar technique for typing all the symbols. If I press f I get f, r gives me r, but if I press f and r at the same time with my left index finger positioned between the two keys I get $. w and s are {, e and d are }.
All the other symbols, parens, etc. are mapped to similar one-finger-two-key shortcuts.
Significantly cut down on finger stretching which used to cause me mild pain.
I have this with yasnippet in emacs. It's more than just simple expansion too. It expands to a skeleton to fill in the blanks, so f expands to a function definition and then allows you to put in parameters, return type, then body or whatever makes sense in the current language.
I don't do anything remotely this elaborate, for me it's a couple phrases to bring up the URLs of public discord servers I have to link to frequently. But for this, I use Autohotkey in Windows. It works really well.
> I've thought about doing something similar with my shell history to help me figure out which shell aliases I should create.
Same here, I end up doing `h | grep "(something about the command)` a lot to get commands with specific options, etc. and think "damn i should really make an alias for this" every single time, but never get around to it
I use shell functions for this type stuff, and I have it spit out the command line it's going to run with all the args (to stderr) and then running the command, and other sorts of programmatic touchup (tell me if i'm in the wrong directory, or whatever)
spitting out the command line it's going to run with all the args (to stderr) is a function too. shell functions can also do nice things like change the directory in my outside shell, set environment variables, etc.
Although I do have some better keyboards, and to be honest one of the reasons I got them was some vague idea of learning this at some point. It's just the time investment holding me back at this point, tbh.
Cool! I thght t wld b bt at-xpndg vwls. I gs smth lk tht shld b psbl nw wth LLMs. smth wh y wldd jst rndml drp chrs t incrs spd nd it wld jst gs th rght wrd 99% f ttime bsd on ctx. Nt sr hw prctl t wld b thgh bt I thnk I cld qckl gt sdd t t.
I was thinking about similar solution (actually, textblaze funded by YC is pretty much that) but I didn't like remembering the shortcuts part. So I made a different kind of indexing for it: https://discu.space/ Presentation uses 'what are you answering to' as a key, but you can use anything.
It currently exists as (hopefully working for everyone, could use more testing) Chrome extension, but there's a universal API underneath. It could be run entirely locally if one was to give up portability.
The down side of this is you have to remember them, for some time now I've been writing with n-gram auto-completion based on a large body of text (including code-comments for projects I work on), see https://codeberg.org/ideasman42/emacs-mono-complete
I have it configured to be enabled when typing in code-comments or commit logs & it often gives helpful suggestions.
I prefer an autocomplete mobile like experience for most typing. I use autohotkey to have global autocomplete for English, anywhere in any app i type it gives me options in a little tabbable box immediately. I disable it for vscode usually except when I'm typing markdown I manually enable it. I love it.
Beyond this I use ahk's hotstrings feature to have "snippets". I separate them by topic and activate them as and when they're required. For example I have one for css which has things like
I know I can use vscode snippets but I prefer this.
I also have global hotstrings for say my emails, address, etc,. Unencrypted in my home directory. I don't care too much but you might.
The coolest one is a password manager that lets you use your username/email on any website as the password.
You just press a hotkey and are prompted to enter the secure master password. Once you do that, it decrypts your passwords and activates the hotstrings required to convert usernames to their respective passwords. When you press enter and submit the form it kills it. This is only one of the variations I have. The previous one had me enter the master password in the form itself, and it'll read the context of the browser itself get the URL from there and automatically replace the correct password. I stopped using this as it became unwieldy once I had to have multiple Gmail accounts for example.
Very interesting! I used to create some abbreviations in Office which saved me a lot of typing, but usually only for very simple words that I typed very frequently. Never occurred me that I could do sit for a few more words and even phrases.
But I'm wondering if I would be able to learn all these shortcuts. There would be a lot of time invested, and I don't know how stable a solution this is - ie will I be able to use it everyday for the next five years?
I'm betting on the capabilities of LLMs right now - I think they can predict a lot of my typing and save me enough time and, if msft is smart, they will soon enough be present everywhere.
As a translator who billed approximately 750,000 words last year, yes. Speech to text software is another good tool for circumventing this bottleneck that many translators use.
I’ve thought about doing something like this, only using foot pedals to put it into “shorthand mode”. Having the pedal as a modifier would eliminate the need to worry about text collisions between your shorthand and normal typing.
Strangely, if you use an alt keyboard layout, dropping most of the vowels actually makes it a little less comfortable to type. Coleman and (particularly) Dvorak both put a lot of effort into making common words either alternate hands or roll off your fingers, as well as making the most common letters and vowels very accessible to your fingers. Since this method of typing makes those convenient letters less common, it seems to actually make tpng lk ths a ltl + uncmftbl.
This would be especially amazing on mobile. I was not expecting to see an improvement to typing anytime soon, but I think I might actually be more productive with this.
Now I'm imagining building a keyboard that has it built in, with a little OLED right on the keyboard, and when you press space it types out the closest match to what's in the buffer, and you don't have to take your eyes away from the board to see what the autocorrect is doing.
Yeah! I'm going to need to migrate away from autokey soon because it doesn't support Wayland. I'll probably create a few different scripts for generating one list of shortcuts into several possible different utilities
I love the idea of a tool digesting my own writing. Ticket systems like Zendesk should offer this built-in as boilerplate.
Instead, I use native iOS/macOS “text replacement” for customer service responses. It saves me so much time. I have all of my FAQ URLs as 4 letter shortcuts.
If you like this, you’ll also like Plover, an IME (input method) that translates chorded keystrokes to text. It can use certain gaming keyboards but people also sell custom hardware. Court reporters frequently use special-purpose chorded keyboards to quickly prepare court transcripts.
This is a pretty cool project! I am concerned about how reliant this is on my memory and if the keybindings keep changing every once a while, adapting to new ones might actually be time consuming.
This is what I thought while I was learning Vim too, but now I honestly prefer Vim keybindings everywhere. So maybe this is not too bad. I would definitely try out if one can also build a vimtutor like version for this usecase.
> I was surprised that very short and frequent words topped this list, such as the -> t
Having studied some shorthand, I'm not surprised in the least! There, the most frequent words tend to get single-symbol abbreviations. Common wisdom even says that much of the benefit from shorthand writing comes from these few one-symbol abbreviations.
This would probably drive me up the wall. I like the idea of snippets, but not automatically changing st -> something, hw -> hardware, etc. I type in 2-3 different languages on a regular basis (English and Dutch mainly). There are certain idiosyncrasies in both languages that would drive me up the wall with a system like this.
The author is clearly using this for prose (as opposed to code), and I wonder how it compares to dictation in terms of speed.
I've never really tried using text to speech for writing blog posts and the like, but I know David Sparks (MacSparky) swears by it; and he produces a lot more written content than I do.
my main use case was quick slack messages and emails. I haven't found any good dictation systems where the latency of starting / stopping it for really quick messages wasn't too high a barrier.
For longer form writing I have used dictation and I really liked it!
The real value of dictation, IMO, is it's so much easier to ramble verbally than via text, so you can just bang out a draft without getting blocked on picking the exact correct words.
Using a standard input method editor (IME) was my first thought, too.
You can create a custom user dictionary in any IME, mapping the abbreviations to one or more full words or phrases, either in bulk beforehand, or one by one while you use the system.
During typing, pressing the space bar brings up a list with the substitutes corresponding to the preceding string. You can select with the up/down arrows and insert by pressing space again.
In practice, most of the time you can convert by pressing space twice in quick succession, because either you have a single candidate, or because the default selection, the top candidate is automatically set to your last, or most frequent selection.
If there's no match, you can add a new abbreviation to your dictionary.
You can turn on/off the system by pressing CTRL-space, or some other key combo.
That's only necessary when you have more than one word abbreviated the same (e.g. "db" could be either "debug" or "database"). Someone here commented that this is a missing feature in OP's solution.
Speaking personally, I feel like any time I save by reducing keystrokes would be lost by having to think about shortcuts (or making corrections). However, I Once believed the same thing about vim-mode (which I believe saves me time though I couldn’t prove it).
1000 mph into a concrete barrier scenario, but I like the enthusiasm behind it. I would imagine some words with nearly the same spelling have potentially collided with automation causing some hilarious feedback. English is a pretty annoying language.
My friend does this on dating apps, he aliased a bunch of typos in his iphone with paragraphs of progressive sounding text that many women want to hear, interlaced with lots of flirty emojis
branches of conversation too, one step above botting
Huh, have to say that strikes me as kind of sleezy. It seems disingenuius and shallow. Like, instead of having meaningful conversation with people, relating to them on a substantive level (if possible), he’s just mindlessly automating his way through women “telling them things they want to hear”, hoping to get laid, using macros from his phone. That gives off major creep energy, and this is coming from another guy.
Hope who noticed? My wife? What's redundant about being critical of your loser friend's programmed responses? He's a goober and I'm pointing that out. Also, calling it a "market need" tells me you're 2 birds of a feather.
Very interesting. I once recorded all my vim keypresses to do something similar for vim, but never actually did anything with the data. Seems like it should be easily doable with this project now.
I do something similar using BeefText. A few long words I set with no modification others or entire phrases I precede with a ` backtick. If no backtick it can quickly become unmanagable.
From the gif I originally thought this was a "AI" predictive typing assistant, which would not require a shortcut map heuristic but rather predict text based on probability.
The obvious issue would be if you - for whatever reason - wanted to actually type something that happens to also constitute a shortcut and it gets involuntarily replaced.
Is it possible to alter built-in autocorrect (e.g. in firefox) to prioritize a list of words/phrases? I feel like remembering a bunch of shortcuts is not ideal.
Its fun watching mouse users try to use a trackball. I don't like pair programming but when people ask me to I say sure just so I can see them flail with a trackball and Kinesis keyboard.
If that's something you do then obviously this isn't for you. I personally haven't typed on someone else's computer in at least 13 years. Since whenever I got my first laptop.
I use Colemak keyboard layout with blank keyboard keys. If I'm helping someone else on their own computer, I hunt and peck on their keyboard with the handy letters printed on the keys.
Ha, nope! I mean, probably, but nothing meaningful. I did the other say and just told the person what to type. But like, I’m not writing code or composing emails or anything.
Text expanders are good for this. You can have it as basic as "ty > thank you" up to templates which will ask for input, optional sections in templates, templates in templates, running scripts, and so on.
Very useful in eg. customer service when you want to reply to someone with links and whatnot. Giving instructions, etc.
For programming you can build up a library of common things, think ";;p -> print("\($place_cursor_here)"). Or whole classes, anything you can think of, really.
That feature is a bit of a joke though, isn't it? It seems to only work for apps that have specific integration with it.
Specifically,
* not in terminal
* not in Chrome URL bar (but yes in text areas)
* not in emacs
* not in vim
I'd like a native version very much, but only when it works in most places. As it is now, I'd have to configure many things individually, which is a bit of a maintenance nightmare.
I guess a viable answer would be to use an external keyboard with a firmware under your control. All DIY mechanical keyboards and lots of commercial ones fall under that category. But that won't work for laptops on the go...
I tried this similar concept with ChatGPT and it somehow understands what I am trying to say. Nice to have a tool that works almost the same. Thank you!
I use a tool called "Espanso" to accomplish something similar at work. It only runs locally, so no weird data scraping issues to worry about. And it's easy to update as things changes because everything lives in a simple yml file.
It can do simple text replacement, so I have words, phrases, and sentences I use frequently compressed into a few keyboard clicks. It can also grab what is in your clipboard, so that can be incorporated into responses, which is simple but very handy.
A simple text replacement looks like this in the yml file:
- trigger: ":espanso"
replace: "Hi there!"
But it can even work with a shell, which I think is amazing! For example, I have a particular task at work where I often need to insert a random number into a text document. I can have Espano run PowerShell behind the scenes to run a simple PowerShell command, and that looks something like:
I love espanso. I live it over AHK as it doesn't have some obscure and hard to learn language, so I can just write some python scripts and trigger them with espanso.
A sidenote, but Espanso can also be set up to communicate with eg chatgpt; you copy some text and type a trigger word such as ":ask" or ":debug" and it makes a request
from the trigger and the clipboard and returns the reply from openai https://github.com/rohitna/chatgpt-script
I’ve got to plug Snippety on macOS. I’ve configured it to work with my PowerShell scripts, so I can easily call out to OpenAI endpoints and then inline the response into whatever app I’m in. Plus, the dev is super cool and his product is well done. Not associated with it in anyway other than being a happy customer.
Love espanso, I use it in Mac, Linux, and Windows!
The creator is also incredibly nice, one of those rare open source devs that seems to go out of his way to validate concerns and make PRs truly feel welcome.
This is cool but I see so many posts in HN about “hacks” that increase productivity/save time that it makes me anxious.
I don’t know if it’s our field or just life these days but I would really love a more relaxed approach to work (or life in general?). It feels like I’m in a race and struggling to keep up with the pack.
Hopefully, this is most often just an excuse for someone with the hacker spirit to figure out how to automate something because it's fun. If you're really spending that much time replying to Slack and e-mail that making yourself an arbitrarily fast typist puts a meaningful dent in what would otherwise be work blockages, I think there are organizational problems there that you can't solve by being a faster typist.
I have found that I am spending more and more time thinking about my solution before implementing. Life is definitely more enjoyable and probably about equally as productive. You just have to carve out that time. Go for a walk and take intentional breaks from the keyboard.
We have finite brain power.
The power you dedicate to thinking about what hotkey (/combination of) to press for niche tasks, is not, per say, wasted. But it definitely isn't going towards thinking about what to write, the objective.
Maybe useful for less information-dense writing.
That's a very important insight. Faster doesn't mean less effort. More efficient doesn't mean more intuitive. I think that today's hacker attitude tends to drastically underestimate the degree to which natural languages have been optimized over time to fit the way our brains work. Most conlangs fall into the same trap. Ithkuil isn't a better form of communication just because it uses fewer characters than English. And Vim isn't a better editor just because you can do things with fewer keystrokes.
I did this sort of thing quite a lot early in my career, but stopped quite a long time ago. The problem is that I started using multiple machines running different OSes, and not all of those machines are "mine", so I couldn't have these sorts of specializations everywhere.
That turned a positive into a negative when using machines that didn't have these optimizations.
Interestingly enough, I have a macro keyboard I built myself that I use at home. It never occurred to me to use it professionally until you brought it up. Hmmm. Thank you!
On Windows, better fit is Autohotkey and its hotstrings for people wanting to use this. It's much better for that as it supports full programming language so you could use function results and similar to produce abbreviations.
If you're going to use models, why not models all the way through?
In other words, rather than using them merely to identify words to abbreviate and suggested abbreviations, why not use an LLM that can take a bunch of abbreviated text and infer what you're trying to abbreviate?
Tht wy, u dn't hv 2 mem lsts f abbrs ahd f tm.
ChatGPT was able to successfully guess that last sentence in abbreviated form:
That way, you don't have to memorize lists of abbreviations ahead of time.
Ah yes, I'd love to wait about five seconds every time I type some text for ChatGPT to return some output, worrying about boilerplate text around the actual answer, and to introduce unpredictability into the mix.
"That way, you don't have to remember lists of abbreviations" and... I can't seem to guess the last few words. Would you mine typing it out in full?
Edit: Oh, "That way, you don't have to remember lists of abbreviations ahead of time". ChatGPT must be something impressive if it can beat me at some linguistic games.
So many abbreviations being obvious was really key to me being able to memorize them. I just think "how would I abbreviate this" and that's almost always what my abbreviation actually is
This has been one of the rare side projects that has actually saved me more time than I've put in :)