3 poin oleh GN⁺ 2023-11-11 | 1 komentar | Bagikan ke WhatsApp
  • 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 bat dengan 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 u pada kata function, kata tersebut bisa disebut green 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 rentang function fetchBlog di layar
  • Karena memahami struktur AST bahasa, operasi seperti menghapus seluruh fungsi atau memindahkannya ke lokasi lain juga dimungkinkan
  • Perintah visualize lambdas memvisualisasikan 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 tempat async akan 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
  • raised adalah 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
  • Saya ingin ikut GitHub Copilot Voice beta dan membandingkannya dengan coding suara berbasis Talon

1 komentar

 
GN⁺ 2023-11-11
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

    • Pergelangan tangan saya umumnya baik-baik saja, tetapi sendi jari saya tidak selalu baik-baik saja karena osteoartritis dini yang menurun dalam keluarga
      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
    • Ini terlihat seperti tulisan yang sangat cocok dengan selera HN
      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
    • Penasaran apakah Anda juga sudah melihat solusi Emacs
      Ingin tahu apakah kurang memuaskan, atau apakah solusi di sisi VS Code terlihat jauh lebih baik
    • Berkat tulisan ini saya jadi sangat penasaran dengan Talon dan langsung mencobanya; saya sudah membuat layer aplikasi untuk terminal Warp dan juga mengekspos terminal Emacs yang biasanya tidak terdeteksi ke Talon
      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

    • Berkat Emacspeak, Emacs cukup bagus untuk arah sebaliknya, yaitu ketika seseorang bisa mengetik tetapi tidak bisa melihat layar
      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
    • Demo pemrograman dengan suara ini bagus untuk ditonton: https://youtu.be/GM_siEPD4Ws?si=f52wK3tqqJaCQPp7
    • Ada paket Emacs yang mengendalikan VSCode atau JetBrains dengan plugin Cursorless
      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 ingat presentasi itu. Ada lebih banyak video di kanal pembicaranya, tetapi sayangnya sepertinya ia sekarang tidak lagi melakukan coding dengan suara: https://www.youtube.com/@mccGoNZooo
  • 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/

    • Benar. Saat saya mencoba mengimplementasikannya ulang untuk Emacs, langkah pertama sebenarnya adalah membuat hats bergaya avy
      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?

    • Tidak. Talon punya alfabet fonetik yang dipilih agar pendek dan mudah dibedakan
      Detailnya ada di sini: https://whalequench.club/blog/2019/09/03/learning-to-speak-c...
    • Karena mudah diucapkan dan mudah dibedakan oleh Talon
      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

    • Mungkin saja, tetapi berhenti selama lebih dari 2 detik untuk menentukan posisi di layar terlalu lama
      Saat coding, kita sangat sering berhenti seperti itu
    • Anda bisa melihat contoh penggunaan eye tracker untuk coding atau game di YouTube dan menilai sendiri latensinya. Contohnya di sini: https://youtu.be/FZRgBw8m34c?feature=shared&t=90
    • Dibutuhkan pelacakan pandangan mata yang disertai klik sinyal saraf
      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

    • Pencerahan terbesar yang saya dapat saat bermain gitar bas di SMA juga itu
      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
    • Hampir 15 tahun lalu saya mengalami cedera akibat penggunaan berulang yang parah selama beberapa bulan, lalu hilang setelah saya mengubah berbagai kebiasaan
      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
    • Penulis memang sengaja menulisnya seperti itu. Kalau melihat halaman karakternya, itu dibuat untuk mencerminkan dialog antara Socrates dan muridnya. Menurut saya cukup cerdas
    • Mengubah cara mengetik adalah kuncinya
      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
    • Bagian tubuh lain juga penting. Terutama kepala dan bahu, serta core, pinggul, sampai kaki juga layak diperhatikan
  • 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

    • Setuju, tetapi alat seperti Emacs/Vim, Dvorak/Colemak, dan keyboard berkord juga punya biaya awal yang 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
    • Senang melihatnya dikembangkan secara aktif
      Sepertinya saya akan memakainya kalau tangan saya tidak bisa digunakan