DOOM'u htop ile çalıştırmak
Derleme yöntemi
doomgeneric dizinine gidin
make -j8 komutuyla derleyin
- Bir WAD dosyası (oyun verisi) gereklidir. Bu projeye
freedoom1.wad dahildir (tüm teşekkürler Freedoom projesine). Alternatif olarak klasik ücretsiz shareware sürümü DOOM1.wad indirip kullanabilirsiniz
Çalıştırma yöntemi
Nasıl çalışıyor
- https://github.com/ozkl/doomgeneric projesi fork'lanarak geliştirildi
main.c, keylogger.c, ascii_stuff.c dosyaları eklendi ve bazı değişiklikler yapıldı
- Basit bir görüntüden ASCII'ye dönüştürücü yazıldı (
ascii_stuff.c içindeki uzun if zinciri)
- Ana doom süreci, ASCII görüntünün satır sayısı kadar alt süreç oluşturur ve her süreç için paylaşımlı bellek segmenti oluşturur
- Ana süreç her satırı ilgili sürecin bellek segmentine kopyalar, her alt süreç de kendi segmentinden okuyup
argv[0] değerinin üzerine yazar
- Başta süreçleri CPU kullanımına göre sıralamaya çalışıldı ancak bu zordu. Linux'taki
nice da düşünüldü ama kullanıcı tarafından ayarlanabilen yalnızca 19 değer olduğu için vazgeçildi
- Sanal bellek tahsisini kullanma fikri bulundu. Bu değer her süreç için özeldir
- Tüm alt süreçler tam olarak aynı miktarda bellek ayırsa bile
htop içinde kareler doğru sırada gösterilir. Muhtemelen eşitlik durumunda oluşturulma zamanına göre sıralanıyor
- Klavye aygıtını açan basit bir keylogger yazıldı. Oyun,
htop çalışıyor olsun ya da olmasın her zaman arka planda çalışır
Desteklenen platformlar
- Yalnızca Ubuntu 22.04 üzerinde test edildi
- WSL ve Arch'ta klavye aygıtı adı farklı. Portlama gerekiyor
Sorun giderme
- Klavye çalışmıyorsa
main.c içindeki KEYBOARD_DEVICE makrosunu kontrol edin. Platforma göre farklı olabilir
ll /dev/input/by-path komutuyla içinde kbd geçen aygıtı seçin
- Kareler donuyorsa
sed komutu çalışmamış olabilir
htop içinde F2 -> "Display options" -> "Update process names on every refresh" seçeneğini işaretleyin
sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory hatası
- Bunun nedeni
htopun daha önce hiç çalıştırılmamış olmasıdır. htopu çalıştırıp kapatın, ardından sed komutunu tekrar çalıştırın
- Ana doom süreci ölür ve yalnızca zombi süreçler kalırsa
sudo pkill doom-htop çalıştırın
İyileştirmeler
- Yön tuşlarıyla hareket ederken
htop ekranının da kayması rahatsız edici
- Bu,
htop başlatıldıktan sonra odağı değiştirerek çözülebilir (örneğin a tuşuna basıp işlemci seçim menüsünü açmak)
SSS
- S: Neden yaptınız?
C: Eğlenceli olacağını düşündüm.
Lisans
- Freedoom, BSD tarzı bir lisansa sahiptir (
freedoom-license.txt dosyasına bakın)
- Kodun geri kalanının GPL olduğu tahmin ediliyor
GN⁺ görüşü
- 3D oyun görüntüsünü ASCII sanatla ifade etmek taze bir fikir. C ile htop benzeri bir ekranda grafik çizmenin iyi bir örneği gibi görünüyor
- Sadece ekranı ASCII sanata dönüştürmekle kalmayıp bunu gerçek oyun motoruyla entegre ederek uygulamış olması etkileyici
- Mevcut
doomgeneric projesini iyi kullanarak az miktarda kodla gerçekleştirmiş olması da takdire değer
- Klavye girdisi almak için Linux aygıtını doğrudan açmak, WSL veya diğer işletim sistemi ortamlarında çalışmayabilir. İşletim sisteminden bağımsız bir tuş girişi kütüphanesi kullanmak değerlendirilebilir
- Paylaşımlı bellek kullanarak ebeveyn ve alt süreçler arasında ASCII kare verisi aktarma fikri ilginç. IPC öğrenmek için iyi bir örnek
- ASCII grafikleri
htop süreç adlarına yerleştirme fikri de yaratıcı. Ancak htopta süreç adı değişimi nedeniyle ekranın kayması gibi yan etkiler de var. İyileştirme gerekiyor gibi görünüyor
- GPL lisanslı olduğu tahmin ediliyor ancak net değil. Kodu yeniden kullanmadan önce lisansı doğrulamak gerekir
1 yorum
Hacker News görüşleri
Bu yorumlar, ASCII olarak render edilmiş Doom oyununu
htopkullanarak bir süreç gibi çalıştıran projeye verilen tepkileri içeriyor. Başlıca noktalar şunlar:htopu bir render motoru olarak kullanma fikri etkileyici ve yazılım hack’liğinin özünü gösteriyor.