- The Backdooms एक compressed, self-extracting, infinitely generated HTML गेम है, जो DOOM 1993 और The Backrooms से प्रेरित है और QR कोड से सीधे ब्राउज़र में चलता है
- पूरा गेम कोड URL में समाने के तरीके का उपयोग किया गया है, और स्कैन के बाद इंटरनेट कनेक्शन के बिना खेलने योग्य पूरी तरह offline संरचना को लक्ष्य बनाया गया है
- compression flow में HTML को Zlib से compress किया जाता है, फिर Base64 में encode करके JavaScript HTML wrapper में रखा जाता है, और ब्राउज़र में
DecompressionStream API से decompress करके चलाया जाता है
- QR generation में
qr.make(fit=True) से संभव सबसे छोटा QR version खोजा जाता है, और अगर वह standard limit version 40 तथा error correction level L के भीतर न आए तो यह fail हो जाता है
- mobile support सिर्फ उन modern mobile browsers तक सीमित है जो
DecompressionStream API को support करते हैं; README में Edge, Yandex, Opera उदाहरण के रूप में दिए गए हैं
The Backdooms क्या करता है
- The Backdooms एक HTML गेम है जो पूरे गेम को QR कोड के अंदर रखकर web browser में चलाता है
- यह गेम DOOM 1993 और The Backrooms से प्रेरित है, और compressed self-extracting web page के रूप में बना है
- QR कोड स्कैन करते ही यह सीधे ब्राउज़र में चलता है, और किसी अलग download या installation की ज़रूरत नहीं होती
- README में बताया गया है कि इसे स्कैन करके खेला जा सकता है
- GitHub Pages पर इसका थोड़ा कम compressed version भी उपलब्ध है
storage space limits को आगे बढ़ाने वाली compression विधि
- प्रोजेक्ट का लक्ष्य QR कोड storage capacity और compression limits को आगे बढ़ाना है, और यह दिखाना है कि QR कोड के अंदर lightweight web applications को कैसे host किया जा सकता है
- compression flow निम्न क्रम में बना है
- input HTML को पढ़ना
- HTML को Zlib से compress करना
- compressed data को Base64 में encode करना
- इसे JavaScript-आधारित HTML wrapper में insert करना
- पूरे HTML को
data:text/html;base64,... फ़ॉर्मैट के Data URI में बदलना
- ब्राउज़र में
DecompressionStream API का उपयोग करके compressed content को dynamically खोलकर चलाया जाता है
- README के diagram में browser processing stage पर
DecompressionStream 'gzip' और Format Mismatch चरण शामिल हैं
QR कोड generation logic
- QR कोड generation tool लगभग 2.5kb गेम को QR कोड में बदलने का flow देता है
- run example इस प्रकार हैं
python3 QRGEN.py <your-game.html> <output-qrcode.png>
python3 QRGEN.py EVEN-SMALLER-SLAMMER-BACKROOMS.html qrcode.png
- generation process में
qr.make(fit=True) के साथ पहले content length के अनुरूप सबसे छोटा QR version आज़माया जाता है
- अगर आवश्यक version QR कोड standard limit 40 से ऊपर जाता है, तो
fit=False के साथ version 40 को force किया जाता है
- अधिकतम data समाने के लिए error correction level सबसे निचला L इस्तेमाल किया जाता है
- अगर version 40 और level L पर भी data बहुत बड़ा हो, तो QR encoding fail होकर error लौटाता है
execution और compatibility
- खेलने के लिए केवल एक modern web browser चाहिए
- scan के बाद पूरा गेम कोड URL में होने के कारण इसे इंटरनेट कनेक्शन के बिना खेला जा सकता है
- mobile पर
DecompressionStream API को support करने वाला modern browser चाहिए
- README में Edge, Yandex, Opera उदाहरण के रूप में दिए गए हैं
- छोटे QR कोड के लिए BigInt-आधारित वैकल्पिक implementation The BigInt Branch में है, लेकिन mobile browser compatibility सीमित है
generation environment और license
- QR कोड खुद generate करने के लिए निम्न dependencies चाहिए
-
Python 3.7+
qrcode लाइब्रेरी
- QR कोड image processing के लिए
pillow
- dependency install command इस प्रकार है
pip install qrcode[pil]
- development process को [MindDump](https://kuberwastaken.github.io/blog/Projects/How-I-Managed-To-Get-Doom-In-A-QR-Code) में संकलित किया गया है
- प्रोजेक्ट **MIT License** के तहत जारी है, इसलिए इसे स्वतंत्र रूप से उपयोग, संशोधित और साझा किया जा सकता है
1 टिप्पणियां
Hacker News की राय
DecompressionStream के बारे में पहली बार पता चला, और HTML हिस्से को थोड़ा निखारकर कुछ बाइट और घटा दिए
रुचि हो तो देखने के लिए PR भी डाल दिया है
सच में बहुत शुक्रिया, यह इस महीने की सबसे अच्छी चीज़ बन गई
वाकई शानदार प्रोजेक्ट है
data:URL के बारे में भी नया पता चला;data:URI scheme को जानता था और इस्तेमाल भी किया था, लेकिन यह नहीं पता था कि इसे पूरे URL की तरह इस्तेमाल किया जा सकता हैसोचा था QR code में पूरा समाने वाली कोई मिलती-जुलती चीज़ बनाऊँ, लेकिन गलती से लगा कि HTTP(s) link चाहिए होगा, इसलिए टाल दिया था; इस वीडियो से बहुत प्रेरणा मिली: Can you fit a whole game into a QR code?(https://www.youtube.com/watch?v=ExwqNreocpg)
हालांकि ज़्यादा व्यापक compatibility के लिए मैंने उल्टी दिशा, यानी browser-based रास्ता चुना, और repository में credit भी दे रखा है
मैं tech में beginner हूँ, तो शायद बेवकूफी भरा सवाल हो, लेकिन QR तो बस data encode करता है, है न?
अगर QR में आ सकने वाला maximum data करीब 3KB है, तो वह plaintext के लगभग 3000 characters के बराबर होगा; क्या यहाँ उपलब्धि यह है कि यह Doom जैसा game इतने आकार के executable code के रूप में चलता है?
QR standard में 8-bit encoding का मतलब और उद्देश्य थोड़ा अस्पष्ट लगता है, लेकिन default interpretation JIS8 और Shift JIS character sets है, और दूसरे ECI में यह 8-bit byte values को सीधे दर्शाता है
किसी भी तरह, QR code में arbitrary binary data store करना संभव है और
qrencodetool इसे default तौर पर support करता हैलेकिन decoders अक्सर मान लेते हैं कि QR में text है, इसलिए support मुश्किल हो जाता है; zbar data को
iconvसे गुजारकर खराब कर देता था, इस वजह से मैंने binary QR decoding patch भी भेजा थाअसल में मैं बस 4096-bit RSA private key को QR code के रूप में print करना चाहता था, लेकिन बाद में लोग video games भी QR में encode करने लगे, और यह सच में कमाल है
https://youtu.be/ExwqNreocpg
https://news.ycombinator.com/item?id=24287347
iPhone के default QR code scanner से scan किया तो “कोई usable data नहीं मिला” दिखा
data:URI URL support नहीं करताउदाहरण के लिए, self-contained webpage
Hi!कोdata:text/html;base64,PGh0bWw+PGJvZHk+SGkhPC9ib2R5PjwvaHRtbD4=के रूप में encode किया जा सकता है, और browser में paste करने परHi!render होता हैलेकिन इसे QR code बना दें, तो उस स्थिति में यह काम नहीं करता
ज़्यादातर phones बड़े QR codes ठीक से नहीं पढ़ पाते, इसलिए https://qrscanner.org/ जैसी चीज़ चाहिए
और phone पर यह काम नहीं करेगा; size limit की वजह से वह compatibility भी शामिल नहीं कर पाया
URL type करने का समय बचाने के लिए मैं जगह-जगह लगे QR codes अक्सर scan करता हूँ; अगर सिर्फ QR code scan करने से arbitrary code execution संभव हो, तो यह काफी डरावना लगेगा
Canvas CSS में
image-rendering: pixelatedडालें तो धुंधला न होकर sharp pixel वाला look दिखेगाअगला project QR code वाला LLM हो तो अच्छा होगा
संबंधित: https://www.reddit.com/r/OpenAI/comments/138kbhs/someone_sho...
LLM नहीं है, लेकिन फिर भी काफी शानदार chatbot है
https://github.com/Kuberwastaken/MiniLMs/tree/main/SYNEVA
Game trailer link “Fly me to the moon - 19 September 2024” नाम के Shorts पर जा रहा है
लगता है गलती है
ऐसे ultra-small game projects मुझे बहुत पसंद हैं
.kkrieger याद आता है
https://en.wikipedia.org/wiki/.kkrieger
kuberwastaken, ऐसे ही बढ़िया चीज़ें बनाते रहो
एक दोस्त के साथ कुछ हद तक related idea पर बात हुई थी
सोच रहा था कि 3D printing के लिए STL file को पूरा QR code में encode करके असली print पर चिपका दें, तो क्या बनाई हुई चीज़ को सिर्फ scan करके फिर से print किया जा सकेगा?
पता किया तो data बहुत ज़्यादा लगा, और multi-color QR codes तक खोजे, लेकिन यह नहीं पता था कि बस बड़ा QR code भी बनाया जा सकता है
Tables में सिर्फ sheet material cutting चाहिए थी, इसलिए 2D file encode की थी, फिर भी proof of concept के लिए custom compression algorithm तक इस्तेमाल करना पड़ा
https://johnkestner.com/rev/