- Hareketli SVG görselleri, yüksek çözünürlüğü korurken çok küçük dosya boyutlarına sahip olur (49KB)
- Geleneksel GIF’e benzer bir görsel etki sunar, ancak aslında SVG animasyonu özelliklerinden yararlanır
- GitHub README.md dosyalarında da doğrudan kullanılabilir
- asciinema ve svg-term-cli araçları kullanılarak terminal oturumu kaydedilip SVG animasyonuna dönüştürülebilir
- SVG’nin animasyon öğeleri (
<animate>, <animateTransform>, <animateMotion>) kullanılır
Hareketli SVG’lerin özellikleri
- SVG ile oluşturulan hareketli görseller, klasik GIF’ler gibi görünür; ancak gerçekte SVG’nin vektör tabanlı animasyon yeteneklerini kullanır
- Bu yöntemle dosya boyutu çok küçük kalır ve kalite kaybı olmadan yeniden boyutlandırma ile yakınlaştırma/uzaklaştırma yapılabilir
- GitHub README.md gibi yerlerde doğrudan kullanılabilmesi büyük bir avantajdır
- Örnek olarak, 49KB boyutunda yüksek çözünürlüklü hareketli bir parrot SVG tanıtılıyor
Nasıl yapılır
- Terminal oturumu asciinema ile kaydedilir
- Kaydedilen asciinema dosyası svg-term-cli aracıyla dönüştürülerek bir SVG animasyon dosyası oluşturulur
- Oluşturulan SVG dosyası README.md’ye kolayca eklenebilir
- Yazar, bu yöntemi bespoken dahil çeşitli projelerde aktif olarak kullanıyor
SVG animasyonunun çalışma mantığı
- SVG spesifikasyonunda animasyon özellikleri zaten yerleşik olarak bulunur
<animate>: tek tek öznitelikleri zaman içinde animasyona dönüştürür
<animateTransform>: döndürme, ölçekleme, taşıma gibi dönüşüm animasyonları uygulanabilir
<animateMotion>: nesneyi bir yol boyunca hareket ettirir
- svg-term-cli, SVG’nin bu yerleşik animasyon özelliklerinden yararlanarak çalışır
1 yorum
Hacker News görüşleri
Sadece SVG ile gerçekten çok çeşitli ve etkileyici işler yapılabilmesine hayran kalmış durumda. Vikipedi'de bulunan örnekler arasında Missile Command klonu animasyonu, Londra metro haritası, rolling shutter animasyonu özellikle dikkat çekiyor
SVG'nin tarihsel olarak Shockwave/Flash Player'a açık bir rakip ve PDA'ler için bir uygulama formatı olarak başladığı belirtiliyor. Hatta ağ desteği eklenmesi de gerçekten düşünülmüş
Londra metro haritası'nın çok etkileyici olmasının sebebi, tekerlekli sandalye kullanıcıları gibi hareket kısıtlılığı olan yolcular için "merdivensiz istasyon" işaretlerinin bulunması. İlk füze örneğini görünce hemen programlayarak savaş başlıklarına tıklama fikrini düşünüp dünyayı kurtarmış gibi hissettiğini paylaşıyor
İlk Missile Command bağlantısının Safari'de neden düzgün çalışmadığını merak ediyor. Düğmelere tıklanabiliyor ama savaş başlıklarına tıklama tepki vermiyor. Firefox'ta artı nişangâh imleci bile görünürken Safari'de bir şeyler çalışmıyor
Metro haritasındaki checkbox işlevi çok hoş bir detay. SVG becerilerini daha da geliştirmesi için motive etmiş. Yer imlerine eklemiş
Başlığı görünce bunu README dosyasının hash'ini görselleştiren bir araç sanmış, ama böyle bir görselleştirme özelliğinin TOS ve EULA belgeleri sessizce değiştiğinde kullanıcıların bunu kolay fark etmesini sağlamasını umuyor
README'ye animasyonlu SVG gömüp bu SVG'nin hava durumu ve haftanın günü bilgisini günde bir kez güncellemesini sağlayan bir çalışma geliştirme deneyimini paylaşıyor. Referans. Aslında bu proje birkaç yıl önce jüri çağrısı döneminde yapılmış
Hedef Github README ise videoyu doğrudan gömmek de mümkün. Örnek olarak git-recent README bağlantısını paylaşıyor. Ancak sadece terminal kaydıysa, OP'nin SVG yaklaşımını kullanmak daha akıllıca bir seçim olabilir
Video kullanmanın iyi tarafı oynat/duraklat/kaydırıcı arayüzünün olması. Bazı platformlar GIF'lere de JavaScript ile kontrol arayüzü ekliyor ama tarayıcıda yerleşik destek olmadığı için bunun sınırları var. Bu yüzden sık sık videoyu tercih ettiğini söylüyor. RevealJS için SVG animasyonu yaparken ise gerektiğinde CSS/JS ile kontrol ediyor
Video dosyası eklenecekse, Github'da README'yi doğrudan düzenleyip yüklenen dosyanın githubusercontent üzerinde saklanması, depo boyutu açısından da daha iyi bir seçenek
SVG, açık/koyu tema kullanıcı ayarına göre renklere tepki verebilmesi bakımından videodan farklı. Ayrıca boyuta duyarlı da olabiliyor; video bunu yapamıyor. İlgili demo paylaşılmış. Ancak bu özellik de Firefox/Chrome'da iyi çalışsa da Safari'de hâlâ uygulanması zor ve bu da can sıkıcı
Paul'dan uzun zaman sonra söz açılmışken, önceki Echo Nest ve Rdio API çalışmalarına duyduğu sevgiyi ifade ediyor
Kendi görüşüne göre terminal kaydı için SVG yaklaşımı, kontrol özellikleri yetersiz olduğu için pek pratik değil. Yazılım demosu amacıyla 5 saniye civarında kısa hareketli anlatımlar için iyi olabilir ama ihtiyaca göre video daha iyi bir seçenek olabilir
Animasyondan doğrudan metin kopyalanabilmesi, beklenenden daha az sezgisel olsa da en havalı özellik gibi görünüyor
Uyarı olarak, bazı SVG dosyalarını sayfayı kilitleyen hatalar var. Bu yüzden üçüncü taraf SVG bağlantıları gömmekten kaçınılması gerektiği söyleniyor. Google Chrome ve Firefox tarafının da bu hatayı düzeltme planı yok. Test amaçlı tehlikeli SVG örneği eklenmiş ama tıklanırsa tarayıcı çökebilir
Sayfanın ya da tarayıcının kilitlenmesi, güvenlik sorunundan çok çeşitli yerleşik işlevlerin kötüye kullanılmasından da kaynaklanabilen genel bir durum olabilir görüşü var. Örneğin blur filtre zinciri çok uzatıldığında render yükü nedeniyle Chrome'un kendisi bile kilitlenebiliyor. Eğer etki sekmenin dışına taşıyorsa bu daha ciddi, ama temelde bunun bir UI kullanılabilirlik sorunu olduğu düşünülüyor
Bu tür SVG açıklarının, örneğin XXE saldırılarının, Github README gibi kısıtlı ortamlarda da mümkün olup olmadığını soruyor. Eğer mümkünse bunun nasıl engellendiğini merak ediyor
"SVG'nin özünde animasyon olduğu" fikri ona çok taze geliyor ve çeşitli fikirler düşündürüyor. Sonsuz döngü desteklenip desteklenmediğini soruyor
<animate>etiketininrepeatCountya darepeatDurniteliğiindefiniteolarak ayarlanırsa sonsuz tekrar mümkün. Bu, tek tek özellikler düzeyinde tekrar olduğu için görseldeki her öğe farklı periyotlarla hareket edebilirSVG animasyonu resmi dokümantasyonu içindeki örnek kodu paylaşıyor
SVG'nin yalnızca öznitelik tabanlı animasyonla sınırlı olmadığı, içine Ecmascript (Javascript) de gömülebildiği ve gerektiğinde istenen her işlevin script ile eklenebileceği belirtiliyor. W3C script dokümanı referans verilmiş
SVG animasyonu örnek kodları ve demoları da paylaşılıyor. Bazıları sayfa yenilenince görülebiliyor
Bir gün tarayıcı standardı olarak WASM, JVM, CLR gibi hangi yürütme motoru olursa takılabildiği ve çıktının SVG (metin/ikili) olduğu bir sistem hayal ediyor. Geliştiricilerin yürütme modeliyle görünüm kombinasyonunu özgürce seçebildiği, DOM'a bağlı kalmayan yenilikçi bir gelecek umuyor
AutoCAD Web, Photopea, Figma, Google Docs, Google Earth Web, Flutter for Web(CanvasKit) gibi uygulamalar zaten buna yakın bir şekilde DOM'u by-pass ederek ya da başka render motorları seçerek çalışıyor. Yani sadece DOM'un dayatıldığı bir çağda olmadığımız söyleniyor
Geçmişte Flash, Java, Silverlight, ActiveX gibi üçüncü taraf çalışma zamanları web'e hâkimdi ama bugün ortak bir dil/platform ortamına sahip olmanın avantaj olduğu savunuluyor. Güvenlik tehditlerinin yoğun olduğu ortamda, eski tarz eklenti teknolojilerinin artık yaşamasının zor olduğu da vurgulanıyor
DOM'un (HTML) avantajı, farklı ekran ortamlarına duyarlı şekilde tasarlanmış olması. SVG'nin bu açıdan aynı esnekliğe sahip olmadığı belirtiliyor
Biraz absürt görünebilir ama SVG mimari diyagramlarını animasyonlu hâle getirip düğümlerin dramatik animasyonlarla, örneğin savaş animasyonu gibi büyüme, freeze frame ve parlayan çizgi efektleriyle sunulduğu videolar yapmak istiyor
Bu tür TIL tarzı gönderiler, yeni araçlarla ilgili doğrudan deneyim paylaşmaları ve Github Markdown kısıtlarını aşma yolları göstermeleri sayesinde yaratıcılığı ciddi biçimde tetikliyor. SVG çıktısını (örnek) görünce, satır içi SVG içinde yine satır içi SVG'nin iç içe geçtiği bir yapıyı ilk kez gördüğünü ve bunun çok taze hissettirdiğini söyleyerek teşekkür ediyor
Gerçekten harika bir fikir; bunu README'de terminaltexteffects ile üretilen efektlerle nasıl eşleştiğini test etmek istiyor. SVG hakkında çok bilgili olmadığını ama gerçekten metnin saklandığı bir yapıysa veri dosyasının oldukça büyük olabileceğinin farkında. Yine de eğlencesine denemek istiyor