- doom-htop adalah proyek eksperimental yang menggunakan daftar proses
htop layaknya keluaran grafis untuk menampilkan layar game keluarga Doom dalam bentuk ASCII
- Untuk menjalankannya diperlukan file data game WAD; repositori menyertakan freedoom1.wad, sementara classic shareware
DOOM1.wad diarahkan untuk diunduh terpisah
- Cara kerjanya: proses Doom membuat proses anak sebanyak jumlah baris layar, lalu setiap proses menulis satu baris yang diterima dari shared memory ke argv[0] miliknya, sehingga frame tersusun di area nama proses
htop
htop harus dikonfigurasi agar memperbarui nama proses setiap kali; dengan -d 1 ditargetkan refresh sekitar 10 FPS, dan -s M_VIRT digunakan untuk pengurutan berdasarkan memori virtual
- Input keyboard memakai cara keylogger sederhana yang membuka perangkat keyboard, sehingga mungkin memerlukan
sudo; hanya diuji di Ubuntu 22.04, sedangkan WSL dan Arch memerlukan penyesuaian path perangkat
Tujuan proyek dan bentuk eksekusi
- doom-htop adalah proyek yang dibuat untuk memastikan apakah
htop dapat digunakan untuk merender grafis video game klasik
- Hasil tampilannya berupa Doom yang ditampilkan seperti video ASCII di atas daftar proses
htop
- Proyek ini merupakan fork dari ozkl/doomgeneric, dan pekerjaan berat terkait eksekusi Doom ditangani oleh proyek tersebut
Build dan data game yang diperlukan
- Build dilakukan di direktori
doomgeneric dengan make -j8
cd doomgeneric
make -j8
- Untuk menjalankannya diperlukan file data game WAD
- Repositori menyertakan
freedoom1.wad, dengan kredit untuk The Freedoom project
- Versi classic free shareware
DOOM1.wad dapat diperoleh dari Doom Wiki
DOOM1.wad tidak disertakan karena belum yakin apakah secara hukum aman untuk mengunggahnya ke GitHub
Cara menjalankan dan konfigurasi htop
- Ada anjuran untuk menyimpan pekerjaan penting sebelum menjalankan; lingkungan pengujiannya adalah Lenovo ThinkPad T430s berusia 12 tahun, RAM 8GB, Intel Core i7-3520M @ 2.90GHz, Ubuntu 22.04, dan berjalan normal
- Perintah dasar untuk menjalankannya adalah sebagai berikut
sed -i 's/update_process_names=0/update_process_names=1/' ~/.config/htop/htoprc
sudo ./doom-htop -iwad freedoom1.wad
htop -d 1 -s M_VIRT
- Tidak masalah apakah
doom-htop atau htop dijalankan lebih dulu
sudo hanya diperlukan untuk membuka perangkat keyboard
- Jika dijalankan tanpa
sudo, input akan sulit, tetapi layar tetap dapat dilihat
htop -d 1 adalah konfigurasi yang menargetkan refresh 10 FPS
htop -s M_VIRT adalah konfigurasi untuk mengurutkan proses berdasarkan alokasi memori virtual agar proses-proses terkait terkumpul rapi
- Jika pengurutan tidak pas, nilai
PROCS_MALLOC_SIZE di main.c dapat disesuaikan
- Perintah
sed diperlukan karena secara default htop tidak memperbarui nama proses setiap kali
Cara kerja internal
- Repositori terutama menambahkan tiga file ke
doomgeneric yang sudah ada
main.c
keylogger.c
ascii_stuff.c
ascii_stuff.c berisi pernyataan if panjang yang dibuat oleh konverter image-to-ASCII sederhana
- Proses utama Doom membuat proses dengan
fork sebanyak jumlah baris gambar hasil konversi ASCII
- Proses utama membuat segmen shared memory dengan setiap proses anak, lalu menyalin tiap baris gambar ke segmen memori proses yang sesuai
- Setiap proses anak menyalin isi dari segmennya dan menimpa
argv[0]
htop kemudian memperbarui nilai argv[0] yang ditampilkan sebagai nama proses, sehingga setiap baris layar terlihat satu per satu
Ide pengurutan dan pemrosesan input
- Ide awalnya adalah pengurutan berdasarkan penggunaan CPU, dan sempat ingin membuat proses yang mengonsumsi persentase CPU tertentu, tetapi implementasinya sulit
- Nilai
nice di Linux juga dipertimbangkan, tetapi karena hanya ada 19 nilai yang dapat digunakan oleh pengguna biasa, itu dinilai tidak cukup untuk grafis yang lebih baik
- Pada akhirnya digunakan alokasi memori virtual, yang dianggap dapat disesuaikan cukup spesifik per proses
- Walaupun semua proses hasil fork mengalokasikan jumlah memori yang sama, pada sistem uji
htop menampilkan frame dalam urutan yang benar
- Diperkirakan hal ini mungkin karena saat nilainya sama, proses diurutkan berdasarkan waktu pembuatan
- Namun karena tidak yakin bagaimana perilakunya di sistem lain, proyek ini tidak bergantung pada nilai yang sama
- Input tombol ditangani dengan keylogger sederhana yang membuka perangkat keyboard
- Berkat cara ini, game tetap berjalan di background meskipun
htop tidak terbuka
Platform dan pemecahan masalah
- Pengujian hanya dilakukan di Ubuntu 22.04
- Di WSL dan Arch, nama perangkat keyboard berbeda dan perlu porting
- Jika keyboard tidak berfungsi, nilai
#define KEYBOARD_DEVICE di main.c perlu diperiksa
- Dianjurkan mencari item yang mengandung
kbd di /dev/input/by-path lalu memilihnya
- Jika frame berhenti, bisa jadi perintah
sed belum diterapkan
- Di
htop, pengaturan dapat dilakukan manual dengan mencentang F2 → “Display options” → “Update process names on every refresh”
- Error bahwa
~/.config/htop/htoprc tidak ada dapat terjadi ketika htop belum pernah dijalankan
- Jalankan
htop, keluar, lalu jalankan kembali perintah sed
- Jika proses utama Doom crash dan meninggalkan banyak proses zombie, bersihkan dengan perintah berikut
sudo pkill doom-htop
Pekerjaan tersisa dan lisensi
- Saat berpindah dengan tombol panah,
htop menggeser layar, sehingga bisa mengganggu saat mengontrol game
- Diusulkan workaround sederhana: setelah game dimulai, tekan
a untuk memindahkan fokus ke menu pemilihan prosesor
- Alasan pembuatannya adalah funny
- Freedoom didistribusikan dengan lisensi mirip BSD yang ada di
freedoom-license.txt pada direktori utama
- Kode lainnya disebut tampaknya GPL
1 komentar
Pendapat di Hacker News
Kalau dipikir-pikir, me-render “video” sebagai ASCII lalu memasukkannya ke nama proses tampaknya cukup mudah juga
Mirip dengan proyek-proyek mainan yang berjalan di atas DNS, dan README juga bilang sebagian besar pekerjaan dilakukan oleh proyek lain, jadi mungkin tidak terlihat istimewa
Di sisi lain, rasanya saya sama sekali tidak akan terpikir untuk melihat htop sebagai rendering engine untuk sesuatu, jadi ini benar-benar peretasan perangkat lunak yang mengejutkan dan mengesankan
Lihat saja libaa atau libcaca; ada contoh orang menghabiskan ratusan jam untuk topik ini
Sepertinya ini semacam PSDoom[1] yang dibalik
Kiriman ini adalah memainkan Doom dengan process manager, sedangkan PSDoom adalah mengelola proses dengan Doom
[1]: https://psdoom.sourceforge.net
Ada juga video port agar berjalan di Linux saat ini: https://youtu.be/Pf7rpde49NU
Namun akan bagus kalau ini sedikit lebih benar-benar berguna sebagai pengganti top. Ukuran monster berdasarkan penggunaan memori, agresivitas berdasarkan penggunaan CPU, ruangan dipisahkan per pengguna, dan thread serta proses parent/child juga bisa dibuat terlihat relasinya
Proses yang tidur tentu saja tidur, dan proses zombie bisa dibuat membeku di ruang atau transparan sehingga bisa dilewati. Senjata bisa dipetakan ke sinyal kill
Masih banyak yang bisa ditambahkan, tetapi kalau begitu lama-lama makin menjauh dari Doom
rm -rfSaya benar-benar penasaran bagaimana orang bisa punya waktu untuk membuat hal seperti ini
Semakin sering saya melihat hal sekeren ini, semakin berkurang keyakinan saya terhadap kemampuan sendiri
Memang ada yang bilang ini memanfaatkan pekerjaan sebelumnya, me-render ulang sebagai ASCII, lalu memetakannya ke proses, tetapi itu sama sekali bukan pekerjaan kecil
Saya penasaran butuh berapa lama, dan meski sudah cukup lama berada di industri ini, rasanya saya tidak tahu apa-apa. Keren, tetapi membuat saya merasa sangat bodoh
Kemungkinan besar Anda tahu jauh lebih banyak daripada yang Anda kira
Pekerjaan ini dibuat dalam satu akhir pekan penuh dan kira-kira satu hari, lalu sedikit-sedikit beberapa hari lagi ketika ada waktu
Seperti yang saya tulis di suatu komentar dan di README, pekerjaan sulit untuk membuat Doom lebih portabel sudah dilakukan oleh proyek fork doom-generic ini: https://github.com/ozkl/doomgeneric
Memang harus makan, tidur, mandi, dan melakukan macam-macam, tetapi kalau tidak memedulikan itu semua, 15 jam tetap tersisa
Dalam 3 tahun, waktunya cukup untuk membuat ini
Sekarang saya harus menyelesaikan raycaster untuk 6502
Ini seperti versi programmer dari menurunkan harga diri sendiri saat melihat foto rumah sempurna teman-teman di Instagram
Kebanyakan orang kadang-kadang merasa begitu, dan ada cara menghadapinya, tetapi ini efek samping yang sangat normal saat berada di sekitar orang-orang pintar
Tren “memasukkan Doom ke dalam sesuatu” rasanya hampir mencapai tahap final, dan sekarang sudah waktunya mulai memasukkan hal-hal sehari-hari ke dalam Doom
Bayangkan saja daftar Todo atau kalender di dalam Doom
Untuk sisi aplikasi Todo, sudah ada Doom yang dirender dengan checkbox[1], jadi mengintegrasikannya ke aplikasi Todo bisa dibiarkan sebagai latihan untuk pembaca
[1]: https://healeycodes.github.io/doom-checkboxes/
Saya kebetulan melihat proyek ini sekitar seminggu lalu dan mempostingnya di sini, tetapi tidak ada respons
Senang melihatnya sekarang masuk front page, dan saya suka proyek hacky yang berfokus pada kesenangan seperti ini muncul
Peretasan yang luar biasa
Rasanya menyenangkan melihat semangat hacker masih hidup
Kadang orang membawa teknologi terlalu jauh, tetapi kali ini bukan salah satu contohnya
Ini mengingatkan saya pada Bad Apple yang dijalankan di Windows Task Manager
https://youtu.be/sBeI30ccb6g
Kegilaan yang murni dan keren. A+
Saya bahkan tidak bisa membayangkan di mana lagi game ini akan dijalankan berikutnya