Transcript
00:00:00Ini adalah Wterm, emulator terminal berbasis web oleh Vasell
00:00:03yang melakukan render langsung ke DOM, bukan ke canvas.
00:00:06Jadi seleksi teks, fitur cari di peramban,
00:00:08dan pembaca layar semua langsung berfungsi.
00:00:10Ditulis dalam Zig, dikompilasi menjadi biner WASM 12 kilobyte,
00:00:14dan ada juga backend opsional yang ditenagai LibGhosty,
00:00:17mesin yang sama yang menggerakkan terminal Ghosty,
00:00:19yang memberi Anda kompatibilitas terminal penuh di peramban.
00:00:22Tapi apakah biner WASM 12 kilobyte
00:00:24benar-benar cukup untuk menggantikan emulator terminal asli?
00:00:28Mungkin tidak, tapi klik subscribe dan mari kita cari tahu.
00:00:33Jadi, terminal web sudah ada di mana-mana.
00:00:36Di IDE cloud seperti GitHub Codespaces,
00:00:39alat infrastruktur seperti Portainer atau Qualify,
00:00:41dan bahkan IDE desktop seperti VS Code atau Cursor.
00:00:44Tapi semuanya menggunakan Xterm.js untuk melakukannya
00:00:47karena sudah ada sejak lama
00:00:49dan pada dasarnya menjadi standar.
00:00:51Namun, Xterm punya masalah besar.
00:00:52Ia melakukan render ke elemen canvas.
00:00:54Jadi melakukan hal seperti memilih teks
00:00:56atau mencari kata di halaman
00:00:58semuanya harus diimplementasikan ulang dari awal,
00:01:00yang tidak selalu berhasil dengan baik.
00:01:02Wterm mengambil pendekatan yang sepenuhnya berbeda
00:01:04dengan melakukan render ke DOM,
00:01:05yang berarti output terminal hanyalah HTML,
00:01:08dan peramban pada dasarnya menangani itu secara gratis.
00:01:10Tapi Wterm juga bisa melakukan beberapa hal keren
00:01:13dengan rendering HTML ini,
00:01:14seperti hanya melakukan render ulang pada baris yang diperbarui,
00:01:17alih-alih melakukan render ulang seluruh terminal pada setiap bingkai.
00:01:20Ini juga bisa ditulis dalam kerangka kerja berbeda
00:01:22seperti React atau Vue.
00:01:23Anda bisa mengubah tema.
00:01:24Dan ada juga paket Wterm ghosty terpisah,
00:01:27yang menukar panggilan zig dengan lib ghosty
00:01:29dan bekerja jauh lebih baik
00:01:31daripada proyek web ghosty lainnya,
00:01:33yang akan kita bahas lebih lanjut nanti di video ini.
00:01:35Tapi untuk saat ini, mari kita coba Wterm
00:01:37dengan proyek demo sederhana.
00:01:38Jadi setelah menginstal Wterm dengan React,
00:01:40Saya telah mengimpor komponen serta CSS-nya,
00:01:43dan saya sedang me-render komponen itu di sini.
00:01:45Jadi sekarang jika saya menjalankan aplikasinya dan pergi ke peramban,
00:01:48saya bisa melihat ada terminal.
00:01:49Tapi jika saya menekan perintah seperti ls,
00:01:51kita bisa melihat tidak ada yang terjadi.
00:01:52Dan ini karena tidak terhubung
00:01:53ke komputer lain untuk membaca informasi darinya.
00:01:56Biar saya jelaskan.
00:01:57Jadi saat ini klien tidak terhubung ke backend,
00:01:59jadi tidak ada tempat untuk mendapatkan informasi.
00:02:01Tapi yang harus kita lakukan adalah menghubungkannya ke mesin lain.
00:02:04Jadi itu bisa jadi mesin lokal saya
00:02:06atau mesin di cloud,
00:02:07lalu me-render terminal palsu atau pseudo terminal
00:02:10di dalam mesin itu dengan dimensi yang sama
00:02:13seperti yang ada di klien.
00:02:14Jadi jika kita melakukan pengetikan,
00:02:16informasi pengetikan itu dikirim
00:02:18ke mesin lain,
00:02:20yang mengeksekusi pengetikan tersebut,
00:02:22me-render hasilnya,
00:02:23dan mengirim semua informasi itu kembali ke klien.
00:02:25Dan bolak-balik itu harus terjadi
00:02:26dengan sangat cepat dengan penundaan minimal.
00:02:28Jadi cara terbaik untuk menghubungkan klien
00:02:30dan mesin lain bersama-sama
00:02:31adalah menggunakan WebSocket.
00:02:32Jadi mari kita lakukan itu.
00:02:34Jadi kita bisa menggunakan HETS di server
00:02:35dengan Ubuntu yang sudah saya siapkan
00:02:37dengan Node terinstal.
00:02:38Dan saya juga sudah memiliki server Wterm
00:02:40dengan skrip server.
00:02:42Jadi jika kita melihat ke dalamnya,
00:02:43kita bisa melihat kita membuat server WebSocket
00:02:45pada path /api/terminal.
00:02:48Ini akan lebih masuk akal nanti.
00:02:49Dan di bawah sini,
00:02:49kita membuat pseudo terminal
00:02:51dengan nama yang cocok dengan tipe terminal kita.
00:02:53Begini cara Anda bisa menemukan milik Anda jika penasaran.
00:02:55Dan di bawah sini,
00:02:56kita mendapatkan pengetikan apa pun dari klien,
00:02:58memprosesnya di server,
00:02:59jadi di dalam terminal palsu kita,
00:03:01lalu mengembalikan informasi itu
00:03:02ke klien di sini.
00:03:03Jadi server mengembalikan semuanya
00:03:05dan bukan hanya baris tertentu yang telah diperbarui.
00:03:07Sekarang di klien dalam file app.tsx,
00:03:10kita membuat koneksi WebSocket
00:03:11ke server kita pada port /api/terminal.
00:03:14Kemudian kita menggunakan transformasi WebSocket
00:03:16dari Wterm untuk terhubung ke URL tersebut
00:03:19dengan penyambungan ulang otomatis.
00:03:21Lalu ini yang mengirim informasi pengetikan
00:03:23dari sini ke server.
00:03:24Kita menangani pengubahan ukuran peramban di sini,
00:03:26lalu di bawah sini,
00:03:27dan fungsi handle data
00:03:28menangani semua informasi
00:03:30yang datang dari server.
00:03:31Dan hal keren tentang inti ZIG
00:03:33adalah ia akan melewati informasi ini,
00:03:35mencari tahu apa yang telah diubah,
00:03:36dan hanya melakukan render ulang bagian HTML tersebut.
00:03:39Di bawah sini, ukuran kolom dan baris
00:03:41harus sesuai dengan apa yang kita miliki di server,
00:03:42dan selebihnya cukup mudah dipahami.
00:03:45Jadi sekarang dengan klien dan server berjalan,
00:03:47kembali ke peramban, jika saya menekan LS,
00:03:49kita bisa melihatnya mendaftarkan file yang kita miliki.
00:03:52Jadi saya bisa menekan LS dengan flag L
00:03:53untuk melihat informasi lebih lanjut tentang file tersebut.
00:03:55Saya bisa CD ke dalam file,
00:03:57melihat informasi di dalamnya,
00:03:59dan juga melakukan hal-hal seperti melihat daftar
00:04:01kontainer yang sedang berjalan.
00:04:02Saya bahkan bisa membuka file dengan Vim
00:04:03dan menavigasinya.
00:04:04Tapi meskipun semua itu berhasil,
00:04:06itu tidak melakukannya dengan sangat baik.
00:04:07Maksud saya, jika kita mencoba menyorot teks,
00:04:09kita bisa melihat beberapa karakter
00:04:10sama sekali tidak terbaca.
00:04:12Jadi untuk memperbaikinya,
00:04:13kita bisa mengatur Wterm dengan Ghosty
00:04:15dengan memuat inti Ghosty
00:04:16dan menambahkannya sebagai prop di React.
00:04:18Anda bisa melihat sekarang jika kita membuka file server
00:04:20dan menyorot teks,
00:04:22semuanya jauh lebih terbaca.
00:04:23Itu bahkan bisa melakukan hal seperti
00:04:24me-render open code dengan benar,
00:04:26memungkinkan kita mengubah model,
00:04:27dan memberikannya prompt dengan dukungan emoji.
00:04:29Kita bahkan bisa melihat bahwa Ghosty me-render warna
00:04:31sedikit lebih baik
00:04:31daripada dengan perender inti Wterm default.
00:04:34Tapi inti Zig hanya 12 kilobyte
00:04:36dibandingkan dengan 400 kilobyte dari Ghosty.
00:04:39Jadi jika Anda peduli dengan ukuran,
00:04:40maka mungkin tetap gunakan inti Zig.
00:04:43Bagaimanapun, itu adalah gambaran singkat tentang Wterm dari Vercel.
00:04:46Tentu saja, ada begitu banyak fitur lain
00:04:48yang tidak saya bahas,
00:04:49seperti bisa mengonversi Markdown
00:04:51menjadi output terminal yang bagus,
00:04:52menggunakan Bash saja untuk menavigasi file palsu
00:04:55jika Anda tidak memiliki akses ke backend.
00:04:57Dan bahkan ada contoh
00:04:58tentang cara mengatur klien SSH
00:05:00melalui terminal di peramban.
00:05:02Tapi saya rasa Wterm tidak sempurna.
00:05:05Ada beberapa masalah rendering
00:05:06saat menggunakan versi Ghosty,
00:05:08bolak-balik antara NeoVim
00:05:10atau bahkan OpenCode.
00:05:11Dan untuk membuat perender Ghosty bekerja
00:05:13dengan frontend BUN saya,
00:05:15saya harus mengimpor file WASM
00:05:17karena BUN tidak akan menyalin file non-JS
00:05:19dari folder Node modules.
00:05:21Tapi saya menyukai pendekatan rendering DOM,
00:05:23yang berarti Anda mendapatkan aksesibilitas
00:05:25dan fitur peramban asli
00:05:27tanpa melakukan pekerjaan tambahan,
00:05:29yang selama ini sulit dilakukan Xterm,
00:05:31meskipun sudah ada lebih dari 10 tahun.
00:05:33Tapi Xterm.js memiliki ekosistem yang sangat besar
00:05:35dan merupakan solusi yang teruji,
00:05:38jadi Anda tidak akan salah jika akhirnya memilihnya.
00:05:40Ada juga GhostyWeb oleh Coda,
00:05:42yang mengambil pendekatan berbeda.
00:05:43Ini menggunakan mesin libGhosty yang sama
00:05:45yang digunakan oleh terminal Ghosty yang asli,
00:05:48tapi ini adalah pengganti drop-in untuk Xterm,
00:05:50jadi tetap menggunakan pendekatan rendering canvas
00:05:52dan menggunakan API yang sama,
00:05:54tetapi Anda mendapatkan terminal yang lebih baik.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video