Transcript
00:00:00Ini adalah OpenTui, pustaka bertenaga Zig untuk membangun antarmuka terminal dengan binding
00:00:04untuk React, Solid, dan FreeJS sehingga Anda bisa membuat TUI berperforma tinggi seperti membangun aplikasi
00:00:09web. Pustaka ini dibuat oleh Anomaly, tim di balik OpenCode, yang merupakan open source populer
00:00:14untuk agen pengodean, untuk benar-benar menggerakkan antarmuka pengguna di balik OpenCode, yang digunakan oleh jutaan
00:00:19orang secara rutin. Tapi bagaimana pustaka baru ini bersaing dengan alat antarmuka terminal React
00:00:24populer lainnya yang sudah ada jauh lebih lama dan digunakan untuk menggerakkan banyak
00:00:29agen pengodean populer? Klik subscribe dan mari kita cari tahu!
00:00:35Jadi, Ink adalah pustaka andalan untuk membangun antarmuka terminal dengan React. Saya sebenarnya sudah membuat
00:00:40video tentang hal itu yang bisa Anda lihat di sini. Tapi ada beberapa masalah. Pertama-tama,
00:00:44aplikasi sederhana menggunakan lebih dari 50MB memori dan memiliki batas 30fps yang dikodekan secara keras, yang
00:00:51sebenarnya baik-baik saja untuk sebagian besar aplikasi. Namun jika Anda membangun aplikasi yang melakukan streaming banyak teks,
00:00:56seperti agen pengodean, maka batas bingkai tersebut membuat semuanya terasa lambat. Jadi tim
00:01:00di Anomaly, yang awalnya menggunakan Golang dengan Bubble Tea untuk membangun OpenCode, ingin menulis ulang
00:01:06dalam TypeScript tanpa menggunakan Ink. Jadi mereka membuat OpenTui. Maksud saya, mereka membeli OpenTui. Mereka tidak
00:01:13benar-benar membuatnya dari nol karena Commander FX sudah membangun pustaka terminal
00:01:18berbasis Zig. Jadi Anomaly mensponsorinya dan membangun OpenTui di atas karyanya. Jadi inti Zig melakukan semua
00:01:24rendering berat dan binding TypeScript memungkinkan Anda menulis komponen UI di React atau Solid. Tapi bagian
00:01:30yang sangat cerdas adalah foreign function interface BUN, yang memungkinkan Anda berbicara langsung
00:01:36dari TypeScript ke kode asli Zig tanpa banyak penundaan, itulah yang membuat OpenTui sangat
00:01:42berperforma. Ia menggunakan Yoga untuk tata letak Flexbox, hadir dengan komponen bawaan seperti input dan select,
00:01:47dan bahkan ada paket 3.js yang memungkinkan Anda merender grafik 3D WebGPU di dalam terminal,
00:01:54yang terasa agak gila. Faktanya, mari kita lihat OpenTui beraksi dengan mencobanya pada demo yang sangat sederhana. Ada
00:01:59banyak cara untuk menyiapkan proyek OpenTui dasar. Secara pribadi, saya suka menggunakan BUN CreateTui
00:02:04karena memberi Anda wizard yang sangat berguna untuk memberi nama proyek dan memilih
00:02:09template yang ingin digunakan. Sekarang saya akan memilih React, tapi nanti di video akan saya jelaskan,
00:02:13perbedaan antara ketiga template tersebut. Jadi setelah selesai, Anda mendapatkan beberapa file standar
00:02:17dengan indeks yang menjalankan proyek layar penuh dasar. Dan jika kita melihat kodenya,
00:02:21kita bisa melihat di sini bahwa ia menggunakan renderer CreateCLI untuk memanfaatkan mesin rendering OpenTui.
00:02:27Dan di bawahnya terdapat CreateRoot, yang merender komponen aplikasi. Dan jika Anda familiar
00:02:32dengan React, ini adalah kode yang me-mount-nya ke file HTML. Tapi karena kita merender ke terminal,
00:02:37proyek ini tidak memiliki index.html, melainkan menggunakan reconciler React kustom yang menggunakan
00:02:42kotak terminal dan teks alih-alih komponen HTML. Di atasnya, kita memiliki JSX yang menggunakan komponen kotak
00:02:49dan beberapa prop Yoga flexbox untuk menyelaraskan kotak di dalamnya yang merender font ASCII dan beberapa teks dasar.
00:02:55Sekarang, jika Anda tidak ingin ini menjadi aplikasi layar penuh, OpenTui mendukung beberapa mode layar.
00:03:00Dan kita bisa mengubahnya menjadi split footer dengan tinggi footer, yang menyematkan render ke wilayah
00:03:05yang dicadangkan di bagian bawah terminal. Tapi mari coba lakukan sesuatu yang sedikit lebih menarik daripada sekadar mengubah
00:03:10mode layar. Ini adalah TUI dasar dengan beberapa teks judul dan input nama. Sekarang, coba lihat ini. Dengan OpenTui, Anda mendapatkan
00:03:17responsivitas ini secara gratis. Jadi tidak peduli lebar terminal saya, semuanya tetap terlihat bagus. Dan jika
00:03:21kita melihat kodenya, ia menggunakan sintaks React yang sangat familier. Jadi di sini, kita memiliki useState
00:03:26yang mengatur nama. Dan pada input, kita memperbarui nama pada prop on input. Dan itu
00:03:32berubah dalam teks. Sekarang, satu hal yang sangat keren yang dilakukan OpenTui adalah semacam live reloading tanpa
00:03:37HMR. Jadi kita bisa melihat di sini, jika saya mengubah teks menjadi goodbye dan menyimpannya, teks itu secara otomatis
00:03:43diperbarui. Dan menyenangkan memiliki input responsif, tetapi terkadang teksnya tidak muncul. Hal ini bisa
00:03:48diperbaiki dengan menambahkan lebar, yang membuat segalanya jauh lebih mudah. Dan dengan komponen kotak, kita memiliki
00:03:52beberapa prop yang sangat keren seperti border dan background color, yang segera mempercantik aplikasi terminal ini.
00:03:56Sekali lagi, kita bisa menggunakan font ASCII alih-alih teks ini, yang membuat judul lebih menonjol.
00:04:01Dan tentu saja, ada banyak font ASCII yang bisa Anda pilih. Ingat, karena ini adalah aplikasi
00:04:05terminal, bukan halaman web, ia tidak merender semua font yang ada di sistem Anda, hanya yang mendukung
00:04:10terminal. Kita juga bisa melakukan hal-hal seperti mengubah tampilan saat submit dengan cara yang sama seperti aplikasi
00:04:15React biasa dengan mengubah state saat submit dan menampilkan JSX berbeda berdasarkan kondisi ini. Tapi inilah
00:04:20satu hal yang tidak Anda duga bisa dilakukan terminal. Jika saya mengirimkan nama saya, state lainnya sekarang memudar
00:04:25ke tempatnya. Dan ini dilakukan dengan hook use timeline dari OpenTui, yang digunakan untuk mengatur durasi animasi,
00:04:30mengatur target. Jadi dalam kasus ini, komponen memiliki opasitas nol dan offset delapan,
00:04:36artinya ia memiliki margin top di bawah tengah. Dan di sini animasi berakhir dengan offset nol
00:04:40dan opasitas satu dengan memperbarui state offset dan opasitas yang diatur di sini. Dan nilai-nilai ini
00:04:45diperbarui dalam prop kotak. Sekarang memang terlihat sedikit tersendat karena animasi terminal perlu
00:04:50bergerak baris demi baris. Jadi semacam di atas kisi, tapi sangat keren bahwa OpenTui memungkinkan Anda melakukan ini
00:04:55dengan begitu mudah. Yang lebih keren adalah kita bisa menggabungkan semua yang telah kita pelajari sejauh ini menggunakan tata letak flexbox
00:05:00untuk meletakkan kotak di samping satu sama lain. Jadi kita punya input di satu sisi dan kotak lain di sisi lainnya.
00:05:05Dan jika kita mengetik ke dalam input saat submit, kita bisa menganimasikan nilai yang masuk ke dalam kotak lain,
00:05:10yang merupakan sentuhan yang sangat manis. Dan dari sini, kita bisa melakukan banyak hal dengan OpenTui,
00:05:14seperti mengaktifkan navigasi keyboard dengan hook use keyboard, menampilkan data sistem menggunakan node OS,
00:05:19mengaktifkan dukungan mouse, daftar virtual. Dan karena semuanya berjalan di atas BUN,
00:05:24Anda bisa menggunakan hal-hal seperti BUN SQLite, BUN Postgres, atau mengambil informasi eksternal dengan cara
00:05:28yang sama dengan yang Anda lakukan di situs web mana pun. Dan hal keren tentang ini adalah setelah saya mengompilasi aplikasi saya, ya, ukurannya 71
00:05:34megabyte karena menyertakan runtime BUN dan rekonsiliasi React. Tapi saat saya menjalankannya,
00:05:39Anda bisa melihat ia menggunakan kurang dari 50 megabyte memori. Dan karena React sangat populer,
00:05:43LLM mengetahuinya luar dalam. Jadi membangun aplikasi di OpenTui bisa sangat sederhana
00:05:49tanpa perlu bolak-balik melihat dokumentasi. Jadi itu adalah panduan yang sangat, sangat sederhana
00:05:53tentang OpenTui. Tapi mari kita kembali ke awal video, di mana saya berjanji akan menjelaskan
00:05:58perbedaan antara React, Solid, dan Core. Jadi cukup sederhana jika Anda tahu tentang pengembangan web front-end.
00:06:02Pada dasarnya, mereka semua merender melalui Inti ZIC yang sama. Jadi penggambaran aktual ke
00:06:07terminal Anda cukup identik. Satu-satunya perbedaan adalah bagaimana Anda menulis komponen
00:06:11dan bagaimana pembaruan diterapkan. Jadi React menjalankan ulang komponen Anda dan melakukan diff pada pohon virtual pada setiap
00:06:17perubahan, yang cukup mirip dengan cara kerja DOM virtual. Solid menggunakan pembaruan yang lebih halus,
00:06:22sehingga ia hanya memperbarui hal yang berubah. Dan Core melewati semua itu, artinya Anda hanya melakukan mutasi
00:06:27objek secara langsung. Jadi di atas kertas, React adalah yang terberat dan Core adalah yang teringan. Namun dalam praktiknya,
00:06:33untuk sebagian besar aplikasi terminal, kesenjangannya kecil karena semua beban berat dilakukan oleh Inti ZIC,
00:06:38yang berarti dalam kasus ini, kerangka kerja hanyalah preferensi pribadi. Tapi meskipun aplikasi OpenTui
00:06:44dikirimkan dengan seluruh runtime BUN dan rekonsiliasi spesifik kerangka kerja, jika ada,
00:06:50performa dan ukuran aplikasi masih jauh lebih kecil daripada Ink, tapi tentu saja tidak se-
00:06:56performa sesuatu yang asli seperti Ratatouille atau Bubble Tea. Namun menurut pendapat saya, JSX adalah cara terbaik
00:07:02dan paling intuitif untuk menyusun UI apa pun. Dan saya lebih suka mengambil sedikit beban memori dan ukuran serta mendapatkan
00:07:09pengalaman pengembang yang jauh lebih baik dalam membangun TUI daripada memiliki sesuatu yang ringan dalam ukuran dan ringan
00:07:15dalam penggunaan memori, tetapi sulit untuk ditulis dan diperbarui. Jadi dengan pemikiran itu, saya akan memilih OpenTui
00:07:20daripada Ink setiap saat, jika saya sempat membangun aplikasi terminal,
00:07:25yang saya janji akan saya lakukan segera.
Community Posts
No posts yet. Be the first to write about this video!
Write about this video