Plover
Hacking/typing/writing…
…at 200 words per minute
Speaker:
Ted Morin
Captioned by:
Mirabai Knight
GIF: Stanley Sakai
@morinted
Ted Morin
introduce(person="Ted",
to="Audience",
reason="Plover")
Machines, left to right top to bottom:
Treal TR, Elan Cybra, Infinity Ergonomic, LightSpeed
Find it on Steam
- What is Stenography?
- How fast do we need to type?
- Steno layout and basics
- History of Open Steno
- Written in Python
- Future of steno (and you)
Table of Contents
Two variants: written shorthand…
…and machine stenography
Phonetic > Orthographic
nauseous, cautious, conscious
naw-shs, caw-shs, con-shs
particular, particularly
p-lar, p-lar-l
1 chorded stroke vs 12 keystrokes
Less movement == SPEED!
I don't know, Ted, I type pretty fast.
- A skeptic
How does it work?
Thinking with Portals
think-ing w portal-s
thi-g w porl-s
THEUG W PORLS
What is Steno Good For?
A walled garden of expensive proprietary choices.
$1000 to $4000
$1000s, renewed anually
1-7 years in college
Total:
Student loans galore
$
$
$
Libre software, free games, open community, free texts, cheap hardware.
Let's explore what changed.
Mirabai Knight
Joshua Lifton
PLOVER!!
Dolores
DLORS
Plover
PHROFR
Hesky Fisher
Zack Brown
ErgoDox
Tréal TR
Personal score chart from TypeRacer.com
How does Plover work?
- Pythonistas
from shorthand import stenography
stenography()
# DONE!
# ...I wish.
"""
We actually need:
- Input (Hardware)
- Plover (steno engine)
- Output (Emulated key strokes)
"""
Left to right, top to bottom: Quickfire NKRO keyboard, Charley's homemade breadboard machine, SOFT/HRUF, Infinity Ergonomic, Stenoboard
NKRO/anti-ghosting/full key rollover:
All keys on the keyboard can be registered at once. Most USB keyboards support 6KRO or less.
- $50-100 depending on the model.
Recommended switches:
light linear (Gateron Clears, Matias Reds, or Cherry Reds)
{ "PAOEU/TKPW*OT/A*PL": "PyGotham"
, "KHR-BG": "{#control(c)}"
, "SPHEUFBG": "{^awesomistically}"
, "HEU": "hi"
, "PHOPL": "mom"
, "KHREU": "{^ically}"
, "TED": "Ted"
, "PHRARL" : "particularly"
, "TK-F": "{>}def"
, "TKPWEUT/KR*R":
"{^}git push origin HEAD:refs/for/master{#Return}"
, "SP*LT": "{#command(space)}"
, "PHR-FPLT": "Mr.{-|}"
, "...": "Plover comes with over 140,000 entries"
}
Steno contains quite a bit of logic:
User dictionaries, othography rules, output state
# Linux
from Xlib import X, XK, display
from Xlib.ext import xinput, xtest
from Xlib.ext.ge import GenericEventCode
# Windows
import ctypes
SendInput = ctypes.windll.user32.SendInput
# macOS
from Quartz import (
CFMachPortCreateRunLoopSource,
CFRunLoopAddSource,
CFRunLoopGetCurrent,
CFRunLoopRun,
CFRunLoopStop,
CGEventCreateKeyboardEvent,
CGEventGetFlags,
CGEventGetIntegerValueField,
CGEventMaskBit,
CGEventPost,
CGEventSetFlags,
CGEventSourceCreate,
CGEventSourceGetSourceStateID,
CGEventTapCreate,
CGEventTapEnable,
kCFRunLoopCommonModes,
kCGEventFlagMaskAlternate,
kCGEventFlagMaskCommand,
kCGEventFlagMaskControl,
kCGEventFlagMaskNonCoalesced,
kCGEventFlagMaskShift,
kCGEventKeyDown,
kCGEventKeyUp,
kCGEventSourceStateID,
kCGEventTapOptionDefault,
kCGHeadInsertEventTap,
kCGKeyboardEventKeycode,
kCGSessionEventTap,
)
Output: simulated keypresses
Image source: http://emojione.com/
"Emojis: loved by everyone except sane developers"
What About the Future?
OpenSteno.org
Ted Morin, @morinted, www.tedmor.in
Special thanks to:
devs (Josh, Hesky, Mike, gcr, Brent, Benoit Pierre)
stenographers (Stanley Sakai, Mirabai Knight)
community (Charley, Nat, Sooty, Tim, and many more)