1 puan yazan GN⁺ 2024-01-23 | 1 yorum | WhatsApp'ta paylaş
  • 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 ve category verileri 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 presentationDetents değerine sahip
    • primary: ekran yüksekliğinin 0.15’i
    • extended: ekran yüksekliğinin 0.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
  • presentationBackground iç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 cinsinden distance verilerek yeryüzünde yakınlaştırma/uzaklaştırma uygulanıyor
    • zoomed true ise 70 * 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 Slider ile 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_country değ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.flag gö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.0 ise isLowAltitude true oluyor
    • cloudy ayarı 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
  • AircraftCategory enum’unda görsel, emoji ve ölçek değerleri ayrıldı
    • rotorcraft, xmark.circle.fill SFSymbol kullanıyor
    • spaceTransatmospheric, 🛰️ emojisini kullanıyor
    • small, large, heavy sırasıyla 0.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çeklenip Rectangle maskesi 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 TextField ve SecureField bileş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 Authorization başlığına Basic kimlik 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

 
GN⁺ 2024-01-23
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

    • Modern UX’te en sevmediğim şey tam da bu; özellikle TV uygulamalarında çok kötü. İki menü öğesinden biri kalın beyaz, diğeri kalın siyahsa, şu anda neye tıklamak üzere olduğumu bilemiyorum
      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
    • Doğru bir tespit. UX’i iyi yapmak yerine biraz kontrol paneli gibi görünmesine takılmış gibiyim
      Ü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...

    • Bu fikirlerin hepsi güzel. Şu anki uygulama, potansiyel olarak mümkün olan %100 tamamlanmış sürümün Pareto versiyonuna daha yakın
  • 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

    • Biraz eski kafalı gelebilir ama çocuğa, teknolojinin yalnızca tüketicisi olarak kalmaktansa teknolojinin üreticisi olmayı istemesini sürekli anlatmaya çalışı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
    • Fikirler için gerçekten teşekkürler. 1 numara için Vision Pro bulabilir miyim merak ediyorum
  • 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 öneri için teşekkürler. Mobil uygulama hiç yapmadım ama öğrenmek isterim
      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
    • Uzun vadeli bakım kapasitem yok ama biraz katkıda bulunabilirim sanırım. E-posta adresim profilimde
  • 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

    • Bunu söylemene sevindim. Orijinal yazıda da aynı gözlemi yapmıştım
      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
    • İkisini de benzer sıklıkta kullanan biri olarak, Android ham sensör değerlerini olduğu gibi geçiriyor; iOS ise bir tür debounce gecikmesi ve tahmin ekliyor gibi görünüyor
      İ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
    • Apple ürünleri ve animasyonları genel olarak daha fazla yumuşatma ve histerezis kullanıyor. Okun aşırı titremesini önlemek için doğruluğu kullanıcıdan saklıyor gibi; Android arayüzü ise gürültülü GPS/IMU füzyonundan ve manyetometrenin doğası gereği yanlışlıklarından kaynaklanan artefaktları daha doğrudan gösteriyor gibi görünüyor
      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 !remindme kurmak istiyorum

    • Şu an 2 yaşında ve öğrenci pilot lisansı 16 yaşından itibaren alınabiliyor; yani hatırlatmayı 14 yıl sonrasına kurman yeterli
    • Kızın pilot olursa ücretsiz uçuş alabilir misin? STEM tarafına onu usulca yönlendirme fırsatını kaçırıyor olabilirim
  • 9/11 sonrası dünyada çocukların hâlâ kokpite davet edilip edilemediğini merak ediyorum

    • Babam pilottu ve aile tatillerimizi babamın uçuş programına göre ayarlardık. Küçük bir çocukken pushback’ten sonra kokpite davet edilip “motor çalıştırdığım” an kadar gurur duyduğum bir şey olmamıştı
      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
    • Çocuğun kokpiti görmek istiyorsa, internetten gördüğüm bir ipucu: kalkıştan önce sormamak daha iyi. O sırada pilotların kontrol listeleri ve hazırlıklarla yapacak çok işi oluyor
      Buna karşılık, inişten sonra çocuğun kokpiti görüp göremeyeceğini sorarsan başarı ihtimali çok daha yüksek
    • Bizim çocuklar 9/11’den sonra da kokpite girdiler. Ama bunun kalkıştan önce olması gerekiyor
      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
    • 1 Ocak 2024’te altı yaşındaki bir çocuk ilk kez kokpite davet edildi. O ana kadar ben de aynı şeyi merak ediyordum
      JetBlue’nun ABD iç hat uçuşuydu
    • Kapıda beklerken bunun olduğunu gördüğüm oldu. Pilotlar genelde kapıyı açık tutuyor, bu yüzden yaklaşıp konuşabiliyorsun. En kötü ihtimalle reddedilirsin; o yüzden sormaya değer
      Ç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