- Nebraska के Gravel Worlds Long Voyage में सपोर्ट पॉइंट पर पिज़्ज़ा खत्म हो जाने की समस्या से बचने के लिए, बाइक GPS लोकेशन के आधार पर Casey's पिज़्ज़ा पहले से ऑर्डर करने वाला automation बनाया
- इसकी संरचना में AWS Location geofence GPS tracker के बाहर निकलने का पता लगाता है, और Lambda अगले स्टॉप के ETA के हिसाब से ऑनलाइन ऑर्डर चलाता है
- Casey's के पास public ordering API नहीं था, इसलिए Playwright से React-आधारित वेबसाइट को screen scraping किया गया, और ऑर्डर का नतीजा iPhone और Apple Watch push notifications से पाने की व्यवस्था की गई
- असली रेस में ऑर्डर सफल होने का notification आया, लेकिन स्टोर में ऑर्डर का कोई रिकॉर्ड नहीं था, जिससे cloud browser automation का false positive सामने आया
- बाद में browser activity का वीडियो S3 में सेव करने के लिए बदलने पर test order सफल हुआ, लेकिन Lambda environment में सिर्फ local testing से reliability पर भरोसा करना मुश्किल है
रेस के दौरान पिज़्ज़ा सुरक्षित करने की वजह
- Midwest के harvest season में Nebraska की Gravel Worlds Long Voyage साइकिल रेस में हिस्सा लिया
- पिछले साल तेज राइडर्स पहले पहुंच गए थे और सपोर्ट पॉइंट का Casey's पिज़्ज़ा पूरा ले गए थे, इसलिए पहुंचने पर कोई पिज़्ज़ा नहीं बचा था
- इस साल लक्ष्य था कि स्टॉप के समय के हिसाब से ताज़ा पिज़्ज़ा पहले से ऑर्डर किया जाए
- मौजूदा serverless बाइक GPS tracker के ऊपर यह तरीका जोड़ना था कि किसी खास geofence से बाहर निकलते ही ऑर्डर स्क्रिप्ट चल जाए
GPS और Lambda से ऑर्डर trigger करने का तरीका
- पूरी डिज़ाइन में AWS Location का geofence GPS tracker पर नज़र रखता है
- tracker के geofence से बाहर निकलते ही Lambda function trigger होता है
- Lambda अगले स्टॉप तक का ETA calculate करता है
- उसी समय के हिसाब से Casey's पिज़्ज़ा ऑर्डर किया जाता है
- Casey's के पास online ordering के लिए public API नहीं था, इसलिए वेबसाइट screen scraping चुना गया
- Casey's की वेबसाइट client-side rendered जटिल React app थी
- सामान्य scraper की जगह Playwright इस्तेमाल किया गया
- Lambda पर Playwright चलाने की प्रक्रिया इतनी कठिन थी कि उस पर अलग से लेख लिखा जा सकता था
- ऑर्डर की स्थिति देखने के लिए सफलता या विफलता पर फ़ोन और वॉच पर push notifications भेजने की व्यवस्था की गई
- iOS डिवाइस पर Web Push चलाने की सेटिंग भी अपने-आप में अलग लेख का विषय बन सकती थी
सफलता notification और वास्तविक नतीजे में फर्क
- ऑर्डर trigger करने वाला geofence रेस के 180 mile पॉइंट के आसपास सेट किया गया था
- पिज़्ज़ा 200 mile पॉइंट पर लेना तय था
- geofence से बाहर निकलते ही वॉच पर पिज़्ज़ा ऑर्डर सफल होने का push notification आया
- स्टॉप पर पहुंचने पर काउंटर पर कोई ऑर्डर नहीं था, और स्टोर में भी उसका कोई रिकॉर्ड नहीं मिला
- अकाउंट चेक करने पर पता चला कि असली ऑर्डर बना ही नहीं था, यानी सिर्फ सफलता notification वाला false positive था
- वहां पहले से बने कुछ slice पिज़्ज़ा उपलब्ध थे, इसलिए वही खरीद लिए
- इसके बाद 300-mile रेस खत्म होने तक Lambda function में क्या गलत हुआ, यही सोचते रहे
लॉग की जगह वीडियो कैप्चर ने सुराग दिया
- रेस के बाद लॉग देखे गए, लेकिन विफलता की वजह बताने वाली कोई जानकारी नहीं मिली
- लॉग में सब कुछ चुपचाप सफल दिख रहा था, इसलिए debugging के लिए पर्याप्त सुराग नहीं थे
- कुछ दिन बाद Lambda को बदलकर browser activity को वीडियो में कैप्चर करने और S3 bucket में upload करने की व्यवस्था की गई
- इस बदले हुए सेटअप के साथ test करने पर ऑर्डर सच में सफल हुआ, और Hawaiian pizza सही तरह से pickup किया गया
- सटीक वजह अब भी तय नहीं हो पाई
- संभव है कि embedded Playwright browser में आख़िरी
form.submit()चलते ही Lambda ने processing खत्म कर दी हो - संभव है कि online ordering साइट browser की success response receipt की पुष्टि न कर पाई हो, इसलिए ऑर्डर पूरी तरह process न हुआ हो
- वीडियो processing और upload में लगा अतिरिक्त समय browser cleanup के लिए पर्याप्त समय दे गया हो
- संभव है कि embedded Playwright browser में आख़िरी
अगर अगली बार फिर बनाऊँ तो क्या बदलूँगा
- cloud browser के जरिए React client app को भरोसेमंद तरीके से screen scrape करना संभव है, लेकिन बहुत कठिन है
- दोबारा बनाना हो तो Casey's native app का reverse engineering करके internal API को सीधे trigger करने पर विचार किया जा सकता है
- geospatial behavior को simulate करने के लिए अच्छा workflow चाहिए
- शुरुआत में घर के आसपास geofence बनाकर test किया गया
- रात 11 बजे बाहर पैदल जाकर test करने का तरीका जल्दी ही भारी लगने लगा
- वास्तविक environment testing को कम नहीं करना चाहिए
- रेस से पहले ज़्यादातर testing local workstation पर function चलाकर की गई
- local success ने यह गलत भरोसा दिया कि Lambda environment में भी सब सही चलेगा
- अगर Casey's पिज़्ज़ा खत्म हो जाने की चिंता हो, तो आगे वाले समूह से 30 मिनट से ज्यादा का अंतर रखकर स्टोर को नए slice पिज़्ज़ा बनाने का समय दिया जा सकता है
- कोड GitHub पर सार्वजनिक है: https://github.com/mattdsteele/spot-tracker-tracker/…
1 टिप्पणियां
Hacker News की रायें
Colin डिलीवरी करते हुए पिज़्ज़ा भी बना सकता है: https://youtu.be/YjyJRTM0knE?si=fes2lbRntUlciPSH
इस बेदाग दिखने वाले plan की घातक कमी यह थी कि जब truck सड़क के bumps पार करता था, तो पिज़्ज़ा उछलने लगते थे और सारी toppings खो देते थे: https://gizmodo.com/zume-softbank-ai-pizza-delivery-stellar-...
यह वीडियो इस साल YouTube पर देखी गई चीज़ों में सबसे ज़्यादा हँसाने वाला था
मैं अब भी तय नहीं कर पाया, और अजीब तरह से इसी वजह से देखना मुश्किल हो गया है। बेशक, अगर कुछ बहुत गड़बड़ हो जाता तो वह वीडियो publish नहीं करता
मैंने इस आदमी का घर से shed तक tunnel खोदने वाला वीडियो ढाई घंटे तक देखा; सच में मज़ेदार channel है
बहुत बढ़िया। pizzatool की 21वीं सदी वाली व्याख्या जैसा लगता है
https://donhopkins.medium.com/the-story-of-sun-microsystems-...
वैसे Tiburon में Waypoint Pizza नाम की pizza shop है, जो अगर आप अच्छे से request करें तो San Francisco Bay के पानी पर भी delivery कर देती है। Three Bridge Fiasco जैसी कम-गंभीर और अनोखी yacht races के समय काफी काम आती है
Dean Karnazes ने technology के बिना ultra running race में कुछ ऐसा ही किया था
कहा जाता है कि वह पिज़्ज़ा को burrito की तरह रोल करके लेकर दौड़ा था: https://gffmag.com/the-raw-endurance-of-ultramarathon-man-de...
अगर React website है, तो इसका मतलब शायद यह है कि कोई API है जिसे सीधे इस्तेमाल किया जा सकता है
token पाने के लिए login करना पड़ सकता है, लेकिन वह तरीका कहीं ज़्यादा robust होगा
यह बहुत सस्ता और कहीं ज़्यादा robust है; क्या मैं कुछ miss कर रहा हूँ?
मुझे यह लेख सच में बहुत पसंद आया
मज़ेदार technical problem, pizza, “s-tier” का मतलब खोजने पर मजबूर करना, premise अपने-आप में funny और ऊपर से humor, अंत में mea culpa और bug के कारण का अनुमान—काफी अच्छी चीज़ें थीं। वह theory भी plausible लगती है, लेकिन पक्की नहीं है
modern technology की सारी खराब चीज़ों को एक जगह जमा कर देने जैसा लगा
सच कहूँ तो काफी cool है। सोच रहा हूँ Deliveroo जैसी services पर भी कुछ ऐसा किया जा सकता है या नहीं
किसी खास date X पर conditions match होने पर, जैसे late-night work के दौरान घर से लगभग Z दूरी बाकी रह जाने पर पहले से तय order Y place कर देना—ऐसा संभव लगता है
food ordering और payment को IFTTT-style hacks में आसानी से integrate करने लायक न बनाने की कोई वजह है क्या?
Casey's pizza खाते हुए बड़े होने की यादें अच्छी हैं
जब भी Midwest लौटता हूँ, इसे खाता हूँ; ठीक-ठीक बता नहीं सकता क्या है, लेकिन इसमें अपनी अलग charm है
आह, तो आखिरकार यह काम नहीं किया
200 मील वाले point पर पता चले तो काफी मुश्किल रहा होगा
software, bicycles और pizza—ज़िंदगी में मेरी पसंदीदा चीज़ें
यह project और लेख मुझे सच में बहुत मज़ेदार लगे, और इससे मिलते-जुलते ideas भी सूझे
मेरी जगह होता तो शायद hands-free call करता, या किसी दोस्त से call करने को कहता और message से trigger करता
और इसे बार-बार “delivery” कह रहे हैं, लेकिन असल में यह pickup नहीं है क्या?