Düzenli İfadeden Sonlu Durum Makinesine: Regex İşlemcide Nasıl Çalışır?

Bir düzenli ifadeye baktığımızda yalnızca parantezler, yıldızlar ve gizemli ters eğik çizgiler görürüz. İşlemci ise bu sembollerin şiirselliğiyle ilgilenmez; ona karşılaştırmalar, geçişler ve kesin kurallar gerekir. Otomat kuramı, a(b|c)*d gibi bir metin kalıbını sonlu sayıda duruma sahip bir makineye dönüştürerek bu iki dünya arasında köprü kurar.

duzenli-ifadeden-sonlu-21

Devamı...

Conway Yasası: Şirket Şeması Nasıl Yazılım Mimarisine Dönüşür?

conway-yasasi-sirket-27

Bir yazılım sisteminin mimari diyagramına bakarak onu geliştiren şirketin organizasyon şemasını tahmin edebilir misiniz? Conway Yasası’na göre çoğu zaman evet! Ekipler arasındaki iletişim sınırları; servislerin, modüllerin ve API’lerin sınırlarına dönüşür. Başka bir deyişle şirket yalnızca yazılım üretmez, kendi iletişim biçiminin dijital bir kopyasını da üretir.

Devamı...

Çevik Poker: Çapa Etkisini Kırarak Daha Sağlıklı Tahminler Yapmak

Bir geliştirici “Bu iş iki gün sürer” dediğinde odadaki herkes farkında olmadan iki gün çevresinde düşünmeye başlayabilir. İlk söylenen sayı, teknik bir hesaplamadan çok zihinsel bir mıknatısa dönüşür. Çevik Poker veya yaygın adıyla Planning Poker, tahminleri aynı anda ve gizlice açıklatarak bu çapa etkisini azaltan ekip tabanlı bir yöntemdir.

Devamı...

API Trafiğine Matematiksel Fren: Rate Limiting ve Leaky Bucket

api-trafigine-matematiksel-18

Bir API herkese açık bir kapıysa rate limiting, kapıdaki soğukkanlı güvenlik görevlisidir. İstemciler saniyeler içinde binlerce istek gönderdiğinde CPU, bellek, ağ bağlantıları ve veritabanı havuzu tükenebilir. Hız sınırlama algoritmaları, normal kullanıcıları cezalandırmadan bu trafik selini matematiksel kurallarla kontrol altında tutar.

Devamı...

Ağ Tarafsızlığı: İnternetin Eşit Şeritlerinde Kimler Yol Alıyor?

Bir video izlerken görüntünün donduğunu, aynı anda servis sağlayıcınızın kendi video platformunun kusursuz çalıştığını düşünün. Bu durum teknik bir arızadan çok daha fazlası olabilir: Ağ tarafsızlığı tartışmasının tam merkezindesiniz. Ağ tarafsızlığı, internet servis sağlayıcılarının paketleri kaynağına, hedefine, içeriğine veya uygulamasına göre haksız biçimde engellememesi, yavaşlatmaması ya da ücretli “hızlı şeritlere” ayırmaması ilkesidir.

Devamı...

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ı...