Show HN: I automated half of my typing
github.com
github.com
This has been one of the rare side projects that has actually saved me more time than I've put in :)
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?
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.
Those interested should check out http://www.openstenoproject.org/.
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.
Or is it not for work and it’s just purely to see how fast you can type?
Some people say they spend more time than they do typing, but I definitely don't find that to be the case very often.
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.
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.
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
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.
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.
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".
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.
But for coders, that's seldom the task we're doing. Hence the assertion "I spend more time thinking than typing".
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.
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)
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 ;)
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.
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.
So I guess I'll follow the evidence.
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.
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 can type at least 80 consistently then thats probably would I imagine the dividing line is between "flow/concentration not breaking" and "breaks constantly"
Try a 50 word monkeytype https://monkeytype.com/
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.
So thanks, but no thanks?
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'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.
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)
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>".
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.
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.
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.
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.
3. dont look at the keys. use https://www.typing.com to help you if you cant do that
4. relax your hands as much as possible
Typing.com is better IMO if you don't know how to type fast, and monkeytype.com is way more fun when you do (the interface is just way more fun)
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.
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:
n * (t(s) + t(c)) versus n * (t(s))
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.
Made me laugh, given the topic!
Yes, I am a heavy VIM and bash user. I'm sure that some days I do not touch the mouse at all.
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.
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.
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.
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.
Being able to type out a line of code or comment very quickly and then move on to thinking about the next one without breaking flow is useful.
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.
https://www.youtube.com/watch?v=Fu7DygveoB4
Longer video eight years ago:
https://www.youtube.com/watch?v=jRFKZGWrmrM
Some random YouTube video, JavaScript steno seven years ago: https://www.youtube.com/watch?v=RBBiri3CD6w
Steno coding in Ruby, four months ago: https://www.youtube.com/watch?v=3W9_k2CXrXE
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.
Now for the other dictionaries, you can do things like: https://steno.sammdot.ca/plover-basics.png https://steno.sammdot.ca/ted-navigation.png https://steno.sammdot.ca/emily-symbols.png
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/.
any cli program would be very easy to add most of the commands to a dictionary if you wanted. for example, a basic git dictionary: https://github.com/didoesdigital/steno-dictionaries/blob/mas...
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.
> 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.
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 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.
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.
https://archive.org/details/evansbasicenglis00evan
(use the pdf, the txt file is a bad OCR and practically useless)
Also useful:
https://en.m.wikipedia.org/wiki/Most_common_words_in_English
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 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.
-jk
Is it a "no-brainer"?
I would map "st" to "start".
"Start" is something you use a lot more as a dev.
That's the true no-brainer. Memorable, good mapping.
A chemist might type "dropper" often, 'dp' while a bureaucrat might prefer "department"
Isn't this approaching llm territory?
How exactly is an llm different? I'm not sure it is, just more layers.
Chinese language has this feature "built-in".
It is officially called 双拼 (Shuangpin)where you type two (English) characters of each word to type out the entire word:
https://zh.wikipedia.org/zh-sg/%E5%8F%8C%E6%8B%BC
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.
Like "what do you want to eat" 「你想吃什麼」 Is typed with n x c s m
Next time I got to the Din Tai Fung in my neighborhood ;-)
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.
I got a working solution here: https://github.com/capjamesg/autowrite/blob/main/autocomplet...(No docs yet -- coming in the next few days. Leave a GitHub Issue if you want to chat about it!)
Or maybe I am confused what you're saying. Are you trying to find more creative ways of saying the same phrase?
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".
This Wikipedia page covers the concept in more depth: https://en.wikipedia.org/wiki/Information_content
Then anyone can install it, no friction, and over time it'll slowly start making you gently more productive.
Something like auto export slack history each week, get a word frequency. Then mantually assign a bunch of expansions based on what you see?
Bluetooth Keyboard -> ESP32 as a keyboard host -> Send keystrokes to USB & File
If you have cash there is a USB/PS2 keyboard logger that will capture data to disk.
For longer writing I'm often frustrated that I can think faster than I can type, so it does help with that too!
[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.
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 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.
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.
In general "." is a delimiter, EXCEPT for "py" so that it doesn't interfere with me typing python files
jk
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.
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.
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.
It kind of reminds me of stenography in a way
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 might go look for some research on typing times for different kinds of words beyond letter count!
https://github.com/Ikcelaks/keyboard_layouts/blob/main/magic...
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!
r0 -> return false
rn -> return null
t -> this
puf -> public function
You can easily find the opportunities for saving typing by analyzing existing code and most used words there.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 created an EasyScript translator for GPT-4: https://gist.github.com/boticello/1ea9c7105e5c369ea937158411...
As others have commented, this is not the most efficient or practical approach, but for me it was an experiment which worked.
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
https://github.com/atuinsh/atuin
*: shameless plug, I’m one of the maintainers
Ps. one of the links in the docs is dead, "see the supported shells" on the page https://atuin.sh/docs/commands/shell-completions
Fixed it - thanks for the catch!
cm = git commit -m st = git status inst = sudo apt get install -y fucking = sudo
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.
If you want to go the extra mile.
Also, the learning curve and everything.
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.
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.
I have it configured to be enabled when typing in code-comments or commit logs & it often gives helpful suggestions.
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
display: flex;
justify-content: center;
align-items: center;
bound to a single hotstring.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.
Is the script you use publicly available somewhere?
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.
Calculation for "the" from the screenshot in the repo:
9933 characters saved / 8 kps = ~20 minutes
Typing faster is always going to be a benefit.
I think it would be too much effort for most people to get to 150wpm, or to learn stenography.
But, on the other hand, if people are typing 30wpm, they would benefit from training to improve their typing speed.
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.
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.
e.g. lltr becomes https://label.live/guides/label-printer-troubleshooting
llty = Thank you for the email. lllmk = Let me know if this helps.
You can go back even farther to ancient inscriptions. Humans have been trying to save a few characters here and there for quite a while.
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.
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.
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.
For longer form writing I have used dictation and I really liked it!
I'm aware of CJK input methods, but it's not immediately clear how/why you could repurpose them for English. Not to mention there are several types.
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.
If you had a key to toggle case on selected texts billions of backspace keystrokes and retyping strokes could be saved
branches of conversation too, one step above botting
works for what he’s looking for
aka obviously. redundant to signal your lack of support.
anyway, he fills a market need. many women are annoyed by not well thought out short responses, as much as men are
It parses your choice of documents and send emails and suggest to auto complete frequently used phrases.
Advantages:
+ no need to memorize abbreviations
+ no interference with your other typing.
Same thing chatgpt (trapped in the philosopher's Chinese room) is asking itself millions of times a day.
In the current setup there are too many collisions.
Most other people use a normal mouse
Since I also have a lot of muscle memory using normal mice, I am able to quickly adjust to working on a new PC
Others struggle when they have to take over my PC and show me something by navigating with my trackball
I am guessing this might be similar -- since OP does have years or muscle memory with normal keyboards anyway to back them up
I use a 50 euro Razer Naga X mice at the moment which is nice (with the extra buttons).
But, it's unreasonable that you stick to the lowest common denominator if you're going to be using your own setup 99% of the time.
I'd say a bigger disadvantage to non-traditional setups (trackballs, non-qwerty, small keyboards, etc.) is "others won't be able to use your stuff".
Also don't use any editor other than Notepad.
I type 20% of what I would have with copilot
[1] https://www.reddit.com/r/Classic_Speedwriting/wiki/list108/
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.
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...
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:
- trigger: ";rand"
replace: " {{output}}"
vars:
- name: output
type: shell
params:
cmd: "Get-Random -Minimum 100000"
shell: powershellThe 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.
Great project.
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.
That turned a positive into a negative when using machines that didn't have these optimizations.
Thanks for the post though, I need to do some analysis of my own typing habits to automate them
Creating a layer for this sort of typing would also be really cool and not having to use that leader key the entire time.
Somewhat similar tool to Autokey for MacOS that I use as a text expander.
Allows for great customization - appending ; to a phrase ensures you don't accidentally expand a keystroke into a phrase/URL/etc
";url" expands into "whatever string you configure"
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.
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.