- doom-htop एक प्रायोगिक प्रोजेक्ट है जो
htop की प्रोसेस सूची को ग्राफ़िकल आउटपुट की तरह इस्तेमाल करके Doom-श्रेणी के गेम की स्क्रीन ASCII रूप में दिखाता है
- इसे चलाने के लिए WAD गेम डेटा फ़ाइल चाहिए; रिपॉज़िटरी में freedoom1.wad शामिल है, और classic shareware
DOOM1.wad को अलग से डाउनलोड करने के लिए बताया गया है
- इसका काम करने का तरीका यह है कि Doom प्रोसेस स्क्रीन की लाइनों की संख्या जितने child process बनाती है, और हर प्रोसेस shared memory से मिली एक पंक्ति को अपने argv[0] में लिखकर
htop के process name क्षेत्र में फ़्रेम बनाती है
htop को हर बार process name refresh करने के लिए सेट करना पड़ता है, और -d 1 के साथ लगभग 10 FPS refresh तथा -s M_VIRT के साथ virtual memory आधारित sorting इस्तेमाल की जाती है
- keyboard input एक साधारण keylogger तरीके से keyboard device खोलकर लिया जाता है, इसलिए
sudo की ज़रूरत पड़ सकती है; इसका परीक्षण केवल Ubuntu 22.04 पर हुआ है, और WSL व Arch में device path समायोजन चाहिए
प्रोजेक्ट का उद्देश्य और चलाने का रूप
- doom-htop यह जाँचने के लिए बनाया गया प्रोजेक्ट है कि क्या
htop का उपयोग पुराने वीडियो गेम ग्राफ़िक्स render करने में किया जा सकता है
- परिणामस्वरूप स्क्रीन Doom को
htop की process list के ऊपर ASCII वीडियो की तरह दिखाती है
- प्रोजेक्ट ने ozkl/doomgeneric को fork किया है, और Doom चलाने से जुड़ा भारी काम वही प्रोजेक्ट संभालता है
बिल्ड और आवश्यक गेम डेटा
- बिल्ड
doomgeneric डायरेक्टरी में make -j8 से किया जाता है
cd doomgeneric
make -j8
- चलाने के लिए WAD गेम डेटा फ़ाइल चाहिए
- रिपॉज़िटरी में
freedoom1.wad शामिल है, और क्रेडिट The Freedoom project को दिया गया है
- classic free shareware संस्करण
DOOM1.wad को Doom Wiki से लिया जा सकता है
DOOM1.wad को शामिल नहीं किया गया क्योंकि इसे GitHub पर अपलोड करना कानूनी रूप से ठीक है या नहीं, इस पर लेखक को भरोसा नहीं था
चलाने का तरीका और htop सेटिंग
- चलाने से पहले महत्वपूर्ण काम सेव करने की सलाह दी गई है; परीक्षण वातावरण 12 साल पुराना Lenovo ThinkPad T430s, 8GB RAM, Intel Core i7-3520M @ 2.90GHz, Ubuntu 22.04 था, और यह सही चला
- डिफ़ॉल्ट रन कमांड इस प्रकार है
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 केवल keyboard device खोलने के लिए चाहिए
sudo के बिना चलाने पर input देना मुश्किल होगा, लेकिन स्क्रीन देखी जा सकती है
htop -d 1 लगभग 10 FPS refresh के लिए लक्षित सेटिंग है
htop -s M_VIRT processes को virtual memory allocation के आधार पर sort करता है ताकि संबंधित processes साफ़ तौर पर साथ दिखें
- अगर sorting ठीक न बैठे तो
main.c में PROCS_MALLOC_SIZE मान समायोजित किया जा सकता है
sed कमांड इसलिए ज़रूरी है क्योंकि htop डिफ़ॉल्ट रूप से हर बार process name refresh नहीं करता
आंतरिक कार्यप्रणाली
- रिपॉज़िटरी मौजूदा
doomgeneric में मुख्य रूप से तीन फ़ाइलें जोड़ती है
main.c
keylogger.c
ascii_stuff.c
ascii_stuff.c में एक साधारण image-to-ASCII converter द्वारा बनाया गया लंबा if statement है
- मुख्य Doom process ASCII में बदली गई इमेज की लाइनों की संख्या जितने processes
fork के जरिए बनाती है
- मुख्य process हर child process के साथ एक shared memory segment बनाती है, और इमेज की हर पंक्ति को संबंधित process के memory segment में कॉपी करती है
- हर child process अपने segment की सामग्री कॉपी करके
argv[0] को overwrite करती है
htop, process name के रूप में दिखने वाले argv[0] मान को refresh करते हुए, स्क्रीन की एक-एक पंक्ति दिखाता है
sorting का विचार और input प्रोसेसिंग
- शुरुआती विचार CPU usage आधारित sorting का था, और ऐसा process बनाने की कोशिश थी जो एक तय CPU usage खपत करे, लेकिन इसे लागू करना कठिन था
- Linux के
nice मान पर भी विचार किया गया, लेकिन सामान्य उपयोगकर्ता के लिए उपलब्ध मान केवल 19 हैं, इसलिए बेहतर graphics के लिए यह अपर्याप्त लगा
- अंततः virtual memory allocation का उपयोग किया गया, क्योंकि इसे हर process के हिसाब से काफ़ी सूक्ष्मता से समायोजित किया जा सकता है
- भले ही सभी fork किए गए processes समान मात्रा में memory allocate करें, परीक्षण सिस्टम पर
htop फ़्रेम को सही क्रम में दिखाता है
- अनुमान है कि बराबरी की स्थिति में sorting creation time के आधार पर होती होगी
- हालांकि दूसरे सिस्टम पर यह कैसे काम करेगा, इस पर भरोसा न होने के कारण समान मानों पर निर्भर नहीं किया गया
- key input एक साधारण keylogger से keyboard device खोलकर संभाला जाता है
- इस तरीके की वजह से
htop खुला न हो तब भी गेम बैकग्राउंड में चलता रहता है
प्लेटफ़ॉर्म और समस्या समाधान
- परीक्षण केवल Ubuntu 22.04 पर किया गया है
- WSL और Arch में keyboard device के नाम अलग हैं, इसलिए porting की ज़रूरत है
- अगर keyboard काम नहीं करता तो
main.c में #define KEYBOARD_DEVICE मान जाँचना चाहिए
/dev/input/by-path में kbd शामिल एंट्री खोजकर चुनने का तरीका बताया गया है
- अगर फ़्रेम रुका हुआ दिखे तो संभव है
sed कमांड लागू न हुई हो
htop में F2 → “Display options” → “Update process names on every refresh” को चेक करके इसे मैन्युअली सेट किया जा सकता है
~/.config/htop/htoprc न मिलने की त्रुटि तब आ सकती है जब htop कभी चलाया ही न गया हो
htop एक बार चलाकर बंद करें, फिर sed कमांड दोबारा चलाएँ
- अगर मुख्य Doom process crash हो जाए और बहुत सारे zombie processes रह जाएँ, तो उन्हें इस कमांड से साफ़ करें
sudo pkill doom-htop
बाकी काम और लाइसेंस
htop arrow keys से नेविगेट करते समय स्क्रीन को भी हिलाता है, जिससे गेम कंट्रोल के दौरान असुविधा हो सकती है
- गेम शुरू होने के बाद
a दबाकर processor selection menu पर focus बदलने का एक साधारण workaround सुझाया गया है
- इसे बनाने की वजह funny थी
- Freedoom को main directory की
freedoom-license.txt में दिए गए BSD-जैसे लाइसेंस के तहत वितरित किया जाता है
- बाकी कोड GPL के अंतर्गत प्रतीत होता है
1 टिप्पणियां
Hacker News की राय
सोचें तो “वीडियो” को ASCII में render करके उसे process name में डालना काफ़ी आसान भी लगता है
यह DNS पर चलने वाले खिलौना projects जैसा है, और README में भी कहा गया है कि ज़्यादातर काम दूसरे project ने किया है, इसलिए यह बहुत खास न लगे
दूसरी ओर, htop को किसी चीज़ के rendering engine की तरह देखने का विचार शायद मेरे दिमाग में कभी नहीं आता, इसलिए यह सचमुच हैरान करने वाला और प्रभावशाली software hack है
libaa या libcaca को ही देख लें, इस विषय पर सैकड़ों घंटे लगाने के उदाहरण मौजूद हैं
लगता है यह उल्टा PSDoom[1] जैसा है
इस submission में process manager से Doom खेला जा रहा है, और PSDoom में Doom से process management किया जाता है
[1]: https://psdoom.sourceforge.net
आज के Linux पर चलने के लिए port किया हुआ वीडियो भी है: https://youtu.be/Pf7rpde49NU
हालांकि top के replacement के रूप में यह थोड़ा ज़्यादा सच में उपयोगी हो तो अच्छा होगा। monster का size memory usage पर, aggression CPU usage पर आधारित हो, rooms user के हिसाब से बाँटे जाएँ, और threads तथा parent/child processes के रिश्ते भी दिख सकें
सोए हुए processes तो स्वाभाविक रूप से सोएँ, और zombie processes को space में जमे हुए या transparent बनाकर उनसे होकर गुज़रने लायक किया जा सकता है। weapons को kill signals से map कर दें
और भी बहुत कुछ जोड़ा जा सकता है, लेकिन तब यह धीरे-धीरे Doom से दूर होता जाएगा
rm -rfके साथ इस्तेमाल करें तो मज़ेदार होगासच में जिज्ञासा है कि ऐसे कामों के लिए समय कैसे निकाल लेते हैं
ऐसी शानदार चीज़ें जितनी देखता हूँ, अपनी क्षमता को लेकर भरोसा उतना ही कम होता जाता है
यह बात भी थी कि previous work का उपयोग करके इसे ASCII में फिर से render किया और processes पर map किया गया, लेकिन यह किसी भी तरह छोटा काम नहीं है
जानना चाहता हूँ कि इसमें कितना समय लगा होगा, और इस industry में काफ़ी समय रहने के बाद भी लगता है कि मुझे कुछ नहीं पता। शानदार है, लेकिन खुद को बहुत बेवकूफ़ जैसा महसूस कराता है
संभावना है कि आप अपनी सोच से कहीं ज़्यादा जानते हैं
यह काम पूरा weekend, लगभग एक दिन, और फिर समय मिलने पर कुछ और दिनों तक थोड़ा-थोड़ा करके बनाया गया
जैसा कि मैंने comments में कहीं और और README में भी लिखा है, Doom को ज़्यादा portable बनाने का कठिन काम fork किए गए doom-generic project ने कर रखा है: https://github.com/ozkl/doomgeneric
खाना, सोना, नहाना और बाकी चीज़ें करनी होती हैं, लेकिन अगर उनकी परवाह न करें तो 15 घंटे वैसे ही बचते हैं
3 साल हों तो बनाने के लिए काफ़ी समय है
अब मुझे 6502 के लिए raycaster पूरा करना होगा
दोस्तों के Instagram पर perfect घरों की तस्वीरें देखकर self-esteem गिराने का programmer version जैसा लगता है
ज़्यादातर लोग कभी-कभी ऐसा महसूस करते होंगे, और इससे निपटने के तरीके भी हैं, लेकिन smart लोगों के आसपास रहने का यह बिल्कुल सामान्य side effect है
“किसी चीज़ में Doom डालना” वाली लहर लगभग पूर्णता पर पहुँच गई लगती है, और अब समय आ गया है कि रोज़मर्रा की चीज़ों को Doom के अंदर डालना शुरू किया जाए
Doom के अंदर Todo list या calendar की कल्पना करें
Todo app की तरफ़ तो पहले से checkboxes से render किया गया Doom मौजूद है[1], इसलिए उसे Todo app में integrate करना पाठक के अभ्यास के लिए छोड़ सकते हैं
[1]: https://healeycodes.github.io/doom-checkboxes/
यह project मुझे लगभग एक हफ्ते पहले संयोग से मिला और मैंने इसे यहाँ post किया था, लेकिन कोई प्रतिक्रिया नहीं मिली
अब इसे front page पर देखकर अच्छा लग रहा है, और ऐसे fun-focused hacky projects का आना अच्छा लगता है
बेहतरीन hacking है
hacker spirit को अभी भी जिंदा देखकर अच्छा लगता है
कभी-कभी लोग technology को बहुत दूर तक ले जाते हैं, लेकिन यह वैसा मामला नहीं है
Windows Task Manager में चलाया गया Bad Apple याद आ गया
https://youtu.be/sBeI30ccb6g
शुद्ध और शानदार पागलपन। A+
कल्पना भी नहीं कर सकता कि आगे यह game और कहाँ चलेगा