- doom-htop,
htop süreç listesini grafik çıktısı gibi kullanarak Doom tarzı oyun ekranını ASCII biçiminde gösteren deneysel bir projedir
- Çalıştırmak için bir WAD oyun veri dosyası gerekir; depoda freedoom1.wad yer alır ve klasik shareware
DOOM1.wad için ayrı indirme bağlantısı verilir
- Çalışma mantığı, Doom sürecinin ekran satırı sayısı kadar alt süreç oluşturması ve her sürecin paylaşılan bellekten aldığı bir satırı kendi argv[0] alanına yazarak
htop içindeki süreç adı bölümünde kareyi oluşturmasına dayanır
htop süreç adlarını her yenilemede güncelleyecek şekilde ayarlanmalıdır; -d 1 ile yaklaşık 10 FPS yenileme hedeflenir ve -s M_VIRT ile sanal bellek ölçütüne göre sıralama kullanılır
- Klavye girdisi, klavye aygıtını açan basit bir keylogger yöntemiyle alındığı için
sudo gerekebilir; yalnızca Ubuntu 22.04 üzerinde test edilmiştir ve WSL ile Arch için aygıt yolunun uyarlanması gerekir
Projenin amacı ve çalışma biçimi
- doom-htop,
htopun klasik video oyunu grafikleri çizmek için kullanılıp kullanılamayacağını görmek amacıyla yapılmış bir projedir
- Ortaya çıkan görüntü, Doom'u
htop süreç listesinin üzerinde ASCII video gibi göstermektedir
- Proje, ozkl/doomgeneric'in bir fork'udur ve Doom'u çalıştırmaya ilişkin ağır işleri bu proje üstlenir
Derleme ve gerekli oyun verisi
- Derleme,
doomgeneric dizininde make -j8 ile yapılır
cd doomgeneric
make -j8
- Çalıştırmak için bir WAD oyun veri dosyası gerekir
- Depoda
freedoom1.wad yer alır; teşekkür bilgileri The Freedoom project sayfasındadır
- Klasik ücretsiz shareware sürümü
DOOM1.wad, Doom Wiki üzerinden indirilebilir
DOOM1.wad dosyasını GitHub'a koymanın hukuken sorun çıkarıp çıkarmayacağından emin olunmadığı için depoya eklenmemiştir
Çalıştırma yöntemi ve htop ayarları
- Çalıştırmadan önce önemli işlerin kaydedilmesi önerilir; test ortamı 12 yıllık bir Lenovo ThinkPad T430s, 8GB RAM, Intel Core i7-3520M @ 2.90GHz ve Ubuntu 22.04 idi, burada düzgün çalıştı
- Temel çalıştırma komutu şöyledir
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
- Önce
doom-htop ya da htop çalıştırılmış olması fark etmez
sudo, yalnızca klavye aygıtını açmak için gereklidir
sudo olmadan çalıştırılırsa giriş yapmak zorlaşır ama görüntü yine izlenebilir
htop -d 1, 10 FPS civarında yenileme hedefleyen ayardır
htop -s M_VIRT, ilgili süreçlerin daha düzenli gruplanması için süreçleri sanal bellek tahsisine göre sıralar
- Sıralama iyi oturmuyorsa
main.c içindeki PROCS_MALLOC_SIZE değeri ayarlanabilir
sed komutu gereklidir çünkü htop varsayılan olarak süreç adlarını her yenilemede güncellemez
İç çalışma mantığı
- Depo, mevcut
doomgeneric üzerine ağırlıklı olarak üç dosya ekler
main.c
keylogger.c
ascii_stuff.c
ascii_stuff.c, basit bir image-to-ASCII dönüştürücü tarafından üretilmiş uzun bir if zinciri içerir
- Ana Doom süreci, ASCII'ye çevrilmiş görüntünün satır sayısı kadar süreci
fork ile oluşturur
- Ana süreç, her alt süreç için bir paylaşılan bellek segmenti oluşturur ve görüntünün ilgili satırını o sürecin bellek segmentine kopyalar
- Her alt süreç, kendi segmentindeki içeriği kopyalayıp
argv[0] üzerine yazar
htop, süreç adı olarak gösterilen argv[0] değerini güncelleyerek ekranın her satırını göstermiş olur
Sıralama fikri ve giriş işleme
- İlk fikir CPU kullanımına göre sıralamaydı ve belirli CPU kullanım oranı tüketen süreçler oluşturulmak istendi, ancak bunu uygulamak zor oldu
- Linux
nice değeri de düşünüldü, fakat normal kullanıcılar için mümkün olan değer sayısı yalnızca 19 olduğundan daha iyi grafikler için yetersiz görüldü
- Sonunda sanal bellek tahsisi kullanıldı; bunun süreç bazında oldukça ayrıntılı ayarlanabildiği düşünüldü
- Tüm fork süreçleri aynı miktarda bellek ayırsa da test sisteminde
htop kareleri doğru sırayla gösterdi
- Eşitlik durumunda oluşturulma zamanına göre sıralanıyor olabileceği tahmin ediliyor
- Ancak bunun başka sistemlerde nasıl davranacağından emin olunmadığı için aynı değere güvenilmiyor
- Tuş girdisi, klavye aygıtını açan basit bir keylogger ile işlenir
- Bu sayede
htop açık olmasa bile oyun arka planda çalışmaya devam eder
Platform ve sorun giderme
- Testler yalnızca Ubuntu 22.04 üzerinde yapıldı
- WSL ve Arch üzerinde klavye aygıtı adı farklıdır; uyarlama gerekir
- Klavye çalışmıyorsa
main.c içindeki #define KEYBOARD_DEVICE değeri kontrol edilmelidir
/dev/input/by-path altında kbd içeren girdiyi bulup seçme yöntemi önerilir
- Kare donmuş görünüyorsa
sed komutu uygulanmamış olabilir
htop içinde F2 → “Display options” → “Update process names on every refresh” işaretlenerek elle ayarlanabilir
~/.config/htop/htoprc bulunamadı hatası, htop hiç çalıştırılmadığında ortaya çıkabilir
htop bir kez açılıp kapatıldıktan sonra sed komutu yeniden çalıştırılabilir
- Ana Doom süreci çöker ve geride çok sayıda zombi süreç kalırsa, şu komutla temizlenebilir
sudo pkill doom-htop
Kalan işler ve lisans
htop, yön tuşlarıyla gezinirken ekranı kaydırdığı için oyun kontrolü sırasında rahatsız edici olabilir
- Oyun başladıktan sonra
a tuşuna basarak odağı işlemci seçimi menüsüne taşıyan basit bir geçici çözüm önerilir
- Yapılma nedeni funny idi
- Freedoom, ana dizindeki
freedoom-license.txt içinde yer alan BSD benzeri bir lisansla dağıtılır
- Kalan kodun ise GPL olduğu belirtilir
1 yorum
Hacker News yorumları
Düşününce, “videoyu” ASCII olarak render edip süreç adlarına koymak oldukça kolay görünüyor olabilir
DNS üzerinde çalışan oyuncak projelere benziyor; README de işin çoğunu başka projelerin yaptığını söylediği için özel görünmeyebilir
Öte yandan htop’u bir şeyin render motoru olarak görmeyi hiç akıl edemezdim; bu yüzden gerçekten şaşırtıcı ve etkileyici bir yazılım hack’i
Sadece libaa veya libcaca’ya bakmak bile, insanların bu konuya yüzlerce saat harcadığını gösteriyor
Tersine çevrilmiş PSDoom[1] gibi bir şey sanırım
Bu gönderide Doom’u bir süreç yöneticisiyle oynuyorsunuz; PSDoom’da ise süreç yönetimini Doom ile yapıyorsunuz
[1]: https://psdoom.sourceforge.net
Güncel Linux’ta çalışacak şekilde port edilmiş bir videosu da var: https://youtu.be/Pf7rpde49NU
Yine de top yerine geçecek bir araç olarak biraz daha gerçekten kullanışlı olsa güzel olurdu. Canavar boyutu bellek kullanımına, saldırganlık CPU kullanımına göre belirlenir; odalar kullanıcılara göre ayrılır, thread’ler ve ebeveyn/çocuk süreç ilişkileri de görünür kılınabilir
Uyuyan süreçler elbette uyur; zombi süreçler ise mekânda donup kalmış ya da içinden geçilebilir şekilde saydam yapılabilir. Silahlar kill sinyallerine karşılık getirilebilir
Eklenebilecek çok şey var ama o zaman giderek Doom’dan uzaklaşır
rm -rfile birlikte kullanınca eğlenceli olurduİnsanlar böyle şeylere zamanı nasıl buluyor, gerçekten merak ediyorum
Böyle havalı şeyler gördükçe kendi becerilerime olan güvenim giderek azalıyor
Mevcut çalışmaları kullanıp ASCII olarak yeniden render ederek süreçlere eşlediği söylenmişti, ama bu kesinlikle az iş değil
Ne kadar sürdüğünü merak ediyorum; bu sektörde epey uzun süredir olmama rağmen hiçbir şey bilmiyormuşum gibi hissediyorum. Harika ama kendimi inanılmaz aptal gibi hissettiriyor
Muhtemelen sandığından çok daha fazlasını biliyorsun
Bu iş bütün bir hafta sonu ve bir gün, ayrıca fırsat buldukça birkaç gün daha ufak ufak çalışarak ortaya çıktı
Yorumlarda bir yerde ve README’de de yazdığım gibi, Doom’u daha taşınabilir hâle getiren zor işi fork’ladığım doom-generic projesi yapmıştı: https://github.com/ozkl/doomgeneric
Yemek yemek, uyumak, duş almak ve başka şeyler yapmak gerekir ama bunları umursamazsan 15 saat olduğu gibi kalır
3 yılda yapmak için fazlasıyla zaman var
Şimdi 6502 için raycaster’ımı bitirmem lazım
Arkadaşların Instagram’da paylaştığı kusursuz ev fotoğraflarına bakıp özgüvenini aşındırmanın programcı versiyonu gibi
Çoğu kişi ara sıra böyle hissediyordur; bununla baş etmenin yolları da var, ama zeki insanların çevresinde olmanın çok normal bir yan etkisi
“Bir şeyin içine Doom koyma” akımı neredeyse tamamlanma noktasına gelmiş gibi; artık gündelik şeyleri Doom’un içine koymaya başlamanın zamanı geldi
Doom içindeki bir Todo listesini ya da takvimi hayal edin
Todo uygulaması tarafında zaten checkbox’larla render edilmiş Doom var[1]; onu bir Todo uygulamasına entegre etmeyi de okuyucuya alıştırma olarak bırakabiliriz
[1]: https://healeycodes.github.io/doom-checkboxes/
Bu projeye yaklaşık bir hafta önce tesadüfen rastlayıp buraya koymuştum ama ilgi görmemişti
Şimdi ön sayfaya çıktığını görmek sevindirici; böyle eğlence odaklı, hack kokan projelerin öne çıkması hoşuma gidiyor
Harika bir hack
Hacker ruhunun hâlâ yaşadığını görmek iyi hissettiriyor
Bazen insanlar teknolojiyi fazla ileri götürüyor, ama bu onlardan biri değil
Windows Görev Yöneticisi’nde çalıştırılan Bad Apple aklıma geldi
https://youtu.be/sBeI30ccb6g
Saf ve şahane bir delilik. A+
Bu oyunun bundan sonra nerede çalıştırılacağını hayal bile edemiyorum