JavaScript Promise’ları ile Asenkron Karmaşayı Yönetmek

Bir API isteğinin ne zaman tamamlanacağını, dosyanın ne zaman okunacağını veya kullanıcının konum bilgisinin ne zaman geleceğini önceden bilemeyiz. JavaScript bu bekleme süresinde uygulamayı durdurmak yerine diğer işleri yürütür. Ancak sonuçları callback fonksiyonlarıyla takip etmeye çalışmak, kısa sürede girintilerle dolu bir “callback cehennemine” dönüşebilir. Promise nesneleri, gelecekte tamamlanacak işlemleri düzenli, zincirlenebilir ve güvenilir biçimde temsil ederek bu karmaşaya çözüm sunar.

Devamı...

JavaScript Olay Dinleyicileri: Arayüzün Nabzını Tutmak

Bir web sayfası kullanıcıya yalnızca bilgi gösteriyorsa dijital bir afişten pek farklı değildir. Onu gerçek bir arayüze dönüştüren şey; tıklamaları, tuşları, kaydırmaları ve form girişlerini algılayıp uygun tepkiler verebilmesidir. JavaScript’teki olay dinleyicileri, tarayıcı ile kullanıcı arasındaki bu konuşmayı yönetir.

Devamı...

JavaScript Kurulumu: Tarayıcı Konsolundan VS Code ve Node.js’e

javascript-kurulumu-tarayici-53

JavaScript öğrenmeye başlamak için devasa bir kurulum sihrine ihtiyacınız yoktur; modern bir tarayıcı bile ilk programınızı çalıştırmaya yeter. Ancak gerçek projeler geliştirmek istediğinizde tarayıcı konsolu, Node.js, VS Code ve canlı sunucu araçlarından oluşan düzenli bir çalışma ortamı kurmak büyük rahatlık sağlar. Gelin JavaScript atölyemizin ışıklarını birlikte açalım.

Devamı...

JavaScript Dizileri ve Yüksek Mertebe Metotlarla Veriyi Dönüştürme

Bir alışveriş sepetindeki ürünlerden sınav notlarına kadar pek çok veri, yazılım dünyasında listeler hâlinde karşımıza çıkar. JavaScript dizileri bu verileri tek bir değişkende düzenli biçimde saklarken map, filter ve reduce gibi yüksek mertebe metotlar, döngü karmaşasına kapılmadan verileri dönüştürmemizi sağlar.

Devamı...

Fonksiyonlar Sahneye Çıkıyor: Birinci Sınıf Vatandaşlık ve Arrow Function’lar

Programlamada fonksiyonları yalnızca çağrıldığında çalışan kod paketleri olarak düşünmek eksik kalır. JavaScript gibi dillerde fonksiyonlar aynı zamanda değişkenlere atanabilir, başka fonksiyonlara gönderilebilir ve sonuç olarak döndürülebilir. Kısacası fonksiyonlar, dilin ayrıcalıklı üyeleri değil; diğer değerlerle aynı haklara sahip birinci sınıf vatandaşlarıdır.

fonksiyonlar-sahneye-cikiyor-49

Devamı...

ES6 Sınıfları: JavaScript’in Prototiplerine Takım Elbise Giydirmek

JavaScript’te class anahtar sözcüğünü gördüğünüzde dilin prototipleri bırakıp C++ veya Java gibi tamamen sınıf tabanlı bir modele geçtiğini düşünebilirsiniz. Fakat perde arkasında hâlâ prototip zinciri çalışır. ES6 sınıfları, mevcut sistemi değiştiren yeni bir nesne modeli değil; yapıcıları, metotları ve kalıtımı daha okunabilir biçimde tanımlayan modern bir sözdizimidir.

Devamı...

DOM Manipülasyonu: JavaScript ile Sayfaya Hayat Vermek

Bir web sayfasındaki başlığın aniden değişmesi, yeni bir kartın listeye eklenmesi veya bir düğmeye basınca menünün açılması sihir değildir. Perdenin arkasında çoğunlukla JavaScript ve DOM birlikte çalışır. DOM, statik görünen HTML belgesini programlama yoluyla okunabilen ve değiştirilebilen canlı bir yapıya dönüştürür.

Devamı...

Async/Await ile Modern Asenkron Akışları Yönetmek

Bir web servisine istek gönderirken, dosya okurken veya veritabanından kayıt beklerken uygulamanın tamamen durmasını istemeyiz. JavaScript’in async/await sözdizimi, arka planda asenkron çalışan bu işlemleri sanki adım adım ilerleyen senkron kodlarmış gibi yazmamızı sağlar. Sonuç; daha az iç içe fonksiyon, daha anlaşılır hata yönetimi ve geliştiricinin saç baş yolma ihtimalinde kayda değer bir azalmadır.

Devamı...

Asenkron Programlama ve Callback Mantığını Anlamak

asenkron-programlama-ve-12

Bir web sayfası veri indirirken düğmeler çalışmıyor, animasyonlar takılıyor ve kullanıcı boş boş ekrana bakıyorsa tarayıcı muhtemelen uzun bir işlem tarafından meşgul edilmiştir. Asenkron programlama; ağ isteği, zamanlayıcı veya dosya okuma gibi sonucu hemen hazır olmayan işleri beklerken ana akışın çalışmaya devam etmesini sağlar. Callback, yani geri çağırım fonksiyonu ise işlem tamamlandığında “Bitti, şimdi ne yapayım?” sorusuna verilen cevaptır.

Devamı...

Veri Setlerindeki Sessiz Önyargılar: Modelin Kararlarını Şekillendiren Görünmez Eller

Bir makine öğrenmesi modeli dünyayı doğrudan gözlemlemez; ona sunduğumuz veri setinin penceresinden bakar. Pencerenin camı çizik, renkli veya yalnızca belirli bir sokağa dönükse model de gerçeği öyle sanır. Bu nedenle toplumsal önyargılar, kötü niyetli bir algoritma yazılmasa bile veri toplama, etiketleme ve örnekleme süreçlerinden modele sessizce sızabilir.

veri setlerindeki onyargi

Devamı...

Sızma Sonrası Güvenli Doğrulama ve Profesyonel Raporlama

Bir sızma testinde ilk erişimi elde etmek final değil, yalnızca hikâyenin dönüm noktasıdır. Post-exploitation aşaması; ele geçirilen erişimin etkisini, saldırganın ilerleyebileceği yolları ve kurumun bu hareketleri fark etme kapasitesini yetkilendirilmiş sınırlar içinde incelemeyi amaçlar. Buradaki başarı, sisteme gizlice yerleşmekten çok riski güvenli biçimde kanıtlamak, iz bırakmadan değil kontrollü iz bırakarak çalışmak ve test sonunda ortamı başlangıç durumuna döndürmektir.

sizma sonrası güvenlik

Devamı...

Satranç Motorlarının Evrimi: Minimax’tan AlphaZero’ya Zekânın Değişen Yüzü

Bir satranç motorunun tahtaya bakıp “Bu hamle bana mantıklı geliyor” dediğini hayal ederiz; oysa uzun yıllar boyunca makinelerin sezgisi değil, yalnızca yorulmak bilmeyen hesap gücü vardı. Satranç motorlarının Minimax’tan AlphaZero’ya uzanan tarihi, daha fazla pozisyon hesaplamanın ötesinde, “Zekâ nedir?” sorusuna verilen mühendislik cevaplarının da tarihidir.

Devamı...

Programcının Bilişsel Yükü: Bazı Kodlar Neden Beyni Daha Çok Yorar?

programcinin-bilissel-yuku-14

Bir kod bloğunu okurken bazen her şey ilk bakışta yerine oturur; bazen de üç satır sonra değişkenlerin neyi temsil ettiğini unutup başa dönersiniz. Sorun her zaman algoritmanın karmaşıklığı değildir. Kod, bilgisayar için kusursuz çalışırken insan zihni için yorucu olabilir. Bunun nedeni, beynimizin aynı anda işleyebildiği bilgi miktarının sınırlı olmasıdır.

Devamı...

Oyun Teorisi Gözünden Açık Kaynak Lisans Savaşları: GPL mi MIT mi Kazanır?

Bir açık kaynak lisansı seçmek, yalnızca hukuk metinleri arasında tercih yapmak değildir; geliştiriciler, şirketler ve kullanıcılar arasında oynanan uzun vadeli bir strateji oyununa katılmaktır. MIT özgürlüğü en az koşulla dağıtırken GPL, bu özgürlüğün sonraki sürümlerde de korunmasını ister. Peki rasyonel aktörlerin bulunduğu bir ekosistemde hangi yaklaşım kazanır?

Devamı...

Git Commit Mesajlarının Sosyolojisi: Kod Geçmişinden Takım Kültürünü Okumak

git-commit-mesajlarinin-65

Bir Git deposunun commit geçmişi yalnızca kodun nasıl değiştiğini anlatmaz; ekibin iletişim alışkanlıklarını, baskı altında nasıl davrandığını ve sorumluluğu nasıl paylaştığını da gösterir. “fix”, “nihayet çalıştı” veya “ödeme servisinde zaman aşımını düzelt” ifadeleri teknik olarak aynı değişikliği işaret edebilir; fakat her biri bambaşka bir ekip kültürünün izini taşır.

Devamı...

Bizans Generalleri Problemi: Dağıtık Sistemlerin İçindeki İnsan Hikâyesi

Bir grup insanın ortak karar vermesi gerektiğini düşünün: Bazıları dürüst, bazıları kararsız, bazılarıysa kasıtlı olarak yalan söylüyor. Üstelik kimse aynı odada değil; iletişim gecikebilir, mesajlar kaybolabilir ve farklı kişilere farklı bilgiler ulaşabilir. Bu senaryo bir aile grubunu, şirket toplantısını veya siyasi ittifakı çağrıştırsa da dağıtık sistemlerin en ünlü problemlerinden birini anlatır: Bizans Generalleri Problemi. Bilgisayar bilimindeki bu teknik mesele, özünde güvenilir bir otorite olmadan işbirliği yapabilmenin hikâyesidir.

Devamı...

Aircrack-ng ile Kablosuz Ağ Güvenlik Testleri: WEP, WPA ve WPA2

Kablosuz ağ güvenlik testi, yalnızca parolayı “kırmayı” denemek değildir; kullanılan protokolün güvenlik modelini, istemci davranışlarını ve parola politikasını birlikte değerlendirmektir. Aircrack-ng paketi bu süreçte trafiği izleme, paket yakalama ve parola dayanıklılığını çevrimdışı sınama gibi görevler sunar. Bu çalışmaları yalnızca sahibi olduğunuz veya test iznini yazılı olarak aldığınız, izole bir laboratuvar ağında gerçekleştirmelisiniz.

aircrack-ng-ile-74

Devamı...

Zafiyet Analizi: Nessus ve OpenVAS ile Güvenlik Açıklarını Avlamak

Bir ağdaki güvenlik açıklarını elle bulmaya çalışmak, karanlık bir odada LEGO parçası aramaya benzer: mutlaka bir şeye basarsın ama acı biraz geç gelir. Zafiyet analizi, Nessus veya OpenVAS gibi entegre tarayıcılarla sistemlerdeki bilinen güvenlik açıklarının otomatik tespit edilmesi, önceliklendirilmesi ve raporlanması sürecidir. Amaç saldırmak değil; saldırganlardan önce eksikleri görmek, ölçmek ve kapatmaktır.

zafiyet-analizi-nessus-77

Devamı...

Sızma ve Metasploit Framework: Zafiyetten Kontrollü Erişime

Bir zafiyetin tespit edilmesi, sistemin gerçekten ele geçirilebildiği anlamına gelmez; yalnızca araştırılması gereken bir kapı bulunduğunu gösterir. Sızma, bu kapının yetkili ve izole bir laboratuvar ortamında kontrollü biçimde açılmasıdır. Metasploit Framework ise hazır istismar modülleri, payload seçenekleri ve oturum yönetimiyle bu süreci standartlaştıran güçlü bir güvenlik test platformudur.

Devamı...