Eşyalarımızı bavulumuza sıkıştırdığımız gibi bilgisayar da verileri (Veri kelimesinden kastımız bilgisayardaki çoğu şeydir; fotoğraflar, ses dosyaları... Yani aslında kodlar.) sıkıştırabiliyor mu? Sıkıştırabiliyorsa bunu nasıl yapıyor? Bulut siteleri bizi kandırıyor mu? Bu yazımızda bu sorulara beraber cevap bulmaya çalışacağız.
Evet, bilgisayarlar tıpkı bizim kıyafetlerimizi bavula bastığımız gibi verileri sıkıştırabiliyor. Burada önümüze bir ayrım çıkıyor; kayıplı ve kayıpsız sıkıştırma. Kayıplı sıkıştırmayı bavula sıkıştırdığımız kıyafetimizin çıkardıktan sonra kırış kırış olmasıyla, kayıpsız sıkıştırmayı ise çıkardıktan sonra bile kırışmamış olmasıyla ilişkilendirebiliriz.
"Nasıl?" sorusunu yanıtlamaya başlamadan önce bir konuya daha netlik kazandırmak gerekiyor. Şu an bunu okuduğunuz telefon, bilgisayar veya tablet; izlediğiniz televizyon, buzdolaplarının ve arabaların akıllı sistemleri, robotlar ve daha niceleri, aslında sadece 0 ve 1'lerden oluşur. Her şeyin ama her şeyin anlamı 0 ve 1'dir. Gördüğünüz fotoğraf, dinlediğiniz müzik, oynadığınız oyun hepsi 0 ve 1'dir. Bunun neden ve nasılı başka bir makale konusu, bu yazı için bunu bilmek yeterli olur diye düşünüyorum.
Her şeyin aslında 0 ve 1'lerden oluştuğunu kabul ettiğimize göre, sıkıştırma işleminin de çoğu kez sadece sayıları sıkıştırmaktan ibaret olduğunu çekinmeden söyleyebilirim. Çoğu kez dedim çünkü kelimelerin(Yani aslında 0 ve 1'e çevrilmemiş kodların) de sıkıştırıldığı oluyor. Bu temel meseleleri geçtiğimize göre, "Nasıl?" sorusunu cevaplamaya başlayabiliriz.
Tekrarlama
Az sonra örnekli şekilde anlatacağımız teknik "Kayıpsız" bir sıkıştırma örneğidir. Sıkıştırılan dosyalarımızı geri açtıktan sonra (Bavuldan çıkardıktan sonra) eski halinden bir şey kaybemtediğini görürüz. Bilgisayarımızda bir oyun olduğunu düşünelim. Bu oyunu başka bir arkadaşımız da oynasın istiyoruz, oyunu USB belleğimize atıp arkadaşımıza vereceğiz ama önümüzde bir sorun var; oyun 8 GB ama bizim taşınabilir belleğimiz sadece 4 GB. Bu durumda eğer bilgisayar kullanmaktan biraz anlıyorsak, güvenilir bir sıkıştırma programı yardımıyla oyunumuzu sıkıştırabiliriz. Tekrarlama yönetimini anlatırken oyunumuzu aşağıdaki kod satırı gibi hayal edelim. Aslında aşağıdaki gibi değildir, çok daha büyüktür, 8 GB'lık oyun demek, fotoğrafları ve ses müziklerini de sadece metin olarak sayarsak 8 milyon kağıda ancak yazılabilir demek.
asdasdasdasdasdasdasdasd16757575757575757575rtyuhgfgamegamegamegamegamegamegamegamez
Yukarıda 80 adet karekter var. O zaman 80 karakterlik bilgiyi 8 GB'a eşitleyelim, ileride lazım olacak.
80 karakter = 8 GB
Oyun kodu olarak kabul ettiğimiz yukarıdaki kod sizin de fark edeceğiniz gibi bir çok tekrardan oluşuyor. Tekrarlama yöntemiyle bu kodumuzu kısaltacağız. Şöyle ki g harfini bilgisayara "Geri git ve kopyala" i harfini ise "İleri git ve yapıştır" olarak tanımladığımızı varsayalım. Burada yeniden belirtme ihtiyacı duyuyorum ki aslında bu iş bu kadar kolay değildir, ama temel mantık aynıdır diyebiliriz.
İ ve G mantığını anladıktan sonra bilgisayarın şunu demesi lazım, ilk "asd" den sonra tam 7 tane var, o zaman o ilk üç harfi tam 7 kere yapıştır, bunu şöyle anlatabiliriz:
asd3g7i
O zaman kodlarımız sıkıştırıldıktan sonra şuna dönüşür:
asd{3g7i}1675{2g8i}rtyuhgfgame{4g7i}z
Süslü parantezlerimizi "İleri git şu kadar kopyala, ileri git bu kadar kez yapıştır" komutumuzu bilgisayar anlasın diye, "7i" kavramını kod olarak anlamasın diye koyduğumuzun altını çizelim.
Sıkıştırma işleminden sonra kodumuz 37 karaktere indi, bu da demektir ki 8 GB'lık oyunumuz sıkıştırma işleminden sonra artık 3.7 GB'lık yer kaplıyor. Mükemmel! Artık arkadaşımıza oyunumuzu taşınabilir bellekle verebiliriz. 😎
"Tekrarlama" tekniğinden bahsetmişken müzik sıkıştırmadan bahsetmezsek olmaz. Her ses dosayasında insan kulağının işitemeyeceği, işitse dahi farkında olmayacağı bir takım sesler vardır; bunlar sıkıştırma programı tarafından silinebilir.
Yine müzik dosyasında, "Nakarat" denilen kısımları fark edip, sadece bir nakaratlık kısımdaki bilgiyi tutan, bir diğer nakarattaki kısma ise sadece önceki nakarattaki kısmı yapıştıran iyi sıkıştırma programları var.
Atla ve geç!
Atla ve geç yöntemi tekarlama yöntemi gibi kayıpsız değildir, atla ve geç yönteminde kaybımız azımsanmayacak düzeydedir. Şayet bilginin büyük değil küçük olması gerekiyorsa o zaman uygulanabilir. Atla ve geç yöntemini "Fotoğraf Sıkıştırma" örneği üzerinden anlatmaya çalışacağım. Yine yöntemi anlatmadan önce bazı kavramlar hakkında bilgiler vermem gerekiyor.
Piksel, elimizdeki görüntüdeki en küçük yapıdır. aslında bir renk zerresi de diyebiliriz, milyonlarca piksel yan yana gelerek önümüze muhteşem kalitede fotoğraflar çıkarabiliyor.
Mesela aşağıya 1920 X 1080 piksellerinde bir fotoğraf bırakacağım. Bu fotoğrafın içinde tam 2.073.600 tane piksel var, yani 2 milyon 73 bin 600 tane kare.
Peki, atla ve geç bunun neresinde? Çok renkli bir fotoğraf değilse, bir fotoğrafın yanındaki piksel de genellikle kendisine benzerdir. Atla ve geç de bunu yapıyor, yanındakine benzeyen piksellerden birini atlıyor ve geçiyor, bu şekilde fotoğrafın boyutu küçülüyor, tabi kaliteden de kaybediyoruz. Aşağıya 518.400 tane piksel içeren ve 80 KB boyutunda olan fotoğrafı da ekleyeceğim, kolaj şeklinde olacak, buyrun kıyaslamayı siz yapın.
Şu anda yarı yarıya bir sıkıştırma işlemi görüyoruz. Fotoğrafın boyutunu küçülttüğümüz oranda kaliteden kaybettiğimizin farkındasınızdır. Şimdi, gelelim yapabileceğimiz en kayıplı ama en hafif küçültmelerden birine, 10 KB'a düşürelim!
Gördüğünüz gibi, fotoğrafımızın boyutu küçüldü, ama aynı oranda kalitede küçüldü. İdeal olan kaliteden kaybettiğimizi hissettirmeden yapılan sıkıştırmalardır.
Son bir teknik!
Yazımızın sonlarına doğru gelmişken bir teknikten dahi en azından söz etmeden duramayacağım, yazının başında her şeyin aslında 0 ve 1'lerden oluştuğundan söz etmiştik. O zaman bütün harfler de aslında 0 ve 1'lerden oluşuyor.
Misal şöyle;
a = 0101010111001
b=01101010
c = 00111011
...
Türkçe'de en çok kullanılan harfler a ve e'dir. O zaman biz Türkçe bir metin sıkıştırırken a ve e harflerini bu kadar uzun tanımlamaktansa onların tanımını değiştirsek? Mesela şöyle yapsak;
a = 1
b = 11
Bu bize yer kazandırmaz mı? Kazandırır :) Çok güçlü sıkıştırma programlarının sık sık kullandıkları algoritmalardan biri de budur, kodlarda en çok geçen harf tespit edilir ardından onun sayısal karşılığında değişikliğe gidilir. Ve bu değişiklik bir metin dosyasında tutulur, ki dosya yeniden eski haline getirilirken doğru çıkarılsın.
Bulut siteleri bizi kandırıyor mu?
Bulut siteleri bizim kaybetmekten korktuğumuz veya güvenli bir yerde saklamak istediğimiz dosyaları kendi sunucularında saklayan sitelerdir. Çoğu bulut sitesi belirli bir alana kadar ücretsizken daha yüksek boyutlu kapasite için ücret talep ederler. Bulut siteleri bizleri kandırmıyor, sadece biz bilmiyoruz; bulut sitelerine atarken 1GB'lık sandığımız dosyalar, bulut sitesinin dosya üzerinde çok ileri sıkıştırma teknikleri uygulamasıyla beraber çok daha küçük boyutlara iniyor. Yani aslında biz 5 GB yer kullandığımızı sanarken belki de 1GB'lık yer bile kullanmıyoruz. 🤔 Hatta bu yüzdendir ki, -aranızda internetten sık sık dosya indiren varsa bilecektir- bulut hesabından indirme tuşuna tıkladığımızda dosya sıkıştırılmış olarak iner ve bizim program kullanarak açmamız beklenir. Onların sunucularında belki 1 dakika bile sürmeyen işlem bizim berbat işlemcilerimizle uzun zamanlarımızı alır.
Ama düşünelim, özünde 1 GB'lık olan dosyayı bulut hesabımıza attık. Aradan zaman geçti ve indirmek istiyoruz. İndirdik, sıkıştırılmış şekilde 100 MB'a kadar düşmüş. Bunu açmak çok da uzun sürmeyecektir, ama dosyamızı normalde olduğu gibi, yani 1 GB'lık haliyle indirmek isteseydik -tabi eğer internet hızımız bilgisayarın işlemcisinden daha hızlı değilse- çok daha uzun zamanımızı alabilirdi. Sözün özü, bence Bulut siteleri bizi kandırmıyor.
Not: Bu yazıda teknik konular öğretilmekten çok tekniğin temel mantığı kavratılmaya çalışılmıştır, bu yüzden bazı bölümlerde tekniksel pas geçmeler olmuştur.
GAİA 22 Ağustos 2019 - 03:36:45
bilgisayarlardan pek anlamayan ben için dahi fikir verici olmuş. ellerinize sağlık.