Çocuğum hâlâ uçakları sevdiği için radarı yükselttim
(substack.com/jacobbartlett)- Kişisel iOS radar uygulaması Aviator 2.0, Aralık başından beri süren OpenSky Network kesintisinin ardından yeniden çalışır hâle gelirken, gerçek kullanımda ortaya çıkan sıkıntıları topluca gideren bir güncelleme
- Yeni kontrol menüsü, kademeli açığa çıkarma yapısıyla ana kontrolleri ve gelişmiş araçları ayırıyor; SwiftUI modal detent’leri ve arka plan etkileşimiyle radar ekranını daha az kapatacak şekilde tasarlanmış
- Çok uzaktaki uçakların da yakalanması sorunu ikili yakınlaştırma anahtarı ile azaltıldı; bu, MapKit camera distance değerini 70 km veya 100 km olarak değiştirerek uygulanıyor
- OpenSky Network API’sindeki
origin_country, irtifa vecategoryverileri kullanılarak bayrak gösterimi, bulutlu günler için düşük irtifa filtresi, helikopter/uydu/uçak boyutuna göre ikon ayrımı eklendi - Kullanıcılar OpenSky Network oturum bilgileri ile HTTP Basic kimlik doğrulaması kullanabiliyor; ancak 2.0’da parola User Defaults içinde saklandığı için hassas parolaların yeniden kullanılmaması gerekiyor
Aviator 2.0 güncellemesinin arka planı
- Aviator — Radar on your Phone, çocuğuyla birlikte uçak aramak için geliştirilmiş bir iOS radar uygulaması
- Önceki yazıdan sonra yeni bir sürüm ve para kazanma fırsatları düşünülebilirdi; ancak uygulama Aralık başından beri OpenSky Network kesintisi nedeniyle kullanıcılara hata gösteriyordu
- Uygulamayı tekrar açtığında sürekli görünen 502 hatası yerine uçak algılama bildirim sesi duyuldu ve normal çalıştığı doğrulandı
- Ardından iki akşam boyunca mevcut fikirler uygulanarak Aviator 2.0 üzerinde çalışıldı
Radarı daha az kapatan yeni kontrol arayüzü
- 2.0’da kontroller ayrı bir menüye taşındı; önemli işlemler öne, daha seyrek kullanılan gelişmiş araçlar ise alta yerleştirildi
- Bu yapı kademeli açığa çıkarma (progressive disclosure) kullanıyor
- Menü SwiftUI modal olarak uygulanıyor ve iki
presentationDetentsdeğerine sahipprimary: ekran yüksekliğinin0.15’iextended: ekran yüksekliğinin0.4’ü
- Sürükleme göstergesi menünün genişletilebildiğini gösteriyor;
presentationBackgroundInteraction(.enabled)ile ana radar arayüzünün gölge altında kalmaması sağlanıyor presentationBackgroundiçin Paul Hudson’ın emboss effect’i uygulanarak gerçek bir radar kontrol paneli hissi veren metalik bir doku ekleniyor- 2.1’de, genç Apple kullanıcılarının da kademeli açığa çıkarma yapısını fark edebilmesi için TipKit kullanılması planlanıyor
Yakınlaştırma seviyesi ve radar menzili ayarı
- 1.0’da radar fazla iyi çalışıyordu; ufkun ötesinde ya da arazi arkasında kaldığı için görülemeyecek uçakları bile yakalıyordu
- Londra banliyöleri gibi basamaklı arazi yapısına ve ada benzeri kesintisiz çevreye sahip yerlerde bu durum gerçek kullanımda rahatsız edici hâle geldi
- Açık alanlarda uzaktaki uçaklar da görülebildiği için bunu yalnızca basit bir hassasiyet sorunu olarak görmek zordu
- Çözüm, bir yakınlaştırma özelliği eklemekti
- MapKit SDK’sındaki
cameraya metre cinsindendistanceverilerek yeryüzünde yakınlaştırma/uzaklaştırma uygulanıyorzoomedtrue ise70 * 1_000- false ise
100 * 1_000
- Hafta sonu sürümüne yetiştirmek için hızlıca uygulanırken, yakınlaştırılmış arayüzü vurgulamak amacıyla radar halkalarından biri kaldırıldı
- Başta yakınlaştırma seviyesini
Sliderile yönetmeyi denedi; ancak A17 çipte bile yeterli kare hızı alınamadığı için şu anda ikili yakınlaştırma anahtarı kullanılıyor
OpenSky Network verileriyle eklenen özellikler
-
Bayrak gösterimi
- OpenSky Network API, uçak transponder’larından çeşitli bilgiler topluyor; ancak 1.0’da bu veriler yeterince kullanılmıyordu
- 2.0’da her uçak ikonunun altında kalkış ülkesini emoji bayrak olarak gösteren bir anahtar eklendi
- Uygulama
origin_countrydeğerine dayanıyor - API’nin sağladığı kalkış ülkesi metin dizgesi alınıyor
- İnternetten bulunan ülke adları listesiyle 2 harfli ülke koduna dönüştürülüyor
- Ülke kodu Unicode scalar’lara çevrilerek bayrak emojisi oluşturuluyor
- Kullanıcı özelliği açtığında MapKit annotation metni olarak
flight.flaggösteriliyor
-
Bulutlu gün modu
- Birleşik Krallık’taki bulutlu günlerde uygulamada gösterilen uçakların önemli bir kısmı bulutların arkasında kaldığı için gerçekte görünmüyordu
- Yüksek irtifadaki uçakları gizleyen bir düğme eklenerek açık hava modu ile yağmurlu mod arasında geçiş yapılabiliyor
- OpenSky Network’ten alınan irtifa verisi kullanılıyor ve alçak bulutlar için taban eşik değeri olarak 2,5 km kullanılıyor
geo_altitude < 2500.0iseisLowAltitudetrue oluyorcloudyayarı açıksa MapKit annotation’larında yalnızca düşük irtifalı uçaklar gösteriliyor
Uçak ikonlarında iyileştirme
- Parkta test sırasında başının üzerinden bir helikopter geçti; ancak Aviator bunu normal uçak ikonu olarak gösterdi
- OpenSky Network API’si, sorgu parametresi eklenirse transponder’ın ait olduğu hava aracı türünü belirten
categoryözelliğini sağlıyor - Bu kategori şu gibi öğeleri içerebilir
- 15.500 pound’un altındaki hafif uçaklar
- 300.000 pound’un üzerindeki ağır uçaklar
- Helikopter gibi döner kanatlı hava araçları
- Uzay/atmosfer geçişli araçlar
- Paraşüt veya skydiver
- Son güncellemede uçak boyut sınıfları ayrıştırılıyor, uydu ve helikopterler ayrı ikonlarla gösteriliyor
AircraftCategoryenum’unda görsel, emoji ve ölçek değerleri ayrıldırotorcraft,xmark.circle.fillSFSymbol kullanıyorspaceTransatmospheric, 🛰️ emojisini kullanıyorsmall,large,heavysırasıyla0.6,1,1.5ölçeklerini uyguluyor
- Helikopter emojisi tek renkli düzleme dönüştürüldüğünde fazla yuvarlak göründüğü için, daha soyut olan daire içindeki çarpı SFSymbol’ü seçildi
- Emojiyi görsel gibi ele almak için
TextölçeklenipRectanglemaskesi olarak kullanılıyor; ardından renk ve CRT ekran efekti uygulanıyor
Kullanıcı OpenSky Network girişi
- Kullanıcının kendi OpenSky Network kimlik bilgilerini girmesini sağlayan özellik eklendi
- Bu özellik, Android sürümünden sonra en çok istenen özelliklerden biriydi ve kimlik doğrulamasız API kullanımındaki rate limiting’den kaçınmayı amaçlıyor
- Tam kontrol menüsünden hesap bilgileri girilebiliyor ve kayıt sayfasına giden bir bağlantı da sunuluyor
- SwiftUI’nin
TextFieldveSecureFieldbileşenleriyle uygulanıyor@AppStorage("username")@AppStorage("password")
- 2.0’da hızlıca üretime alma sürecinde parola User Defaults içine kaydediliyor
- Bir sonraki sürümde Keychain’e kaydedilmesi planlanıyor; şu anda hassas parolaların yeniden kullanılmaması gerekiyor
- Girilen kullanıcı adı ve parola Base64 ile kodlanıp API isteğinin
AuthorizationbaşlığınaBasickimlik doğrulaması olarak ekleniyor
Kapanış
- Aviator 2.0, çocuğuyla birlikte oynayabileceği bir uygulamayı geliştirmeye devam eden bir güncelleme
- Özellik fikirleri veya ASO ipuçları yorumlarda isteniyor; Aviator — Radar on your Phone 2.0’ın indirilmesi ve yorum bırakılması rica ediliyor
1 yorum
Hacker News yorumları
İki ay önce epey popüler olan yazının devamı
0: https://news.ycombinator.com/item?id=38435908 My toddler loves planes, so I built her a radar (1304 points, 56 days ago)
Uygulamaya bakınca DVD programladığım dönemlerde yaşadığım bir sorun aklıma geldi. Geçiş düğmelerinde şu anda hangi modun etkin olduğu net değil
Bayrak ya da bulut ikonunun mevcut modu mu gösterdiği, yoksa o moda geçmek için mi basılması gerektiği karışıyor. Hava durumu geçişinde de buluta basınca bulutlu modu mu göreceğim, yoksa açık havalı ekrana mı geçeceğim, ters gibi hissediliyor
Şu an üzerinde çalıştığım projede de +/- düğmeleri zaman aralığı penceresinin boyutunu ayarlıyor; başlangıç zamanında + saniye değerini azaltıyor, - artırıyor. Bitiş zamanında bunun tersi. Pencere boyutu açısından ikisi de beklendiği gibi, bu yüzden nihayetinde kullanıcının bakış açısını netleştirmek gerekiyor
YouTube altyazı geçişi de siyah zemin üzerinde beyaz yazı ile beyaz zemin üzerinde siyah yazı arasında gidip geliyor; önce basıp bakmak, ağızlar hareket ediyor ama altyazı görünmüyorsa diğer ikon modunu denemek gerekiyor
Dokunmatik ekranlara geçişle birlikte durumu olan konumsal giriş geri bildirimi konusundaki sağduyu kaybolmuş gibi
Üstelik kafa karışıklığı da doğru. Son dakika hata düzeltmesinde yalnızca bulut ikonunu diğerlerinin tersine koyup yayımlamışım
Radar taraması uçağın üzerinden geçtiğinde kısa bir parlamayla işaretlense ve konumu sabit kalıp bir sonraki süpürmeye kadar yavaşça kaybolsa gerçekten harika olurdu
Ayrıca cihazın mevcut GPS irtifasına ve konumuna bakıp OpenStreetMap’teki çevredeki binaları, tepeleri ve yükseklikleri kullanarak her azimut için görünen silüeti hesaplamak güzel olurdu. Böylece harita üzerinde radar perdelenmesi gibi gösterilebilir. Bir kütüğün üzerinden geçen balık bulucu ya da başka gemiler tarafından engellenen gemi radarı gibi
Bunu yaparsan sektörden insanlar telefonun radyal taramayı nasıl yaptığını düşünüp kafasını kaşıyabilir
[1] https://www.researchgate.net/figure/Occlusion-percentage-for...
Blogda da bıraktığım bir düşünceydi; bir küçük çocuk ebeveyni olarak renk seçme kısmının en önemli şey olduğu sözüne katılıyorum
Eğlenceli bir yan proje olduğu için henüz uygulanmamış olabilecek birkaç özellik fikri var. Birincisi, telefon kamerasını ve iPhone’un AR özelliklerini kullanarak uçağın yaklaşık konumuna bir nokta yerleştiren canlı görünüm. Kullanıcı konumu ve ADS-B bilgileriyle bunu hesaplayan biraz kod yazmıştım
İkincisi, uçakları “gördüm” ya da “kaçırdım” diye işaretleyip bu geri bildirimi gösterilenleri ayarlamakta kullanmak mümkün olabilir
Üçüncüsü, rozetler ve istatistikler. Kızınız bizim çocuğa benziyorsa uygulamada rozet kazanmayı sevecektir. Önceki gözlem kayıtları yerel DB’de saklanıp “görülen havayolu sayısı”, “görülen uçak tipi sayısı”, “en uzak uçuş süresi”, “en kısa uçuş süresi” gibi şeyler takip edilebilir. Yine de çocuklara yönelik bir uygulamayı oyunlaştırmanın getirdiği sorunları tamamen anlıyorum
Robux gibi dijital paralara 30 dolar harcamaması gerektiğini sık sık konuşuyoruz. Bunun tenis raketi ya da ayakkabı gibi gerçek değeri olan nesnelerden farklı olduğunu açıklıyorum
Bu yüzden oyunlaştırmaya direniyorum; rozetler ya da değersiz dijital eserler kazanmak için saatlerce tekrar eden işlere kapılmaması adına ona araçlar vermeye çalışıyorum
Çocuklara yönelik bir uygulamaysa bu tür özellikleri koymamak daha iyi olur bence. Reklamsız ve oyunlaştırılmamış olsa da hayata gerçek değer katan uygulamaların var olduğunu gösterebilir
HN topluluğundan bunu Android’e portlamak için açık kaynaklı, kitle kaynaklı bir proje denemek isteyen var mı?
Lisans konusunda tahmin yürütüyorum ama ilk GitHub deposunu açan kişi, yazarın “girişimci bir Android mühendisinin bizzat portlamasını bekliyorum. Yazıya yeterince ayrıntı koydum. Herkese sadece ücretsiz sunulacaksa yapılabilir” sözünü kullanabilir gibi
Bu radar uygulamasına yüksek kaliteli bir Android uygulamasıyla katkı veremesem bile, “An app can be a home-cooked meal”[0] paradigmasına uyan bir şeyi portlamaya zaman ayırmak iyi olabilir. Tek bir vizyon ve paradigma ile yazılmış, şişkinlik, reklam, takip vb. içermediği için kodunu anlamak muhtemelen kolaydır
Bu öneri beni programlamanın keyfini yeniden bulmaya götürebilir
0: https://news.ycombinator.com/item?id=38877423
Biraz konu dışı ama, yön duygusu kötü biri olarak telefondaki en önemli özellik, haritadaki küçük okun benim hangi tarafa baktığımı ne kadar doğru gösterdiği
Android kullanıyorum; emin olmadığında mavi bir belirsizlik konisi gösteriyor ve bazen telefonu 8 şekli çizerek hareket ettirmemi ya da çevredeki binaları işaret ederek kalibrasyon yapmamı istiyor
Teknik olarak buradaki sınır ne? iPhone, Android’den daha mı iyi? Sorun donanımda mı, ivmeölçerde mi, pusulada mı, GPS sinyalinde mi, yazılımda mı? Hâlâ epey sık kafası karışıyor ve koniyi yanlış yöne gösteriyor. iPhone kesin olarak daha iyi çalışıyorsa, neredeyse geçiş yapacak kadar önemli bir konu
Sınırın GPS tarafında olacağını düşünmüştüm ama CoreLocation’ın yön delegate’i, en azından benim cihazımın 120 Hz kare hızında, yönü kusursuz döndürüyor
Google Maps basitçe pek iyi olmayabilir
İkisinde de yön değerinin yanlış olduğu durumlar benzer sıklıkta yaşanıyor. Yine de bu kullanıcı deneyimine dayalı bir tahmin, kesin bir gerçek değil
Eski iOS’ta yavaş ok epey sinir bozucuydu; artık donanım hızlandıkça diğer platformlardaki zıplayan ok daha göze batıyor
Özetle, modern donanımların çoğu uzay ve zamanda kendi konumunu oldukça doğru belirleme becerisi açısından benzer. Ama mevcut verilerle ölü hesaplama ve duruş kestirimini ne kadar iyi yaptığı, elde tutulurken kullanıcının beklediği gürültü filtrelemeyi nasıl ele aldığı navigasyon yazılımına göre değişiyor
Heavy metal’e Tony Hawk oyunları yüzünden sardım. THPS3’teki Motörhead “Ace of Spades” ve THPS4’teki Iron Maiden “Number of the Beast” vesile olmuştu; yani platform oyunlarından heavy metal’e uzanan bir ekmek kırıntısı yolu olabilir
En önemli kullanıcıyı kesinlikle mutlu etmiş olman açısından iyi iş çıkarmışsın
Harika. Ayrıca 18 yıl sonra kızının hava trafik kontrol sınavını geçip geçmediğini kontrol etmek için
!remindmekurmak istiyorum9/11 sonrası dünyada çocukların hâlâ kokpite davet edilip edilemediğini merak ediyorum
Bir düğmeye bastığımı ve babamın hareket eden göstergeleri işaret ettiğini belli belirsiz hatırlıyorum. Yerime dönerken dünyanın en büyük çocuğuymuşum gibi hissettiğim duygusu ise çok net
9/11’den sonra böyle bir şeyin gerçekleşmesi kesinlikle zor olurdu
Buna karşılık, inişten sonra çocuğun kokpiti görüp göremeyeceğini sorarsan başarı ihtimali çok daha yüksek
Uçuş sırasında kabin ekibini bile pek içeri almıyorlar; bazen sadece kabin amiri girebiliyor. Çocuklar uçağa binerken kokpit kapısı hâlâ açıksa soruyor
JetBlue’nun ABD iç hat uçuşuydu
Çocukken bir yolculukta uçuş sırasında kokpiti görüp aldığım Delta kanat rozeti hâlâ bir yerlerde duruyor. Hâlâ hatırladığım harika bir deneyimdi; diğer çocukların da bunun bir kısmını bile yaşayabilmesini isterim