2 poin oleh GN⁺ 2024-04-22 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2024-04-22
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

    • Kalau dipikir sekilas memang terlihat mudah, tetapi dalam praktiknya mendapatkan kontras yang bagus dan performa itu tidak sesederhana itu
      Lihat saja libaa atau libcaca; ada contoh orang menghabiskan ratusan jam untuk topik ini
    • Secara konsep mungkin mudah dipahami, tetapi implementasinya terlihat cukup sulit
  • 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

    • Saya tadinya mau menulis ingin melihat arah sebaliknya, tetapi tidak mengejutkan ternyata itu sudah ada
      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
    • Akan seru kalau dipakai bersama rm -rf
  • Saya 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

    • Terima kasih atas kata-kata hangatnya, dan tidak perlu terlalu menyalahkan diri sendiri
      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
    • Kalau bekerja 8 jam sehari dan komuter 1 jam, masih tersisa 15 jam
      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
    • Rasanya sangat familier
      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
    • Setiap melihat hal seperti ini, saya jadi teringat masa sebelum punya anak
  • 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

    • Secara ketat, itu bukan daftar Todo atau kalender di dalam Doom, melainkan Doom yang berjalan di dalam daftar Todo atau kalender
      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/
    • Kalau Anda merasa tren “memasukkan Doom ke dalam sesuatu” sudah mendekati akhir, sepertinya Anda masih baru di dunia ini
    • Saya juga berpikir persis sama saat melihat “burung memainkan DOOM”
  • 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