Anak Saya Masih Suka Pesawat, Jadi Saya Meng-upgrade Radar
(substack.com/jacobbartlett)- 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, dancategorydari 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
presentationDetentsprimary:0.15dari tinggi layarextended:0.4dari 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
distancedalam satuan meter kecamerapada MapKit SDK- Jika
zoomedbernilai true,70 * 1_000 - Jika false,
100 * 1_000
- Jika
- 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.flagditampilkan 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, makaisLowAltitudebernilai true - Jika pengaturan
cloudyaktif, 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
categoryyang 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 dipisahkanrotorcraftmenggunakan SFSymbolxmark.circle.fillspaceTransatmosphericmenggunakan emoji 🛰️small,large,heavymasing-masing menerapkan skala0.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,
Textdiskalakan lalu digunakan sebagai mask untukRectangle, 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
TextFielddanSecureFielddari 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
Basicpada headerAuthorizationuntuk 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
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
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
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...
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
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
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”
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
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
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
Keduanya kira-kira sama seringnya salah dalam nilai arah. Namun ini hanya perkiraan berdasarkan pengalaman penggunaan, bukan fakta yang pasti
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
!remindmeuntuk mengecek 18 tahun lagi apakah putrinya lulus ujian pengendali lalu lintas udaraSaya penasaran apakah di dunia pasca-9/11 anak-anak masih bisa diundang masuk ke kokpit
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
Sebaliknya, kalau setelah mendarat Anda bertanya apakah anak bisa melihat kokpit, peluang berhasilnya jauh lebih tinggi
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
Itu penerbangan domestik AS JetBlue
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