Yapay Zekâda Sentetik Veri Üretimi: Gerçekçi Veriler, Gerçek Olmayan İnsanlar

Bir yapay zekâ modelini eğitmek için binlerce sağlık kaydına ihtiyacınız olduğunu, ancak gizlilik yasaları nedeniyle bu kayıtlara dokunamadığınızı düşünün. Çözüm, gerçek kişileri temsil etmeyen fakat gerçek verinin istatistiksel davranışlarını taklit eden sentetik veri üretmektir. Böylece Ayşe Hanım’ın tansiyonunu paylaşmadan, toplumdaki tansiyon dağılımını modellemek mümkün olur.

yapay-zekada-sentetik-27

Devamı...

Veri Yerinde Kalsın: Yapay Zekâda Federatif Öğrenme Süreçleri

Telefonunuzun klavyesi bir sonraki kelimeyi tahmin ederken yazdığınız özel mesajların merkezi bir sunucuya gönderilmesi pek hoş olmazdı. Federatif öğrenme, diğer adıyla federal öğrenme, tam bu noktada devreye girer: Veriyi modele götürmek yerine modeli verinin bulunduğu cihazlara götürür. Kullanıcı cihazları modeli kendi verileriyle geliştirir ve sunucuya ham verileri değil, yalnızca hesaplanan ağırlık güncellemelerini yollar.

Devamı...

Tersine Mühendislikte Statik ve Dinamik Analiz: Koddan Belleğe Yolculuk

Elinizde kaynak kodu olmayan derlenmiş bir program bulunduğunu düşünün. Program çalışıyor, dosyalar okuyor ve hesaplamalar yapıyor; fakat içeride neler döndüğünü bilmiyorsunuz. Tersine mühendislik, bu kapalı kutunun davranışını assembly kodu, decompiler çıktısı ve çalışma zamanı gözlemleri üzerinden anlamaya çalışır. Elbette bu teknikler yalnızca size ait veya inceleme izniniz bulunan yazılımlarda kullanılmalıdır.

Devamı...

SSDLC: Güvenliği Projenin Sonuna Değil, Temeline Eklemek

Bir uygulamayı tamamladıktan sonra güvenlik testi yapmak, evi inşa edip anahtarı teslim ettikten sonra kapısının olmadığını fark etmeye benzer. Güvenli Yazılım Geliştirme Yaşam Döngüsü veya kısaca SSDLC, güvenliği son dakikada eklenen bir kontrol olmaktan çıkarır; planlama, tasarım, geliştirme, test, dağıtım ve bakım aşamalarının tamamına yerleştirir.

Devamı...

Kod İnceleme Kültürü: Egodan Uzak, Kaliteye Yakın

kod-inceleme-kulturu-79

Kod inceleme, yalnızca hataları yakalamak için açılan teknik bir kontrol kapısı değildir; bilginin ekip içinde dolaşmasını, ortak standartların oluşmasını ve geliştiricilerin birbirinden öğrenmesini sağlayan sosyal bir sistemdir. Ancak yanlış kurulduğunda “Bu kod kötü” cümlesi kolayca “Sen kötü bir geliştiricisin” şeklinde algılanabilir. Sağlıklı bir kültürün temel amacı, insanları yargılamak değil ürünü birlikte iyileştirmektir.

Devamı...

Kod Akışını Korumak: IDE İçinde Pomodoro ve Odaklanma Psikolojisi

Bir geliştirici için dikkat dağınıklığı yalnızca telefona bakmak değildir; açık sekmeler, derleme bildirimleri, Slack mesajları ve “şu fonksiyonu da düzelteyim” dürtüsü aynı zihinsel kaynakları tüketir. Pomodoro tekniğini doğrudan IDE içerisine taşımak, zamanı ölçmekten çok çalışma sınırlarını görünür hâle getirir. Böylece zamanlayıcı, kod yazarken sürekli pazarlık yaptığımız beynimize küçük ama etkili bir çalışma sözleşmesi sunar.

Devamı...

Dağıtık Sistemlerde Vektör Saatleri: Zamanı Değil Nedenselliği Ölçmek

Dağıtık bir sistemde herkesin baktığı kusursuz bir duvar saati yoktur. Düğümlerin fiziksel saatleri farklı hızlarda ilerleyebilir, ağ paketleri gecikebilir ve mesajlar gönderildikleri sıradan farklı bir sırada ulaşabilir. Vektör saatleri, “Saat kaç?” sorusunu cevaplamak yerine daha yararlı bir soruya odaklanır: “Bu olay, diğer olaydan önce mi gerçekleşti; yoksa ikisi birbirinden bağımsız mıydı?”

Devamı...

Bilişim Projelerinde Felaket Kurtarma Planı: Sistemleri Küllerinden Doğurmak

Sunucu odasını su bastığını, kritik verilerin yanlışlıkla silindiğini veya fidye yazılımının tüm sistemleri şifrelediğini düşünün. Böyle bir anda “Yedeğimiz vardı galiba” cümlesi pek güven vermez. Felaket Kurtarma Planı, yani Disaster Recovery Plan (DRP), bilişim sistemlerini önceden belirlenen süre ve veri kaybı sınırları içerisinde alternatif bir ortamda yeniden çalıştırmak için hazırlanan teknik ve operasyonel yol haritasıdır.

bilisim-projelerinde-felaket-30

Devamı...

Bellek Sızıntılarını Profilleme: Sunucudaki Görünmez Tüketimi Yakalamak

Uzun süre çalışan bir sunucu uygulaması başlangıçta uslu bir ev arkadaşı gibi davranıp günler sonra bütün belleği işgal edebilir. Trafik sabitken RAM kullanımının sürekli yükselmesi, gecikmelerin artması ve sonunda sürecin işletim sistemi tarafından sonlandırılması tipik belirtilerdir. Neyse ki Linux ve popüler çalışma zamanlarının yerleşik araçları, uygulamayı hemen durdurmadan bu gizli tüketimi izlememizi sağlar.

bellek-sizintilarini-profilleme-72

Devamı...

Açık Kaynak Lisanslarının Hukuki Sınırları: GPL, MIT ve Apache 2.0

Bir GitHub deposundaki “open source” etiketi, yazılımı istediğiniz gibi kullanabileceğiniz anlamına gelmez. GPL, MIT ve Apache 2.0 lisanslarının üçü de ticari kullanıma izin verir; ancak kaynak kodunu paylaşma, telif bildirimlerini koruma, patent hakları ve türev eserlerin dağıtımı konusunda farklı yükümlülükler doğurur. Kısacası lisans dosyası, projenin sıkıcı aksesuarı değil, kullanım sözleşmesidir.

acik-kaynak-lisanslarinin-17

Devamı...

Uzman Sistemlerden Derin Öğrenmeye: Tıbbi Teşhiste Algoritmik Evrim

Bir hastanın ateşi, öksürüğü ve laboratuvar sonuçları bilgisayara girildiğinde makine nasıl teşhis önerir? Tıbbi yapay zekânın ilk yanıtı oldukça insansıydı: Uzman doktorların kullandığı kuralları açıkça yazmak. Günümüzde görüntüleri milyonlarca parametreyle inceleyen derin öğrenme modellerine ulaşmış olsak da kural tabanlı uzman sistemler; açıklanabilirlikleri, denetlenebilirlikleri ve kritik kararları standartlaştırmaları sayesinde hâlâ önemini koruyor.

uzman-sistemlerden-derin-37

Devamı...

Uç Bilişim Mimarisi: Veriyi Buluta Uğurlamadan İşlemek

uc-bilisim-mimarisi-33

Akıllı bir kamera düşünün: Karşıdan gelen yayayı fark etmek için görüntüyü kilometrelerce uzaktaki buluta gönderip yanıt bekliyor. İnternet kısa süreliğine yavaşlarsa kamera da düşünme molasına çıkıyor! Uç bilişim, veriyi üretildiği cihazda veya yakındaki bir ağ düğümünde işleyerek bu bağımlılığı azaltır. Böylece daha hızlı kararlar, daha düşük bant genişliği tüketimi ve daha güçlü veri gizliliği elde edilir.

Devamı...

Teknik Borcu Ölçmek: Hızlı Teslimatın Görünmeyen Faizi

teknik-borcu-olcmek-90

Bir özelliği cuma akşamına yetiştirmek için katmanları atlamak, testleri ertelemek veya iki servisi geçici bir bağımlılıkla bağlamak oldukça caziptir. Üstelik sistem çalıştığı sürece kimse alarm zillerini duymaz. Fakat geniş ölçekli projelerde bu tavizler birikir; birkaç ay sonra küçük bir değişiklik bile onlarca dosyaya dokunan, günlerce test edilen bir operasyona dönüşür. Teknik borç tam olarak bu görünmeyen yavaşlamadır.

Devamı...

Ses Sinyali İşlemede MFCC: İnsan Kulağından Öznitelik Vektörüne

ses-sinyali-islemede-41

Bir bilgisayar için konuşma, yalnızca zaman boyunca değişen sayılardan oluşur. İnsan kulağı ise bu değişimleri doğrusal biçimde algılamaz: düşük frekanslardaki küçük farklara oldukça duyarlıyken yüksek frekanslarda daha geniş aralıkları benzer kabul eder. Mel-Frequency Cepstral Coefficients (MFCC), ses sinyalini bu algısal özelliğe göre sıkıştırarak konuşma tanıma algoritmalarının kullanabileceği kompakt öznitelik vektörlerine dönüştürür.

Devamı...

LSP Mimarisi: Bir Protokol, Yüzlerce Dil ve Daha Akıllı Editörler

lsp-mimarisi-bir-61

Bir zamanlar her kod editörünün, desteklediği her programlama dili için ayrı bir eklenti geliştirmesi gerekiyordu. Kod tamamlama, hata tespiti ve sembol bulma gibi özellikler editör ile dil arasında tekrar tekrar yazılıyordu. Language Server Protocol, yani LSP, bu zahmetli ilişkiye standart bir iletişim katmanı ekleyerek modern editörlerin yüzlerce dili destekleyebilmesini sağladı.

Devamı...

Kodun Trafik Polisi: Linter Araçlarıyla Ekip Verimliliğini Artırmak

Bir ekipte herkes çalışan kod yazabilir; asıl mesele, herkesin okuyabildiği ve güvenle değiştirebildiği kod yazmaktır. Girintilerden değişken adlarına, kullanılmayan importlardan olası bellek hatalarına kadar pek çok ayrıntıyı otomatik denetleyen linter araçları, kod incelemelerini küçük tartışmalardan kurtarıp mimari kararlara odaklar. Kısacası linter, yalnızca kodun trafik polisi değil, ekibin sessiz kalite koçudur.

Devamı...

Her Kopya Aynı Anda Haklı Olmak Zorunda mı? Nihai Tutarlılığın Teorisi

her-kopya-ayni-30

Bir veritabanında yazdığımız değeri hemen ardından okuyabilmek doğal bir beklentidir. Ancak veri farklı sunuculara, bölgelere ve hatta kıtalara yayıldığında “hemen” kelimesi pahalılaşır. Dağıtık sistemler bu nedenle bazen bütün kopyaları anında eşitlemek yerine kısa süreli görüş ayrılıklarına izin verir. Nihai tutarlılık, sistem sakinleştiğinde tüm kopyaların aynı değerde buluşacağını garanti eden bu pragmatik yaklaşımın adıdır.

Devamı...

Bağlam Değişimi: İşlemcinin Çoklu Görev Vergisi

Bilgisayarınız müzik çalarken kod derliyor, bildirim gösteriyor ve onlarca tarayıcı sekmesini canlı tutuyor. İşlemci çekirdeği gerçekte aynı anda yalnızca sınırlı sayıda işi yürütür; işletim sistemi süreçleri hızla sıraya koyarak eşzamanlılık yanılsaması oluşturur. Bir süreçten diğerine geçiş ise ücretsiz değildir. Halk arasında “saniyelik duraklama” denilse de modern sistemlerde tek bir bağlam değişimi çoğunlukla nanosaniye veya mikrosaniye ölçeğindedir. Asıl sorun, bu küçük maliyetin saniyede binlerce kez tekrarlanmasıdır.

baglam-degisimi-islemcinin-40

Devamı...

Bağımlılık Enjeksiyonu Felsefesi: Sınıfları Özgür Bırakmak

bagimlilik-enjeksiyonu-felsefesi-93

Bir sınıfın ihtiyaç duyduğu araçları kendi içinde üretmesi ilk bakışta pratik görünebilir. Ancak proje büyüdüğünde bu yaklaşım, sınıfları birbirine görünmez halatlarla bağlar. Bağımlılık Enjeksiyonu (Dependency Injection veya DI), bu halatları keserek nesnelerin ihtiyaçlarını dışarıdan almasını sağlar. Sonuç; daha modüler, değiştirilebilir ve test edilebilir bir yazılım mimarisidir.

Devamı...