Astral: motorcular için geliştirdiğimiz uygulamanın hikâyesi
Astral, Rogday olarak kendi adımıza geliştirdiğimiz bir motorcu uygulaması. Sürüşünü kaydeden, arkadaşlarıyla konvoy hâlinde yol alan, yolda bir şey olduğunda yardım çağırabilen ve tüm bunları bir toplulukla paylaşan sürücüler için tasarlandı. Henüz mağazalarda yok; geliştirme sürüyor. Bu yazıda ne yaptığımızı değil, neden öyle yaptığımızı anlatmak istiyoruz.
- Durum
- Geliştirme aşamasında, mağazalarda henüz yayında değil
- Platform
- iOS ve Android (tek kod tabanı), ayrıca web
- Odak
- Sürüş kaydı, güvenlik, konvoy ve topluluk
Neden bir motorcu uygulaması?
Motorcular aynı anda birkaç uygulama kullanıyor: biri rotayı kaydediyor, biri mesajlaşma için, biri fotoğraf paylaşmak için. Konvoyda kimin geride kaldığını görmek ya da bir düşüşten sonra yakınlara haber vermek ise çoğu zaman telefonu elle açmaya bağlı. Astral’da bu parçaları tek bir yerde ve sürüşün kendisi etrafında toplamak istedik. Sosyal tarafı sürüşten besleniyor; sürüş olmadan yalnızca bir paylaşım uygulaması olurdu.
Uygulamayı tek bir kod tabanından hem iOS hem Android hem de web için çıkarıyoruz. Küçük bir ekip için bu, her yeni özelliği üç kez yazmamak demek. Bedeli ise telefonun sensörlerine, titreşimine ve paylaşım menüsüne erişimi ayrıca bağlamak; bunu da yerel eklentilerle çözüyoruz.
Sürüş kaydı ve paylaşım kartı
Her şey sürüş kaydıyla başlıyor. Sürüş boyunca konum, hız, yatış açısı ve ivme saniye saniye tutuluyor. Sürüş bittiğinde kayıt sunucuya gidiyor ve özet sayfası açılıyor: mesafe, süre, ortalama hız ve harita üzerinde rota.
Özet sayfasında bir de sürüş karnesi var. Sağa ve sola en fazla ne kadar yattığını, kaç kez sert fren ya da sert gaz yaptığını ve hızındaki dalgalanmayı gösteriyor. Burada bilerek yapay zekâ servisi kullanmadık; karne tamamen basit istatistikten çıkıyor. Böylece her sürüşte dışarıya veri göndermiyor, sonucu da açıklayabiliyoruz. Sert manevraları dakika başına sayıyoruz, çünkü toplam sayı uzun bir sürüşü haksız yere cezalandırırdı. Yatış karşılaştırmasını da yalnızca iki yöne de gerçekten viraj alınmışsa yapıyoruz; hep sağa dönen bir güzergâhta “sola çekingensin” demek doğru olmazdı.
Sürüşün sonunda tek dokunuşla bir paylaşım kartı üretiliyor: rota çizgisi, başlangıç ve bitiş noktaları ve sürüşün özeti, Instagram’ın dikey gönderi oranında bir görsel olarak. Kartı telefonun kendi paylaşım menüsüne veriyoruz, böylece kullanıcı istediği uygulamada paylaşabiliyor. Kart görselini telefonda çiziyoruz; harita servisine ayrıca istek atmıyor.
Kaza algılama: yanlış alarmla dürüst bir mücadele
En çok üzerinde durduğumuz özellik bu oldu, çünkü en kolay yanlış yapılabilecek olan da bu. Telefonun ivme sensörü ani ve güçlü bir darbeyi fark edebiliyor. Ama yalnızca darbeye bakmak yetmiyor: telefonun elden düşmesi, sert bir fren ya da derin bir çukur da aynı eşiği aşabiliyor. Her biri için acil durum kişilerine mesaj gitmesi hem gereksiz bir korku yaratır hem de insanların zamanla bu mesajları ciddiye almamasına yol açar.
Bu yüzden algılamayı iki aşamaya böldük:
- Darbe: İvme belirli bir eşiği aşarsa sistem dikkat kesiliyor, ama henüz bir şey yapmıyor.
- Hareketsizlik: Darbeden sonraki iki buçuk saniye boyunca ivme izleniyor. Burada ivmenin büyüklüğüne değil dalgalanmasına bakıyoruz. Düz giden bir motorda da ortalama ivme aşağı yukarı aynıdır; asıl fark, yol ve motor titreşiminin sürüp sürmediğidir. Titreşim devam ediyorsa sürüş devam ediyor demektir ve alarm iptal ediliyor. Cihaz neredeyse kıpırdamıyorsa kaza olasılığı ciddiye alınıyor.
İkinci aşamadan da geçerse ekranda 10 saniyelik bir geri sayım başlıyor. Kullanıcı bu sürede alarmı iptal edebilir. Geri sayımın her saniyesinde telefon titriyor; çünkü telefon cepteyken ya da çantadayken ekrandaki sayacı kimse görmez ve titreşim olmasa yanlış alarmı durdurmak mümkün olmaz. Süre dolarsa konumla birlikte acil durum kişilerine SMS gidiyor ve SOS bildirimlerini kapatmamış yakındaki sürücülere haber veriliyor.
Bir de belirsiz durum var: darbeden sonra sensörden yeterli veri gelmezse ne yapmalı? Burada bilinçli olarak temkinli tarafı seçtik ve kazayı olası kabul edip geri sayımı başlatıyoruz. Veri kesildiyse telefon ciddi bir darbe almış da olabilir; kullanıcının iptal etmek için yine 10 saniyesi var.
Konvoy: birbirini kaybetmeden sürmek
Grup sürüşlerinde en sık yaşanan şey, birinin bir ışıkta ya da yakıt molasında geride kalması. Konvoy özelliğinde grup üyeleri birbirinin canlı konumunu haritada görüyor. Ama yalnızca nokta göstermek yetmedi; uygulama her üyenin durumunu da yorumluyor:
- Bir dakikadır konum gelmiyorsa üye “bağlantısı koptu” olarak işaretleniyor.
- Hızı neredeyse sıfırsa “durdu” deniyor.
- Bir kilometreden fazla uzaklaştıysa “geride kaldı” uyarısı çıkıyor.
Bağlantısı kopan üyeyi grubun ne kadar dağıldığı hesabına katmıyoruz; son bilinen konumu bayattır ve mesafesini söylemek yanıltıcı olur. Gizlilik tarafında da net bir kural koyduk: konvoy her zaman bir grup içinde başlıyor. Canlı konum yalnızca o gruptaki insanlarla paylaşılıyor, birbirini tanımayan kullanıcılar aynı haritaya düşmüyor.
Yoldaki tehlikeler ve zaman denemeleri
Sürücüler yoldaki bir tehlikeyi (çukur, yolda yağ, mıcır, buzlanma, yoldaki bir hayvan ya da kaza) bildirebiliyor. Aynı noktaya kısa sürede gelen aynı türden bildirimler birleştiriliyor ki harita kalabalıklaşmasın. Sürüş sırasında uygulama yalnızca gittiğin yöndeki yakın tehlikeleri sesli olarak duyuruyor; arkanda kalan ya da karşı yöndeki bir bildirim seni meşgul etmiyor. Aynı tehlike kısa aralıklarla tekrar tekrar söylenmiyor.
Bir de rekabet tarafı var. Belirli yol parçaları zaman denemesi olarak tanımlanabiliyor ve kayıtlı sürüşün o parçadan geçtiyse süren otomatik olarak sıralamaya giriyor. Ters yönden geçişler ya da kat edilen mesafesi parçanın uzunluğundan çok farklı olan geçişler sayılmıyor; kestirmeden gelen dereceyi istemiyoruz.
Yarışmalar: ilerleme sürüşten hesaplanıyor
Uygulamada “bu ay 500 km sür” gibi yarışmalar var. Burada önemli bir karar aldık: mesafe ya da ortalama hız gibi ilerlemeleri kullanıcının telefonunun bildirdiği sayıya göre değil, sunucuda kayıtlı sürüşlerden hesaplıyoruz. Bir sürüş kaydedildiğinde katıldığın yarışmaların ilerlemesi kendiliğinden güncelleniyor. Böylece hem kimsenin elle bir şey girmesi gerekmiyor hem de sahte mesafeyle ödül almak mümkün olmuyor. Sürüşten türetilemeyen sosyal yarışmalar ise ayrı değerlendiriliyor.
Akış, reels ve garaj
Topluluk akışında iki katman var. Takip ettiğin kişilerin gönderileri kronolojik sırayla geliyor; burada sıralamayla oynamadık, çünkü takip ettiğin birinin paylaşımını kaçırmanı istemiyoruz. Keşfet bölümünde ise beğeni, yorum ve gönderinin ne kadar yeni olduğu birlikte değerlendiriliyor; yorum beğeniden daha ağır sayılıyor, eski gönderiler yavaş yavaş geriye düşüyor.
Kısa videolar için reels bölümü var. İzlenme sayısını yalnızca video birkaç saniye izlendiyse artırıyoruz; hızla kaydırıp geçmek izlenme sayılmıyor, kendi videonu izlemen de.
Garajda motorunu ve bakım hatırlatmalarını tutabiliyorsun. Kaydedilen sürüşlerin mesafesi ana motorunun kilometresine ekleniyor; yağ değişimi gibi kilometreye bağlı bir bakım yaklaştığında bildirim geliyor. Kilometreyi her seferinde elle güncellemek zorunda kalmıyorsun.
Bundan sonrası
Astral’ın mağazalara çıkışını 2027 için hedefliyoruz. Şu an önceliğimiz yeni özellik eklemekten çok, var olanların gerçek cihazlarda, gerçek yollarda doğru çalıştığından emin olmak. Özellikle kaza algılama ve konvoy gibi güvenlikle ilgili parçaları masa başı testlerle yetinmeden sahada denemek istiyoruz. Yayına çıktığımızda bunu burada ayrıca duyuracağız.
Bu yazıdan aklında kalmasını istediğimiz tek şey şu: bir özellik ekranda görünüyor diye bitmiş sayılmıyor. Sensör verisinin nasıl yorumlandığı, kullanıcıya ne zaman ve nasıl haber verildiği, verinin kimlerle paylaşıldığı gibi kararlar, uygulamanın gerçekten güvenilir olup olmayacağını belirliyor.
Astral hakkında daha fazlasını tanıtım sayfasında bulabilir, çıkışta haberdar olmak için listeye katılabilirsin. Sen de sensör, konum ya da topluluk özellikleri olan bir uygulama yaptırmayı düşünüyorsan bize yaz; fikrini birlikte değerlendirelim.