Category

Azure

Keeping Specs and Shared Understanding Aligned at AI Speed

With AI-assisted engineering, we engineers are moving faster and changes are getting shipped faster. This is also true for my own daily work. But I must say, the work surrounding those changes doesn’t really get smaller. I have always believed that complexity never goes away, it just moves to a different place. Because of this […]

Read More

Building an AI Agent in .NET: Deterministic Routing and Intelligent Search with Microsoft Agent Framework

Nowadays wherever I look, everyone talks about AI coding agents, agentic systems or LLM powered applications and so on. It has been almost a year that I have been working on different domains where we integrate LLMs into our applications, as well as getting my hands dirtier by integrating AI assisted coding practices into our […]

Read More

DevEx Series 03: Laying the Azure Focused Platform Foundation for an IDP with ASO and KRO

In the first two parts of this DevEx series, I tried to show how golden paths in Backstage can enable developer self‑service without chaos and how extending the catalog into copilots with MCP servers transforms discoverability into a conversational experience. Both of these steps were about reducing friction and giving developers paved roads to move […]

Read More

Event-Driven Architecture’larda Conditional Claim-Check Pattern’ı ile Event Boyut Sınırlarının Üstesinden Gelmek

Günümüz teknoloji çağında, geliştirdiğimiz uygulama çözümlerini olabildiğince ölçeklenebilir, dayanıklı ve esnek hale getirebilmek için genellikle event-driven architecture temelli yapılar üzerinde inşa ediyoruz. Event-driven architecture her ne kadar kulağa hoş gelse de beraberinde birçok karmaşıklık ve limitasyonlar da getirmektedir. Daha önceki makalelerim de dayanıklı ve esnek bir microservice altyapısı inşaa edebilmek için ne gibi best practice’leri […]

Read More

Containerized Uygulamaların Supply Chain’ini Güvence Altına Alarak Güvenlik Risklerini Azaltma (OPA Gatekeeper ve Ratify ile Otomatikleştirilmiş Politika Uygulanması) – Bölüm 2

Makalenin ilk bölümünde, Software Supply Chain güvenliğinin öneminden ve containerized uygulamaların güvenlik risklerini azaltabilmek için SDLC süreçleri boyunca alınabilecek önlemlerden bahsetmiştik. Bu kapsamda, shifting-left yaklaşımının öneminden, yani çeşitli güvenlik unsurlarının mümkün olduğunca SDLC süreçlerinin erken aşamalarına entegre edilmesinin faydalarından ve software supply chain içerisinde güvenilirlik, bütünlük ve güvenlik sağlamak amacıyla alabileceğimiz önlemlerden bahsetmiştik. Eğer makalenin ilk […]

Read More

Containerized Uygulamaların Supply Chain’ini Güvence Altına Alarak Güvenlik Risklerini Azaltma (Güvenlik Taraması, SBOM’lar, Artifact’lerin İmzalanması ve Doğrulanması) – Bölüm 1

Bildiğimiz gibi modern yazılım geliştirme ortamında containerization’ın benimsenmesi, uygulamaların oluşturulma ve dağıtılma şekillerini oldukça değiştirdi. Container’ların lightweight ve self-contained birimler olması, uygulamalarımızı farklı ortamlar arasında consistent bir şekilde kolayca taşıyabilme ve hızlı bir şekilde scale edebilme gibi bir çok farklı anlamda avantajlar ve esneklikler sağlamaktadır. Ayrıca container’lar scalable microservice architecture’ları için de, en önemli building […]

Read More

Identity & Access Management İşlemlerini Azure AD B2C ile .NET Ortamında Gerçekleştirmek

Bildiğimiz gibi bir ürün geliştirirken olabildiğince farklı cloud çözümlerinden faydalanmak, harcanacak zaman ve karmaşıklığın yanı sıra, bizlerin farklı yönetimsel masraflardan da olabildiğince kaçınabilmesini sağlamaktadır. Günümüzde bir çoğumuz cloud-native uygulamalar geliştiriyor veya cloud’a migration’lar gerçekleştiriyor. Bu süreçlerde ise çeşitli masrafları minimize edebilmek için cloud sağlayıcıların farklı PaaS, SaaS, Serverless gibi çözümlerinden de olabildiğince yararlanmaya çalışıyoruz. Azure […]

Read More

Azure Service Bus Kullanarak Microservice’lerde Event’ler Nasıl Sıralanır (FIFO Consumers)

Bazen bazı senaryolar vardır karmaşıklığını veya eksi yanlarını bildiğimiz halde implemente etmekten kaçamadığımız veya implemente etme zorunda kaldığımız. Distributed ortamlarda birbirlerine bağlı bazı event’leri/message’ları belirli bir sıra (publish edildikleri) içerisinde işleyebilmek de bence bunlardan birisi. Örneğin batch processing yapıyor ve her bir item’ı belirli bir sıra içerisinde işlememiz gerekiyor olabilir veya bir e-ticaret firmasının fulfillment […]

Read More

Dapr ve .NET Kullanarak Minimum Efor ile Microservice’ler Geliştirmek – 02 (Azure Container Apps)

Bir önceki makale serisinde Dapr projesinden ve faydalarından bahsedip, local ortamda self-hosted mode olarak .NET 6 ile iki adet örnek microservice geliştirmiştik. (Eğer ilk seriyi okumadı iseniz, buradan ulaşabilirsiniz.) Bu makale kapsamında ise bir önceki makalede geliştirmiş olduğumuz örnek ShoppingCart ve Recommendation microservice’lerinin default olan Dapr component’lerini Azure resource’ları ile değiştirerek, Azure Container Apps üzerine […]

Read More

Dapr ve .NET Kullanarak Minimum Efor ile Microservice’ler Geliştirmek – 01

Bildiğimiz gibi her geçen gün teknoloji ve alışkanlıklarımız sürekli değişmekte. Özellikle pandemi sürecinden sonra dijitalleşmeye ve teknolojiye olan eğilim oldukça artmış durumda. Durum böyleyken bizlerde geliştiriciler olarak bu değişimlere ve isteklere adapte olabilmek adına, geliştirdiğimiz uygulamaların mümkün olabildiğince portable ve scalable yapıda olmalarına dikkat etmekteyiz. Maalesef uygulamalarımızı geliştirirken sadece business fonksiyonalitelerine odaklanabilmemizin yanı sıra, uygulamalarımızın […]

Read More

.NET Uygulamalarının Kubernetes (Windows&Linux Containers) İçerisinden Memory Dump’larını Almak

Bildiğimiz gibi memory leak’lerden veya bilinmeyen sebeplerden dolayı crash veya hang olan uygulamalarımızı debug edebilmenin en iyi yolu, dump dosyalarını incelemekten geçmektedir. En azından benim tecrübelerim genelde bu yönde oldu. Bizler ise developer’lar olarak, en azından uygulamalarımızın neden beklenmedik şekilde davrandıklarını anlayabilecek kadar dump analizlerini yapabiliyor olmamız gerekmektedir. Daha önce benzer konular üzerinde farklı makaleler […]

Read More

Azure Function, Logic Apps ve Computer Vision API Kullanarak Azure Üzerinde OCR Worflow’u Oluşturma

Sanırım hepimiz günümüzde dijital dönüşümün öneminin ve dijitalleşme ile elde edebileceğimiz faydaların farkındayızdır. Bildiğimiz üzere bu kapsamda bir çok kuruluş da dijital dönüşüm yolunda farklı atılımlar gerçekleştirmektedirler. Fakat bazen bu dönüşüm süreçleri içerisinde de farklı zorluklarla karşılaşabilmekteyiz. Örneğin data‘nın dijitalleştirilmesi süreçlerinde insan gücü gerektiren bazı durumların bulunması gibi. Örneğin tedarikçilerden aldığımız faturalar veya teknik bakım […]

Read More

Azure Kubernetes Service üzerinde Azure Files Kullanarak Persistent Volume’ler ile Çalışmak

Cloud-native olarak geliştirdiğimiz uygulamalarımızın zaman zaman bir storage üzerinde bir takım data’lara erişebilmeleri, paylaşabilmeleri veya depolayabilmeleri gibi farklı ihtiyaçları olabilmektedir. Bildiğimiz gibi containerize olarak Kubernetes üzerinde host ettiğimiz uygulamalarımız, doğası gereği ephemeral(kısa ömürlü) ve stateless‘dır. Yani persistent bir storage çözümü kullanmadan container içerisinde depolayacağımız herhangi bir data, container silinene kadar hayatta kalacaktır. Bu makale kapsamında […]

Read More

.NET Uygulamalarında Code Coverage Metriklerini Hesaplama ve CI Süreçlerine Dahil Etmek

Code coverage metriği, projemizin sağlıklı ve güvenilir olduğu ve ayrıca değişimlere karşı ne derece hızlı ayak uydurabileceğimizin önemli bir göstergesidir. Code coverage temelinde, yazmış olduğumuz kod satırlarının ne kadarının test yazılarak doğrulandığını belirlemektedir. Tabii ki burada sadece code coverage metriğini arttırabilmek için yazabileceğimiz happy-path test senaryolarından bahsetmiyoruz. Çünkü code coverage metriğinin %100 olması, tüm edge […]

Read More

Kubernetes Job Kullanarak SQL Migration İşlemlerini Gerçekleştirmek

Teknolojinin sürekli geliştiği ve değiştiği gibi, içerisinde çalıştığımız uygulamanın database schema’sı da her yeni implemente ettiğimiz özellik ile değişebilmekte. Dolayısıyla domain model’lerinde gerçekleştirilecek olan değişikliklerin, database schema’sı üzerinde de uygulanabilmesi için bir migration stratejisi izlememiz gerekmektedir. Bu makale kapsamında ise uygulamalarımızı kubernetes ortamına deploy ederken, migration işlemlerini kubernetes jobs kullanarak nasıl gerçekleştirebileceğimizi göstermeye çalışacağım. Gereksinimler […]

Read More

Improving Repeated Access with Cache-Aside Pattern

Temiz bir kod yazabilmenin yanı sıra, sorumlu bir developer olarak uygulamamızın performanslı bir şekilde çalışabilmesini sağlamak da bir o kadar önemlidir. Bildiğimiz gibi kullanıcılara daha iyi bir deneyim sağlatabilmemiz için olabildiğince hızlı sonuçlar dönüyor olmalıyız. Tahmin edebileceğimiz gibi hızlıca uygulayabileceğimiz en temel performans iyileştirmelerinden bir tanesi, tekrarlanan erişimler için bir cache implementasyonu. Her ne kadar […]

Read More