
Sync açıkken uygulamalar çoğu zaman iyi çalışıyor ve bu, düzenlemelerin sırayla geldiği durum için doğru. Sıra bozulduğunda ne olduğu ise ayarlar ekranında yazmıyor: tren yolculuğunda uçak modundaki telefondan bir notu düzenlersin, aynı notu masaüstünden de düzeltirsin, ikisi de aynı satırı değiştirmiştir ve tünel bittiğinde iki sürüm aynı anda sunucuya varır. Biri kazanır. Sorun, hangisinin ve neden.
Üç strateji, üç ayrı bedel
Birincisi son yazan kazanıyor. Uygulaması kolay, açıklaması kolay ve sessizce veri kaybediyor: telefondan yazdığın paragraf, masaüstündeki sürüm bir saniye sonra ulaştığı için hiç var olmamış gibi siliniyor. Kayıt bir yere düşmüyor. Fark ettiğinde de geri getirecek bir şey kalmıyor.
İkincisi çakışma kopyası üretiyor. Uygulama iki sürümü de saklar ve önüne “notun bir kopyası (çakışma)” diye ikinci bir kayıt koyar; hiçbir şey kaybolmaz ama birleştirme işi sana kalır ve elli tane çakışma kopyası biriktiğinde bu iş yapılmıyor.
Üçüncüsü alan alan ya da karakter karakter birleştiriyor. İki cihaz farklı paragrafları düzenlediyse ikisi de duruyor, aynı cümleye dokunulduğunda ise deterministik bir kurala göre karar veriliyor. En iyi sonucu bu veriyor. Karşılığında veri yapısı ağırlaşıyor, dosya boyutu büyüyor ve düz Markdown olarak dışa aktarmak zorlaşıyor.
Saat kötü bir hakem
“Son yazan kazanır” cümlesindeki “son” kelimesi cihazın saatinden geliyor ve o saat güvenilir olmuyor. Telefonların ve dizüstülerin saatleri birbirinden saniyeler, bazen dakikalar sapıyor; yaz saati geçişlerinde ve zaman dilimi değişikliklerinde sapma daha da büyüyor.
Sonuç şu: geriden kalan saatli cihazda yaptığın yeni düzenleme, ileriden giden saatli cihazdaki eski sürüm tarafından eziliyor. Sıralama tersine dönüyor. Uygulama da yanlış bir şey yaptığını bilmiyor, çünkü elindeki tek ölçüt o damga.
Ciddi sistemler bu yüzden duvar saati yerine mantıksal sayaç kullanıyor: her cihaz kendi sayacını artırıyor, karşılaştırma sayaçlar üzerinden yapılıyor ve zaman diliminin hiçbir etkisi kalmıyor.
Silme çakışması ayrı bir sınıf
Bir cihazda notu siliyorsun, diğerinde aynı notu düzenliyorsun. Silme mi kazanacak, düzenleme mi? İki cevap da savunulabilir ve seçilen cevap uygulamanın karakterini belirliyor.
Çoğu sistem düzenlemeyi kazandırıyor, çünkü yanlışlıkla silinen bir notu geri getirmek, yanlışlıkla geri gelen bir notu tekrar silmekten daha pahalı bir iş. Tersini seçen sistemlerde ise silinmiş bir not, ikinci cihaz eşitlendiğinde kendiliğinden geri geliyor ve bu, kullanıcı tarafında hayalet gibi görünüyor.
Context bugün nerede duruyor
Sync burada kapalı geliyor ve tek cihazda kalan bir çalışma alanında çakışma diye bir olay yaşanmıyor. Bu bir çözüm değil, sorunun ertelenmesi. Sürüm 0.4 kararlı sayılmıyor ve veri formatı hâlâ değişiyor; ortak çalışma ise bu ürünün modeli dışında, yani aynı notu iki kişinin aynı anda yazması gibi bir senaryo hedeflenmiyor.
Sync’i açtığında kendi kurabileceğin iki alışkanlık var. İkisi de basit.
Bir cihazı bırakırken sekmeyi kapat. Arka planda açık kalan bir sekme, saatler sonra sen unuttuğun bir düzenlemeyi göndermeye çalışıyor ve çakışmaların çoğu buradan çıkıyor.
Uzun bir yazıyı bölmeden önce eşitlenmesini bekle. Gösterge yeşile döndüğünde diğer cihaz aynı zemindedir ve aynı satıra iki yerden dokunma ihtimali ortadan kalkar.
