Otonom Silahlarda Son Söz Kimde? İnsan Denetiminin Etik Rolü

Otonom silah sistemleri; çevresini algılayabilen, seçenekleri değerlendirebilen ve belirli ölçülerde bağımsız karar verebilen teknolojilerdir. Ancak teknik olarak bir kararın üretilebilmesi, o kararın etik veya hukuki açıdan kabul edilebilir olduğu anlamına gelmez. Özellikle insan yaşamını etkileyen durumlarda temel soru şudur: Makine ne kadar yetkin olursa olsun, son söz insanda mı kalmalıdır?

Devamı...

Metal Eklemlerden Esnek Kaslara: Yumuşak Robotik Nasıl Çalışır?

Robot denildiğinde zihnimizde genellikle metal kollar, dişliler ve belirgin eklemler canlanır. Yumuşak robotik ise bu görüntüyü tersine çevirerek silikon, elastomer ve kumaş gibi esneyebilen malzemelerden robotlar üretir. Böylece makineler yalnızca hareket etmekle kalmaz; kıvrılabilir, sıkışabilir ve hassas nesnelere zarar vermeden dokunabilir.

Devamı...

Java Sınıflarına Yakından Bakış: Metotlar, Statik Üyeler ve Çöp Toplayıcı

Java’da bir sınıfı yalnızca alanlar ve metotlarla doldurulmuş bir kutu gibi görmek kolaydır. Oysa sınıflar; nesnelerin davranışlarını tanımlar, sınıf seviyesinde ortak durumları yönetir ve JVM’nin bellek mekanizmasıyla sürekli etkileşim hâlinde çalışır. Metot tanımlamalarından static üyelerin yaşam döngüsüne, çöp toplayıcının erişilemeyen nesneleri nasıl belirlediğine kadar uzanan bu yolculukta sınıfların kaputunu açıyoruz.

Devamı...

Java I/O ve NIO: Dosyalardan Asenkron Kanallara Veri Yolculuğu

Java’da veri okumak veya yazmak, ilk bakışta bir dosyayı açıp birkaç baytı taşımaktan ibaret görünebilir. Ancak işin içine büyük dosyalar, ağ bağlantıları ve binlerce eşzamanlı istemci girdiğinde I/O dünyası küçük bir performans laboratuvarına dönüşür. Klasik I/O akışları sadelik sunarken NIO; tamponlar, kanallar ve asenkron işlemlerle veri yolculuğunu daha verimli hâle getirir.

java-io-ve-94

Devamı...

Java Generics: Derleme Zamanında Tip Güvenliğinin Süper Gücü

java-generics-derleme-22

Java’da genel türler, yani Generics, farklı veri tipleriyle çalışabilen sınıflar ve metotlar yazarken tip güvenliğini korumamızı sağlar. Bir koleksiyonun içine yanlışlıkla ilgisiz bir nesne koyup hatayı çalışma zamanında keşfetmek yerine, derleyicinin erkenden alarm vermesini sağlar. Kısacası Generics, kodun kapısında duran ve “Listede yalnızca belirtilen tipler girebilir!” diyen ciddi ama faydalı bir güvenlik görevlisidir.

Devamı...

C++ Yapıcılarında Sessiz Tuzak: Üyeler Hangi Sırayla İlklendirilir?

Bir C++ yapıcısındaki üye ilklendirme listesi soldan sağa okunur. Bu nedenle üyelerin de aynı sırayla hazırlandığını düşünmek oldukça doğaldır. Ne var ki C++, görünüşe değil sınıftaki bildirim sırasına bakar. Listeyi istediğiniz kadar yeniden düzenleyin; gerçek ilklendirme sırası değişmez. Bu küçük kural, tanımsız davranıştan zor fark edilen mantık hatalarına kadar uzanan sürprizler yaratabilir.

c-yapicilarinda-sessiz-29

Devamı...

C# Temsilciler ve Olaylar: Metotları Konuşturan Mekanizma

Bir düğmeye tıklandığında hangi metodun çalışacağını, indirme tamamlanınca kime haber verileceğini veya hesaplama sonucunun hangi kuralla işleneceğini önceden sabitlemek istemeyiz. C# bu esnekliği temsilciler (delegates) ile sağlar; olaylar (events) ise temsilcileri güvenli bir bildirim mekanizmasına dönüştürür.

c-temsilciler-ve-83

Devamı...

C++ STL Konteynerleri: vector, list ve map ile Veriyi Ustaca Yönetmek

c-stl-konteynerleri-48

C++ ile veri işlerken her elemanı elle yönetmek, bellek ayırmak ve bağlantıları takip etmek oldukça yorucu olabilir. Neyse ki Standart Şablon Kütüphanesi (STL), bu işleri güvenli ve düzenli biçimde yapan konteynerler sunar. Bu yazıda vector, list ve map yapılarını inceleyerek hangi durumda hangisinin seçilmesi gerektiğini göreceğiz.

Devamı...

C++ Sınıflar ve Nesnelere Giriş: Kodun Lego Parçaları

Bir oyundaki karakterleri düşün: Her karakterin adı, canı ve saldırı gücü vardır; ayrıca saldırabilir veya kendini tanıtabilir. Bütün bunları ayrı değişkenler ve fonksiyonlarla yönetmek mümkün olsa da karakter sayısı arttıkça kod kısa sürede spagettiye dönüşür. C++ sınıfları, ilişkili verileri ve davranışları tek bir anlamlı yapı altında toplayarak bu karmaşayı önler.

Devamı...

C++ Pimpl Deyimi: Derleme Bağımlılıklarını Perde Arkasına Taşımak

C++ projeleri büyüdükçe küçük bir başlık dosyası değişikliği, ilgisiz görünen onlarca kaynak dosyanın yeniden derlenmesine yol açabilir. Pimpl, yani Pointer to Implementation, sınıfın kullanıcıya açık arayüzünü gerçek uygulama ayrıntılarından ayırarak bu zincirleme etkiyi azaltan köklü bir C++ deyimidir. Kısacası sınıfımız sahne önünde sade görünürken bütün dekor, kablolar ve karmaşa perdenin arkasında kalır.

Devamı...

C++ Operatör Aşırı Yükleme: Nesnelerin Operatörlerle Dansı

C++ dilinde operatörler yalnızca int, double veya char gibi hazır veri türlerine hizmet etmek zorunda değildir. Operatör aşırı yükleme sayesinde +, -, == ve << gibi tanıdık sembollerin kullanıcı tanımlı sınıflarla nasıl çalışacağını belirleyebiliriz. Böylece nesnelerimiz, dilin doğal bir parçasıymış gibi okunabilir ve anlaşılır ifadelerde rol alır.

c-operator-asiri-54

Devamı...

C# LINQ: Koleksiyonlardan Veritabanına Tek Dille Sorgulama

Bir listedeki aktif kullanıcıları bulmak, veritabanından pahalı ürünleri çekmek veya XML belgesindeki düğümleri süzmek için ayrı ayrı sorgulama yöntemleri öğrenmek zorunda olduğunuzu düşünün. C# LINQ, farklı veri kaynaklarını ortak bir sorgulama yaklaşımı altında birleştirerek bu karmaşayı azaltır. Üstelik sorgular doğrudan kodun içinde, tür güvenli ve okunabilir biçimde yazılır.

c-linq-koleksiyonlardan-43

Devamı...

C Kontrol İfadeleri: Programın Direksiyonuna Geçin

Bir C programı, yalnızca yukarıdan aşağıya çalışan komutlardan oluşsaydı hesap makinesinden pek farklı olmazdı. Kullanıcı kararlarına tepki vermek, bazı işlemleri tekrarlamak ve farklı durumlarda farklı yollar izlemek için kontrol ifadelerine ihtiyaç duyarız. if-else, switch-case ve döngüler, programın direksiyonunu elimize veren temel araçlardır.

Devamı...

C Konsol Giriş/Çıkış İşlemleri: printf ve scanf ile Terminali Konuşturmak

C programında değişkenler bellekte sessizce bekler; onları kullanıcıyla buluşturan ise konsol giriş/çıkış fonksiyonlarıdır. Ekrana biçimli veri yazdırmak için çoğunlukla printf, klavyeden veri almak için scanf kullanılır. Ancak doğru format belirteçlerini seçmek, giriş hatalarını yakalamak ve metinleri güvenli biçimde okumak en az fonksiyonların kendisi kadar önemlidir.

Devamı...

Zamanı İleri Sar: Olay-Güdümlü Benzetimle Parçacık Çarpışmaları

Bir bilardo masasındaki topları simüle ettiğimizi düşünelim. Zamanı milisaniyelik dilimlere ayırıp her adımda bütün topların konumunu güncelleyebiliriz. Ancak toplar çoğu zaman yalnızca düz bir çizgide ilerler; asıl ilginç değişimler çarpışma anlarında gerçekleşir. Olay-güdümlü benzetim, boş geçen zaman adımlarını hesaplamak yerine doğrudan bir sonraki önemli olaya sıçrayarak işlem yapar.

zamani-ileri-sar-97

Devamı...

Son Ek Dizileri: Metin Aramalarının Sıralı Süper Gücü

Uzun bir metinde belirli bir kalıbı aramak, samanlıkta iğne bulmaya benzeyebilir. Son ek dizileri, samanları alfabetik biçimde düzenleyerek bu işi şaşırtıcı derecede hızlandırır. Özellikle genom analizi, arama motorları, veri sıkıştırma ve tekrar tespiti gibi alanlarda kullanılan bu yapı, metnin kendisini değiştirmez; yalnızca nereden başlayan son eklerin hangi sırada bulunduğunu saklar.

Devamı...

Shell’de set -e Tuzağı: Hatalar Neden Bazen Sessizce Geçer?

set -e etkinleştirildiğinde bir shell betiğinin ilk hatada duracağını düşünmek oldukça doğaldır. Ne yazık ki Bash’in hata modeli bu kadar basit değildir. Özellikle pipeline, koşul ifadeleri ve alt kabuklar devreye girdiğinde başarısız bir komut sessizce geçebilir; betik de hiçbir şey olmamış gibi yoluna devam edebilir.

Devamı...

SAT ve NP-Tamlık: Bir Boole Formülü Neden Bu Kadar Önemli?

Bir bulmacanın çözümünü kontrol etmek kolayken çözümü sıfırdan bulmak son derece zor olabilir mi? Mantıksal Sağlanabilirlik Problemi, yani SAT, tam olarak bu ayrımın peşine düşer. Basit görünen Boole formüllerinden doğan SAT; algoritma tasarımından donanım doğrulamaya, yapay zekâdan çizelgelemeye kadar uzanan etkisiyle hesaplama karmaşıklığı teorisinin merkezinde yer alır.

sat-ve-np-60

Devamı...

Robotik Aktüatör Seçimi: Güç Yoğunluğu mu, Tepki Hızı mı?

Bir robot kolunun otomobil kaldırmasını, paketleri milisaniyeler içinde ayırmasını veya yumurtayı kırmadan kavramasını sağlayan temel bileşen aktüatördür. Ancak elektrikli, hidrolik ve pnömatik aktüatörler arasında seçim yapmak yalnızca “hangisi daha güçlü?” sorusuna indirgenemez. Yüksek güç yoğunluğu çoğu zaman karmaşıklık, düşük hassasiyet veya gecikme getirirken hızlı tepki de kuvvet ve enerji verimliliğinden taviz isteyebilir.

robotik-aktuator-secimi-66

Devamı...