1 पॉइंट द्वारा GN⁺ 2024-01-23 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • निजी iOS रडार ऐप Aviator 2.0 दिसंबर की शुरुआत से चल रही OpenSky Network outage के बाद फिर से काम करने लगा है, और यह अपडेट असल इस्तेमाल में सामने आई असुविधाओं को एक साथ ठीक करता है
  • नया controls menu progressive disclosure स्ट्रक्चर के साथ मुख्य actions और advanced tools को अलग करता है, और SwiftUI modal detent व background interaction के जरिए radar screen को कम ढकता है
  • बहुत दूर के aircraft तक पकड़ लेने की समस्या को binary zoom toggle से कम किया गया, जिसे MapKit camera distance को 70km या 100km में बदलकर implement किया गया
  • OpenSky Network API के origin_country, altitude और category data का इस्तेमाल करके flag display, धुंधले/बादल वाले दिन low-altitude filter, और helicopters·satellites·aircraft size के हिसाब से अलग icons जोड़े गए
  • Users OpenSky Network login details से HTTP Basic authentication इस्तेमाल कर सकते हैं, लेकिन 2.0 में password User Defaults में store होता है, इसलिए sensitive password reuse से बचना चाहिए

Aviator 2.0 अपडेट की पृष्ठभूमि

  • Aviator — Radar on your Phone एक iOS radar app है, जिसे बच्चे के साथ विमान खोजने के लिए बनाया गया था
  • पिछले लेख के बाद नए release और monetization के मौके सोचे जा सकते थे, लेकिन app दिसंबर की शुरुआत से OpenSky Network outage के कारण users को error दिखा रहा था
  • app को फिर से खोलने पर लगातार दिखने वाले 502 error की जगह विमान detect होने की notification sound सुनाई दी, जिससे normal operation confirm हुआ
  • इसके बाद दो शामों में पुराने ideas को शामिल करते हुए Aviator 2.0 पर काम किया गया

रडार को कम ढकने वाला नया controls UI

  • 2.0 में controls को अलग menu में ले जाया गया है; ज़रूरी actions को ऊपर रखा गया और कम इस्तेमाल होने वाले advanced tools को नीचे रखा गया
  • यह structure progressive disclosure का इस्तेमाल करता है
  • menu SwiftUI modal के रूप में implement किया गया है और इसमें दो presentationDetents हैं
    • primary: screen height का 0.15
    • extended: screen height का 0.4
  • drag indicator दिखाता है कि menu expand किया जा सकता है, और presentationBackgroundInteraction(.enabled) से main radar UI shadow से ढकता नहीं है
  • presentationBackground में Paul Hudson का emboss effect apply किया गया है, जिससे असली radar control panel जैसा metallic texture जुड़ता है
  • 2.1 में TipKit का उपयोग करके छोटे Apple users को भी progressive disclosure structure समझाने की योजना है

zoom level और radar range adjustment

  • 1.0 में radar इतना अच्छे से काम करता था कि वह horizon के पार या terrain के पीछे मौजूद, यानी दिखाई न देने वाले aircraft भी पकड़ लेता था
  • London के outskirts जैसे stepped terrain और island-जैसे connected environments में यह बात वास्तविक उपयोग में असुविधाजनक हो गई
  • खुले इलाकों में दूर के विमान भी दिख जाते थे, इसलिए इसे सिर्फ sensitivity issue कहना मुश्किल था
  • solution था zoom feature जोड़ना
  • MapKit SDK के camera में meter unit में distance pass करके surface zoom in/out implement किया गया
    • अगर zoomed true है तो 70 * 1_000
    • false है तो 100 * 1_000
  • weekend release के लिए जल्दी implement करते हुए, zoomed UI को emphasize करने के लिए radar circle में से एक हटाया गया
  • शुरुआत में Slider से zoom level handle करने की कोशिश की गई, लेकिन A17 chip पर भी पर्याप्त framerate नहीं मिला, इसलिए फिलहाल binary zoom toggle इस्तेमाल किया जा रहा है

OpenSky Network data से जोड़े गए features

  • flag display

    • OpenSky Network API aircraft transponder से कई तरह की जानकारी collect करता है, लेकिन 1.0 में इस data का पर्याप्त उपयोग नहीं किया गया था
    • 2.0 में हर plane icon के नीचे origin country को emoji flag के रूप में दिखाने वाला toggle जोड़ा गया
    • implementation origin_country value पर आधारित है
    • API द्वारा दिया गया origin country text string लिया जाता है
    • online मिली country-name list से इसे 2-letter country code में convert किया जाता है
    • country code को Unicode scalar में बदलकर flag emoji बनाया जाता है
    • user feature चालू करे तो MapKit annotation के text में flight.flag दिखाया जाता है
  • cloudy-day mode

    • UK के cloudy days में app में दिखने वाले कई विमान बादलों से ढके होने के कारण असल में दिखाई नहीं देते थे
    • high-altitude aircraft छिपाने वाला button जोड़ा गया, जिससे clear mode और rainy mode के बीच switch किया जा सके
    • OpenSky Network से मिले altitude data का इस्तेमाल होता है, और low cloud base के reference floor के रूप में 2.5km इस्तेमाल किया गया है
    • अगर geo_altitude < 2500.0 है तो isLowAltitude true होता है
    • cloudy setting चालू होने पर सिर्फ low-altitude aircraft MapKit annotation में दिखते हैं

aircraft icons में सुधार

  • park में testing के दौरान सिर के ऊपर से helicopter गुज़रा, लेकिन Aviator ने उसे सामान्य plane icon के रूप में दिखाया
  • OpenSky Network API में query parameter जोड़ने पर transponder जिस aircraft type से जुड़ा है, उसे दर्शाने वाली category property मिलती है
  • इस category में ये items शामिल हो सकते हैं
    • 15,500 pounds से कम के light aircraft
    • 300,000 pounds से अधिक के heavy aircraft
    • helicopter जैसे rotorcraft
    • space/atmosphere-transiting vehicles
    • parachute या skydiver
  • latest update में aircraft size classes को अलग किया गया है, और satellites व helicopters को अलग icons से दिखाया गया है
  • AircraftCategory enum में image, emoji और scale values को अलग किया गया
    • rotorcraft xmark.circle.fill SFSymbol का इस्तेमाल करता है
    • spaceTransatmospheric 🛰️ emoji का इस्तेमाल करता है
    • small, large, heavy क्रमशः 0.6, 1, 1.5 scale apply करते हैं
  • helicopter emoji को single-color flat shape में बदलने पर वह बहुत गोल दिखता था, इसलिए circle के अंदर cross वाला अधिक abstract SFSymbol चुना गया
  • emoji को image की तरह treat करने के लिए Text को scale करके Rectangle के mask के रूप में इस्तेमाल किया गया, फिर color और CRT screen effect apply किया गया

user OpenSky Network login

  • users द्वारा खुद OpenSky Network credentials enter करने का feature जोड़ा गया
  • यह Android version के बाद सबसे अधिक request किए गए features में से एक था, और इसका उद्देश्य unauthenticated API usage की rate limiting से बचना है
  • full controls menu में account enter किया जा सकता है, और registration page का link भी दिया गया है
  • इसे SwiftUI के TextField और SecureField से implement किया गया
    • @AppStorage("username")
    • @AppStorage("password")
  • 2.0 में production में जल्दी डालने की प्रक्रिया में password को User Defaults में store किया गया है
  • अगले release में इसे Keychain में store करने की योजना है, और फिलहाल sensitive password reuse नहीं करना चाहिए
  • entered username और password को Base64 में encode करके API request के Authorization header में Basic authentication के रूप में जोड़ा जाता है

समाप्ति

  • Aviator 2.0 बच्चे के साथ खेल सकने वाले app को लगातार सुधारने वाला update है
  • feature ideas या ASO tips comments में मांगते हुए, Aviator — Radar on your Phone 2.0 download और review करने का अनुरोध किया गया है

1 टिप्पणियां

 
GN⁺ 2024-01-23
Hacker News की राय
  • यह दो महीने पहले काफ़ी लोकप्रिय हुए लेख का follow-up है
    0: https://news.ycombinator.com/item?id=38435908 My toddler loves planes, so I built her a radar (1304 points, 56 days ago)

  • ऐप देखकर DVD programming के दिनों में झेली गई एक समस्या याद आ गई। toggle button में यह साफ़ नहीं है कि अभी कौन-सा mode active है
    समझ नहीं आता कि झंडा या बादल icon मौजूदा mode दिखा रहा है, या उस mode पर जाने के लिए उसे दबाना है। weather toggle भी उल्टा-सा लगता है: क्या बादल दबाने का मतलब cloudy mode देखना है, या clear screen पर जाना है
    अभी जिस project पर काम कर रहा हूँ, उसमें भी +/- buttons time range window का size adjust करते हैं, लेकिन start time में + seconds value घटाता है और - बढ़ाता है। end time में इसका उल्टा है। window size के नजरिए से दोनों expected ही हैं, इसलिए आखिरकार user का नजरिया साफ़ करना ज़रूरी है

    • modern UX में मुझे सबसे ज़्यादा यही बात नापसंद है, और खासकर TV apps में यह बहुत दिखती है। अगर दो menu items में से एक bold white है और दूसरा bold black, तो समझ नहीं आता कि अभी मैं किस पर click करने वाला हूँ
      YouTube subtitles toggle भी black background पर white text और white background पर black text के बीच बदलता रहता है, इसलिए पहले दबाकर देखना पड़ता है; अगर मुंह तो हिल रहा हो लेकिन subtitles न दिखें, तो दूसरे icon mode को try करना पड़ता है
      touchscreen पर आने के साथ ऐसा लगता है कि state वाली positional input feedback को लेकर common sense गायब हो गई है
    • बात सही है। लगता है मैं UX को अच्छा बनाने के बजाय इसे control panel जैसा दिखाने पर थोड़ा ज़्यादा अटक गया था
      ऊपर से, भ्रम सचमुच था। आखिरी पल के bug fix में मैंने सिर्फ बादल icon को बाकी चीज़ों के उलट डालकर release कर दिया था
  • जब radar scan विमान के ऊपर से गुज़रे तो अगर वह flash करके दिखे, और position fixed रहे पर अगले sweep तक धीरे-धीरे fade out हो, तो बहुत शानदार लगेगा
    साथ ही device की current GPS altitude और location देखकर OpenStreetMap के आसपास के buildings, hills और elevation का इस्तेमाल करके हर azimuth के लिए दिखाई देने वाली skyline calculate की जा सकती है। तब इसे map पर radar occlusion की तरह दिखाया जा सकता है। जैसे किसी log से गुजरता fish finder, या दूसरे जहाज़ों से ढका हुआ ship radar
    ऐसा बना दिया तो industry के लोग सिर खुजलाएंगे कि phone radial scan कैसे कर रहा है
    [1] https://www.researchgate.net/figure/Occlusion-percentage-for...

    • ये सारे ideas अच्छे हैं। अभी app, संभावित 100% complete version के Pareto version जैसा है
  • मैंने blog पर भी यह विचार छोड़ा था, और एक toddler parent के तौर पर color चुनने वाले हिस्से को सबसे महत्वपूर्ण बताने वाली बात से सहमत हूँ
    यह एक मज़ेदार side project है, इसलिए हो सकता है अभी implement न हुआ हो, लेकिन कुछ feature ideas हैं। पहला, phone camera और iPhone की AR capabilities का इस्तेमाल करके aircraft की approximate location पर dot दिखाने वाला live view। user location और ADS-B information से calculate करने वाला थोड़ा code मैंने कभी लिखा था
    दूसरा, aircraft को “देख लिया” या “miss हो गया” के रूप में mark किया जा सकता है, और उस feedback का इस्तेमाल display content adjust करने में हो सकता है
    तीसरा, badges और stats। अगर आपकी बेटी हमारे बच्चे जैसी है, तो उसे app में badges मिलना पसंद आएगा। previous observations को local DB में store करके “देखी गई airlines की संख्या”, “देखे गए aircraft types की संख्या”, “सबसे लंबी flight duration”, “सबसे छोटी flight duration” जैसी चीज़ें track की जा सकती हैं। हालांकि बच्चों के लिए apps को gamify करने से जुड़ी समस्याएँ मैं पूरी तरह समझता हूँ

    • यह थोड़ा पुराने ख्याल जैसा लग सकता है, लेकिन मैं बच्चे को लगातार यह बताने की कोशिश करता हूँ कि वह सिर्फ technology का consumer न रहे, बल्कि technology का producer बनने की इच्छा रखे
      हम अक्सर बात करते हैं कि Robux जैसी digital currency पर 30 dollars क्यों नहीं खर्च करने चाहिए। मैं समझाता हूँ कि यह tennis racket या shoes जैसी वास्तविक value वाली चीज़ों से अलग है
      इसलिए मैं gamification का विरोध करता हूँ, और उसे ऐसे tools देना चाहता हूँ ताकि वह badges या value-less digital artifacts पाने के लिए घंटों repeat work में न खिंच जाए
      अगर यह बच्चों के लिए app है, तो बेहतर होगा ऐसे features न जोड़े जाएँ। यह दिखाया जा सकता है कि ऐसे apps भी मौजूद हैं जिनमें ads नहीं हैं, gamification नहीं है, लेकिन वे जीवन में वास्तविक value जोड़ते हैं
    • ideas के लिए सच में शुक्रिया। point 1 के लिए सोच रहा हूँ कि क्या Vision Pro मिल सकता है
  • क्या HN के लोगों में कोई इसे Android पर port करने के लिए open-source crowdsourced project करना चाहेगा?
    license के बारे में अंदाज़ा ही है, लेकिन जो व्यक्ति initial GitHub repository बनाए, वह लेखक की यह बात इस्तेमाल कर सकता है: “किसी ambitious Android engineer के खुद port करने का इंतज़ार कर रहा हूँ। मैंने post में पर्याप्त details डाल दी हैं। अगर इसे सबके लिए सिर्फ free रखा जाए, तो कर सकते हैं”

    • इस suggestion के लिए शुक्रिया। मैंने कभी mobile app नहीं बनाया, लेकिन सीखना चाहता हूँ
      भले ही मैं इस radar app में high-quality Android app के रूप में contribute न कर पाऊँ, “An app can be a home-cooked meal”[0] paradigm के मुताबिक कुछ port करने में समय लगाना अच्छा लगेगा। उसके एक single vision और paradigm के साथ बना होने, और bloat, ads, tracking आदि न होने की वजह से code समझना आसान होने की संभावना है
      यह suggestion programming का आनंद फिर से पाने की राह भी दिखा सकता है
      0: https://news.ycombinator.com/item?id=38877423
    • long-term maintenance की क्षमता तो नहीं है, लेकिन थोड़ा contribute कर सकता हूँ। email profile में है
  • थोड़ा अलग बात है, लेकिन दिशा-बोध खराब होने वाले व्यक्ति के तौर पर मेरे लिए फोन में सबसे अहम feature यह है कि map पर छोटा arrow कितनी सही तरह दिखाता है कि मैं किस तरफ देख रहा हूँ
    मैं Android इस्तेमाल करता हूँ, और जब उसे पक्का नहीं होता तो वह नीला अनिश्चितता cone दिखाता है, और कभी-कभी phone को 8 के आकार में घुमाने या आसपास की buildings की ओर point करके calibrate करने को कहता है
    तकनीकी तौर पर यहाँ limitation क्या है? क्या iPhone, Android से बेहतर है? समस्या hardware, accelerometer, compass, GPS signal, software में से किसकी है? अभी भी यह काफी बार confuse हो जाता है और cone को गलत दिशा में दिखाता है। अगर iPhone निश्चित रूप से बेहतर काम करता है, तो यह मेरे लिए switch करने जितना महत्वपूर्ण है

    • यह बात कहने के लिए अच्छा लगा। मूल post में भी यही observation किया था
      मुझे लगा था कि GPS side में कोई limitation होगी, लेकिन CoreLocation का heading delegate कम से कम मेरे device के 120Hz frame rate पर direction बिल्कुल सही return करता है
      हो सकता है Google Maps ही बस अच्छा न हो
    • दोनों को लगभग बराबर इस्तेमाल करने वाले के तौर पर, Android raw sensor values को सीधे pass through करने की तरफ झुकता है, और iOS शायद किसी तरह का debounce delay और estimation लगाता है
      दोनों में direction values लगभग उतनी ही बार गलत होती हैं। हालांकि यह user experience पर आधारित अंदाजा है, कोई पक्का fact नहीं
    • Apple products और animations आम तौर पर ज्यादा smoothing और hysteresis लगाते हैं। ऐसा लगता है कि arrow को बहुत ज्यादा wobble करने से बचाने के लिए वे accuracy को user से छिपाते हैं, और Android UI noisy GPS/IMU fusion और magnetometer की intrinsic inaccuracy से आने वाले artifacts को ज्यादा raw रूप में दिखाता है
      पुराने iOS में धीमा arrow काफी परेशान करता था, लेकिन अब hardware तेज होने के साथ दूसरे platforms का jumping arrow ज्यादा noticeable हो गया है
      संक्षेप में, ज्यादातर modern hardware में space और time में अपनी position काफी accurately समझने की क्षमता लगभग समान है। लेकिन current data से dead reckoning और attitude estimation कितनी अच्छी तरह की जाती है, और हाथ में पकड़े होने की स्थिति में user द्वारा अपेक्षित noise filtering को कैसे handle किया जाता है, यह navigation software के हिसाब से बदलता है
  • Tony Hawk games की वजह से मैं heavy metal में आया। THPS3 का Motörhead “Ace of Spades” और THPS4 का Iron Maiden “Number of the Beast” इसकी वजह थे, इसलिए platformer games से heavy metal तक जाने वाला breadcrumb trail हो सकता है

  • सबसे महत्वपूर्ण user को निश्चित रूप से खुश कर दिया, इस लिहाज से बढ़िया काम

  • शानदार। साथ ही, 18 साल बाद बेटी ने air traffic control exam pass किया या नहीं यह check करने के लिए !remindme लगाना चाह रहा हूँ

    • वह अभी 2 साल की है और student pilot license 16 साल की उम्र से मिल सकता है, इसलिए reminder 14 साल बाद के लिए set करना चाहिए
    • अगर बेटी pilot बन जाए तो क्या free flights मिल सकती हैं? शायद मैं उसे STEM की तरफ subtly guide करने का मौका miss कर रहा हूँ
  • सोच रहा हूँ कि 9/11 के बाद की दुनिया में भी क्या बच्चों को cockpit में invite किया जा सकता है

    • मेरे पिता pilot थे, और हम family vacations को उनके flight schedule के हिसाब से plan करते थे। छोटे बच्चे के रूप में pushback के बाद cockpit में बुलाए जाकर “engine start” करने जितना proud moment कोई नहीं था
      button दबाना और पिता का moving instruments की ओर इशारा करना मुझे धुंधला-सा याद है। अपनी seat पर लौटते हुए ऐसा लगा था जैसे मैं दुनिया का सबसे बड़ा बच्चा बन गया हूँ—वह एहसास साफ याद है
      9/11 के बाद ऐसी बात होना निश्चित रूप से मुश्किल होगा
    • अगर बच्चा cockpit देखना चाहता है, तो internet पर मैंने यह tip देखी कि takeoff से पहले नहीं पूछना बेहतर है। उस समय pilots checklists और preparations में काफी busy होते हैं
      इसके उलट, landing के बाद अगर पूछा जाए कि बच्चा cockpit देख सकता है क्या, तो success की संभावना काफी ज्यादा होती है
    • हमारे बच्चों ने 9/11 के बाद भी cockpit देखा है। लेकिन यह takeoff से पहले होना चाहिए
      flight के दौरान वे crew को भी शायद ही अंदर जाने देते हैं, और कभी-कभी केवल purser जा सकता है। बच्चे boarding के समय cockpit door अभी खुला हो तो पूछ लेते हैं
    • 1 जनवरी 2024 को छह साल के बच्चे को पहली बार cockpit में invite किया गया था। उस पल तक मेरे मन में भी यही सवाल था
      यह JetBlue की US domestic flight थी
    • gate पर खड़े रहते हुए मैंने ऐसा होते देखा है। pilots आम तौर पर door खुला रखते हैं, इसलिए पास जाकर बात की जा सकती है। worst case में बस मना कर देंगे, इसलिए पूछने लायक है
      बचपन में travel के दौरान route में cockpit देखने पर मिला Delta wings pin अभी भी कहीं पड़ा है। वह आज भी याद रहने वाला शानदार experience था, और अच्छा होगा अगर दूसरे बच्चे भी उसका थोड़ा-सा हिस्सा experience कर सकें