layout: true <!-- this adds the link footer to all slides, depends on my-footer class in css--> <div class="footer-small"> <span> https://github.com/jhelvy/2021-useR-healthy-hands </span> </div> --- name: title-slide class: inverse, middle # Healthier ❤️ & Happier 😄 Hands 🙌 .leftcol70[ ## Software and Hardware Solutions for More Ergonomic Typing ### by John Paul Helveston ### 2021 useR! Conference ] .rightcol30[ <br><center> <img src="images/user-logo-color.png"> </center> ] ??? Hi everyone, my name is John Paul Helveston and I want to talk about solutions to keep our hands happy and healthy --- class: center background-color: #fff ## **Last year I typed 7.5 million key strokes** <center> <img src="images/monthlyKeys.png" width=700> </center> ??? Last year I typed 7.5 million key strokes, and if you're a regular R user like me, chances are you too are racking up some serious mileage on your keyboard, which can lead to pain and serious injury. So today I want to talk about some tools and suggestions to take better care of your hands while typing. --- class: center background-color: #fff # Practice Typing ## https://www.keybr.com/ <center> <img src="images/qwerty.png" width=700> </center> ??? My first suggestion is simply to practice your typing. I thought I had pretty good typing skills, but I found I was able to increase my speed and accuracy by about 20% with just two months of daily practice on on key-br-dot-com. So, take some time to work on your typing, most people can benefit from it. --- class: center # Master keyboard shortcuts <br> .leftcol[ ## Insert `<-` with: ## `alt/option` + `-` ] .rightcol[ ## Insert `%>%` with: ## `ctrl/cmd` + `shift` + `M` ] ??? My next suggestion is to master your keyboard shortcuts. RStudio is packed with excellent shortcuts, like "alt" + "dash" to create an assignment operator, or command-shift-M to make a pipe. --- class: center # Learn shortcuts .leftcol40[ ## Align messy code: ## `Ctrl + I` ] .rightcol60[ <center> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">One of my favorite <a href="https://twitter.com/rstudio?ref_src=twsrc%5Etfw">@rstudio</a> shortcuts: Ctrl+I. If your code is misaligned/messy for whatever reason, RStudio will clean it right up for you. <a href="https://twitter.com/hashtag/rstats?src=hash&ref_src=twsrc%5Etfw">#rstats</a> <a href="https://t.co/BzPaPhP9Zl">pic.twitter.com/BzPaPhP9Zl</a></p>— Kyle Walker (@kyle_e_walker) <a href="https://twitter.com/kyle_e_walker/status/1117801495884386304?ref_src=twsrc%5Etfw">April 15, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </center> ] ??? But there are many more that can make you a more efficient coder. For example, if you want to align a bunch of messy text, just select it and type control + I. --- class: center # Learn shortcuts .leftcol40[ ## Use multiple cursors: ## Hold `Alt/Option` + <br>click & drag ] .rightcol60[ <center> <blockquote class="twitter-tweet"><p lang="en" dir="ltr">Loved the cooking metaphors 🔪🎂 in <a href="https://twitter.com/hadleywickham?ref_src=twsrc%5Etfw">@hadleywickham</a>'s <a href="https://twitter.com/RLadiesSF?ref_src=twsrc%5Etfw">@RLadiesSF</a> talk yesterday! but the best part was watching Hadley speed-code live and learning neat tricks like this: <a href="https://t.co/UVmrPbxpho">pic.twitter.com/UVmrPbxpho</a></p>— Irene Steves (@i_steves) <a href="https://twitter.com/i_steves/status/995394452821721088?ref_src=twsrc%5Etfw">May 12, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> </center> ] ??? One of my favorites is to generate multiple cursors by holding the "alt" key and selecting some lines. This is particularly helpful for editing elements in a vector. --- class: center # Use a text expander <br> .leftcol[ <center> <img src="images/ggplot.gif" width=100%> </center> ] .rightcol[ <center> <img src="images/rrsetup.gif" width=650> </center> ] <center> Powered by <img src="images/espanso.svg" width=100> <br> See my post on espanso at <a href="https://www.jhelvy.com/blog">https://www.jhelvy.com/blog</a> </center> ??? You can also create your own shortcuts by using a text expander, which are programs that convert keywords into text snippets. In the example on the left, I'm using some custom expansions to write some ggplot code for a scatterplot. And on the right, I'm using a single keyword to generate a code chunk that I use in most of my RMarkdown files. My favorite expander is an open source one called espanso, if you want to learn more at it, you can check out my blog post about it on my website at jhelvy.com. --- class: center # Use custom keyboard layers .cols3[ ## .center[**Base layer**] <center> <p style="font-size:40px;"> 1234567890 <br> qwertyuiop <br> asdfgjhkl' <br> zxcvnm,./ </p> </center> ] .cols3[ <br> <center> <img src="images/shift_key.png" width=100%> </center> ] .cols3[ ## .center[**Shift layer**] <center> <p style="font-size:40px;"> !@#$%^&*() <br> QWERTYUIOP <br> ASDFGHJKL" <br> ZXCVBNM<>? </p> </center> ] ??? Another tip is to use custom keyboard layers. Every keyboard has at least two layers: the base layer of numbers and lower case letters, and another layer of symbols and upper case letters when you hold "shift". --- background-color: #fff class: middle <center> <img src="images/keyboard_nav.png" width=1000> </center> ??? Unfortunately, many of the most useful keys for coding, like our navigation arrows, require us to move our hands away from the home row position. --- background-color: #fff class: middle <center> <img src="images/keyboard_nav_layer.png" width=1000> </center> ??? A nice solution is to use a custom layer to move these keys back to a more convenient location. --- background-color: #fff class: center # Example: **Caps Lock Layer** <center> <img src="images/keyboard_remap.png" width=1100> </center> ??? For example, on my keyboard, I re-mapped my caps lock key to trigger a new layer that has the navigation arrows and forward and back delete under my right hand, and cut, copy, paste under my left hand. --- class: middle <center> <video width="1000" controls> <source src="images/keyboard_nav_demo.mp4" type="video/mp4"> <source src="images/keyboard_nav_demo.mp4" type="video/ogg"> Your browser does not support HTML video. </video> </center> ??? As you can see in this demo, this enables me quickly move the cursor around and manipulate code in RStudio without ever needing to leave the home row. --- class: center, middle .leftcol[ # Mac #### https://karabiner-elements.pqrs.org/ <center> <img src="images/kbe.png" width=300> </center> ] .rightcol[ # Windows #### https://www.autohotkey.com/ <center> <img src="images/ahk_logo_no_text.svg" width=500> </center> ] ??? I implemented this using a program called Karabiner Elements, which is for mac only, but on Windows most people use a similar program called Auto-hot-key. --- background-color: #fff class: center # Use a split keyboard <center> <img src="images/ergo_split_basic.jpg" width=650> </center> ??? In addition to all these software tools, I highly recommend using some kind of a split keyboard. --- background-color: #fff class: center # Reduce **Ulnar Deviation** <center> <img src="images/drake_ergo_ulnar.png" width=500> </center> ??? Split keyboards fix a lot of common ergonomic problems compared to a standard keyboard, like reducing ulnar deviation from twisting your wrists outward. --- background-color: #fff class: center # Reduce **Forearm Pronation** <center> <img src="images/drake_ergo_pronation.png" width=500> </center> ??? And most split keyboards also add a small tenting angle to reduce forearm pronation. --- background-color: #fff class: center, middle # Think of your keyboard as a medical device <br> .cols3[ <center> <img src="images/kinesis_freestyle2.jpg" width=300> <br> KINESIS Freestyle 2<br><b>$89.00</b> </center> ] .cols3[ <center> <img src="images/logitech.jpg" width=280> <br> Logitech - ERGO K860<br><b>$129.00</b> </center> ] .cols3[ <center> <img src="images/glasses.jpg" width=350> Average cost of glasses<br><b>$242.00</b> </center> ] ??? Now one of the downsides to split keyboards is that they can be more expensive, though there are plenty of great options for around $100. But I encourage to consider your keyboard as a medical device, like a pair of glasses, which can easily cost over $100. Without glasses, I couldn't read my own code, but without a keyboard I couldn't type it. Investing in a good keyboard is an investment in the health of your hands, wrists, and shoulders. --- class: center # Use a split keyboard **_that has thumb keys_** <center> <img src="images/ergodox.png" width=700> <br> Ergodox EZ (~$350.00) </center> ??? To really max out the benefits of a split keyboard, consider one that has dedicated thumb keys, like the Ergodox. Your thumbs are really strong, and they're useful for way more things than hitting a space bar. --- class: center # Build Your Own Keyboard for Less! <center> <img src="images/iris.png" width=720> <br> Iris (~$200.00), Powered by <a href="https://qmk.fm/">QMK Firmware</a> </center> ??? The Ergodox in particular is rather expensive, but if you're feeling ambitious you can build your own for a lot less. There's actually a pretty big community of keyboard hobbiest, and building your own keyboard these days is actually rather straightforward. Keyboards like the Iris shown here can be snapped together like a set of legos. --- background-color: #fff class: center # Use a split keyboard **_that is programmable_** <center> <img src="images/ergodox_layout.png" width=670> </center> ??? Finally, if you are going to invest in a good keyboard, get one that is fully programmable. This enables you to implement many of the solutions I mentioned, like custom layers, directly into the keyboard itself. --- class: inverse .leftcol75[ My Iris Keyboard:<img src="images/my_iris.jpg" width=400> ### Slides:<br>https://jhelvy.github.io/2021-useR-healthy-hands ### My Karabiner Elements Settings:<br>https://github.com/jhelvy/jkeyboard ### My Iris Keyboard:<br>https://github.com/jhelvy/iris-rev2 ] .rightcol25[.right[ # .center[.font150[Thanks!]] # .center[❤️ 😄 🙌] <br><br><br><br><br> @JohnHelveston <svg style="height:0.8em;top:.04em;position:relative;fill:white;" viewBox="0 0 512 512"><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg><br> @jhelvy <svg style="height:0.8em;top:.04em;position:relative;fill:white;" viewBox="0 0 496 512"><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg><br> @jhelvy <svg style="height:0.8em;top:.04em;position:relative;fill:white;" viewBox="0 0 576 512"><path d="M385.2 167.6c6.4 0 12.6.3 18.8 1.1C387.4 90.3 303.3 32 207.7 32 100.5 32 13 104.8 13 197.4c0 53.4 29.3 97.5 77.9 131.6l-19.3 58.6 68-34.1c24.4 4.8 43.8 9.7 68.2 9.7 6.2 0 12.1-.3 18.3-.8-4-12.9-6.2-26.6-6.2-40.8-.1-84.9 72.9-154 165.3-154zm-104.5-52.9c14.5 0 24.2 9.7 24.2 24.4 0 14.5-9.7 24.2-24.2 24.2-14.8 0-29.3-9.7-29.3-24.2.1-14.7 14.6-24.4 29.3-24.4zm-136.4 48.6c-14.5 0-29.3-9.7-29.3-24.2 0-14.8 14.8-24.4 29.3-24.4 14.8 0 24.4 9.7 24.4 24.4 0 14.6-9.6 24.2-24.4 24.2zM563 319.4c0-77.9-77.9-141.3-165.4-141.3-92.7 0-165.4 63.4-165.4 141.3S305 460.7 397.6 460.7c19.3 0 38.9-5.1 58.6-9.9l53.4 29.3-14.8-48.6C534 402.1 563 363.2 563 319.4zm-219.1-24.5c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.8 0 24.4 9.7 24.4 19.3 0 10-9.7 19.6-24.4 19.6zm107.1 0c-9.7 0-19.3-9.7-19.3-19.6 0-9.7 9.7-19.3 19.3-19.3 14.5 0 24.4 9.7 24.4 19.3.1 10-9.9 19.6-24.4 19.6z"/></svg><br> jhelvy.com <svg style="height:0.8em;top:.04em;position:relative;fill:white;" viewBox="0 0 512 512"><path d="M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"/></svg><br> jph@gwu.edu <svg style="height:0.8em;top:.04em;position:relative;fill:white;" viewBox="0 0 512 512"><path d="M476 3.2L12.5 270.6c-18.1 10.4-15.8 35.6 2.2 43.2L121 358.4l287.3-253.2c5.5-4.9 13.3 2.6 8.6 8.3L176 407v80.5c0 23.6 28.5 32.9 42.5 15.8L282 426l124.6 52.2c14.2 6 30.4-2.9 33-18.2l72-432C515 7.8 493.3-6.8 476 3.2z"/></svg> ]] ??? Okay, that's all I have. Thanks for listening and I look forward to any comments or questions you might have. If you want to learn more about anything I mentioned, here are some links, and feel free to reach out to me directly on Twitter or by email.