2 पॉइंट द्वारा GN⁺ 2024-04-22 | 1 टिप्पणियां | WhatsApp पर शेयर करें

htop में DOOM इम्प्लीमेंट करना

बिल्ड करने का तरीका

  • doomgeneric डायरेक्टरी में जाएँ
  • make -j8 कमांड से बिल्ड करें
  • WAD फ़ाइल (गेम डेटा) आवश्यक है। इस प्रोजेक्ट में freedoom1.wad शामिल है (सारा श्रेय Freedoom प्रोजेक्ट को)। या क्लासिक मुफ़्त shareware वर्ज़न DOOM1.wad डाउनलोड करके इस्तेमाल किया जा सकता है

चलाने का तरीका

  • महत्वपूर्ण काम पहले से सेव कर लेने की सलाह दी जाती है
  • यह पुराने लैपटॉप पर भी अच्छी तरह चलता है, यह पुष्टि की गई है
  • नीचे दिया गया कमांड चलाएँ:
    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 और htop को किस क्रम में चलाते हैं, इससे फर्क नहीं पड़ता
  • कीबोर्ड डिवाइस खोलने के लिए sudo आवश्यक है। यदि सुरक्षा को लेकर चिंता हो, तो sudo के बिना चलाकर केवल ग्राफ़िक्स देखे जा सकते हैं
  • htop में -d 1 10FPS refresh rate के लिए है। -s M_VIRT प्रोसेसों को virtual memory allocation के क्रम में sort करने के लिए है
  • sed कमांड इसलिए ज़रूरी है क्योंकि htop डिफ़ॉल्ट रूप से हर refresh पर प्रोसेस नाम अपडेट नहीं करता

यह कैसे काम करता है

  • https://github.com/ozkl/doomgeneric प्रोजेक्ट को fork करके इस पर काम किया गया
  • main.c, keylogger.c, ascii_stuff.c फ़ाइलें जोड़ी गईं और कुछ बदलाव किए गए
  • एक सरल image-to-ASCII converter लिखा गया (ascii_stuff.c का लंबा if स्टेटमेंट)
  • मुख्य doom प्रोसेस ASCII इमेज की लाइनों की संख्या के बराबर child processes बनाता है, और हर प्रोसेस के लिए shared memory segment बनाता है
  • मुख्य प्रोसेस हर लाइन को संबंधित प्रोसेस के memory segment में कॉपी करता है, और हर child प्रोसेस अपने segment से पढ़कर argv[0] को overwrite करता है
  • शुरुआत में CPU usage के आधार पर प्रोसेस sort करने की कोशिश की गई, लेकिन यह कठिन था। Linux के nice पर भी विचार किया गया, लेकिन यूज़र द्वारा सेट किए जा सकने वाले मान केवल 19 ही हैं, इसलिए छोड़ दिया गया
  • virtual memory allocation उपयोग करने का विचार आया। यह हर प्रोसेस के लिए विशिष्ट होता है
  • भले ही सभी child processes बिल्कुल समान memory allocate करें, htop में फ़्रेम सही क्रम में दिखते हैं। शायद समान स्थिति में यह creation time के क्रम में sort करता है
  • कीबोर्ड डिवाइस खोलने के लिए एक सरल keylogger लिखा गया। htop चल रहा हो या नहीं, गेम हमेशा बैकग्राउंड में चलता रहता है

समर्थित प्लेटफ़ॉर्म

  • केवल Ubuntu 22.04 पर टेस्ट किया गया है
  • WSL और Arch में कीबोर्ड डिवाइस का नाम अलग है। पोर्टिंग की आवश्यकता है

समस्या समाधान

  1. अगर कीबोर्ड काम नहीं करता
    • main.c में KEYBOARD_DEVICE macro जाँचें। यह प्लेटफ़ॉर्म के अनुसार अलग हो सकता है
    • ll /dev/input/by-path कमांड से वह डिवाइस चुनें जिसमें kbd शामिल हो
  2. अगर फ़्रेम रुक जाएँ
    • संभव है sed कमांड ने काम नहीं किया हो
    • htop में F2 -> "Display options" -> "Update process names on every refresh" को चेक करें
  3. sed: can't read /home/<user>/.config/htop/htoprc: No such file or directory त्रुटि
    • यह तब होता है जब htop कभी चलाया ही नहीं गया हो। htop चलाकर बंद करें और फिर sed दोबारा चलाएँ
  4. अगर मुख्य doom प्रोसेस मर जाए और केवल zombie processes बचें
    • sudo pkill doom-htop चलाएँ

सुधार के बिंदु

  • arrow keys से चलते समय htop स्क्रीन भी हिलती है, जिससे असुविधा होती है
  • htop शुरू होने के बाद focus बदलकर इसे हल किया जा सकता है (जैसे a key दबाकर processor selection menu खोलना)

FAQ

  1. Q: इसे क्यों बनाया गया? A: क्योंकि यह मज़ेदार लगा।

लाइसेंस

  • Freedoom BSD-style license के अंतर्गत है (freedoom-license.txt देखें)
  • बाकी कोड संभवतः GPL है

GN⁺ की राय

  • ASCII art से 3D गेम स्क्रीन दिखाना एक ताज़ा आइडिया है। यह C में htop जैसी स्क्रीन पर ग्राफ़िक्स बनाने का अच्छा उदाहरण लगता है
  • केवल स्क्रीन को ASCII art में बदलना ही नहीं, बल्कि इसे वास्तविक गेम इंजन के साथ जोड़कर इम्प्लीमेंट किया गया है, यह प्रभावशाली है
  • मौजूदा doomgeneric प्रोजेक्ट का अच्छा उपयोग करके कम कोड में इसे बनाया गया है, यह भी सराहनीय है
  • कीबोर्ड इनपुट लेने के लिए Linux डिवाइस को सीधे खोलना WSL या अन्य OS वातावरण में काम न भी करे। OS-स्वतंत्र key input library पर विचार किया जा सकता है
  • shared memory का उपयोग करके parent-child processes के बीच ASCII frame data भेजने का विचार दिलचस्प है। IPC सीखने के लिए यह अच्छा उदाहरण है
  • htop के प्रोसेस नामों में ASCII graphics डालने का विचार भी रचनात्मक है। लेकिन प्रोसेस नाम बदलने से स्क्रीन हिलने जैसे side effects भी हैं। इसमें सुधार की ज़रूरत लगती है
  • लाइसेंस संभवतः GPL है, लेकिन स्पष्ट नहीं है। कोड reuse करते समय लाइसेंस की पुष्टि करना आवश्यक है

1 टिप्पणियां

 
GN⁺ 2024-04-22
Hacker News राय

ये टिप्पणियाँ उस प्रोजेक्ट पर प्रतिक्रियाएँ हैं जिसमें htop का उपयोग करके ASCII में render किया गया Doom गेम एक process के रूप में चलाया जाता है। मुख्य बिंदु इस प्रकार हैं:

  • PSDoom से तुलना: जहाँ PSDoom Doom का इस्तेमाल process management के लिए करता है, वहीं यह प्रोजेक्ट इसका उल्टा करता है और process manager का उपयोग करके Doom खेलता है.
  • तकनीकी मूल्यांकन: ASCII में render करके उसे process name में डालना अपने-आप में बहुत कठिन नहीं है, लेकिन htop को rendering engine की तरह इस्तेमाल करने का विचार प्रभावशाली है और software hacking का सार दिखाता है.
  • डेवलपर की क्षमता के प्रति सम्मान: ऐसे प्रोजेक्ट बनाने का समय और क्षमता रखने वाले डेवलपर्स को देखकर अपनी ही क्षमता पर भरोसा कम होने लगता है.
  • Doom integration ट्रेंड: अब शायद रोज़मर्रा की चीज़ों को Doom में integrate करने के बारे में भी सोचा जा सकता है। to-do list या calendar जैसी चीज़ों की कल्पना की जा सकती है.
  • हैकर भावना की प्रशंसा: मज़े के लिए किए गए hacking projects का लोकप्रिय होना खुशी देता है और दिखाता है कि hacker spirit अभी भी ज़िंदा है.
  • Bad Apple की याद: यह Windows Task Manager में बनाए गए Bad Apple वीडियो की याद दिलाता है.
  • Doom का भविष्य: आगे Doom को कहाँ तक implement किया जा सकता है, इसकी कल्पना करना मुश्किल है.