QR Kodla İnternetsiz Dosya Transferi
Ekranda yanıp sönen karekodlarla, hiçbir ağa bağlanmadan cihazdan cihaza dosya göndermek. Kurulumsuz çalışan kolay yol, hızlısını isteyenler için Decimen kurulumu ve işin arkasındaki mantık.
Ekranda hızlı hızlı yanıp sönen karekodlar, karşıda bakan bir kamera. Arada ne internet var, ne bluetooth, ne eşleştirme. Dosya sadece ışıkla geçiyor.
Aşağıda iki yol var. Birincisi hiçbir şey kurmadan, telefonun tarayıcısından çalışıyor. İkincisi videoda anlattığım hızlı olanı, ama biraz kurulum istiyor.
Yol 1: En kolay yol, hiçbir şey kurmadan
İki cihazda tarayıcı açmak yeterli. Kod bilmene gerek yok, 2 dakika sürer.
- 1Dosyayı alacak cihazda şunu aç: airgapped-qr-code-transfer.mohanram.co.in/scanner ve kameraya izin ver.
- 2Dosyayı gönderecek cihazda şunu aç: airgapped-qr-code-transfer.mohanram.co.in/generator ve göndereceğin dosyayı seç.
- 3Gönderen tarafta transferi başlat. Ekran karekodları arka arkaya göstermeye başlayacak.
- 4Alıcı cihazın kamerasını o ekrana tut. Bütün parçalar toplandığında dosya kendiliğinden iniyor.
Yol 2: Hızlısı (Decimen)
Çoğu kişi için Yol 1 yeterli. Videodaki saniyede 130 kilobayt hızı kendi gözünle görmek istiyorsan bunu kur; kendi bilgisayarında çalışıyor.
- 1Bilgisayarında Node.js kurulu olsun: nodejs.org adresinden indirip kur (bir kere kuruluyor).
- 2Repoyu indir: GitHub sayfasında yeşil Code düğmesi, sonra Download ZIP. İndirilen dosyayı bir klasöre çıkar.
- 3O klasörde bir terminal aç ve şu iki komutu sırayla çalıştır:
- 1Komutlar bitince terminalde Network: diye başlayan bir satır göreceksin, örneğin https://192.168.1.34:5173. IP aramana gerek yok, adres orada yazıyor.
- 2Gönderen cihazda (bilgisayar) şunu aç:
- 3Alıcı telefonda Network satırındaki adresi açıp sonuna /receive/ ekle, örneğin https://192.168.1.34:5173/receive/
- 4Tarayıcı "bu sertifika güvenli değil" diye uyaracak. Bu normal, kendi bilgisayarın olduğu için. Devam et deyip geç.
- 5Gönderen tarafta dosyayı seç, başlat. Telefonun kamerasını ekrana tut.
http ile kamera hiç açılmaz
Alıcı taraf kamerayı getUserMedia ile açıyor. Tarayıcılar bu özelliği güvensiz bağlantılarda tamamen kapatıyor. Yani telefonun bilgisayarına düz http ile bağlanırsa kamera hiç açılmıyor. Reponun kendi geliştirme sunucusu bu yüzden https ile geliyor.
→ Sertifika uyarısını görmek iyiye işaret, yanlış bir şey yapmıyorsun.
Peki nasıl oluyor bu
Kamera her kareyi yakalayamaz. İşin zekice tarafı, yakalamak zorunda olmaması.
Kullanılan yöntemin adı fountain code. Çeşme gibi düşünün. Yağmurun altına kova tutuyorsunuz. Hangi damlanın kovaya düştüğü önemli değil, yeterince damla düşünce kova doluyor.
Burada da her karekod, dosyanın rastgele parçalarının karışımı. Belli bir kareyi yakalamak zorunda değilsin. Yeterince kare topladığın anda dosya kendiliğinden tamamlanıyor. Reponun kendi ifadesiyle: kaçan kareler sana biraz zaman kaybettirir, ama doğruluğu asla bozmaz.
| Ayar | Varsayılan değeri |
|---|---|
| Saniyedeki kare sayısı | 24 |
| Kare başına veri | 1465 bayt (QR sürüm 27) |
| Gönderilebilen dosya boyutu | 512 KB ya da 2 MB (seçmeli) |
| Ölçülen hız | elde tutarken ~128 KB/s, sabitlenince ~186 KB/s |
Hızı düşüren şeyler
Reponun kendi notlarından, en çok işe yarayan üç tanesi.
Telefonu bir yere daya
Geliştiricinin kendi ifadesiyle hızın bir numaralı düşmanı el titremesi. Titreyince kamera sürekli odak arıyor ve kareler kaçıyor. Telefonu bir bardağa, kitaba, neye olursa dayamak hızı gözle görülür artırıyor.
Safari kullanma
Safari karekod okuma özelliğini (BarcodeDetector) hiç eklemedi. Araç bu yüzden okuma işini kendi yazılımıyla yapıyor, yani Safari'de daha yavaş. Chrome tercih et.
iPhone kare sayısını yanlış söylüyor
iOS, 60 kare istendiğinde sessizce 30 veriyor. Geliştirici bunu bilerek kod tarafında zorlamış. Yine de iPhone'da beklediğinden yavaş giderse sebebi bu olabilir.
Ekran parlaklığını aç
Karekodların net okunması için kontrast lazım. Gönderen ekranın parlaklığını yükselt, ekrana yansıma gelmesin.
Dürüst notlar
Yayınlamadan önce bilmen gereken üç şey.
Fikir yeni değil
Bu tarz araçlar yıllardır var. Benzerleri 1994'teki Timex Data Link saatine kadar gidiyor, 2018'de txqr, 2024'te başka bir tarayıcı aracı yapıldı. Geliştirici de bunu kabul ediyor, fikri bağımsız bulduğunu söylüyor.
Hız. Eski araçlar saniyede 4 kilobayt civarındaydı, bu yaklaşık 30 katı.
"Hava boşluğu" lafına aldanma
İngilizcede buna airgapped deniyor, yani iki sistem arasında hiç bağlantı yok demek. Tam olarak doğru değil. Kamera ile ekran arasında hâlâ bir veri yolu var, sadece optik.
Ağ üzerinden iz bırakmaması doğru. Ama bunu "kesinlikle izlenemez" diye okuma.
Bu bir kavram kanıtı
Geliştiricisi bunu bir gecede yazdığını söylüyor ve repo açıkça bir deneme projesi olarak duruyor. Günlük dosya paylaşımı için değil.
İnternetin hiç olmadığı yerde, uçakta, ya da iki cihazı bilerek birbirine bağlamak istemediğin durumlarda.
Özet
Kurulum istemeyen yol: alıcıda /scanner, göndericide /generator sayfasını aç, kamerayı ekrana tut. Küçük dosyalar için.
Gerçekten offline mı diye emin olmak için sayfalar açıldıktan sonra iki cihazın da internetini kapatıp dene.
Hızlı olanı Decimen: github.com/bashalarmistalt/decimen-optical-transfer, MIT lisans, ücretsiz.
Decimen için Node.js gerekiyor: repoyu Code > Download ZIP ile indir, klasörde npm install, sonra npm run dev.
Gönderen https://localhost:5173/send/ adresini açar; alıcı telefon terminaldeki Network satırında yazan adresi sonuna /receive/ ekleyerek açar (IP aramak yok).
İlk yükleme için telefon ve bilgisayar aynı Wi-Fi'da olmalı; sayfalar açıldıktan sonra internet kapatılabilir.
Sertifika uyarısı normal, kendi bilgisayarın olduğu için çıkıyor. http ile kamera hiç açılmaz.
Yöntem fountain code: her kare dosyanın rastgele parçalarının karışımı, kaçan kare doğruluğu bozmaz.
Hızın bir numaralı düşmanı el titremesi. Telefonu bir yere daya, parlaklığı aç, Safari yerine Chrome kullan.
Ölçülen hız elde ~128 KB/s, sabitlenince ~186 KB/s. Eski benzerleri ~4 KB/s seviyesindeydi.
Fikir yeni değil (1994'e kadar gidiyor), yeni olan hız. Ve bu bir kavram kanıtı, günlük araç değil.