6 puan yazan GN⁺ 2025-08-16 | 1 yorum | WhatsApp'ta paylaş
  • PureGym uygulamasının yavaş kullanımını ve karmaşık giriş sürecinin yarattığı rahatsızlığı çözmek için, bunu kişisel olarak Apple Wallet için optimize etti
  • Mevcut QR kodu, her seferinde uygulamayı açıp bilgileri yüklemeyi gerektiren ve yaklaşık 47 saniye süren verimsiz bir giriş yöntemi
  • Çeşitli reverse engineering çalışmaları, mitmproxy kullanımı ve PassKit framework’ü gibi teknik süreçler üzerinden otomatik yenilenebilen bir Wallet geçiş kartı hayata geçirildi
  • Bu süreçte PIN kodundaki güvenlik açıkları, API kimlik doğrulama yapısı ve şube konum bilgileri gibi PureGym’in internette görülebilen iç işleyişi ortaya çıkarıldı
  • Sonuçta 3 saniyede giriş sağlayan bir kullanıcı deneyimi oluşturuldu ve bunun yalnızca kişisel bir deney olduğu, resmî bir hizmet olmadığı açıkça belirtildi

47 saniye: rahatsızlığın başlangıcı

  • Hafta içi saat 11:15’te, PureGym girişinde uygulamayı açmak 47 saniye sürdü
  • Sinyal zayıftı; Wi‑Fi’a bağlanma, uygulamayı başlatma, çeşitli push bildirimlerini ve özel indirim tekliflerini geçme gibi adımlardan sonra QR kodu göründü
  • QR kodunun gerçekten görünmesi uzun sürüyor ve insan diğer üyelerin bakışlarından rahatsız oluyor
  • Haftada 6 kez tekrarlandığında, bu verimsiz deneyim her hafta 282 saniye kaybettiriyor
  • Amazon Fresh gibi sürtünmesiz deneyimlerle kıyaslandığında, PureGym’in giriş UX’i oldukça geride kalıyor

8 yıllık PIN gizemi

  • Yazar, 8 haneli PIN kodunu 8 yıldır hiç değiştirmeden kullanıyor
  • Bu PIN ne süresi doluyor ne de değişiyor
  • Buna karşılık, uygulama içindeki QR kodu her 1 dakikada bir yeni bir değerle değişiyor
  • Gerçek güvenlik seviyesi ile fiilî uygulama arasında büyük bir çelişki var
  • PIN yöntemi aşırı uzun süre korunurken yalnızca QR kodunun sıkı biçimde korunması bir tür "güvenlik gösterisi" etkisi yaratıyor

mitmproxy ile PureGym’i anlamak

  • İlk başta QR kodunun ekran görüntüsünü Apple Wallet’a koyup kullanmayı denedi, ancak bu hemen işe yaramadı
  • PureGym’in QR kodu dinamik olarak üretiliyor, yaklaşık 1 hafta içinde süresi doluyor ama uygulamada her 1 dakikada bir yenileniyor
  • GitHub’da "PureGym" ile ilgili depolar aranarak API kimlik doğrulama yapısı bulundu
    • Giriş için kullanılan 8 haneli PIN, API parolası olarak da aynı şekilde kullanılıyor
    • Base64 ile kodlanmış temel kimlik doğrulama bilgileri de zayıf güvenlik sunuyor
  • Uygulama trafiğini analiz etmek için mitmproxy gibi proxy araçlarıyla istekler yakalandı
    • QR kodunun JSON yapısı part1 (sabit id), part2 (timestamp), part3 (yenileme için salt) bölümlerinden oluşuyor
    • API, yenileme zamanlamasından sona erme koşullarına kadar her şeyi bildiriyor

PassKit: Apple Wallet’ın potansiyeli

  • Apple Wallet pass’leri statik kartlar değil; kendi kendini yenileyebilen, push bildirimi alabilen ve konuma tepki verebilen mini uygulama yapıları
  • PassKit uygulaması için JSON spesifikasyonu, görsel kaynaklar, sertifika imzası ve gerçek zamanlı yenileme için web servisleri gerekiyor
  • Apple geliştirici portalından Pass Type ID ve WWDR sertifikası alınması şart
  • Sertifika imzalama ve yönetimi zahmetli olsa da, başarıldığında gerçek cihazda akıcı bir deneyim sağlanabiliyor

Swift backend kurulumu

  • Genelde Node.js kullanılsa da, yazar PassKit web servislerini doğrudan Swift tabanlı Vapor ile geliştirdi
    • Pass güncellenmesi gerektiğinde, silent push ile otomatik güncelleme sağlanıyor
    • Kullanıcının fark etmediği doğal bir pass yenileme deneyimi gerçekleştiriliyor

Ülke çapındaki PureGym konumlarını otomatikleştirme

  • Apple Wallet pass’leri belirlenen konumlarda otomatik olarak gösterilebiliyor
  • PureGym’in resmî sitesinde ayrıntılı koordinatlar yoktu, ancak API üzerinden ülke genelindeki şubelerin koordinat listesi alındı
  • Tüm şube koordinatları parse edilerek her pass için en yakın şube atandı
  • Dezavantajı şu: PureGym bir alışveriş merkezinin içindeyse, sadece alışverişe gidildiğinde bile pass’in görünmesi gibi küçük bir rahatsızlık oluşabiliyor

Apple Watch entegrasyonu

  • Apple Wallet pass’leri ek bir işlem olmadan Apple Watch ile otomatik senkronize oluyor
  • Bilekten iki kez tıklayıp taratmak ve içeri girmek artık sadece 3 saniye sürüyor
  • Zamanın %93’ünden fazlası tasarruf edilmiş oldu

Rakamlarla değişim

  • Eski PureGym uygulamasıyla giriş süresi: 47 saniye
  • Apple Wallet pass’iyle giriş süresi: 3 saniye
  • Haftalık ortalama kazanılan zaman: 4,4 dakika (yılda 3,8 saat)
  • Yakındaki üyeler 23 kez "Böyle bir uygulama mı var?" diye sordu; hepsine bunun gayriresmî olduğu açıklandı
  • Talep olsa da telif ve hizmet politikaları nedeniyle dağıtma planı yok

Bonus: Home Assistant entegrasyonu

  • PureGym API’sindeki içerideki kişi sayısı endpoint’i üzerinden IoT panosunda spor salonunun anlık yoğunluğu gösteriliyor
  • Veriye dayanarak daha sakin saatlerde yeniden gitmeye karar verilebiliyor; bu da egzersiz verimliliğini ve motivasyonu artırıyor

Mühendislik gerçeği ve etik

  • Bu, tamamen kişisel bir rahatsızlığı çözme girişimiydi; ancak PureGym içinde yıllardır iyileştirilmeyen bir alana dokunuyordu
  • Kurum dışından geliştirilen bir prototip bazen resmî yol haritasından daha hızlı biçimde sorun çözebiliyor
  • Bunun resmî açıdan kullanım koşullarını ihlal etmesi mümkün ve PureGym bunu istediği zaman engelleyebilir
  • Kesinlikle otomasyona veya paylaşıma açılmadı; yalnızca kişisel deney amacıyla kullanıldı ve kararlılık için cache gibi ilkelere uyuldu

Sonraki adımlar ve kapanış

  • İleride "utandırma push bildirimi" gibi genişletme fikirleri önerilebilir
  • Pratik faydası küçük olsa da, yılda 3,8 saatlik "gereksiz hareket"in optimize edilmesi tatmin edici bulundu
  • PureGym bunu resmî olarak uygularsa çok daha fazla kullanıcı kolaylığı sağlayabilir
  • "Gayriresmî ama etkili bir deneyim" üretmenin bir örneği olarak kayda geçti

1 yorum

 
GN⁺ 2025-08-16
Hacker News görüşü
  • Bunun gerçekten eğlenceli ve ilham verici bir yazı olduğunu düşünüyorum; mühendisliğin özünü çok iyi yansıtıyor ve OP'nin gerçek bir hacker olduğu belli oluyor.
    ABD'de 3 ay kaldığım sırada PureGym'e üye olup bir PIN almıştım, sonra üyeliğimi iptal ettim; ama daha sonra Chrome bana PureGym PIN'imin sızdırıldığını bildirdi.
    2 yıl sonra tekrar ABD'ye gidince aynı PIN'i aldım ve bunun güvenlik açısından çok büyük bir sorun olduğunu düşündüm.
    PureGym uygulaması ve token'ı da ilginçti; hidro masaj koltuğunu etkinleştiren sistemde de bir güvenlik açığı bulmuştum, çünkü herhangi bir PIN'i kabul edecek şekilde tasarlanmıştı.
    • Chrome'un PureGym PIN sızıntısı uyarısı muhtemelen yanlış pozitifti; Chrome HaveIBeenPwned API'sini kullanırken böyle şeyler olabiliyor.
      Örneğin 87623103 gibi bir PIN, 558B4C37F6E3FF9A5E1115C66CEF0703E3F2ADEE hash'ine dönüşür ve HaveIBeenPwned hash aralığı içinde aratıldığında gerçekten birçok kez sızdırılmış kayıtlar bulunur.
  • Bu, sadece bir kez düşünmekle kalınmaması gereken bir mesele. Dışarıda duran fiziksel bir keypad, Birleşik Krallık havası, protein shake'ler ve pişmanlıkla kaplanmış durumda; hatta birinin evindeki Ring doorbell üzerinden TikTok Live yayınına bile konu olabilir. Ama yine de benim eski PIN'imi sorunsuz kabul ediyor; buna karşılık dijital QR kodu, NSA'yı bile etkileyecek düzeyde dönen şifreleme gerektiriyor.
  • Böyle hikâyeler okumak çok keyifli; uygulamanın düzgün çalışmasını beklemek yerine PIN'i doğrudan ezberliyorum. Bu yüzden OP'nin önerdiği yöntemden bile daha hızlı içeri girebiliyorum ve cihaz ya da ek bir hizmet gerektirmediği için daha pratik geliyor.
  • “Apple Wallet'ı uygulamamalarının da bir sebebi var” türü yazıları görünce, PureGym uygulamasının ekran görüntülerine bakarak bunun esasen mobil web sitesinin ince bir sarmalı ya da Flutter gibi bir teknolojiyle yapılmış bir şey olduğunu düşündüm. Apple API'lerinin ince ayrıntılarıyla uğraşabilecek şirket içi geliştiricileri olma ihtimalleri çok düşük görünüyor.
    • Mesele tam olarak bu. PureGym'in asıl işi hizmete mümkün olduğunca çok abone toplamak ve çıkışı zorlaştırmak; geliştirme onların ana işi değil. Şanslılarsa içeride siteyi ve veritabanını zar zor ayakta tutan bir web geliştiricileri vardır ve “bunu uygulama gibi çalışır hale getirin” diye dışarıya iş verirler. Şanssızlarsa tüm web işlerini bir ajansa vermişlerdir ve başlıktaki tek bir harfi değiştirmek için bile ek ücret ödemeleri gerekir.
    • Ama insan yine de neden öğrenemediklerini merak ediyor. Google, Stack Overflow, LLM gibi araçlar bu kadar çokken hâlâ bir iyileşme olmaması tuhaf. Muhtemelen ya UX'i önemseyen kimse yoktur ya da backend ekibi çoktan gitmiştir ve geriye minimum kadroyla çalışan ucuz mühendisler kalmıştır.
    • Apple Wallet eklenirse Android Wallet desteği de gerekeceği için yönetilecek kod miktarı artar. Yine de en azından uygulama açılır açılmaz QR kodunu her zaman gösterecek şekilde yapabilirler gibi görünüyor.
    • Benim telefonumda da PureGym uygulaması var; gerçekten sadece PureGym web sitesini saran bir uygulama gibi hissettiriyor.
  • Çok yerinde bir söz: 8 haneli spor salonu kapı PIN'i aynı zamanda API parolası ve kullanıcıların büyük çoğunluğu bunu kendisi ayarlamadı. Başarısız denemelerde rate limit vardır diye umuyorum. Yalnızca e-posta adresini bilerek doğrudan API erişimi elde edilebiliyor gibi görünüyor. Ayrıca istenebilecek yetki kapsamlarının da düzgün sınırlanıp sınırlanmadığını merak ediyorum.
    • OP burada.
      API erişiminin hemen mümkün olup olmadığı sorusuna cevap: evet, doğru. Uygulamayı ve siteyi kullanırken gerçekten hiç rate limit'e takılmadım; başarısız denemelere karşı oldukça toleranslı.
      Yazıda tanıttığım scope, resmi uygulamanın ve GitHub'daki gayriresmî istemcilerin kullandığıyla aynı.
      Ek scope'lar olma ihtimali çok düşük; PureGym PHP Wrapper ve PureGym Attendance Python da bakmaya değer.
  • PureGym'in uygulama roadmap'i tartışmalarını BT sektöründe çok yaşadım.
    “Bu özelliği yaparsak bundan bizzat biz sorumlu oluruz” tarzı şeyler.
    “Doğru, o zaman bunu 2028 roadmap'ine koyalım” diye yapılan şakaları da çok duydum.
    • Bizim departman toplantıları da aynı. Roadmap ve planlardan konuşulurken asıl mesele “Bu gelirimize katkı sağlar mı, yoksa para mı harcatır?” oluyor.
      Zaten yapılacak işler ve istek listesi çok uzun olduğu için yeni özellik eklemek kolay olmuyor.
      Bence PureGym'in şu anda yapabileceği en iyi şey, bu uygulamayı yapan geliştiriciye birkaç bin sterlin ve ömür boyu ücretsiz üyelik vermek olurdu.
  • Apple Developer Portal'dan verilen Pass Type ID sertifikasının maliyetini merak ediyorum.
    Apple Wallet pass'leri oluşturmak istiyorum ama geliştirici hesabı kurulumu ve ek maliyetler gözümü korkutuyor.
    • Bildiğim kadarıyla bu, temel geliştirici aboneliğine dâhil; ama bunu sürdürmek için geliştirici aboneliğini her yıl yenilemeniz gerekiyor.
  • Her dakika yeni kod almak için push bildirimi gelmesi batarya açısından sorun olmaz mı diye merak ediyorum.
    • Metne bakılırsa kod yenilemesi haftada bir yapılıyor, dolayısıyla en fazla haftada bir olur diye tahmin ediyorum.
    • Push bildirimlerinde background mode diye bir şey var; telefon ancak hazır olduğunda bunu işler.
      Batarya düşükken ya da güç tasarrufu modundayken hiç iletilmeyebilir; bu da batarya tüketimini en aza indirmek için tasarlanmış bir yapı.
      Daha önemli bildirimlerde ise bir UI öğesinin mutlaka gösterilmesi gerekir ve bunlar güç tasarrufu durumundan bağımsız olarak ulaşır.
  • Eğlenceli ve teknik ayrıntılarla dolu bir yazıydı, keyifle okudum.