- Hyperclay, tüm UI, mantık ve verinin tek bir HTML dosyasında birleştiği şekilde web uygulamaları oluşturmayı destekler
- Dosyanın kendisinde yapılan değişikliklerle anında düzenleme ve gerçek zamanlı paylaşım mümkündür; uygulamanın görünümünü, davranışını ve düzenleme biçimini doğrudan kontrol edebilirsiniz
- Ayrı bir build·deploy süreci, veritabanı veya karmaşık bir backend olmadan anında çalıştırma·kaydetme yapısı sunar
- Tek bir HTML dosyasıyla uygulama tarayıcıda, sunucuda, çevrimdışı dahil her yerde çalıştırılabilir ve tüm değişiklikler sürüm kontrolüyle saklanıp geri yüklenebilir
- Modern web geliştirmenin karmaşıklığını azaltmak ve herkesin gerçek zamanlı, yaşayan etkileşimli uygulamalar kolayca oluşturabilmesi için tasarlanmıştır
Giriş: Tek bir HTML dosyasıyla yaşayan web uygulamaları, Hyperclay
- Hyperclay, programcılara karmaşık altyapı yönetimi olmadan, tek bir taşınabilir HTML dosyası ile adeta ürün şekillendirir gibi web uygulamaları oluşturma deneyimi sunar
- Mevcut web geliştirmede zorunlu görülen ayar dosyaları, build, framework'ler, deploy pipeline'ları gibi parçaları ortadan kaldırır ve tek dosyada tamamlanan bir yapı hedefler
Temel kavram ve avantajlar
- Uygulama tek bir HTML dosyasından oluşur
- Görsel UI üzerinden dosyanın kendisi gerçek zamanlı düzenlenebilir ve bu düzenlemeler doğrudan uygulamanın durumu olarak kalıcı biçimde kaydedilir
- UI, mantık ve verinin tamamı tek dosya içinde dinamik olarak yer alır
- Kullanıcılar uygulamayı bir belge gibi anında düzenleyebilir, değişiklikleri hemen paylaşabilir/indirebilir ve çevrimdışı kullanabilir
- "Interactive code için Google Docs" benzetmesindeki gibi paylaşım, düzenleme ve sahiplik kontrolü esnektir
Başlıca özelliklerin özeti
- Doğrudan manipülasyon: Uygulama çalışırken anında düzenlenebilir. Derleme veya yenileme olmadan değişiklikler hemen yansır
- What you see is what you build: UI'yi değiştirir ya da kaynak kodu doğrudan düzenlerseniz uygulama anında değişir; arada katman yoktur
- Gerçek taşınabilirlik: Uygulamayı HTML dosyası olarak dışa aktararak her yerde (sunucu·çevrimdışı) aynı şekilde çalıştırabilirsiniz. Her kayıt işleminde sürüm kontrolü uygulanır ve geri yükleme yapılabilir
- Tüm bunlar özel bir teknoloji gerektirmeden, yalnızca tek bir standart HTML dosyasıyla gerçekleşir
Teknik yapı
- Hyperclay, bir NodeJS sunucusu ve istemci tarafında çalışan bir JS kütüphanesinden oluşur
- HTML sayfası kendi DOM'unu değiştirdiğinde, değişen
document.body.outerHTMLsunucuya gönderilir ve HTML dosyasının kendisi güncellenir - Checkbox'ların checked özelliği gibi uygulama içindeki değişiklikler kalıcı olarak HTML koduna yazılır; böylece sonraki erişimde aynı durum yeniden üretilebilir
- Sürüm kontrolü ve okuma/yazma izin yönetimi desteği sunar
Gerçek örnekler
- Doğrudan düzenlenebilen bloglar, çalışma saati checklist'leri gibi her türlü uygulama tek bir HTML dosyası olarak yazılıp kaydedilebilir
contenteditableözelliği veya `` biçimiyle uygulama durumu doğrudan belgeye yazılır
Arka plan ve problem tanımı
- Her yıl onlarca web sitesi üretirken, web uygulaması kodlamanın yazı yazmak kadar doğal olması yönünde bir ihtiyaç vardı
- Geleneksel statik web sitelerinde değişiklikler geçicidir (kullanıcı eylemleri kaydedilmez)
- Web'de veri kalıcılığı sağlamak için veritabanı, API, template ve hesap sistemi kurmak gibi aşırı iş gerekir
- Prototipler, basit araçlar, kişisel geliştirme günlükleri, bloglama gibi hızlıca üretmek, gerçek zamanlı düzenlemek ve paylaşmak istenen ihtiyaçlar için bu yapı verimsiz kalır
Hyperclay'in çözüm yaklaşımı
- UI, durum ve davranış tek bir HTML dosyasında birleşir
- Tıpkı bir masaüstü uygulamasını açar gibi kolayca açıp anında düzenleyebilir, sonucu doğrudan çevrimiçi yansıtabilirsiniz
- Kalıcı (shared, cloneable, persistent) dijital nesneler kavramını ortaya koyar
- Web sitesi oluşturucular, belge·şema·sunum araçları, dashboard'lar, bloglar, anket·quiz üretimi, veri görselleştirme gibi birçok araca uygulanabilir
Genel kavram özeti
- Çoğu web uygulaması zaten HTML kullanır
- Ara adımlar kaldırıldığında HTML dosyası tam veritabanı/API/UI rolünü üstlenir ve stack birkaç satıra kadar sadeleşir
- Geliştiriciler karmaşıklığı azaltarak minimum kodla kullanışlı ve bakımı kolay uygulamalar oluşturabilir
Hyperclay kullanım örnekleri
- Bloglar, checklist'ler ve diğer her türlü uygulama yalnızca tek bir HTML ile yazılabilir·dağıtılabilir·paylaşılabilir·düzenlenebilir
- `내 블로그!
` biçimiyle hemen kullanılabilir; `` ile her durum kalıcı olarak belgeye kaydedilir
Sonuç
- Hyperclay, web geliştirmenin zahmeti olmadan, herkesin hafif, taşınabilir ve etkileşimli web uygulamaları üretip bunları gerçek zamanlı paylaşmasına, kaydetmesine ve geri yüklemesine olanak tanıyan yeni bir yöntem sunar
- Yalnızca geliştiriciler ve tasarımcılar için değil, herkesin kolayca kullanabileceği yeni nesil bir web uygulama platformudur
7 yorum
İlginçmiş
Bu, eskiden ortalıkta bolca bulunan web editörleriyle çalışma mantığı açısından benzer ama sadece tek bir HTML dosyasıyla da çalışabilmesi ilginç. Benim açımdan bu da bir tür Proof-of-Concept gibi görünüyor ama dürüst olmak gerekirse, bunun iyi şekilde kullanılması halinde neler olabileceğini merak ediyorum.
Bu çalışma biçimi, daha önce paylaşılmış olan https://tr.news.hada.io/topic?id=19611 bağlantısındaki editörün çalışma biçimiyle tamamen aynı değil mi? Ben de burada kendi sunucumda self-hosting için Node.js ile basit bir backend ekleyip editörde yazılan postları kaydedecek hale getirdim ve
index.htmliçinde listeyi çekip gösteren iki özellik daha ekleyerek bunu basit bir blog/pano olarak kullanıyorum; etrafa bakınca oldukça benzer bir his veriyor.İlginçmiş! Güvenliğinin nasıl olduğunu merak ediyorum.
İlginç bir fikir.
tiddlyWikide eğlenceliydi.İlginçmiş..
Hacker News yorumu
.htmlkaynağını değiştirerek sayfanın sürekli güncel kalmasına imkân veriyorÖrneğin bir onay kutusuna tıklanınca
checkedniteliği ekleniyor ve bu durumdakidocument.body.outerHTMLHyperclay ile genel olarak kaydedilip bir sonraki ziyarette aynen yansıtılıyorOtomatik sürümleme ve okuma/yazma izin yönetimini de destekliyor
Bence en çok geliştirici ile içerik editörü rolü aynı kişi olduğunda kullanışlı; birden fazla editör aynı anda kullanırsa birbirlerinin değişikliklerinin üzerine yazabilirler
Bu arada geliştiricinin fork'ladığı tüm uygulamalara "DOM tabanlı şema migration" gönderebilmenin bir yolunu uygulamaya çalışıyorum
Gerçekte basit web uygulamaları yaparken sunucuya ihtiyaç duyulan bir nokta geliyor ama sunucusuz yaklaşım ile sunucuya bağlılığın biraz çelişkili hissettirdiği oluyor
Yine de avantajı, cihazlar arası erişilebilirliği artırması ve çevrimiçi düzenlemeyi kolaylaştırması gibi görünüyor
Benim durumumda metin editöründe telefondan düzenleyip senkronizasyon uygulamasıyla dizüstüne eşitliyorum
file://protokolüyle çalışan yerel dosya sayfalarına daha iyi destek verseBasit HTML/Vue mini uygulamaları yaptığım her seferinde çeşitli sorunlar çıktı ve hep dolaylı çözümler aramak zorunda kaldım
Örneğin yerel HTML dosyası yerel JS modüllerini import edemiyor ya da başka yerel dosyaları (ses vb.) açamıyor
Kontrolsüz erişimi engellemek için kısıtların gerekli olduğunu anlıyorum ama belirli uzantıları veya dizinleri açıkça belirterek izin verme gibi bir yol olsa iyi olurdu
Her seferinde web sunucusu ayağa kaldırmak çok zahmetli ve gereğinden fazla geliyor; ideal olan yalnızca URL'yi girip uygulamayı hemen çalıştırabilmek
file:///altında kopyalama çalışmıyorBuild'siz ve bağımlılıksız tamamen çevrimdışı uygulamalarda bile bu sınır yüzünden düğme yerine metin alanı kullanmak gerekiyor, bu da uğraştırıcı
Yerel sunucu çalıştırmak için VS Code devcontainer kullanırsanız sunucu otomatik ayağa kalkıyor ve ek bir komutla yerelde de HTTPS mümkün oluyor
Güvenlik açısından zayıftı ama bugün Electron tabanlı, klasör veya
sqlite dbgibi şeylere erişebilen modern bir versiyonu da işe yarayabilirOrca gibi tarayıcı/DOM olmadan yalnızca canvas sağlayan wasm uygulama üreticileri de bir alternatif
Mükemmel bir çözüm olmazdı ama tarayıcıyı kısıtlı bir yerel sunucu gibi basit ve sezgisel biçimde kullanmaya izin vereceği için yeterince faydalı olurdu
Yine de ses, JavaScript vb. belli ölçüde çalışıyor ve web sunucusu açmak da
python/nodeile hemen yapılabildiğinden çok zor değilTerminale
webserver_herekomutu eklemek ya da bunu sürekli hazır tutmak çözüm oluyorHatta yerel HTML'in riskleri yüzünden daha katı sınırlar istemeye başladım
Şu an tek alternatif
localStorageile elle dışa aktarma/içe aktarma gibi görünüyorHyperclay'den ilham aldım; Electron Fiddle gibi tek sefer kurulan ve birçok mini uygulamayı yükleyen bir Electron uygulaması fikri ilgimi çekiyor
Bunun sadece
localStoragemeselesi mi olduğu, yoksa FileSystemAPI ile dosyayı doğrudan üstüne mi yazdığı gibi ayrıntılı çalışma mantığı yeterince açıklanmamıştıKullanıcı kaydettiğinde "farklı kaydet" penceresi olmadan otomatik uygulanıp uygulanmadığını da merak ettim
/saveendpoint'ini çağırarak HTML'i kaydedip üzerine yazıyor (yedekleme ve sürümleme sağlanıyor)/saveendpoint'ini çağırarak yedekleme mümkün, isterseniz doğrudan kendi sunucunuzda özelleştirip barındırabilirsiniz (yalnızca auth uygulamanız yeterli)Sistem çoğaldıkça giderek karmaşıklaşıyor ve pratikte iyileşmeden çok yük getiren bir döngü gibi hissettirdi
Benim istediğim deneyim, ana açıklama, akışı olan arka plan hikâyesi ve yalnızca gerçekten gerekli diyagramlardan oluşuyor
Yani JSON tabanlı değil (değişiklikleri ayrı saklamak yerine), daha çok HTML'in her anlık görüntüsünü kaydetme hissi veriyor
Formlar, nitelikler, etiketler vb. değişiklikler doğrudan HTML kaynağına yansıyor
İlk dönem web tarayıcıları da (NeXT için Tim Berners-Lee uygulaması) editör işlevi içeriyordu
Erken dönemde HTML düzenlemenin web'de kaybolmasının nedeni şunlardı:
PUTmetodu yoktu, bu yüzden düzenlenmiş HTML web'e kaydedilemeyip yalnızca yerelde saklanabiliyorduHyperclay gibi her sayfa için bağımsız bir toolkit oluşturmak da havalı ama asıl arzu edilen şeyin tarayıcı (user agent) düzeyinde her yerde kullanılabilen standart araçların sunulması olduğunu düşünüyorum
İyi bir fikirdi ve test ortamı rolünü de gayet iyi yerine getirdiğini düşünüyorum
Ortadan kalkmasına üzülüyorum ama ilk vizyonla açıkça uyumluydu
Üniversite workstation'larında NFS gibi ağ paylaşımları kullanılarak dosyalar fiilen herkese açık şekilde kaydedilebiliyor ve aynı makine adresinden erişilebiliyordu
SGI workstation'larda ağ ayarlarını yaptıktan sonra her şey kusursuz biçimde anında çalışıyordu
Ayrıca web'in odağı bilgiyi yapılandırmaktı; görünümden çok içerik daha önemliydi
Zamanla WYSIWYG modeli ile tablo/div aşırı kullanımı gibi görünüş takıntıları öne çıktı ve ilk amaç bulanıklaştı
Herkesin anlayabileceği sade bir tasarım yapmak gerçekten zor ama bugün yapı, yalnızca az sayıda uzmanın anlayabildiği oldukça karmaşık bir hale geldi
HTML hâlâ kolay yazılabilirken modern geliştirmede karmaşık bir uzmanlık alanına dönüşmüş olmasına üzülüyorum
Sanki TBL'nin hedeflediği bağlamı gerçekten anlayan yalnızca az sayıda kişi kalmış gibi
Bugünün tarayıcılarında geliştirici araçlarıyla HTML/JS/CSS canlı olarak düzenlenebildiğine göre hepsi birer editör değil mi diye düşündürüyor
İnsanlar gerçekten devtools kullanmıyor mu, yoksa vanilla JS/HTML yerine sadece React ya da TS mi kullanıyorlar diye merak ediyorum
Chrome, Firefox ve Safari ailesinin hepsi tarayıcı içine gömülü IDE seviyesinde özellikler sunuyor; doğrudan kod yazmak da mümkün
Shopify tarzı politika ve hukuki bilgilendirmelerden biraz daha eklenirse daha da iyi olur
HN profilime bakarsanız bunun neden havalı olduğunu düşündüğümü ama aynı zamanda hukuki tarafın da gerekli geldiğini anlayabilirsiniz
İlk satır
<!DOCTYPE html><html><head><script>const rawData =biçimindeydi, ikinci satırda ise tüm durum tutuluyorduKaydet düğmesine basınca
document.documentElement.outerHTMLalıp ikinci satırı en güncel durumla değiştirerek indiriyordumSunucu olmadan da çalışıyor
İlgili kod
data:URL yer imini oluşturup bir sekmede not defteri tarzı bir editör açabiliyorsunuz; sekmeyi kapatmadığınız sürece state korunuyorMetni düzenledikten sonra yeni bir yerel sürüm olarak kaydedilebiliyor
Android + Brave üzerinde iyi çalışıyor ama iOS + Safari'de desteklenmiyor
Hyperclay ise çok kullanıcılılık / multi-tenancy ve veritabanı tabanlı kalıcılığa daha fazla odaklanan bir yapı gibi görünüyor
TiddlyWiki de bakmaya değer
HTA wiki
Ama eski IE ortamında debug etmek tam bir kâbustu
Sıradan bir web sayfası gibi görünüyordu ama IE'ye özeldi ve yerel süreçleri çalıştırma yetkisine kadar sahipti
Kalıcılık yönetimi sorunluydu ve benzerlik de oldukça sınırlı
Outlook on the web
Siteye de baktım, genel olarak hoşuma gitti ama gerçek dünyadaki sınırlamaların nerede ortaya çıktığını merak ediyorum
Güvenlik açısından: Ben bir sayfayı değiştirebiliyorsam başkası da değiştirebilir mi? Yetkiler nasıl yönetiliyor?
Kod ve mantık arttıkça yönetimin zorlaştığı nokta neresi? Veri miktarı artınca ne oluyor?
Örneğin ben bir bira takip uygulaması yaparsam, başka kullanıcılar verilerim olmadan yalnızca uygulamayı kopyalayıp ayrı ayrı kullanabilir mi diye merak ediyorum
Kullanıcı kendi sitesini özgürce değiştirebilir
Kullanıcı güveni suistimal ederse ücretli hesap erişimini kaybeder ve başkalarına zarar verirse sorumluluğu üstlenir
"signups" özelliği etkinleştirilirse diğer kullanıcılar da uygulamayı kolayca fork edebilir ve kaynağa kadar iz sürebilir
Fork edilen uygulamalara güncelleme gönderme özelliği de geliştiriliyor
index.phpile aylık 60 bin dolarlık bir uygulama işletiyor; sonuçta mesele kodu nasıl düzenlediğinize ve gereksiz parçaları ne kadar tolere edebildiğinize bağlı diye düşünüyorumİleride iş birliği özellikleri eklemeyi planlıyorlar ama şu anda en çok tek kullanıcıya uygun
Webstrates projesi de benzer şeyleri deniyor
DOM'u kalıcılık katmanı olarak kullanarak küçük gruplar için iş birlikçi yazılımlar geliştiriyorlar; Hyperclay'in farkı ise bu mekanizmayı doğrudan geleneksel web sayfalarına uygulaması
Son dönemde MyWebstrates gibi local-first yaklaşımlar da deneniyor
Webworker kullanarak Hyperclay'e çevrimdışı düzenleme desteği eklenip eklenemeyeceğini merak ediyorum
Hyperclay'i kurgularken geçen yıl ilk kez öğrendim
Hyperclay'in local-first bir sürümünü gerçekten yapmak istiyorum ve çevrimdışı düzenlemenin kişisel yazılımın temel direklerinden biri olduğunu düşünüyorum
Uygunsa bir video görüşmesinde fikir alışverişi yapabilir miyiz?