eBPF ile Çekirdeği Derlemeden TCP Bağlantı Histogramı Yazmak

Linux çekirdeğinin içine küçük, güvenli ve olay odaklı programlar bırakabildiğinizi düşünün; üstelik kernel modülü yazmadan, sistemi yeniden başlatmadan ve çekirdeği yeniden derlemeden. İşte eBPF tam olarak bu büyülü tornavida. Bu yazıda gelen TCP bağlantı isteklerini anlık sayan ve saniyelik değerleri terminalde histogram olarak gösteren mini bir ağ trafiği gözlemcisi tasarlayacağız.

Devamı...

Dosya Okuma ve Yazma İşlemleri: Ham Metinden Kalıcı Sonuçlara

Bir programın dış dünyayla tokalaşmasının en klasik yolu dosyalardır. Kullanıcıdan gelen ham metinler, log kayıtları, CSV benzeri raporlar veya analizden sonra üretilen sonuç belgeleri; hepsi dosya okuma ve yazma işlemleriyle sisteme girer ya da sistemden çıkar. Kısacası dosya işlemleri, bellekte uçuşan veriyi kalıcı ve paylaşılabilir bilgiye dönüştüren köprüdür.

Devamı...

Dinamik Veri Tabanı Yönetimi: Assert ve Retract ile Yaşayan Kurallar

Bir programın çalışırken fikrini değiştirebilmesi kulağa biraz bilim kurgu gibi gelir, değil mi? Dinamik veri tabanı yönetimi tam olarak bunu sağlar: sistem, bellekte tuttuğu gerçekleri ve kuralları çalışma anında ekler, siler ve yeni duruma göre farklı sonuçlar üretir. Özellikle Prolog gibi mantıksal programlama dillerinde assert ve retract, programı sabit bir tarif defteri olmaktan çıkarıp mutfakta karar değiştirebilen bir şefe dönüştürür.

Devamı...

Definite Clause Grammars (DCG): Mantığın Dilbilgisiyle Dansı

Bir cümleyi okurken beynimiz kelimeleri tek tek saymaz; özne nerede, yüklem ne söylüyor, hangi sözcük hangi görevi üstlenmiş gibi yapısal ilişkileri hızla kurar. Definite Clause Grammars, yani DCG, tam da bu sezgisel süreci mantıksal kurallara dökmenin zarif bir yoludur. Özellikle Prolog dünyasında DCG, insan dilini parçalamak, cümleleri çözümlemek ve sembolik doğal dil işleme sistemleri kurmak için küçük ama güçlü bir laboratuvar gibidir.

Devamı...

Yazdırma ve Çıktı İşlemleri: Standart Yüklemlerle Ekrana Konuşan Programlar

Bir programın kullanıcıyla ilk selamlaşması çoğu zaman ekrana yazdırdığı küçücük bir metinle başlar. Mantıksal programlama dünyasında, özellikle Prolog gibi dillerde, bu iş “fonksiyon çağırmak”tan çok “yüklem çalıştırmak” şeklinde düşünülür. Yani ekrana metin basmak, değişkenin değerini görmek veya satır atlamak için sisteme gömülü standart yüklemlerden yararlanırız.

Devamı...

Prolog’da Aritmetik: is Operatörüyle Sembolleri Sonuca Dönüştürmek

Programlamada aritmetik deyince çoğu dilde x = 2 + 3 yazıp sonucu bekleriz. Prolog ise biraz daha felsefi davranır: Önce sembolleri, terimleri ve ilişkileri düşünür; hesaplama ise özel olarak istendiğinde yapılır. İşte is operatörü tam bu noktada sahneye çıkar: Matematiksel formülü sadece sembolik bir yapı olarak tutmak yerine, gerçekten hesaplar ve kesin sonucu yeni bir değişkene bağlar.

Devamı...

Özyineleme ile Döngüsel Kontrol: Döngüsüz Tekrarın Zekice Yolu

Bir listeyi gezmek, bir dizindeki dosyaları taramak ya da ardışık adımlarla sonuca ulaşmak denince akla genellikle for ve while döngüleri gelir. Özyineleme ise aynı işi farklı bir zihinsel modelle yapar: Bir kural, problemin daha küçük bir sürümünü çözmek için kendini yeniden çağırır. Yani kontrol akışı dışarıdan dönen bir çark gibi değil, iç içe açılan matruşka bebekleri gibi ilerler.

Devamı...

Mantıksal Karşılaştırma İşlemleri: Karar Mekanizmasının Dedektifleri

Programlamada bir uygulamanın “akıllı” görünmesini sağlayan şey çoğu zaman çok basit bir sorudur: “Bu doğru mu, değil mi?” Mantıksal karşılaştırma işlemleri; değişkenler veya sabit değerler arasında büyüklük, küçüklük, eşitlik ya da denklik gibi ilişkileri kontrol eder ve sonucu genellikle true veya false olarak üretir. Yani kod dünyasının trafik lambaları gibidirler: geç, dur, bekle!

Devamı...

Listeler ve Veri Yapıları: Head-Tail Mantığını Anlamak

Birden fazla veriyi tek tek değişkenlerde taşımak, market poşetlerini tek parmakla taşımaya benzer: mümkün ama gereksiz acı verici. Listeler, verileri köşeli parantezler içinde tek bir bütün gibi saklamamızı sağlar: [10, 20, 30]. Daha önemlisi, bu bütünün ilk elemanını baş yani head, geri kalan kısmını ise kuyruk yani tail olarak düşünebiliriz.

Devamı...

Geriye İzleme (Backtracking): Çıkmaz Sokaklardan Zekice Dönmek

Bir labirentte yürüdüğünü düşün: Önünde üç yol var, birini seçiyorsun, ilerliyorsun ve duvara çarpıyorsun. Panik yok! Son karar noktasına geri dönüp denenmemiş diğer yolu seçiyorsun. İşte geriye izleme, yani backtracking, bilgisayarın bu “hmm olmadı, başka kapı deneyelim” refleksidir. Özellikle bulmaca çözme, rota arama, kombinasyon üretme ve kısıt sağlama problemlerinde sistematik şekilde alternatifleri dener.

Devamı...

Sorgular Mekanizması: Mantık Motoruna Soru Sormanın Eğlenceli Yolu

Bir bilgi tabanınız olduğunu düşünün: içinde gerçekler, kurallar ve biraz da dedektiflik kokan ilişkiler var. Sorgular mekanizması, bu yapıya dışarıdan soru sormamızı sağlar: Bu sonuç doğru mu, yanlış mı, yoksa sistemin bildikleriyle kanıtlanamıyor mu? Kısacası sorgu, mantık motoruna yöneltilen kontrollü bir mercek gibidir; veriyi ezberlemek yerine, sonuç çıkarmayı otomatikleştirir.

Devamı...

Prolog’da Birleştirme (Unification): Mantığın Sessiz Uzlaştırıcısı

Prolog yazarken bazen tek satırlık bir sorgu, sanki arka planda küçük bir dedektif ordusu çalışıyormuş gibi sonuç üretir. İşte bu dedektiflerin en çalışkanı birleştirme, yani unification sürecidir. Birleştirme; iki terimi, değişkeni veya yapıyı, mantıksal olarak aynı hale getirecek değer atamalarını bulma işlemidir. Prolog motoru bunu otomatik yapar ve çoğu zaman biz fark etmeden programın kaderini belirler.

Devamı...

Prolog Temelleri ve Paradigma Farkları: Emirlerden Mantığa Yolculuk

Bir emirsel dilde bilgisayara adım adım ne yapacağını söylersin; Prolog gibi mantıksal bir dilde ise evrenin kurallarını tarif eder, sonra ona soru sorarsın. Bu küçük fark, programlama zihniyetinde büyük bir deprem yaratır: döngülerden, sayaçlardan ve durum güncellemelerinden uzaklaşıp olgular, kurallar ve çıkarımlar dünyasına gireriz.

Devamı...

Prolog Kurulumu ve VS Code ile İlk Geliştirme Ortamı

Prolog, programcıya “nasıl yapılır?” yerine “ne doğrudur?” diye sorduran hoş bir zihin jimnastiğidir. Bu yazıda SWI-Prolog kurulumunu tamamlayacak, derleyici/yorumlayıcı ayarlarını kontrol edecek ve VS Code üzerinde teorik bilgiyi pratiğe dökeceğimiz küçük bir laboratuvar hazırlayacağız.

Devamı...

Kurallar ve Mantıksal Çıkarım: Eğer-Öyleyse Düşünmenin Programlanabilir Hali

Bilgisayara akıl yürütmeyi öğretmek ilk bakışta bilim kurgu gibi durabilir; ama işin temelinde oldukça tanıdık bir yapı vardır: eğer bir koşul doğruysa, o koşuldan yeni bir sonuç çıkar. Kurallar ve mantıksal çıkarım, önceden tanımlanmış gerçekleri referans alarak yeni bilgiler üretmemizi sağlar. Yani sistem, elindeki bilgi kartlarını karıştırır, eşleşenleri bulur ve mantıklı yeni kartlar üretir.

Devamı...

JavaScript ile Üç Boyutlu Veri Görselleştirme: Veriyi Ekrandan Taşırmak

Bir tablo düşünün: binlerce satır, onlarca metrik, ilişkiler, kümeler ve zaman değişimleri… Excel bile iç çekiyor. İşte JavaScript ile üç boyutlu veri görselleştirme, bu karmaşayı döndürülebilir, yakınlaştırılabilir ve keşfedilebilir bir sahneye çevirir. Kullanıcı yalnızca grafiğe bakmaz; grafiğin içinde gezinir, düğümlere tıklar, kümeleri ayırır ve istatistiğin sakladığı hikâyeyi daha sezgisel biçimde yakalar.

Devamı...

Gerçekler ve Bilgi Tabanı: Dünyayı Kurallarla Anlatmak

Bir yazılıma dünyayı öğretmek isteseydik nereden başlardık? Kedilerin memeli olduğu, Ankara’nın Türkiye’nin başkenti olduğu, suyun 0°C’de donduğu gibi kesin kabul ettiğimiz küçük bilgi parçacıklarıyla. İşte bu küçük, değişmez ve doğrulanabilir ifadelere yapay zekâ ve mantıksal sistemlerde “gerçek” denir. Gerçekler bir araya geldiğinde ise yazılımın akıl yürütebileceği bir bilgi tabanı oluşur.

Devamı...

Değişkenler ve Atama Mantığı: Büyük Harfli Sembollerin Gizli Dedektifliği

Bir programlama dilinde değişken deyince aklımıza çoğu zaman kutular, etiketler ve bellekte duran değerler gelir. Mantıksal programlamada, özellikle Prolog tarzı dillerde ise değişken biraz daha dedektif gibidir: Büyük harfle başlayan bir sembol, sorgu anında henüz bilinmeyen bir değeri temsil eder ve sistem arka planda onu uygun gerçeklerle eşleştirmeye çalışır.

Devamı...

SQL ile Anomali Tespiti: Log Denizinde Garip Balıkları Yakalamak

Sistem logları bazen sakin bir göl, bazen de üretim ortamında patlayan bir mısır tenceresi gibidir. Milyonlarca satır arasında “bir şeyler ters gidiyor” hissini elle aramak yerine, SQL ile olağandışı örüntüleri yakalayabiliriz. Üstelik bunun için her zaman dev bir yapay zekâ modeli gerekmez; iyi kurulmuş istatistiksel mantık, pencere fonksiyonları ve birkaç akıllı sorgu çoğu alarm zilini çaldırmaya yeter.

Devamı...

Python ile Matematiksel Ağırlıklı Otomatik Makale Özetleyici

Uzun bir makaleyi okumadan önce “bana özü ver” demek, modern yazılımcının kahve istemesi kadar doğal hale geldi. Python ile geliştireceğimiz otomatik özetleyici, metindeki cümleleri matematiksel olarak puanlayıp en önemli olanları seçer. Yani modelimiz metni yeniden yazmaz; metnin içinden en temsilî cümleleri avlar. Bu yönteme çıkarımsal özetleme denir ve haberlerden akademik yazılara kadar birçok alanda oldukça kullanışlıdır.

Devamı...