Keajaiban alien dari masa depan, "Cursorless"
(xeiaso.net)- Saat kambuhnya RSI memaksa saya kembali mengubah cara memasukkan kode, ekstensi VS Code Cursorless menjadi alat utama untuk pengeditan kode berbasis suara
- Cursorless menempelkan hat berbasis warna dan huruf pada token kode, sehingga pengguna bisa menyebut posisi di layar dengan suara dan melakukan operasi seperti menghapus, memindahkan, dan menyisipkan
- Kekuatan yang melampaui sekadar memindahkan kursor ada pada kemampuannya menggabungkan penentuan jalur seperti
green urge past green batdengan pengenalan AST bahasa untuk menangani unit struktur seperti fungsi, lambda, dan isi definisi - Dengan menulis perintah Talon sendiri, penyisipan seperti
async <destination>atau input panjang seperti deklarasi method Go dapat diotomatisasi menjadi perintah suara yang lebih singkat - Coding dengan suara tidak menghilangkan kata-kata yang harus diucapkan, tetapi memungkinkan kita membuat sistem perintah yang lebih dekat dengan cara memahami kode di dalam kepala
Konteks kambuhnya RSI dan penggunaan Cursorless
- Saat mulai bekerja di tempat baru, RSI saya kambuh, dan saya perlu menemukan cara untuk kembali memprogram alih-alih bergantung pada penulisan teknis seperti sebelumnya
- Saya pengguna Emacs, tetapi kali ini saya sedang memakai Visual Studio Code karena satu ekstensi tertentu
- Ekstensi itu adalah Cursorless, yang jika dipadukan dengan perangkat lunak kontrol suara memungkinkan pengeditan kode pada level AST
- Sebelumnya saya memakai Cursorless terutama hanya untuk berpindah di layar, tetapi kali ini saya ingin menerapkannya lebih dalam ke seluruh pekerjaan yang memungkinkan
- Saya berharap cara input seperti ini juga ada untuk pesan Slack dan Discord
Cara menyebut posisi dengan hat, target, dan destination
- Unit dasar Cursorless adalah target dan destination
- target menunjuk ke anchor individual di dalam dokumen
- destination berarti posisi relatif berdasarkan target tertentu
- Token di dalam dokumen diberi hat yang terdiri dari warna dan huruf
- Posisi hat menentukan namanya
- Warna hat menghilangkan ambiguitas
- Dalam contoh kode JavaScript, jika ada hat hijau di atas huruf
upada katafunction, kata tersebut bisa disebutgreen urge - Anda dapat memberi perintah terhadap target ini untuk menghapus kata tersebut atau memindahkannya ke lokasi lain
- Dengan cara ini saja, manipulasi yang mirip Vim motion sudah bisa dilakukan lewat suara
Pengeditan struktural yang dimungkinkan oleh pengenalan AST
- Kekuatan Cursorless tidak berhenti pada penentuan posisi sederhana, tetapi berasal dari penggunaan bersama path dan pengenalan AST bahasa
- Dengan ekspresi seperti
green urge past green bat, Anda bisa memilih rentangfunction fetchBlogdi layar - Karena memahami struktur AST bahasa, operasi seperti menghapus seluruh fungsi atau memindahkannya ke lokasi lain juga dimungkinkan
- Perintah
visualize lambdasmemvisualisasikan lambda di dalam fungsi sebagai unit struktur tersendiri - Unit AST juga bisa menjadi target, sehingga setelah memilih isi sebuah definisi, Anda dapat melanjutkan refactoring pada rentang tersebut
- Dalam contoh, refactoring untuk mengubah fungsi menjadi fungsi asinkron menjadi sederhana
Memperluas coding suara dengan perintah Talon
- Jika memakai Cursorless bersama Talon, Anda dapat menulis perintah suara sendiri
- Contoh
async <user.cursorless_destination>adalah perintah yang menyisipkan"async"sebelum destination yang ditentukan
[state] async <user.cursorless_destination>:
user.cursorless_insert(cursorless_destination, "async")
- Perintah Talon secara garis besar terbagi menjadi dua bagian
- pattern: kata yang diucapkan pengguna
- capture: target yang diekstrak dari ucapan tersebut
- Dalam contoh ini, pattern-nya adalah
async, dan capture-nya adalah tujuan tempatasyncakan disisipkan - Capture
<user.cursorless_destination>adalah capture khusus yang memungkinkan penentuan posisi di depan atau di belakang suatu target - Perintah yang lebih kompleks juga dimungkinkan, dan aturan Talon untuk membuat deklarasi method Go digunakan sebagai contoh
(method|meth) <user.letter> [<user.go_pointer>] [<user.go_visibility>] <user.text> [over] [<user.go_visibility>] named <user.text> [over]:
user.go_method(go_pointer or "", letter, go_visibility_1 or "public", text_1, go_visibility_2 or "public", text_2)
Deklarasi method Go dan eksperimen ekspresi pointer
- Di Go, method memiliki bentuk seperti berikut
func (reciever *Type) MethodName() {
// function body here or something
}
- Dijelaskan bahwa Go tidak memiliki method dalam arti tradisional, melainkan fungsi yang menerima receiver yang diberi namespace ke struct tertentu
- Tanpa otomatisasi, memasukkan kode ini dengan suara mengharuskan Anda mengucapkan perintah yang panjang
state funk args word reciever space star hammer type over go right space hammer method name args go right brack enter
- Dengan aturan Talon, Anda bisa mengucapkannya lebih singkat
meth r raised type named method name over
- Masih ada banyak kata yang harus diucapkan, tetapi input menjadi lebih efisien dan lebih dekat dengan cara mengonseptualisasikannya di kepala
raisedadalah eksperimen untuk mengekspresikan konsep pointer Go dengan cara berbeda- Sintaks pointer Go bergaya C, dan interpretasi yang digunakan adalah bahwa
*dipakai untuk menurunkan (lower) nilai pointer menjadi nilai biasa, sedangkan&dipakai untuk menaikkan (raise) nilai biasa menjadi nilai pointer - Saat merancang ulang binding Talon untuk Go, saya sedang bereksperimen apakah menyatukan nilai pointer dengan konsep raising/lowering membuatnya lebih mudah dipahami
- Sintaks pointer Go bergaya C, dan interpretasi yang digunakan adalah bahwa
- Saya ingin ikut GitHub Copilot Voice beta dan membandingkannya dengan coding suara berbasis Talon
1 komentar
Komentar Hacker News
Saya penulisnya, dan tidak menyangka responsnya akan sebaik ini di sini
Kalau tertarik, saya menaruh repositori konfigurasi Talon eksperimental saya di sini: https://github.com/Xe/invocations
Saya merasa suatu hari nanti bekerja dengan cara seperti ini mungkin tidak wajib dibanding memakai keyboard, tetapi akan jauh lebih tidak menyakitkan, dan saya senang mengetahui ada opsi yang praktis
Setiap kali melihat konfigurasi seperti ini, saya merasa neurodiversitas saya cukup berbeda dari orang lain. Konteks dan abstraksi yang harus dipertahankan di kepala untuk memahami dan berpindah di layar terasa sangat besar, dan tampaknya hanya mungkin jika sudah puluhan tahun terbiasa dengan bahasa serta IDE/CLI
Bagian “seiring waktu ini menjadi naluri kedua seperti perintah Vim” juga terasa benar-benar harus dipelajari seperti itu. Saya sudah memakai komputer selama 30 tahun, tetapi tingkat kemahiran coding seperti ini masih membingungkan sekaligus mengagumkan
Ingin tahu apakah kurang memuaskan, atau apakah solusi di sisi VS Code terlihat jauh lebih baik
Saya tidak terlalu tertarik pada Cursorless, karena saya tidak memakai VSCode dan objek teks di mode Vim/Evil sama kuatnya sekaligus lebih tidak ramai secara visual. Keseluruhan konsep ini sangat menjanjikan
Ini tampak seperti cara melakukan operasi pada “bagian” buffer dengan memakai AST tree-sitter
Jika begitu, ini sangat mirip dengan objek teks Vim/Evil, tetapi dengan elemen suara
Kalau ditambahkan fitur seperti “rekam lalu jalankan”, potensinya terlihat besar. Saat mengerjakan tugas X dengan keyboard, jika tugas Y berikutnya terlihat di layar dan merupakan tugas sederhana, Anda bisa mengucapkan perintah Y lalu menekan tombol untuk menjalankan perintah suara setelah X selesai. Itu jauh lebih baik daripada bergantian mengetik dan berbicara
Mengetik dan berbicara memakai ranah kognitif yang berbeda, dan menulis software setelah memahami tata bahasanya tidak terlalu bersifat verbal. Jika bisa mengetik dan berbicara secara bersamaan, rasanya akan lebih mudah masuk ke keadaan flow, dan ini tampak seperti semacam rubber duck debugging versi diperkuat. Mencatat juga mungkin bisa dilakukan
Sepertinya akan ada paket Emacs
Namun sepertinya butuh waktu untuk mengejar area ini. Mesin tampilannya belum bisa menangani notasi ala Cursorless, dan integrasi tree-sitter juga belum matang. Saya sudah mencobanya sendiri
Meski begitu, akan menyenangkan kalau ada yang native untuk Emacs
Bukan Cursorless itu sendiri, tetapi ada presentasi dan demo yang sangat bagus tentang pemrograman suara di sini: https://youtu.be/GM_siEPD4Ws?si=99ZhC1P4irOyu1pH
Enak ditonton, dan pembicaranya juga membahas dengan baik masalah-masalah umum saat ini di bidang ini
Saya masih mencoba memahami sepenuhnya cara kerjanya
Kedengarannya mirip avy yang memakai suara sebagai pengganti keyboard, ditambah perintah yang sadar AST: https://karthinks.com/software/avy-can-do-anything/
Setelah itu saya mencoba membuat overlay selalu terlihat, tetapi mentok di suatu tempat
Presentasi Strange Loop dari pembuat Cursorless: https://www.youtube.com/watch?v=NcUJnmBqHTY
Saya penasaran kenapa memakai “urge” dan “bat”
Tidak bisakah memakai kata apa saja yang dimulai dengan huruf terkait?
Detailnya ada di sini: https://whalequench.club/blog/2019/09/03/learning-to-speak-c...
Kalau dulu pernah coding dengan suara 6–8 jam sehari, tiap mikro-optimasi seperti ini terasa sangat berharga
Bukankah dengan teknologi pelacakan pandangan mata sekarang, menaruh kursor di posisi yang dilihat selama 2 detik atau lebih sudah cukup?
Saya teringat studi tentang tatapan yang menetap saat mengemudi atau melihat karya seni
Saat coding, kita sangat sering berhenti seperti itu
Diperlukan perangkat pelacak pandangan mata yang sangat responsif dan akurat, yang bisa mendeteksi setidaknya 3–5 tombol: klik, tekan, lepas, geser kanan, geser kiri
Gaya penulisan ini terasa sangat mirip dengan bagian dialog Kura-kura dan Achilles dalam Gödel, Escher, Bach
Saya berusia 52 tahun dan sejak 1995 mengetik setiap hari di pekerjaan teknis. Sekitar tahun 2000 saya mengalami cedera akibat penggunaan berulang, dan saya sempat mencoba alat bantu ergonomis seperti bantalan empuk untuk meletakkan pergelangan tangan di depan keyboard atau perangkat geser untuk menopang siku, tetapi tidak ada yang efektif
Sebagai gantinya, saya mengubah cara mengetik. Saya membiarkan tangan dan pergelangan tetap rileks, lalu alih-alih merentangkan jari untuk menekan tombol, saya menggerakkan lengan; itu berhasil
Sampai sekarang saya masih banyak mengetik setiap hari, tetapi sudah 20 tahun tanpa nyeri. Tiap orang berbeda, tetapi mengubah cara memakai lengan dan tangan bisa sangat membantu
Jika gerakan bisa dialihkan ke kelompok otot yang lebih besar, umumnya lebih baik melakukannya. Misalnya memakai bahu/punggung alih-alih lengan, lengan alih-alih tangan, dan tangan alih-alih jari
Tiap orang berbeda, tetapi trackball sangat membantu saya. Untuk sementara saya menaruh mouse di kiri dan trackball di kanan lalu memakainya bergantian, tetapi sekarang tidak perlu lagi
Beristirahat dan memperhatikan postur juga penting. Terutama postur pergelangan tangan: saya tidak menyandarkan pergelangan atau lengan di mana pun, dan hanya jari yang menyentuh keyboard
Jauh setelah itu saya mulai latihan kekuatan dengan kettlebell, dan saya merasa kekuatan serta sirkulasi darah cukup membaik
Sekitar 10 tahun lalu saya punya masalah nyeri punggung, nyeri leher, dan cedera akibat penggunaan berulang. Saya belajar duduk dengan punggung tegak, memperbaiki tinggi meja, dan menata ulang barang-barang di meja agar tidak mengetik dengan postur membungkuk seperti udang. Saya juga menyadari bahwa sebenarnya saya tidak perlu mengetik sebanyak itu
Sejak itu saya sama sekali tidak merasakan nyeri
Jika ingin melihat gambaran umum Cursorless dan seperti apa penggunaannya secara nyata, presentasi Strange Loop tahun ini bagus: https://youtube.com/watch?v=NcUJnmBqHTY
Saya sangat menyukainya dan senang pengembangannya terus berlanjut, tetapi untuk benar-benar mendalaminya sepertinya orang perlu mengalami cedera lengan atau tangan, atau cedera akibat penggunaan berulang yang parah
Biaya awal untuk masuk secara mental terlihat tinggi
Hanya saja, batasan terbesarnya tampaknya adalah ini praktis hanya bisa dipakai saat bekerja dari rumah sendirian. Sulit membayangkan memakainya di luar atau di kantor
Sepertinya saya akan memakainya kalau tangan saya tidak bisa digunakan