बच्चा अब भी हवाई जहाज़ों को पसंद करता है, इसलिए मैंने रडार अपग्रेड किया
(substack.com/jacobbartlett)- निजी 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 औरcategorydata का इस्तेमाल करके 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.15extended: 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 मेंdistancepass करके surface zoom in/out implement किया गया- अगर
zoomedtrue है तो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_countryvalue पर आधारित है - 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है तोisLowAltitudetrue होता है cloudysetting चालू होने पर सिर्फ low-altitude aircraft MapKit annotation में दिखते हैं
aircraft icons में सुधार
- park में testing के दौरान सिर के ऊपर से helicopter गुज़रा, लेकिन Aviator ने उसे सामान्य plane icon के रूप में दिखाया
- OpenSky Network API में query parameter जोड़ने पर transponder जिस aircraft type से जुड़ा है, उसे दर्शाने वाली
categoryproperty मिलती है - इस 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 से दिखाया गया है
AircraftCategoryenum में image, emoji और scale values को अलग किया गयाrotorcraftxmark.circle.fillSFSymbol का इस्तेमाल करता हैspaceTransatmospheric🛰️ emoji का इस्तेमाल करता हैsmall,large,heavyक्रमशः0.6,1,1.5scale 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 के
Authorizationheader मेंBasicauthentication के रूप में जोड़ा जाता है
समाप्ति
- Aviator 2.0 बच्चे के साथ खेल सकने वाले app को लगातार सुधारने वाला update है
- feature ideas या ASO tips comments में मांगते हुए, Aviator — Radar on your Phone 2.0 download और review करने का अनुरोध किया गया है
1 टिप्पणियां
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 का नजरिया साफ़ करना ज़रूरी है
YouTube subtitles toggle भी black background पर white text और white background पर black text के बीच बदलता रहता है, इसलिए पहले दबाकर देखना पड़ता है; अगर मुंह तो हिल रहा हो लेकिन subtitles न दिखें, तो दूसरे icon mode को try करना पड़ता है
touchscreen पर आने के साथ ऐसा लगता है कि state वाली positional input feedback को लेकर common sense गायब हो गई है
ऊपर से, भ्रम सचमुच था। आखिरी पल के 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...
मैंने 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 करने से जुड़ी समस्याएँ मैं पूरी तरह समझता हूँ
हम अक्सर बात करते हैं कि Robux जैसी digital currency पर 30 dollars क्यों नहीं खर्च करने चाहिए। मैं समझाता हूँ कि यह tennis racket या shoes जैसी वास्तविक value वाली चीज़ों से अलग है
इसलिए मैं gamification का विरोध करता हूँ, और उसे ऐसे tools देना चाहता हूँ ताकि वह badges या value-less digital artifacts पाने के लिए घंटों repeat work में न खिंच जाए
अगर यह बच्चों के लिए app है, तो बेहतर होगा ऐसे features न जोड़े जाएँ। यह दिखाया जा सकता है कि ऐसे apps भी मौजूद हैं जिनमें ads नहीं हैं, gamification नहीं है, लेकिन वे जीवन में वास्तविक value जोड़ते हैं
क्या HN के लोगों में कोई इसे Android पर port करने के लिए open-source crowdsourced project करना चाहेगा?
license के बारे में अंदाज़ा ही है, लेकिन जो व्यक्ति initial GitHub repository बनाए, वह लेखक की यह बात इस्तेमाल कर सकता है: “किसी ambitious Android engineer के खुद port करने का इंतज़ार कर रहा हूँ। मैंने post में पर्याप्त details डाल दी हैं। अगर इसे सबके लिए सिर्फ free रखा जाए, तो कर सकते हैं”
भले ही मैं इस 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
थोड़ा अलग बात है, लेकिन दिशा-बोध खराब होने वाले व्यक्ति के तौर पर मेरे लिए फोन में सबसे अहम feature यह है कि map पर छोटा arrow कितनी सही तरह दिखाता है कि मैं किस तरफ देख रहा हूँ
मैं Android इस्तेमाल करता हूँ, और जब उसे पक्का नहीं होता तो वह नीला अनिश्चितता cone दिखाता है, और कभी-कभी phone को 8 के आकार में घुमाने या आसपास की buildings की ओर point करके calibrate करने को कहता है
तकनीकी तौर पर यहाँ limitation क्या है? क्या iPhone, Android से बेहतर है? समस्या hardware, accelerometer, compass, GPS signal, software में से किसकी है? अभी भी यह काफी बार confuse हो जाता है और cone को गलत दिशा में दिखाता है। अगर iPhone निश्चित रूप से बेहतर काम करता है, तो यह मेरे लिए switch करने जितना महत्वपूर्ण है
मुझे लगा था कि GPS side में कोई limitation होगी, लेकिन CoreLocation का heading delegate कम से कम मेरे device के 120Hz frame rate पर direction बिल्कुल सही return करता है
हो सकता है Google Maps ही बस अच्छा न हो
दोनों में direction values लगभग उतनी ही बार गलत होती हैं। हालांकि यह user experience पर आधारित अंदाजा है, कोई पक्का fact नहीं
पुराने 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लगाना चाह रहा हूँसोच रहा हूँ कि 9/11 के बाद की दुनिया में भी क्या बच्चों को cockpit में invite किया जा सकता है
button दबाना और पिता का moving instruments की ओर इशारा करना मुझे धुंधला-सा याद है। अपनी seat पर लौटते हुए ऐसा लगा था जैसे मैं दुनिया का सबसे बड़ा बच्चा बन गया हूँ—वह एहसास साफ याद है
9/11 के बाद ऐसी बात होना निश्चित रूप से मुश्किल होगा
इसके उलट, landing के बाद अगर पूछा जाए कि बच्चा cockpit देख सकता है क्या, तो success की संभावना काफी ज्यादा होती है
flight के दौरान वे crew को भी शायद ही अंदर जाने देते हैं, और कभी-कभी केवल purser जा सकता है। बच्चे boarding के समय cockpit door अभी खुला हो तो पूछ लेते हैं
यह JetBlue की US domestic flight थी
बचपन में travel के दौरान route में cockpit देखने पर मिला Delta wings pin अभी भी कहीं पड़ा है। वह आज भी याद रहने वाला शानदार experience था, और अच्छा होगा अगर दूसरे बच्चे भी उसका थोड़ा-सा हिस्सा experience कर सकें