WebRTC ile Tarayıcılar Arası Görüntülü Konferans: NAT Geçişi ve Eşler Arası Bağlantı

webrtc-ile-tarayicilar-12

Tarayıcıdan tarayıcıya görüntülü görüşme fikri kulağa sihir gibi gelir: video akışı merkezi bir medya sunucusundan geçmeden iki kullanıcı arasında akar. WebRTC bunu getUserMedia, RTCPeerConnection ve güvenli medya taşıma protokolleriyle mümkün kılar. Ancak internetin görünmez kapı bekçisi NAT yüzünden iki cihazın birbirini bulması çoğu zaman sandığınız kadar doğrudan değildir.

Devamı...

VHDL ile FPGA Tabanlı Donanım Tasarımı: Paralelliği Devreye Dönüştürmek

vhdl-ile-fpga-87

VHDL, yazılım yazıyormuş gibi görünen ama aslında fiziksel dijital devreleri tarif eden güçlü bir donanım tanımlama dilidir. Bir FPGA üzerinde VHDL ile sayaçtan görüntü işleme hızlandırıcısına, haberleşme denetleyicisinden makine öğrenmesi çıkarım motoruna kadar özel devreler kurulabilir. Kritik fark şudur: CPU’da yazılan komutlar sırayla yürütülürken, FPGA’ya sentezlenen mantık blokları aynı anda çalışır. Bu yüzden doğru tasarlanmış bir FPGA devresi, belirli bir işi çok düşük gecikmeyle ve yüksek enerji verimliliğiyle gerçekleştirebilir.

Devamı...

Verilog ile Sayısal Devre Simülasyonu: Kombinasyonelden İşlemci Bileşenlerine

Bir işlemcinin içinde mucize değil, saat sinyaliyle uyum içinde çalışan çok sayıda küçük devre vardır. Verilog, bu devreleri fiziksel olarak üretmeden önce davranışlarını modellemeyi ve simüle etmeyi sağlayan bir donanım tanımlama dilidir (HDL). Böylece bir ALU’nun toplama yapıp yapmadığını, register’ın veriyi doğru anda saklayıp saklamadığını veya kontrol biriminin yanlış sinyal üretip üretmediğini dalga şekilleri üzerinden görebiliriz.

verilog-ile-sayisal-34

Devamı...

TLA+ ile Dağıtık Sistem Doğrulama: Yarış Koşullarını Matematikle Yakalamak

Dağıtık sistemlerde hata ayıklamak bazen sisli bir ormanda kaybolmaya benzer: Her servis tek başına doğru görünür, fakat belirli bir zamanlama gerçekleştiğinde sistem beklenmedik biçimde kilitlenir. TLA+, bu tür sorunları üretime taşınmadan önce durum uzayını matematiksel olarak incelemeye yarayan güçlü bir formal doğrulama dilidir. Özellikle yarış koşulları, lider seçimi ve karşılıklı dışlama gibi eşzamanlılık problemlerinde “bu hata hiç oluşamaz” iddiasını test edilebilir bir kanıta dönüştürür.

Devamı...

SAS ile Kurumsal Veri Analizi: Büyük Veriden Güvenilir Kararlara

Kurumsal veri analizi, yalnızca milyonlarca satırlık tabloyu hızlıca işlemek değildir; veriyi güvenilir, denetlenebilir ve karar verilebilir bir hikâyeye dönüştürme sanatıdır. SAS, özellikle banka, sigorta, perakende ve kamu gibi düzenlemelerin yoğun olduğu sektörlerde bu hikâyeyi kurmak için uzun yıllardır kullanılan güçlü bir platformdur. Veri entegrasyonundan istatistiksel modellemeye, zamanlanmış raporlardan veri madenciliğine kadar tek bir ekosistemde çalışmayı mümkün kılar.

Devamı...

Ruby on Rails ile Hızlı Prototipleme: Şemadan Arayüze Giden Kısa Yol

Bir fikri doğrulamak için haftalarca form, liste, doğrulama ve ilişki kodu yazmak zorunda değilsiniz. Ruby on Rails, Convention over Configuration yaklaşımıyla veritabanı şemasını uygulamanın omurgası kabul eder; doğru isimlendirilmiş tablolar, alanlar ve ilişkilerden yola çıkarak işlevsel bir yönetim arayüzü üretmeyi oldukça hızlandırır. Amaç kusursuz ürünü ilk günde yayınlamak değil, kullanıcıdan erken geri bildirim alacak kadar gerçek bir prototip oluşturmaktır.

Devamı...

Promela ile Model Kontrolü: Spin ile Protokol Hatalarını Daha Çalışmadan Yakalamak

Dağıtık sistemlerde ve eşzamanlı programlarda hata çoğu zaman kodun tek bir satırında değil, olayların talihsiz sıralanışında saklanır. Bir istemci mesajı erken gönderir, sunucu zaman aşımına düşer, iki iş parçacığı aynı kaynağı bekler ve sistem sessizce kilitlenir. Promela (Process Meta Language) ile çalışan Spin model denetleyicisi, bu tür senaryoları rastgele test etmeye bırakmak yerine sistemin olası durumlarını sistematik biçimde tarar. Böylece protokolünüzü henüz üretime taşımadan mantıksal açıdan sorgulayabilirsiniz.

Devamı...

Perl ile Metin Madenciliği ve Log Analizi: Regex Motoruyla Günlüklerden Anlam Çıkarmak

perl-ile-metin-98

Sunucu günlükleri, bir sistemin hem kara kutusu hem de olay mahallidir: hatalar, ziyaretçi davranışları, şüpheli istekler ve performans darboğazları satır satır burada yaşar. Perl, modern dillerin gölgesinde kalsa da metin işleme konusunda hâlâ son derece etkili bir araçtır. Özellikle büyük log dosyalarında düzenli ifadelerle örüntü yakalama, akış halinde veri okuma ve hızlı özet rapor üretme işlerinde az kodla güçlü sonuçlar verir.

Devamı...

OCaml ile Tip Güvenli Derleyici Ön Ucu: Lexer, Parser ve Çıkarımın Gücü

Bir derleyicinin ön ucu, kaynak kodun dağınık karakterlerini anlamlı ve güvenilir bir programa dönüştüren ilk savunma hattıdır. OCaml bu iş için özellikle keyifli bir seçimdir: cebirsel veri tipleri sentaks ağacını açıkça modeller, pattern matching her olasılığı düşünmeye zorlar ve Hindley-Milner tabanlı tip çıkarımı pek çok tasarım hatasını program daha çalışmadan yakalar. Sonuçta sadece çalışan değil, yanlış durumları temsil etmesi zor bir lexer ve parser geliştirirsiniz.

ocaml-ile-tip-37

Devamı...

MATLAB ile Gerçek Zamanlı Sinyal İşleme ve Analog Filtre Tasarımı

Bir mikrofonun uğultusunu temizlemek, titreşim sensöründen arıza belirtisi yakalamak veya kalp atışı verisindeki gürültüyü azaltmak; hepsi sinyal işlemenin günlük hayattaki süper güçleridir. MATLAB, güçlü matematik altyapısı ve Signal Processing Toolbox araçları sayesinde ham ses ya da sensör örneklerini anlamlı bilgiye dönüştürmek için oldukça uygundur. Üstelik doğru örnekleme hızı, Fourier analizi ve filtre seçimiyle bu işlemler gerçek zamana yakın biçimde yapılabilir.

Devamı...

LLVM IR ile Ara Kod Optimizasyonu: Döngü Açılımı ve Ölü Kod Eleme

Derleyiciler yalnızca kaynak kodunu makine koduna çeviren araçlar değildir; aynı zamanda programın yaptığı gereksiz işleri ayıklayan, sıcak kod yollarını hızlandıran ve hedef işlemcinin yeteneklerinden yararlanan analiz motorlarıdır. LLVM ekosisteminde bu işin merkezinde LLVM IR (Intermediate Representation) bulunur. Platformdan bağımsız olan bu ara temsil, C++, Rust, Swift veya başka bir ön uçtan geldikten sonra aynı optimizasyon boru hattında işlenebilir. Bu yazıda, arka uç optimizasyonlarının iki klasik yıldızını inceleyeceğiz: döngü açılımı (loop unrolling) ve ölü kod eleme (dead code elimination).

Devamı...

Fortran ile Yüksek Performanslı Sayısal Hesaplama: Vektörlerden Paralelliğe

Fortran, “eski ama eskimeyen” dillerin en güçlü örneklerinden biridir. Fizik, iklim modelleme, hesaplamalı akışkanlar dinamiği ve sonlu elemanlar gibi alanlarda bugün hâlâ yoğun biçimde kullanılır. Bunun sebebi nostalji değil; dizilerle doğal çalışması, derleyicilerin agresif optimizasyon yapabilmesi ve paralel donanımdan iyi yararlanabilmesidir. Özellikle milyonlarca hücre veya parçacık içeren simülasyonlarda birkaç yüzde puanlık performans farkı, saatler süren bir hesabı dakikalarca kısaltabilir.

Devamı...

F# ile Finansal Modelleme: Birim Tipleriyle Güvenli Kur ve Risk Hesapları

Finans yazılımlarında küçük görünen bir hata, büyük bir bilanço sorununa dönüşebilir: Euro tutarını dolar sanmak, yüzde ile ondalık oranı karıştırmak veya günlük volatiliteyi yıllık değer gibi kullanmak oldukça pahalıdır. F#; fonksiyonel yaklaşımı, değişmez verileri ve özellikle birim tipleri (units of measure) sayesinde bu hataları daha derleme aşamasında yakalamaya yardımcı olur. Böylece hesap motorunuz yalnızca sonuç üretmez; hangi sonuçların anlamlı olduğunu da denetler.

f-ile-finansal-75

Devamı...

Erlang ile Dağıtık Mesajlaşma Sistemi: Telekom Dayanıklılığıyla Anlık İletişim

Anlık mesajlaşma sunucusu yazmak, ekrana iki baloncuk düşürmekten çok daha fazlasıdır: Kullanıcılar çevrimdışı olabilir, makineler kapanabilir, ağ paketleri kaybolabilir ve en kritik anda bir süreç çökebilir. Erlang tam bu kaosun içinden doğdu. Telekom santrallerinin yıllarca durmadan çalışması hedefiyle tasarlanan dil; hafif süreçler, mesaj geçirme, denetim ağaçları ve dağıtık düğümler sayesinde sohbet sistemlerine doğal bir dayanıklılık kazandırır.

Devamı...

DNS-over-HTTPS ile Gizlilik Odaklı Sorgulama

İnternette bir siteye girmeden önce tarayıcınızın yaptığı ilk iş, alan adını IP adresine çevirmektir. Klasik DNS sorguları çoğu zaman şifresiz taşındığından, aynı ağdaki bir gözlemci hangi alan adlarını ziyaret etmek istediğinizi görebilir. DNS-over-HTTPS (DoH), bu sorguları HTTPS trafiğinin içine alarak meraklı ağ yöneticileri, açık Wi-Fi dinleyicileri ve bazı servis sağlayıcıları için görünürlüğü önemli ölçüde azaltır.

Devamı...

COBOL ile Eski Bankacılık Sistemlerini Anlama: Anaframe Miras Kodlarını Okuma Rehberi

Bir bankanın ekranında saniyeler içinde görünen bakiye, çoğu zaman bulut üzerindeki parlak bir mikroservisten değil, onlarca yıldır çalışan bir ana bilgisayar programından gelir. COBOL (Common Business-Oriented Language), insan diline yakın söz dizimi ve güçlü kayıt işleme modeli sayesinde bankacılıkta kalıcı olmuştur. Bu sistemleri anlamak, yalnızca eski bir dili öğrenmek değildir; faiz, tahakkuk, mutabakat, hesap hareketi ve denetim izlerinin iş kurallarına nasıl dönüştüğünü keşfetmektir.

Devamı...

Clojure Makrolarıyla Kod Üretimi: Kodun Kod Yazdığı Dünya

clojure-makrolariyla-kod-80

Clojure makroları, programın çalıştırdığı değerleri değil, programın kendisini dönüştürmenizi sağlar. Bu fikir ilk bakışta sihirli görünse de temelinde oldukça somut bir gerçek vardır: Clojure kodu, Lisp ailesinden geldiği için veri yapılarıyla aynı biçimde yazılır. Böylece bir fonksiyon çağrısı olan (topla 2 3) aynı zamanda liste olarak okunabilir; makro da bu listeyi alır, değiştirir ve derleyicinin işleyeceği yeni kodu üretir.

Devamı...

BGP ve İnternet Yönlendirme Mimarisi: İnternetin Küresel Trafik Hakemi

İnternet, tek bir kurumun yönettiği dev bir ağ değildir; binlerce bağımsız ağın uzlaşarak oluşturduğu küresel bir ekosistemdir. Bir kullanıcının tarayıcısından çıkan paket, hedefe ulaşana kadar operatörler, bulut sağlayıcıları, üniversiteler ve içerik dağıtım ağları arasında dolaşabilir. Bu ağlar arası yol seçiminin temel dili ise Border Gateway Protocol (BGP)‘dir. BGP, en kısa fiziksel yolu bulmaktan çok, ağların ticari ilişkilerini ve yönetim politikalarını dikkate alan bir rota müzakere sistemidir.

bgp-ve-internet-40

Devamı...

ANTLR ile Özel Dil Derleyicisi: LL(*) Gücüyle DSL Tasarlamak

antlr-ile-ozel-13

Her problemin çözümü genel amaçlı bir programlama diliyle yazılmak zorunda değildir. Bir raporlama sistemi için sorgu dili, oyunlar için diyalog betik dili veya otomasyon için görev tanım dili tasarlamak; kullanıcıya daha okunabilir, daha güvenli ve alanın kavramlarına yakın bir deneyim sunar. İşte bu tür dillere alan özgü dil ya da DSL (Domain-Specific Language) denir. ANTLR, gramerinizi yazarak lexer ve parser üretmenizi sağlayan güçlü bir araçtır; özellikle LL(*) yaklaşımı sayesinde karmaşık alternatifleri yönetmeyi kolaylaştırır.

Devamı...

Ada ile Güvenlik Kritik Sistem Programlama: Uçuşa Hazır Kodun Dili

ada-ile-guvenlik-55

Bir uçakta yazılımın küçük bir hatası yalnızca uygulamanın çökmesi anlamına gelmez; yanlış sensör verisi, geciken bir kontrol komutu veya öngörülemez bellek davranışı ciddi sonuçlar doğurabilir. Ada, tam bu nedenle tasarlanmış bir programlama dilidir: derleme zamanında hataları yakalamayı, eşzamanlı görevleri disiplinli biçimde yönetmeyi ve yazılımın davranışını denetlenebilir hâle getirmeyi hedefler. Havacılık, uzay, demiryolu ve savunma gibi alanlarda Ada; “önce doğru çalışsın, sonra hızlı olsun” yaklaşımının güçlü bir temsilcisidir.

Devamı...