Telegram Botlarında Rate Limiting: Kuyruklarla Güvenli Toplu Bildirim

Telegram botunuz yüz kullanıcıya mesaj gönderirken gayet sakin çalışabilir; ancak kullanıcı sayısı binlere ulaştığında Bot API aniden 429 Too Many Requests yanıtları vermeye başlayabilir. Çözüm, döngüye biraz sleep serpiştirmek değil; gönderim hızını ölçen, mesajları sıraya alan ve geçici hataları yeniden deneyen kontrollü bir dağıtım sistemi kurmaktır.

Devamı...

Sanal Kimliklerin İnşası: Anonimlik Perdesinin Arkasında Kim Oluyoruz?

Bir forumda ciddi bir teknoloji uzmanı, başka bir platformda sivri dilli bir eleştirmen, kişisel blogunda ise duygusal bir hikâye anlatıcısı… Aynı kişi internette birbirinden oldukça farklı karakterlere bürünebilir. Sanal kimlikler yalnızca kullanıcı adı ve profil fotoğrafından oluşmaz; kişinin seçerek sergilediği özelliklerin, davranışlarının ve topluluk içindeki itibarının birleşimidir.

sanal-kimliklerin-insasi-70

Devamı...

Oracle Cloud’da Ampere Sunucularını Yük Dengeleyiciyle Ölçeklendirme

oracle-cloudda-ampere-78

Tek bir Ampere sunucusu hızlı ve ekonomik olabilir; ancak bütün web trafiğini ona yönlendirmek, uygulamanın kaderini tek bir makineye bağlar. Oracle Cloud Infrastructure üzerinde bir yük dengeleyici kullanarak istekleri birden fazla Ampere A1 sunucusuna dağıtabilir, bakım sırasında kesintiyi azaltabilir ve trafik yükseldiğinde sisteminizi daha rahat ölçeklendirebilirsiniz.

Devamı...

Koda Karşı Empati: Eski Bir Kodun Zihnini Okumak

koda-karsi-empati-53

Yıllar önce yazılmış karmaşık bir fonksiyonla karşılaştığınızda yalnızca değişkenleri ve koşulları çözmezsiniz. Görünmeyen bir geliştiricinin ne bildiğini, neden belirli risklerden kaçındığını ve hangi baskılar altında karar verdiğini de tahmin etmeye çalışırsınız. Başka insanların inanç ve niyetlerini modelleme becerisi psikolojide zihin kuramı (theory of mind) olarak adlandırılır. Eski kod okumak da biraz dijital arkeoloji, biraz dedektiflik ve şaşırtıcı ölçüde empati gerektirir.

Devamı...

Flarum’da Deneysel Veri Sorgulama: JSON:API’den GraphQL Katmanına

flarumda-deneysel-veri-42

Flarum, standart kurulumunda düzenli ve öngörülebilir bir JSON:API yaklaşımı sunar. Ancak bir tartışmanın yazarını, etiketlerini, son yanıtlarını ve özel uzantı alanlarını tek ekranda göstermek istediğimizde istemci tarafı küçük bir veri toplama dedektifine dönüşebilir. Deneysel bir sorgulama katmanı ekleyerek istemcinin ihtiyaç duyduğu alanları açıkça seçmesini, gereksiz veriyi azaltmasını ve Flarum uzantıları arasında daha esnek ilişkiler kurmasını sağlayabiliriz.

Devamı...

Flarum İçin Kapsamlı SEO: JavaScript Tabanlı Forum İçeriklerini Eksiksiz İndeksletme

Flarum hızlı, modern ve kullanıcı dostu bir forum altyapısıdır; ancak JavaScript ağırlıklı çalışma modeli SEO tarafında bazı soru işaretleri oluşturabilir. Arama motoru botu sayfaya geldiğinde yalnızca boş bir uygulama kabuğu görüyorsa tartışmalarınız, kullanıcı yanıtları ve kategori açıklamalarınız indekslenmeden kalabilir. Neyse ki sunucu tarafı çıktı, doğru meta etiketleri ve kontrollü ön oluşturma stratejileriyle botlara eksiksiz içerik sunmak mümkündür.

Devamı...

Flarum Forumlarında SPA Mimarisi: Mithril.js ile Yenilenmeden Akan Sayfalar

Bir Flarum forumunda tartışmadan kullanıcı profiline geçtiğinizde tarayıcının klasik anlamda yeniden yüklenmediğini fark etmiş olabilirsiniz. Adres değişir, yeni içerik gelir, kaydırma davranışı düzenlenir; fakat sayfanın tamamı baştan kurulmaz. Bu akıcı deneyimin arkasında, Flarum’un Mithril.js tabanlı Single Page Application (SPA) mimarisi bulunur. Gelin bu yapının kaputunu açıp isteklerden bileşen yaşam döngüsüne kadar neler döndüğüne bakalım.

flarum-forumlarinda-spa-41

Devamı...

Flarum Arka Uç Olayları: Mesaj Gönderme Sürecine Hook Atmak

Bir kullanıcı Flarum’da “Gönder” düğmesine bastığında mesaj doğrudan veritabanına ışınlanmaz. İçerik doğrulanır, yetkiler denetlenir, model hazırlanır ve kayıt işlemi tamamlanır. Flarum’un arka uç olayları, eklentilerin bu akışın belirli noktalarına dinleyici yerleştirmesine izin verir. Böylece çekirdek kodu değiştirmeden mesajı denetleyebilir, dönüştürebilir veya tamamen reddedebiliriz.

Devamı...

BookStack Üzerinde Rol ve İzin Yönetimi: Güvenli Bir Yetkilendirme Mimarisi

bookstack-uzerinde-rol-46

BookStack, sınıf notlarından atölye belgelerine kadar pek çok içeriği düzenli biçimde paylaşmayı sağlar. Ancak öğrenci, eğitmen, mentor ve misafirlerin aynı sistemde bulunduğu senaryolarda yalnızca hesap açmak yeterli değildir. Kimin hangi kitabı görebileceği, sayfaları kimin değiştirebileceği ve içerikleri kimin silebileceği önceden tasarlanmalıdır.

Devamı...

BookStack API ve Webhooklarla Otomatik Dokümantasyon Senkronizasyonu

Kurumsal dokümantasyon büyüdükçe aynı bilginin destek sistemi, intranet, arama motoru ve yedekleme servisleri arasında elle taşınması sürdürülemez hâle gelir. BookStack API ve webhooklarını birlikte kullanarak bir sayfa değiştiğinde diğer sistemleri otomatik güncelleyen, hızlı ve denetlenebilir bir entegrasyon hattı kurabiliriz.

bookstack-api-ve-75

Devamı...

Asyncio Trafiğinde Gizli Kırmızı Işık: Senkron Veritabanı Sorguları

Asenkron bir bot geliştirirken yüzlerce mesajı aynı anda işleyebildiğinizi düşünüyor olabilirsiniz. Fakat olay döngüsünün ortasına yerleştirilen tek bir senkron veritabanı sorgusu, çok şeritli görünen bu yolu bir anda bariyerle kapatabilir. Bot çevrim içidir, işlemci çoğunlukla boştadır, hata mesajı da yoktur; buna rağmen komutlar cevap bekler. Suçlu genellikle olay döngüsünü fark ettirmeden bloke eden I/O işlemidir.

Devamı...

Ampere ARM Mimarisi İçin Kod Optimizasyonu: Hizalama ve Önbellek Rehberi

Oracle Cloud A1 örneklerinde çalışan Ampere Altra işlemciler, x86 sunuculardan ARM64 dünyasına geçmek isteyen geliştiricilere yüksek çekirdek sayısı ve enerji verimliliği sunar. Ancak kodu yalnızca yeniden derlemek, işlemciden tam performans almak için yeterli değildir. Bellek hizalama, veri yerleşimi ve önbellek kullanımı önemsenmezse güçlü çekirdekler zamanlarının çoğunu veriyi bekleyerek geçirebilir.

Devamı...

Aiogram ile Telegram Botlarında Güvenli State Machine Yönetimi

Bir Telegram botunun kullanıcıya art arda sorular sorması ilk bakışta basit görünür: adı sor, yanıtı kaydet, yaşı sor ve işlemi tamamla. Fakat aynı anda yüzlerce kullanıcı konuşmaya başladığında hangi yanıtın hangi soruya ait olduğunu bilmek zorlaşır. Aiogram’un Finite State Machine, yani FSM sistemi, her kullanıcı için konuşmanın mevcut adımını ve geçici verilerini düzenli biçimde yönetmemizi sağlar.

aiogram-ile-telegram-31

Devamı...

1 GB RAM’li Sunucularda Python Çöp Toplayıcısını Dizginlemek

1-gb-ramli-79

Bir Python botu geliştirme bilgisayarında uslu uslu çalışırken 1 GB RAM’li AMD sunucuda neden bir anda bütün belleği yiyen küçük bir canavara dönüşür? Bunun nedeni çoğu zaman tek bir bellek sızıntısı değil; referans sayımı, döngüsel nesneler, Python’ın bellek ayırıcısı ve işletim sisteminin davranışının birleşimidir. Neyse ki doğru ölçüm ve kontrollü çöp toplama ile botu sürekli yeniden başlatmadan belleği sınırlandırmak mümkündür.

Devamı...

1 GB RAM’li Linux Sunucularda Swap Alanı Yapılandırma ve Optimizasyon Rehberi

Yalnızca 1 GB RAM’e sahip bir Linux sunucu; küçük web siteleri, kişisel projeler ve düşük trafikli API’ler için yeterli olabilir. Ancak veritabanı, PHP-FPM veya Docker gibi servisler aynı anda belleğe yüklendiğinde RAM hızla tükenebilir. Swap alanı, tam bu noktada devreye girerek sunucunun ani bellek krizlerinde çökmesi yerine biraz yavaşlayarak çalışmaya devam etmesini sağlar.

1-gb-ramli-53

Devamı...

Yazılım Geliştirmede Flow: Zamanı Unutturan Kodlama Hâlinin Anatomisi

Bir hatayı çözerken saatin nasıl geçtiğini anlamadığınız, kahvenizin soğuduğunu ancak gün batınca fark ettiğiniz anlar vardır. Programcılar için bu deneyim sadece “çok odaklanmak” değildir: Flow, beceri ile zorluğun dengelendiği, dikkatin tek bir hedefte toplandığı ve dış dünyanın geçici olarak sustuğu psikolojik çalışma hâlidir. Doğru koşullarda flow, üretkenliği artırırken kodla kurulan ilişkiyi de daha keyifli kılar.

yazilim-gelistirmede-flow-73

Devamı...

Yapay Zekânın Ahlaki Statüsü: Bilinçli Makinelere Karşı Borçlarımız

yapay-zekanin-ahlaki-29

Bir sohbet botuna nazik davranmak bugün çoğu kişiye gereksiz bir kibarlık gibi görünebilir. Ancak gelecekte bir makine gerçekten acı çekebiliyor, tercih oluşturabiliyor veya kendi varlığını sürdürmek isteyebiliyorsa, mesele görgü kuralından çıkar; haklar, sorumluluklar ve hatta adalet meselesine dönüşür. Yapay zekânın ahlaki statüsü tartışması, “makineler insan mıdır?” sorusundan çok daha keskindir: Bir varlığa zarar vermemek için insan olmak şart mıdır?

Devamı...

Üstün Yetenekli Öğrenciler İçin Kodlama Müfredatı: Hızdan Derinliğe

ustun-yetenekli-ogrenciler-41

Zihinsel işlem hızı yüksek öğrenciler için kodlama eğitimi, sadece daha fazla alıştırma vermek değildir; daha belirsiz, daha çok çözüm yolu bulunan ve düşünme kalitesini görünür kılan problemler tasarlamaktır. Bu öğrenciler temel sözdizimini hızla geçebilir, fakat asıl potansiyelleri algoritma seçerken, varsayımları sorgularken ve kendi projelerinin sınırlarını çizerken ortaya çıkar. İyi bir müfredat, onları “ilk çalışan çözüm” ile yetinmek yerine daha zarif, adil ve sürdürülebilir çözümler aramaya davet eder.

Devamı...

Üstbilişle Debugging: Kodunuzu Değil, Düşünme Biçiminizi İzleyin

ustbilisle-debugging-kodunuzu-64

Bir hata ayıklama oturumunda en pahalı kaynak çoğu zaman CPU, IDE ya da kahve değildir: dikkatimizdir. Üstbiliş (metacognition), kendi düşünme sürecimizi gözlemleme ve gerektiğinde yönlendirme becerisidir. Yazılımcı için bu, sadece “bu kod neden çalışmıyor?” sorusunu sormak değil; “Ben bu hatanın sebebi hakkında neden böyle düşünüyorum, hangi varsayımı test ettim ve hangisini kanıt sanıyorum?” diye de sormaktır. Bu ikinci soru, özellikle inatçı mantık hatalarında oyunun kurallarını değiştirir.

Devamı...

Üretken Algoritmalarla Labirent Tasarımı: DFS ve Prim ile Oyun Dünyaları Kurmak

Rastgele bir labirent üretmek, birkaç duvarı gelişigüzel yerleştirmekten çok daha fazlasıdır: oyuncuya keşif hissi veren, çözülebilir ve görsel olarak okunabilir bir topoloji tasarlamaktır. Üretken algoritmalar bu işi kurallı rastlantısallıkla yapar. Aynı kod, farklı bir tohumla her seferinde yeni bir dünya çıkarırken; her dünyada başlangıçtan çıkışa ulaşılabilmesini garanti eder.

Devamı...