
Bir Sürüm 2 Gerçekte Neye Mal Olur: 206 Commit'lik Dürüst Durumlar
GeekBye v2 bir özellik sürümü değildi. Tek bir fikre yönelmiş 206 commit'ti: uygulama kendi durumu hakkında asla yalan söylememeli. İşte bunun bedeli — hepsini sevk etmemizi neredeyse engelleyen tek satırlık kilit dosyası hatası dahil.
Çoğu "sürüm 2" yayını, üzerinde daha büyük bir sayı olan bir yığın yeni özelliktir. GeekBye v2 bunun tam tersiydi. Kullanıcıya yönelik neredeyse hiçbir yeni yetenek getirmedi. 206 commit''i tek, gösterişsiz bir fikre yönelikti:
Uygulama size asla gerçek olmayan bir durumu göstermemeli.
Bir masaüstü uygulamasının kaç şekilde sessizce yalan söylediğini sayana kadar bu apaçık gibi gelir. Hâlâ yolda olan bir yüklemede onay işareti gösterir. Bir dakika önce ölmüş bir soket üzerinden "bağlı" der. Transkriptiniz yere atılırken sessiz kalır. Bunların hiçbiri bir çökme değildir. Çökmelerden daha kötüdürler, çünkü uygulama yanlışken düzgün görünür — ve bunu ancak daha sonra, ihtiyacınız olan kayıt orada olmadığında fark edersiniz.
v2, bu küçük yalanların her birini avlamaya çıktığımız sürümdü.
En nefret ettiğimiz yalan: "başarılı olan" yükleme
GeekBye kayıtlarınızı Google Drive''a yedekleyebilir. v1''de Drive bağlantısı bir arka plan detayı olarak ele alınıyordu — işe yararsa harika; yaramazsa, hata çoğunlukla görünmezdi. Uygulama bağlı görünmeye devam ederdi. Kayıtlarınızın güvende olduğunu varsayardınız. Bazen değillerdi.
v2 bunu dürüst bağlantı durumları etrafında yeniden inşa etti. Drive artık her zaman birkaç açık, doğru durumdan birindedir — bağlı, yeniden bağlanıyor, bağlantı kesildi — ve uygulama bu durumun her değişikliğini gerçekleştiği anda tüm arayüze yayınlar. Bağlantı koptuğunda, küresel bir yeniden bağlanma bandı size her yerde, açıkça söyler. Uygulama artık bir yükleme başarısız olduğunda başarılı olmuş gibi yapmıyor. Yedeklemeniz şu anda gerçekleşemiyorsa, bunu şimdi biliyorsunuz — dosyayı aramaya gittiğiniz gelecek hafta değil.
Bunun altında yatan bir slogan değil, küçük bir mimaridir: bağlantı için tek bir doğruluk kaynağı, değiştiğinde arayüzün her parçasına yayılan bir olay ve doğrudan o durumdan okuyan bir bant. Bağlantının kopuk olup arayüzün düzgün göründüğü hiçbir yol yoktur, çünkü ikisi de aynı gerçekten okur.
Kaybolan kaydın yalanı
İkinci büyük dürüstlük düzeltmesi kayıt kurtarmaydı. Gerçek zamanlı transkripsiyon canlı bir bağlantıya ihtiyaç duyar. v1''de, o bağlantı oturum ortasında takılırsa — bir Wi-Fi kesintisi, bir tünel, bir VPN yeniden bağlanması — kesinti sırasındaki ses basitçe kaybolabilirdi. Transkriptte bir delik olur ve hiçbir şey size söylemezdi.
v2 sözleşmeyi değiştirdi: ses, bağlantı kesintisi sırasında yerel olarak saklanır ve sonrasında uzlaştırılır. Bağlantı düştüğünde, GeekBye sesi makinenizde güvende tutar; geri geldiğinde, o tamponlanmış ses gönderilir ve transkripte doğru yerde dikilir. Otuz saniyelik kötü bir ağ artık size otuz saniyelik toplantıya mal olmuyor. Sonraki güvenilirlik sürümlerinin doğrudan üzerine inşa ettiği temel budur — AI not alıcınız neden kötü Wi-Fi''de durur yazısındaki yeniden bağlan-ve-tamponla mekanizması, sertleştirilmiş aynı fikirdir.
Açılır pencere fırtınasının yalanı
Uygulamaların sorunları nasıl bildirdiğine dair daha ince bir sahtekârlık var: fazla bildiriyorlar. Tek bir dengesiz ağ anı aynı hatayı beş kez tetikleyebilir ve aniden önemli olan tek mesajı gömen bir yığın özdeş kırmızı bildiriminiz olur. Bu da dürüst değil — bilgi gibi görünen gürültü.
Bu yüzden v2, kategori anahtarlı bildirim kısıtlama ve hata yönlendirme ekledi. Hatalar gerçekte ne olduklarına göre gruplanır ve her kategori hız sınırlıdır, böylece tek bir temel sorun bir yağmur değil, bir net mesaj üretir. Bir hız sınırı sorunu bir hız sınırı mesajına yönlendirilir; bir bağlantı sorunu bir bağlantı mesajına yönlendirilir. Uygulama size neyin doğru olduğunu, bir kez söyler — daha sonra uygulamamızın kendisini DDoS''ladığı gün yazısında bir 429''un oturum kapatma gibi görünmesini önleyen aynı disiplin.
206 sayısı asıl mesele
Dürüst durumlar, yeniden bağlanma bandı, kayıt kurtarma, bildirim yönlendirme — bu dört fikir. Sürüm 206 commit''ti. Gerisi nereye gitti?
"Asla yanlış bir durum gösterme"nin gerçekte gerektirdiği gösterişsiz uzun kuyruğa. Eski arayüzün gerçeklikle uyumsuz hale gelebileceği her yer bulunmalı ve eski bir kopya yerine gerçeği okuyacak şekilde yeniden bağlanmalıydı. Her yeniden bağlanma yolu, yerel olarak tahmin etmek yerine paylaşılan durumu güncelleyecek şekilde yapılmalıydı. Kayıt, transkripsiyon ve yüklemeler arasında düzinelerce küçük güvenilirlik düzeltmesi — her biri uygulamanın yanlışken düzgün görünebileceği belirli bir boşluğu kapatıyor.
Amaç özellikler yerine güven olduğunda gerçek bir "sürüm 2"nin bedeli budur. Tek bir başlık commit''i yoktur. 206 küçük commit vardır ve sürüm yalnızca tek bir şey gibi hissettirir — sakinlik — çünkü 206''sı da aynı yöne çeker.
Sürüm neredeyse çıkmıyordu
İşte savaş hikâyesi ve iyi bir tanesi, çünkü kendi uygulamamızın bize yalan söylemesiyle ilgili.
Bir sürüm çıkardığınızda, bir sürüm yükseltme betiği yeni sayıyı projenin her yerine damgalar. v2.0.0''da uygulamanın sürümünü güncelledi — ama npm''in tam bağımlılık defteri olan package-lock.json, eski sürüme, 1.9.0''a işaret etmeye devam etti. Yerelde her şey yolundaydı; kimse sadece derlemek için bağımlılıkları yeniden yüklemez. Ama CI npm ci çalıştırır ve npm ci''nin tüm işi kilit dosyası manifesto ile uyuşmuyorsa devam etmeyi reddetmektir. Bu bir katılık özelliğidir — ve tam olarak yapması gerekeni yaptı, çıkardığımız en büyük sürümün derlemesini başarısız kılarak.
Sonra altında ikinci, daha sinsi bir tanesi ortaya çıktı. Daha yeni bir npm, isteğe bağlı bir geçişli bağımlılığı budamıştı — node-fetch''in çektiği encoding paketini — gereksiz olarak kilit dosyasından. Ancak CI''mizin temiz kurulumu ona gerçekten ihtiyaç duyuyordu, bu yüzden kurulum kodumuzla hiçbir ilgisi olmayan ve tamamen defterin ince bir şekilde yanlış olmasıyla ilgili bir şekilde bozuldu.
İkisi de tek satırlık düzeltmelerdi: kilit dosyasını gerçek sürüme yeniden senkronize et, budanmış girdiyi geri yükle. İkisi de aynı zamanda v2''nin tam olarak neyle ilgili olduğunun mükemmel, alçakgönüllü kılan örnekleri — doğru olduğunu iddia eden ama olmayan bir durum. Kilit dosyasının, uygulamanın neye bağlı olduğunun dürüst kaydı olması gerekir. Gerçeklikten saptığında, derleme uygulamamızın artık kullanıcılar için yaptığı şeyi tam olarak yaptı: her şeyin yolunda olduğunu iddia etmeyi reddetti. Bir güvenilirlik sürümü çıkarmak, ta en dibe kadar bir güvenilirlik sorunu çıkıyor.
v2''nin bize öğrettiği üç şey
- Tehlikeli başarısızlıklar sessiz olanlardır. Bir çökme kendini duyurur. Sahte bir "bağlı," hayalet bir başarılı yükleme, görünmez bir deliği olan bir transkript — bunlar size tam da hiçbir şey yanlış görünmediği için güveninize mal olur. Sessiz yalanları avlayın.
- Dürüstlük bir mimaridir, bir mesaj değil. "Doğruyu söyle"yi bir arayüze bir bant olarak cıvatalayamazsınız. Bant, diğer her şeyle aynı tek doğruluk kaynağından okumalıdır, yoksa yanlış olabilecek bir şey daha haline gelir. Tek bir gerçek, yayılmış — asla birbiriyle çelişebilecek iki kopya değil.
- Sayıyı hak eden bir sürüm 2 çoğunlukla görünmezdir. v2''niz bir özellik listesiyse, pazarlamalı bir v1.5''tir. Gerçek bir v2, kimsenin tek tek işaret edemeyeceği 206 commit''tir ve toplamda size yalan söylemeyi basitçe bırakan bir ürüne eklenir.
GeekBye v2.0.0, o zamandan beri her sürümün üzerine inşa ettiği temeldir. O temelin neyi taşıdığını görmek için, AI not alıcınız neden kötü Wi-Fi''de durur, uygulamamızın kendisini DDoS''ladığı gün (v2.0.1) ve güvenlik duvarı WebSocket''leri engellediğinde canlı transkripsiyon (v2.0.8) yazılarına bakın. Hepsinin hizmet ettiği sakinlik için, GeekBye v2''de neler yeni.