1 poin oleh GN⁺ 2024-01-23 | 1 komentar | Bagikan ke WhatsApp
  • Aplikasi radar iOS pribadi Aviator 2.0 adalah pembaruan yang kembali berfungsi setelah gangguan OpenSky Network sejak awal Desember, sekaligus memperbaiki berbagai ketidaknyamanan yang muncul dalam penggunaan nyata
  • Menu kontrol baru memakai struktur progressive disclosure untuk memisahkan kontrol utama dan alat lanjutan, serta dirancang agar layar radar tidak terlalu tertutup dengan SwiftUI modal detent dan interaksi latar belakang
  • Masalah terdeteksinya pesawat yang terlalu jauh dikurangi dengan toggle zoom biner, yang diimplementasikan dengan mengubah MapKit camera distance menjadi 70 km atau 100 km
  • Dengan memanfaatkan data origin_country, ketinggian, dan category dari OpenSky Network API, ditambahkan tampilan bendera, filter ketinggian rendah untuk hari berawan, serta pembedaan ikon untuk helikopter, satelit, dan ukuran pesawat
  • Pengguna dapat memakai autentikasi HTTP Basic dengan informasi login OpenSky Network, tetapi di versi 2.0 kata sandi disimpan di User Defaults sehingga sebaiknya tidak menggunakan ulang kata sandi sensitif

Latar Belakang Pembaruan Aviator 2.0

  • Aviator — Radar on your Phone adalah aplikasi radar iOS yang dibuat untuk mencari pesawat bersama anak
  • Setelah tulisan sebelumnya, mungkin saja ada rilis baru dan peluang monetisasi yang bisa dipikirkan, tetapi sejak awal Desember aplikasi menampilkan error kepada pengguna karena gangguan OpenSky Network
  • Saat membuka kembali aplikasi, alih-alih error 502 yang terus muncul, terdengar bunyi notifikasi deteksi pesawat, sehingga dipastikan aplikasi sudah berjalan normal
  • Setelah itu, selama dua malam, pekerjaan untuk Aviator 2.0 dilakukan dengan memasukkan ide-ide yang sudah ada

UI Kontrol Baru yang Tidak Terlalu Menutupi Radar

  • Di versi 2.0, kontrol dipindahkan ke menu terpisah; kontrol penting ditempatkan di depan, sementara alat lanjutan yang lebih jarang digunakan ditempatkan di bagian bawah
  • Struktur ini menggunakan progressive disclosure
  • Menu diimplementasikan sebagai SwiftUI modal dan memiliki dua presentationDetents
    • primary: 0.15 dari tinggi layar
    • extended: 0.4 dari tinggi layar
  • Indikator drag menunjukkan bahwa menu dapat diperluas, dan presentationBackgroundInteraction(.enabled) membuat UI radar utama tidak tertutup bayangan
  • Pada presentationBackground, diterapkan emboss effect dari Paul Hudson untuk menambahkan tekstur logam seperti panel kontrol radar sungguhan
  • Di versi 2.1, rencananya TipKit akan digunakan agar pengguna Apple yang masih kecil pun dapat menyadari struktur progressive disclosure ini

Menyesuaikan Level Zoom dan Jangkauan Radar

  • Di versi 1.0, radar bekerja terlalu baik hingga menangkap pesawat yang berada di balik cakrawala atau di balik kontur tanah sehingga tidak bisa dilihat
  • Di lingkungan seperti pinggiran London, dengan kontur bertingkat dan area yang tersambung seperti pulau, hal ini menjadi ketidaknyamanan nyata saat digunakan
  • Di ruang terbuka, pesawat yang jauh tetap bisa terlihat, sehingga ini sulit dianggap sekadar masalah sensitivitas
  • Solusinya adalah menambahkan fungsi zoom
  • Perbesaran dan pengecilan permukaan tanah diimplementasikan dengan meneruskan distance dalam satuan meter ke camera pada MapKit SDK
    • Jika zoomed bernilai true, 70 * 1_000
    • Jika false, 100 * 1_000
  • Karena implementasinya dibuat cepat untuk rilis akhir pekan, satu lingkaran radar dihapus untuk menonjolkan UI yang diperbesar
  • Awalnya level zoom hendak ditangani dengan Slider, tetapi frame rate yang memadai tidak tercapai bahkan di chip A17, sehingga saat ini digunakan toggle zoom biner

Fitur yang Ditambahkan dengan Data OpenSky Network

  • Tampilan Bendera

    • OpenSky Network API mengumpulkan berbagai informasi dari transponder pesawat, tetapi di versi 1.0 data ini belum dimanfaatkan secara memadai
    • Di versi 2.0, ditambahkan toggle untuk menampilkan negara asal sebagai emoji bendera di bawah setiap ikon pesawat
    • Implementasinya didasarkan pada nilai origin_country
    • Aplikasi menerima string teks negara asal yang disediakan API
    • String itu dikonversi menjadi kode negara 2 huruf menggunakan daftar nama negara yang ditemukan secara online
    • Kode negara diubah menjadi Unicode scalar untuk membentuk emoji bendera
    • Saat pengguna mengaktifkan fitur ini, flight.flag ditampilkan sebagai teks pada annotation MapKit
  • Mode Hari Berawan

    • Pada hari berawan di Inggris, banyak pesawat yang ditampilkan di aplikasi sebenarnya tidak terlihat karena tertutup awan
    • Ditambahkan tombol untuk menyembunyikan pesawat yang tinggi, sehingga pengguna dapat beralih antara mode cerah dan mode hujan
    • Fitur ini menggunakan data ketinggian yang diterima dari OpenSky Network, dengan 2,5 km sebagai nilai dasar acuan untuk awan rendah
    • Jika geo_altitude < 2500.0, maka isLowAltitude bernilai true
    • Jika pengaturan cloudy aktif, hanya pesawat berketinggian rendah yang ditampilkan pada annotation MapKit

Penyempurnaan Ikon Pesawat

  • Saat diuji di taman, sebuah helikopter melintas di atas kepala, tetapi Aviator menampilkannya sebagai ikon pesawat biasa
  • OpenSky Network API menyediakan properti category yang menunjukkan jenis pesawat pemilik transponder jika parameter query tambahan diberikan
  • Kategori ini dapat mencakup item seperti berikut
    • Pesawat ringan di bawah 15.500 pon
    • Pesawat berat di atas 300.000 pon
    • Rotorcraft seperti helikopter
    • Kendaraan ruang angkasa/lintas atmosfer
    • Parasut atau skydiver
  • Dalam pembaruan terbaru, kelas ukuran pesawat dibedakan, dan satelit serta helikopter ditampilkan dengan ikon terpisah
  • Pada enum AircraftCategory, nilai gambar, emoji, dan skala dipisahkan
    • rotorcraft menggunakan SFSymbol xmark.circle.fill
    • spaceTransatmospheric menggunakan emoji 🛰️
    • small, large, heavy masing-masing menerapkan skala 0.6, 1, 1.5
  • Emoji helikopter terlihat terlalu bulat saat diubah menjadi bidang satu warna, sehingga dipilih SFSymbol silang dalam lingkaran yang lebih abstrak
  • Untuk memperlakukan emoji seperti gambar, Text diskalakan lalu digunakan sebagai mask untuk Rectangle, kemudian diterapkan warna dan efek layar CRT

Login OpenSky Network Pengguna

  • Ditambahkan fitur agar pengguna dapat memasukkan kredensial OpenSky Network mereka sendiri
  • Fitur ini merupakan salah satu yang paling banyak diminta setelah versi Android, dengan tujuan menghindari rate limiting pada penggunaan API yang tidak terautentikasi
  • Akun dapat dimasukkan dari menu kontrol penuh, dan tautan ke halaman pendaftaran juga disediakan
  • Fitur ini diimplementasikan dengan TextField dan SecureField dari SwiftUI
    • @AppStorage("username")
    • @AppStorage("password")
  • Di versi 2.0, dalam proses memasukkannya dengan cepat ke produksi, kata sandi disimpan di User Defaults
  • Pada rilis berikutnya, kata sandi akan disimpan di Keychain; untuk saat ini, jangan menggunakan ulang kata sandi sensitif
  • Nama pengguna dan kata sandi yang dimasukkan di-encode dengan Base64 dan ditempelkan sebagai autentikasi Basic pada header Authorization untuk permintaan API

Penutup

  • Aviator 2.0 adalah pembaruan untuk terus menyempurnakan aplikasi yang bisa dimainkan bersama anak
  • Penulis meminta ide fitur atau tips ASO di komentar, serta meminta pembaca mengunduh dan memberi ulasan untuk Aviator — Radar on your Phone 2.0

1 komentar

 
GN⁺ 2024-01-23
Komentar Hacker News
  • Ini adalah lanjutan dari tulisan yang cukup populer dua bulan lalu
    0: https://news.ycombinator.com/item?id=38435908 My toddler loves planes, so I built her a radar (1304 points, 56 days ago)

  • Melihat aplikasinya mengingatkan saya pada masalah yang pernah saya alami saat memprogram DVD. Pada tombol toggle, tidak jelas mode mana yang sedang aktif
    Membingungkan apakah ikon bendera atau awan menunjukkan mode saat ini, atau harus ditekan untuk beralih ke mode itu. Toggle cuaca juga terasa terbalik: apakah menekan awan berarti ingin melihat mode berawan, atau mengubahnya ke tampilan cerah
    Di proyek yang sedang saya kerjakan sekarang juga, tombol +/- mengatur ukuran jendela rentang waktu; pada waktu mulai, + mengurangi nilai detik dan - menambahnya. Pada waktu akhir kebalikannya. Dari sudut pandang ukuran jendela, keduanya sesuai ekspektasi, jadi pada akhirnya sudut pandang pengguna harus dibuat jelas

    • Ini bagian UX modern yang paling saya benci, terutama parah di aplikasi TV. Kalau dari dua item menu yang satu putih tebal dan yang lain hitam tebal, saya tidak tahu mana yang sedang akan saya klik
      Toggle subtitle YouTube juga berganti antara teks putih di latar hitam dan teks hitam di latar putih, jadi saya harus menekannya dulu; kalau mulut bergerak tetapi subtitle tidak terlihat, barulah mencoba mode ikon yang lain
      Rasanya sejak beralih ke layar sentuh, akal sehat tentang umpan balik input posisi yang memiliki status menghilang
    • Kritik yang tepat. Sepertinya saya agak terlalu terpaku pada membuatnya terlihat seperti panel kontrol ketimbang membuat UX-nya bagus
      Dan memang membingungkan. Dalam perbaikan bug di detik terakhir, saya merilis ikon awan dengan logika yang terbalik dari yang lain
  • Akan sangat keren kalau saat sapuan radar melewati pesawat, pesawatnya berkedip muncul, lalu posisinya tetap dan perlahan memudar sampai sapuan berikutnya
    Akan bagus juga kalau aplikasi melihat ketinggian GPS dan lokasi perangkat saat ini, lalu memakai bangunan, bukit, dan elevasi sekitar dari OpenStreetMap untuk menghitung skyline yang terlihat per azimut. Dengan begitu bisa ditampilkan di peta seperti bayangan/oklusi radar. Rasanya seperti fish finder yang melewati batang kayu, atau radar kapal ketika terhalang kapal lain
    Kalau dibuat begitu, orang-orang di industri mungkin akan garuk-garuk kepala memikirkan bagaimana ponsel melakukan pemindaian radial
    [1] https://www.researchgate.net/figure/Occlusion-percentage-for...

    • Semua ide seperti ini bagus. Aplikasi saat ini mendekati versi Pareto dari versi 100% lengkap yang secara potensial bisa dibuat
  • Ini pemikiran yang dulu saya tinggalkan di blog, tetapi sebagai orang tua balita, saya setuju bahwa bagian memilih warna adalah yang paling penting
    Karena ini side project yang menyenangkan, ada beberapa ide fitur yang mungkin belum diimplementasikan. Pertama, live view yang memakai kamera ponsel dan fitur AR iPhone untuk menampilkan titik di perkiraan lokasi pesawat. Saya pernah menulis sedikit kode untuk menghitungnya dari lokasi pengguna dan informasi ADS-B
    Kedua, pesawat bisa ditandai sebagai “terlihat” atau “terlewat”, lalu feedback itu digunakan untuk menyesuaikan informasi yang ditampilkan
    Ketiga, badge dan statistik. Kalau putri Anda mirip dengan anak saya, ia akan suka mendapat badge di aplikasi. Riwayat pengamatan sebelumnya bisa disimpan di DB lokal untuk melacak hal-hal seperti “jumlah maskapai yang dilihat”, “jumlah tipe pesawat yang dilihat”, “durasi penerbangan terjauh”, “durasi penerbangan terpendek”. Namun saya sepenuhnya memahami masalah yang menyertai gamifikasi aplikasi untuk anak

    • Mungkin terdengar agak kolot, tetapi saya terus berusaha memberi tahu anak saya agar berharap menjadi produsen teknologi, bukan sekadar konsumen teknologi
      Kami sering membahas mengapa tidak seharusnya menghabiskan 30 dolar untuk mata uang digital seperti Robux. Saya menjelaskan bahwa itu berbeda dari barang yang memiliki nilai nyata, seperti raket tenis atau sepatu
      Jadi saya menolak gamifikasi, dan berusaha memberinya alat agar tidak tersedot melakukan pekerjaan repetitif berjam-jam demi mendapatkan badge atau artefak digital yang tidak bernilai
      Untuk aplikasi bagi anak-anak, saya rasa lebih baik tidak memasukkan fitur seperti ini. Itu bisa menunjukkan bahwa ada aplikasi yang tidak punya iklan dan tidak digamifikasi, tetapi menambah nilai nyata dalam hidup
    • Terima kasih banyak untuk ide-idenya. Saya penasaran apakah saya bisa mendapatkan Vision Pro untuk nomor 1
  • Apakah ada di antara orang-orang HN yang mau mencoba proyek crowdsourcing open source untuk mem-porting ini ke Android?
    Lisensinya hanya tebakan, tetapi sepertinya orang yang membuat repositori GitHub awal bisa memakai kalimat penulis: “Saya menunggu engineer Android yang proaktif untuk mem-porting-nya sendiri. Saya sudah memasukkan cukup banyak detail dalam tulisan ini. Silakan saja selama hanya disediakan gratis untuk semua orang”

    • Terima kasih atas usulan seperti ini. Saya belum pernah membuat aplikasi mobile, tetapi ingin belajar
      Kalaupun saya tidak bisa berkontribusi pada aplikasi radar ini sebagai aplikasi Android berkualitas tinggi, rasanya akan menyenangkan menghabiskan waktu mem-porting sesuatu yang sesuai dengan paradigma “An app can be a home-cooked meal”[0]. Karena ditulis dengan visi dan paradigma tunggal serta tanpa bloat, iklan, pelacakan, dan sebagainya, kemungkinan kodenya mudah dipahami
      Usulan ini mungkin bisa menuntun saya kembali menemukan kesenangan dalam pemrograman
      0: https://news.ycombinator.com/item?id=38877423
    • Saya tidak punya kapasitas untuk pemeliharaan jangka panjang, tetapi sepertinya bisa sedikit berkontribusi. Email ada di profil saya
  • Sedikit melenceng, tetapi sebagai orang yang buruk dalam orientasi arah, fitur terpenting di ponsel bagi saya adalah seberapa akurat panah kecil di atas peta menunjukkan ke arah mana saya sedang menghadap
    Saya memakai Android; ketika tidak yakin, ia menampilkan kerucut ketidakpastian berwarna biru, dan kadang meminta saya menggerakkan ponsel membentuk angka 8 atau mengarahkannya ke bangunan sekitar untuk kalibrasi
    Secara teknis, apa batasannya di sini? Apakah iPhone lebih baik daripada Android? Masalahnya ada di hardware, akselerometer, kompas, sinyal GPS, atau software? Sampai sekarang masih cukup sering membingungkan dan menampilkan kerucut ke arah yang salah. Kalau iPhone jelas lebih baik, ini cukup penting sampai-sampai saya hampir mau pindah

    • Senang ada yang mengatakan ini. Di tulisan aslinya juga ada pengamatan yang sama
      Saya kira akan ada keterbatasan di sisi GPS, tetapi delegate arah di CoreLocation mengembalikan arah dengan sempurna, setidaknya pada frame rate 120Hz perangkat saya
      Bisa jadi Google Maps saja yang kurang bagus
    • Sebagai orang yang memakai keduanya sama seringnya, Android cenderung meneruskan nilai sensor mentah apa adanya, sedangkan iOS tampaknya menambahkan semacam debounce delay dan estimasi
      Keduanya kira-kira sama seringnya salah dalam nilai arah. Namun ini hanya perkiraan berdasarkan pengalaman penggunaan, bukan fakta yang pasti
    • Produk Apple dan animasinya umumnya memakai lebih banyak smoothing dan histeresis. Sepertinya mereka menyembunyikan akurasi dari pengguna agar panah tidak terlalu bergetar, sedangkan UI Android tampak lebih apa adanya dalam menampilkan artefak yang muncul dari fusi GPS/IMU yang bising dan ketidakakuratan intrinsik magnetometer
      Di iOS lama, panah yang lambat dulu cukup mengganggu, tetapi sekarang ketika hardware makin cepat, panah yang meloncat-loncat di platform lain jadi lebih mencolok
      Ringkasnya, sebagian besar hardware modern punya kemampuan yang mirip dalam mengetahui posisinya di ruang dan waktu dengan cukup akurat. Namun seberapa baik dead reckoning dan estimasi orientasi dilakukan dengan data saat ini, serta bagaimana noise filtering yang diharapkan pengguna saat perangkat digenggam ditangani, berbeda-beda di tiap software navigasi
  • Saya jadi menyukai heavy metal karena game-game Tony Hawk. Motörhead “Ace of Spades” di THPS3 dan Iron Maiden “Number of the Beast” di THPS4 yang menjadi pemicunya, jadi mungkin memang ada jalur remah roti dari game platformer menuju heavy metal

  • Bagus, karena jelas berhasil membuat pengguna terpentingnya bahagia

  • Keren. Selain itu, saya jadi ingin memasang !remindme untuk mengecek 18 tahun lagi apakah putrinya lulus ujian pengendali lalu lintas udara

    • Dia sekarang 2 tahun, dan lisensi pilot pelajar bisa diambil mulai usia 16 tahun, jadi pengingatnya cukup disetel 14 tahun lagi
    • Kalau putrinya menjadi pilot, apakah bisa dapat penerbangan gratis? Mungkin Anda sedang melewatkan kesempatan untuk diam-diam mengarahkannya ke bidang STEM
  • Saya penasaran apakah di dunia pasca-9/11 anak-anak masih bisa diundang masuk ke kokpit

    • Ayah saya dulu pilot, dan liburan keluarga sering disesuaikan dengan jadwal terbang beliau. Saat masih kecil, tidak ada yang lebih membanggakan daripada diundang ke kokpit setelah pushback untuk “menyalakan mesin”
      Saya samar-samar ingat menekan tombol dan ayah saya menunjuk instrumen yang bergerak. Perasaan saat kembali ke kursi, seolah menjadi anak paling besar di dunia, masih sangat jelas
      Setelah 9/11, hal seperti itu jelas sulit terjadi
    • Saya pernah membaca tip di internet bahwa jika anak ingin melihat kokpit, sebaiknya jangan bertanya sebelum lepas landas. Saat itu pilot sibuk dengan checklist dan persiapan
      Sebaliknya, kalau setelah mendarat Anda bertanya apakah anak bisa melihat kokpit, peluang berhasilnya jauh lebih tinggi
    • Anak-anak kami pernah masuk kokpit bahkan setelah 9/11. Namun harus sebelum lepas landas
      Selama penerbangan, awak kabin pun hampir tidak diizinkan masuk; sesekali hanya kepala pramugara/pramugari yang bisa masuk. Anak-anak bertanya saat naik pesawat jika pintu kokpit masih terbuka
    • Pada 1 Januari 2024, anak berusia enam tahun diundang masuk kokpit untuk pertama kalinya. Sampai momen itu, saya juga punya pertanyaan yang sama
      Itu penerbangan domestik AS JetBlue
    • Saya pernah melihat hal seperti itu terjadi saat sedang di gate. Pilot biasanya membiarkan pintunya terbuka, jadi kita bisa mendekat dan mencoba berbicara. Paling buruk hanya ditolak, jadi layak ditanyakan
      Saya masih punya pin sayap Delta di suatu tempat, yang saya dapat setelah melihat kokpit dalam perjalanan saat kecil. Itu pengalaman keren yang masih saya ingat, dan saya berharap anak-anak lain juga bisa merasakan setidaknya sebagian darinya