2 puan yazan GN⁺ 2024-04-22 | 1 yorum | WhatsApp'ta paylaş

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

  • Önemli işlerinizi önceden kaydetmeniz önerilir
  • Eski dizüstü bilgisayarlarda da iyi çalıştığı doğrulandı
  • Aşağıdaki komutları çalıştırın:
    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
    
  • doom-htop ile htopun hangi sırayla başlatıldığı fark etmez
  • Klavye aygıtını açmak için sudo gerekir. Güvenlik açısından endişeniz varsa sudo olmadan çalıştırıp yalnızca grafikleri izleyebilirsiniz
  • htop içindeki -d 1, 10 FPS yenileme hızı içindir. -s M_VIRT ise süreçleri sanal bellek tahsisi sırasına göre sıralamak içindir
  • sed komutu gereklidir çünkü htop varsayılan olarak süreç adlarını her yenilemede güncellemez

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

  1. 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
  2. Kareler donuyorsa
    • sed komutu çalışmamış olabilir
    • htop içinde F2 -> "Display options" -> "Update process names on every refresh" seçeneğini işaretleyin
  3. 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
  4. 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

  1. 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

 
GN⁺ 2024-04-22
Hacker News görüşleri

Bu yorumlar, ASCII olarak render edilmiş Doom oyununu htop kullanarak bir süreç gibi çalıştıran projeye verilen tepkileri içeriyor. Başlıca noktalar şunlar:

  • PSDoom ile karşılaştırma: PSDoom, süreç yönetimi için Doom’u kullanırken bu proje bunun tersini yaparak Doom oynamak için bir süreç yöneticisini kullanıyor.
  • Teknik değerlendirme: ASCII olarak render edip bunu süreç adlarına yerleştirmek tek başına zor değil, ancak htopu bir render motoru olarak kullanma fikri etkileyici ve yazılım hack’liğinin özünü gösteriyor.
  • Geliştiricinin yeteneğine duyulan saygı: Böyle projeler yapacak zamanı ve becerisi olan geliştiricileri görünce insan kendi yeteneklerine olan güvenini kaybediyor.
  • Doom entegrasyonu trendi: Artık gündelik şeyleri Doom’a entegre etmeyi de düşünmek mümkün. Yapılacaklar listesi ya da takvim gibi şeyler hayal edilebilir.
  • Hacker ruhuna övgü: Eğlence için yapılan hack projelerinin ilgi görmesi sevindirici ve hacker ruhunun hâlâ yaşadığını gösteriyor.
  • Bad Apple çağrışımı: Windows Görev Yöneticisi’nde yapılmış Bad Apple videosunu hatırlatıyor.
  • Doom’un geleceği: Bundan sonra Doom’un daha nerelere uygulanabileceğini hayal etmek zor.