1 पॉइंट द्वारा GN⁺ 2023-09-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 के लिए पर्याप्त समय दे गया हो

अगर अगली बार फिर बनाऊँ तो क्या बदलूँगा

  • 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 टिप्पणियां

 
GN⁺ 2023-09-11
Hacker News की रायें
  • Colin डिलीवरी करते हुए पिज़्ज़ा भी बना सकता है: https://youtu.be/YjyJRTM0knE?si=fes2lbRntUlciPSH

    • मज़ेदार तो है, लेकिन इस YouTube वीडियो का concept असल में SoftBank द्वारा निवेशित startup का business model था, और उसे 500 मिलियन डॉलर की funding मिली थी
      इस बेदाग दिखने वाले plan की घातक कमी यह थी कि जब truck सड़क के bumps पार करता था, तो पिज़्ज़ा उछलने लगते थे और सारी toppings खो देते थे: https://gizmodo.com/zume-softbank-ai-pizza-delivery-stellar-...
    • GIL हटाने पर यही होता है
      यह वीडियो इस साल YouTube पर देखी गई चीज़ों में सबसे ज़्यादा हँसाने वाला था
    • मुझे नहीं पता Colin की लापरवाही Electroboom जैसी acting है, या सचमुच वैसी ही है जैसी दिखती है
      मैं अब भी तय नहीं कर पाया, और अजीब तरह से इसी वजह से देखना मुश्किल हो गया है। बेशक, अगर कुछ बहुत गड़बड़ हो जाता तो वह वीडियो 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 के समय काफी काम आती है

    • आम pizza delivery में भी 5–10 डॉलर extra लग सकते हैं, तो पानी पर delivery के लिए अच्छे से request करने पर कितना खर्च आता होगा, सोच रहा हूँ
  • Dean Karnazes ने technology के बिना ultra running race में कुछ ऐसा ही किया था
    कहा जाता है कि वह पिज़्ज़ा को burrito की तरह रोल करके लेकर दौड़ा था: https://gffmag.com/the-raw-endurance-of-ultramarathon-man-de...

    • endurance running असल में लगभग खाने का ही काम है
  • अगर React website है, तो इसका मतलब शायद यह है कि कोई API है जिसे सीधे इस्तेमाल किया जा सकता है
    token पाने के लिए login करना पड़ सकता है, लेकिन वह तरीका कहीं ज़्यादा robust होगा

    • सहमत हूँ। मुझे हमेशा समझ नहीं आता कि screen scrape करने के बजाय network requests को monitor और replay क्यों नहीं करते
      यह बहुत सस्ता और कहीं ज़्यादा robust है; क्या मैं कुछ miss कर रहा हूँ?
  • मुझे यह लेख सच में बहुत पसंद आया
    मज़ेदार technical problem, pizza, “s-tier” का मतलब खोजने पर मजबूर करना, premise अपने-आप में funny और ऊपर से humor, अंत में mea culpa और bug के कारण का अनुमान—काफी अच्छी चीज़ें थीं। वह theory भी plausible लगती है, लेकिन पक्की नहीं है

    • मुझे तो बिल्कुल पसंद नहीं आया। ऐसा लगा जैसे abstraction की 100 परतों, cloud के glue और जुगाड़ से एक ऐसा Rube Goldberg device बनाया गया हो जो काम ही नहीं करता
      modern technology की सारी खराब चीज़ों को एक जगह जमा कर देने जैसा लगा
  • सच कहूँ तो काफी cool है। सोच रहा हूँ Deliveroo जैसी services पर भी कुछ ऐसा किया जा सकता है या नहीं
    किसी खास date X पर conditions match होने पर, जैसे late-night work के दौरान घर से लगभग Z दूरी बाकी रह जाने पर पहले से तय order Y place कर देना—ऐसा संभव लगता है

    • अगर यह काफी cool है, तो झूठ क्यों बोलोगे? इसे खास तौर पर कहना थोड़ा अजीब लगता है
    • इसे fitness tracker से जोड़ दो, ताकि वजन घटाने के लिए calorie deficit बनाए रखने जितना ही pizza deliver हो
    • food ordering services में इस तरह के use case के लिए अच्छी API होनी चाहिए
      food ordering और payment को IFTTT-style hacks में आसानी से integrate करने लायक न बनाने की कोई वजह है क्या?
  • Casey's pizza खाते हुए बड़े होने की यादें अच्छी हैं
    जब भी Midwest लौटता हूँ, इसे खाता हूँ; ठीक-ठीक बता नहीं सकता क्या है, लेकिन इसमें अपनी अलग charm है

    • क्या वजह यह है कि उसमें तेल ज़्यादा होता है? breakfast pizza सबसे बढ़िया है। खासकर आम तौर पर Busch Light पीने के अगले दिन
  • आह, तो आखिरकार यह काम नहीं किया
    200 मील वाले point पर पता चले तो काफी मुश्किल रहा होगा

  • software, bicycles और pizza—ज़िंदगी में मेरी पसंदीदा चीज़ें
    यह project और लेख मुझे सच में बहुत मज़ेदार लगे, और इससे मिलते-जुलते ideas भी सूझे

    • ये चीज़ें मुझे भी पसंद हैं। OP, आप और मुझे मिलकर एक club बनाना चाहिए
  • मेरी जगह होता तो शायद hands-free call करता, या किसी दोस्त से call करने को कहता और message से trigger करता
    और इसे बार-बार “delivery” कह रहे हैं, लेकिन असल में यह pickup नहीं है क्या?