iToverDose/Yazılım· 14 HAZIRAN 2026 · 20:05

Cep telefonunda çalışan 19 KB'lik çevrimdışı wikiyi nasıl geliştirdim

İnternet bağlantısı gerektirmeyen, sadece 19 KB boyutundaki bir HTML dosyasıyla çalışan taşınabilir bir wiki aracı geliştirildi. Bu basit çözüm, dosyayı Bluetooth veya USB ile paylaşmaya izin veriyor ve kurulum gerektirmiyor.

DEV Community3 dk okuma0 Yorumlar

Küresel erişimden bağımsız bilgilere ulaşmak isteyenler için standart wiki çözümleri genellikle yetersiz kalıyor. Açık kaynaklı Kiwix uygulaması geniş arşivler sunarken, depolama alanı ve kurulum gerektiriyor. IPFS gibi dağıtık sistemlerse ek ayarlamalar ve sürekli internet bağlantısı istiyor. Peki ya tüm bunlara ihtiyaç duymadan, sadece birkaç kilobaytlık bir dosya ile çalışan, kurulum gerektirmeyen ve dosyayı Bluetooth ya da USB ile paylaşabildiğiniz bir wiki olsaydı? Bu soruyu yanıtlamak için geliştirilen Taşınabilir Bilgi Ağı projesi, kullanıcı dostu bir yaklaşımla karşımıza çıkıyor.

Sıfır kurulum, sadece bir tıkla kullanım

Bu projenin en önemli avantajı, kullanıcıların herhangi bir uygulama indirmeden veya ayar yapmadan bilgiye ulaşabilmesi. Geliştirilen araç, sadece `reader.html` adında 19 KB boyutundaki bir HTML dosyasından oluşuyor. Dosyayı indirdikten sonra, çift tıklayarak doğrudan tarayıcıda açabilir ve yerel olarak saklanan .mesh paketlerini yükleyebilirsiniz. Arama yapabilir, okuma gerçekleştirebilir ve hatta dosyayı Bluetooth, USB ya da e-posta yoluyla başka kullanıcılarla paylaşabilirsiniz. Proje, okuyucu ve 21 makaleden oluşan bir "hayatta kalma paketi" ile birlikte 50 KB'ın altında bir boyuta sahip oluyor — neredeyse bir sohbet mesajına sığabilecek kadar hafif.

Dosya sisteminden doğrudan çalışabilen tasarım

Projenin geliştirilmesinde en büyük zorluklardan biri, dosyanın `file://` protokolünden doğrudan çalıştırılabilmesi gerekliliğiydi. Bu kısıtlama, birçok modern web teknolojisinin kullanımını engelliyor:

  • Service Worker kullanımı imkansız: Güvenli olmayan bağlamlar (örneğin file://) Service Worker'ları desteklemiyor.
  • IndexedDB güvenilmez: Farklı tarayıcılar arasında tutarlı çalışmaması ve yerel depolama sorunları nedeniyle tercih edilmedi.

Bu nedenle ilk sürümde veriler bellekte ve `sessionStorage` üzerinde saklandı. .mesh paketleri, sıfır bağımlılıkla çalışan basit bir JSON dosyası olarak tasarlandı. Daha sonraki optimizasyonlarda ise dosya boyutunu küçültmek için sıkıştırma eklendi, ancak ilk sürümde JSON formatı, taşınabilirliği ve güvenilirliği ön planda tuttu.

Sayısal imza ile doğrulama: Bilginin güvenilirliği

Bilgilerin cihazdan cihaza paylaşıldığı bir ortamda, içeriğin orijinal ve değiştirilmemiş olduğundan emin olmak kritik önem taşıyor. Taşınabilir Bilgi Ağı, her .mesh paketini kriptografik olarak imzalayarak bu sorunu çözüyor. Süreç şu şekilde işliyor:

  • Her makale (blok) SHA-256 algoritmasıyla hashleniyor.
  • Tüm blok hash'leri sıralanarak Merkle kökü oluşturuluyor.
  • Oluşturulan Merkle kökü, yayıncının ECDSA P-256 algoritmasıyla imzalanıyor.

Okuyucu tarafında ise sürecin tersine çalışılması gerekiyor. Aşağıdaki fonksiyon, paketin doğruluğunu kontrol ediyor:

async function verifyPack(mesh) {
  const m = mesh.manifest;
  const per = {};
  
  // Her makalenin hash'ini hesapla
  for (const [id, md] of Object.entries(mesh.content.blocks)) {
    per[id] = await sha256Hex(md);
  }

  // Sıralı hash'ler üzerinde Merkle kökünü yeniden oluştur
  const root = await sha256Hex(
    Object.keys(per).sort().map(id => per[id]).join('')
  );

  // Eğer Merkle kökü manifest ile uyuşmuyorsa, içerik değiştirilmiş demektir
  if (root !== m.merkle_root) return 'tampered';

  // Yayıncının genel anahtarını içe aktar
  const key = await crypto.subtle.importKey(
    'jwk',
    m.publisher.pubkey_jwk,
    { name: 'ECDSA', namedCurve: 'P-256' },
    true,
    ['verify']
  );

  // İmzayı doğrula
  const ok = await crypto.subtle.verify(
    { name: 'ECDSA', hash: 'SHA-256' },
    key,
    b64ToBytes(m.signature_b64),
    new TextEncoder().encode(m.merkle_root)
  );

  return ok ? 'verified' : 'tampered';
}

Bu yöntem, iki saldırı yolunu da engelliyor:

  • Bir makaleyi değiştirirseniz, yeniden hesaplanan hash manifest ile uyuşmayacak.
  • Manifesti değiştirmeye çalışırsanız, imza doğrulama aşamasında başarısız olacak (çünkü özel anahtar olmadan yeni bir imza oluşturulamaz).

Gelecekteki hedefler: Topluluk katkıları ve senkronizasyon

Geliştirici ekibi, projenin ikinci versiyonunda (v0.2) kullanıcıların yerel olarak makaleleri düzenleyebilmesini hedefliyor. İlk fikir, CRDT (Conflict-free Replicated Data Types) kullanımıydı, ancak bu yaklaşımın getirdiği bazı sorunlar ortaya çıktı:

  • Hafıza ve depolama sorunları: CRDT'ler, çatışmaları çözmek için "mezarlık" adı verilen geçmiş kayıtlarını saklıyor. Bu durum, uzun vadede dosya boyutunu katlanarak artırıyor.
  • Çevrimdışı ortamlarda senkronizasyon zorluğu: Tüm düğümlerin düzenli olarak bir araya gelmesi gerekiyor, ancak bu gerçek dünya senaryolarında mümkün olmayabiliyor.

Bu sorunları aşmak için daha hafif bir CRDT yaklaşımı benimsendi:

  • Blok düzeyinde LWW-Map (Last-Write-Wins): Her makale için sadece en son değer saklanıyor, böylece geçmiş kayıtları tutulmuyor.
  • Lamport saatleri kullanımı: Duvar saati zamanı yerine mantıksal zaman kullanılıyor. Bu, çevrimdışı cihazlardaki saat senkronizasyon sorunlarını ortadan kaldırıyor.

Üçüncü versiyon (v0.3) ile birlikte ise proje, PWA (Progressive Web App) olarak kurulabilir hale gelecek. Ayrıca LAN içi WebRTC senkronizasyonu ve güvenilir düğümler arasında imzalı anlık görüntü (snapshot) paylaşımı gibi özellikler eklenecek.

Neden bu proje önemli?

Taşınabilir Bilgi Ağı, küresel internet erişimine sahip olmayan bölgelerde, doğal afetlerde ya da basitçe bilgiye ulaşmanın zor olduğu durumlarda devrim niteliğinde bir çözüm sunuyor. Sadece birkaç kilobaytlık bir dosya ile:

  • Herhangi bir tarayıcıda çalışabiliyor.
  • İnternet bağlantısı gerektirmiyor.
  • Dosyayı Bluetooth, USB ya da e-posta yoluyla kolayca paylaşabiliyorsunuz.
  • Bilginin orijinalliği kriptografik olarak doğrulanabiliyor.

Geliştirici, projenin gelecekte yerel topluluklar tarafından düzenlenebilir hale gelmesini ve daha geniş kitlelere ulaşmasını hedefliyor. Şu anda 21 makaleyi içeren "Çıplak Ayak Becerileri" paketiyle birlikte sunulan araç, bilgi paylaşımının ne kadar basit ve erişilebilir olabileceğini gösteriyor. Bu küçük dosya, dijital dünyanın kısıtlamalarından kurtulmanın kapılarını aralıyor.

Yapay zeka özeti

İnternet bağlantısı gerektirmeyen, sadece 19 KB boyutunda bir HTML dosyasıyla çalışan taşınabilir wiki aracı hakkında detaylı rehber. Kurulum gerektirmeyen ve Bluetooth/USB ile paylaşılabilen bu çözümle bilgiye her yerde ulaşın.

Yorumlar

00
YORUM BIRAK
ID #NYLG57

0 / 1200 KARAKTER

İnsan doğrulaması

2 + 3 = ?

Editör onayı sonrası yayına girer

Moderasyon · Spam koruması aktif

Henüz onaylı yorum yok. İlk yorumu sen bırak.