13 Ekim 2020 Salı

STREET FIGHTER II Oyununun Yapımı

The Making of Street Fighter II

10 Eylül 2020 Perşembe

\n ve \r nedir? Aralarındaki fark nedir?

 \n ve \r, C, Java, Python gibi programlama dillerinde ve birçok başka dilde kullanılan özel karakter dizileridir. Doğrudan görünmeyen ancak metnin formatını veya davranışını kontrol eden bazı özel kontrol karakterlerini temsil etmek için kullanılırlar.

Yeni Satır

\n (Line Feed - New Line): \n yeni satır karakteridir. İmleci bir sonraki satırın başına taşır. Birçok programlama dilinde ve metin düzenleyicide, \n bir satırın sonunu temsil etmek için kullanılır. Bir string’de  \n gördüğünüzde, kendisini takip eden metnin yeni bir satırdan başlayacağı anlamına gelir.

Satır Başı

\r (Carriage Return): Bu karakter, imleci geçerli satırın başına geri taşır. Bir sonraki satıra değil. Bu, daktilo ve eski dönem yazıcıların zamanından kalan bir kalıntıdır. O dönemde yeni bir satıra başlamak için taşıyıcıyı satırın başına geri getirmeniz gerekiyordu.

Modern kullanımda, uygulaması değişiklik gösterir. Ağ protokolleri ve bazı metin işleme bağlamlarında hala kullanılıyor. Tek başına, \r yeni bir satıra geçmez; sadece mevcut satırın başına döner.

Farklar:

Kullanım: \n, Unix ve Unix benzeri sistemlerde (Linux, macOS vb.) yeni satır karakteri olarak yaygın olarak kullanılırken, \r eski Mac sistemlerinde kullanılır. Windows sistemleri, yeni bir satırı temsil etmek için her ikisinin bir kombinasyonunu (\r\n) kullanır.

Etki: \n imleci bir sonraki satıra taşırken, \r imleci mevcut satırın başına taşır.

Basitçe ifade etmek gerekirse, \n metinde aşağıya doğru ilerler ve \r yatay olarak satırın başına sıfırlar. Metin çıktısında bunları kullandığınızda görsel fark açıkça ortaya çıkar.

Örneğin, "Merhaba\nDünya" yazmak kelimeleri ayrı satırlarda gösterirken, "Merhaba\rDünya" yazmak, "Dünya"nın "Merhaba"nın üzerine yazılmasına neden olur. Elde edilen sonuç “Dünyaba” şeklinde olacaktır.


11 Ağustos 2020 Salı

CSS Units: px (Pixel), em ve rem

Bir öğrencimden gelen güzel bir soruyu cevaplarken bir yandan başkalarının da ihtiyacı olabileceğini düşünerek kısa bir yazı yazmak istedim.

SORU: Web tasarımda ölçülendirme yaparken pixel ve yüzde kullanımı dışında em diye bir şey görüyorum. Nedir bu em? Bilmediğimiz başka şeyler de var mıdır?

em, web tasarımında kullanılan bir ölçü birimidir. Em birimi, belirli bir elementin yazı tipi büyüklüğünün, o elementin ata elementinin yazı tipi büyüklüğüne oranı olarak tanımlanır. Yani, em birimi, kullanılan yazı tipinin büyüklüğüne bağlı olarak otomatik olarak ölçeklendirilir.

Örneğin, bir elementin yazı tipi büyüklüğü 16 piksel ve bu elementin genişliği 4em olarak belirlenmişse, o elementin genişliği 64 piksel olur. Burada 1em, kullanılan yazı tipinin büyüklüğüne eşittir.

Em birimi, kullanılan yazı tipinin büyüklüğüne bağlı olarak otomatik olarak ölçeklendiği için, sayfanın yeniden boyutlandırılması veya farklı cihazlarda görüntülenmesi durumunda daha esnek ve duyarlı bir tasarım sunar. Bu nedenle, web tasarımcıları ve geliştiriciler em birimini sıklıkla kullanır.

Bunun dışında, rem (root em) birimi de mevcuttur. Rem birimi, kök elementin (genellikle <html>) yazı tipi büyüklüğüne bağlı olarak ölçeklendirilir. Rem birimi, em birimi gibi esnek ve duyarlı tasarımlar oluşturmak için kullanılır, ancak em birimi ata elemente bağlı olduğu için rem birimi tercih edilebilir.

Web tasarımda başka ölçü birimleri de bulunabilir, ancak pixel, yüzde, em ve rem en yaygın kullanılanlardır. Tasarımın gereksinimlerine ve hedef kitlenize bağlı olarak farklı birimlerin kullanılması da mümkündür.

Konu hakkında daha detaylı bilgiler için aşağıdaki linkleri kullanabilirsiniz.

https://medium.com/frontend-development-with-js/css-units-pixel-em-ve-rem-6515563c69b4

https://www.yazilimkodlama.com/css/css-px-em-rem-kullanimi/

https://www.tercihyazilim.com/Page/responsive-font-size

https://www.elephdev.com/web/212.html


10 Ağustos 2020 Pazartesi

Binary Search Tree / İkili Arama Ağacı nedir?

Sizlerden sorular geldikçe olabildiğince cevapları yazılı olarak ve örneklerle vermeye çalışıyorum. İşte bir soru daha;

SORU: BinarySearchTree öğrenmem gerekiyor. Neden ihtiyaç duyulur? Nerelerde kullanılır? Örnek verebilir misin?

BinarySearchTree (BST), veri yapısı olarak ağaç yapısını kullanan bir veri yapısıdır. BST'de her düğüm, kendisinden daha küçük olan düğümlerin solunda ve kendisinden daha büyük olan düğümlerin sağındadır. BST'nin kullanımı birçok algoritma ve veri yapısı için önemlidir ve geniş bir uygulama alanı vardır. İşte BinarySearchTree'in neden ihtiyaç duyulduğu ve nerelerde kullanıldığına dair bazı örnekler:

Sıralama: BST, verileri sıralı bir şekilde depolayarak hızlı sıralama işlemleri yapılmasını sağlar. Düğümler arasındaki doğal sıralama düzeni sayesinde verilerin eklenmesi, aranması ve kaldırılması hızlı bir şekilde gerçekleştirilebilir.

Arama: BST, bir veri kümesinde hızlı arama işlemleri için kullanılabilir. Her düğüm, kendisinden daha küçük olan düğümlerin solunda olduğu için aranan değerin yerini bulmak için sadece düğümleri karşılaştırmak yeterlidir. Bu, arama işleminin ortalama olarak O(log n) karmaşıklığında gerçekleşmesini sağlar.

Veri Yapıları: BST, diğer veri yapılarının temelini oluşturabilir. Örneğin, öncelik kuyruğu (priority queue) veya dengeleme ağaçları gibi veri yapıları, BST'nin temel mantığından yararlanır.

Otomatik Tamamlama ve Önerme: BST, metin tabanlı uygulamalarda kullanıcıya otomatik tamamlama veya önerme sunmak için kullanılabilir. Örneğin, bir arama çubuğunda kullanıcının yazdığı kelimeleri tamamlamak veya benzer öğeleri önermek için BST kullanılabilir.

Örnek:
Bir müzik yayın platformunda şarkılar bir BST içinde depolanabilir. Her düğümde, şarkının adı, sanatçısı ve yayın tarihi gibi bilgiler bulunur. Kullanıcılar, şarkıları aramak, sıralamak veya belirli bir tarihten sonra yayınlanan şarkıları bulmak için BST'yi kullanabilirler. Ayrıca, kullanıcının yazdığı kısmi bir şarkı adına göre otomatik tamamlama özelliği sunulabilir. BST'nin düzenli sıralama ve hızlı arama özellikleri sayesinde kullanıcılar, istedikleri şarkıları kolayca bulabilir ve müzik deneyimlerini geliştirebilirler.

BinarySearchTree hakkında görselleri bulabileceğiniz birkaç kaynak önerebilirim.

Bu kaynaklar, BinarySearchTree'in nasıl çalıştığını görsel olarak anlamanıza yardımcı olacaktır.

Visualgo: Visualgo, çeşitli veri yapılarının görsel temsillerini sağlayan interaktif bir web sitesidir. BinarySearchTree'i de görsel olarak anlatan animasyonlara sahiptir. Aşağıdaki linkten Visualgo'nun BinarySearchTree sayfasına erişebilirsiniz:

https://visualgo.net/bn/bst

Wikipedia: Wikipedia'da BinarySearchTree hakkında bilgiler ve görseller bulunabilir. Aşağıdaki linkten Wikipedia'nın BinarySearchTree sayfasına erişebilirsiniz:

https://en.wikipedia.org/wiki/Binary_search_tree

CodesDope:

https://www.codesdope.com/course/data-structures-binary-search-trees/


10 Temmuz 2020 Cuma

Çalışırken verimliliğimizi nasıl artırabiliriz?

Çalışırken verimliliğimizi nasıl artırabiliriz?

- En önemli ve en kolay yollardan birisi müzik dinlemektir.

Dinlemek için seçilecek müziğin 3 önemli özelliği taşıması gerekiyor.

1-Müzik sözsüz olmalı. Çünkü; sözlü olması durumunda beynimiz o sözleri algılamaya yöneleceği için konsantrasyonumuz bozulacak.

2-Müzik belli oranda hızlı ritme sahip olmalı. Slow müzikler dinlemeye başlarsanız, o enerjik haliniz git gide düşmeye başlar.

3-Müziğin ritmi, çok hızlı olmamakla birlikte, o hızı da sürekli değişim göstermemeli. Belli oranda stabil olmalı.

Bu üçünü bir araya getirmiş müziklerle eğer siz çalışıyorsanız yapılan çalışmalar verimliliğinizin arttığını ortaya koyuyor.

12 Haziran 2020 Cuma

WebAssembly nedir?

WebAssembly (kısaca WASM), web tarayıcılarında yüksek performansla çalışacak şekilde tasarlanmış bir kod formatıdır. WebAssembly, JavaScript'in yanı sıra bir web geliştirme dilidir ve JavaScript kadar yaygın ve esnek olmasa da, özellikle hesaplama yoğun görevlerde ve uygulamaların performans kritik bölümlerinde kullanılmak üzere tasarlanmıştır.

WebAssembly'nin temel özellikleri şunlardır:

  1. Yüksek Performans: WebAssembly, neredeyse yerel kod hızında çalışacak şekilde optimize edilmiştir, bu da onu web tabanlı oyunlar, video düzenleme, görüntü işleme gibi hesaplama yoğun uygulamalar için ideal kılar.


  2. Dil Bağımsızlığı: WebAssembly, sadece JavaScript ile sınırlı kalmayıp, C, C++, Rust gibi dillerden WebAssembly'e dönüştürülebilen kodlar yazmanıza olanak tanır. Bu, mevcut kod tabanlarını web ortamına taşımak için büyük bir avantaj sağlar.


  3. Güvenlik: WebAssembly, web tarayıcılarının sunduğu aynı kumanda alanı içinde çalışır, bu da onu güvenli bir şekilde kullanılabilir hale getirir. Kod, tarayıcının kısıtlamalarına tabidir ve sistem kaynaklarına doğrudan erişemez.


  4. Erişilebilirlik ve Portabilite: WebAssembly modülleri, herhangi bir modern web tarayıcısında çalışacak şekilde tasarlanmıştır ve platform bağımsızdır. Bu, yazdığınız kodun farklı işletim sistemlerinde ve cihazlarda tutarlı bir şekilde çalışacağı anlamına gelir.


  5. Entegrasyon: WebAssembly, mevcut JavaScript kodu ile sorunsuz bir şekilde entegre edilebilir. Bu, geliştiricilerin mevcut uygulamalara performans iyileştirmeleri eklemesini veya yeni, daha güçlü web uygulamaları oluşturmasını kolaylaştırır.


WebAssembly, web geliştirme dünyasında önemli bir yeniliktir ve giderek daha fazla kullanım alanı bulmaktadır, özellikle de web uygulamalarının performansını artırmak ve daha zengin özelliklere sahip uygulamalar geliştirmek isteyen geliştiriciler arasında popülerdir.