Razor Dünyasındaki İlk Adımlarım 17 Mayıs 2019 Burak-Selim-Senyurt Asp.Net Core Amacım, Microsoft'un Asp.Net Core MVC tarafında özellikle sayfa odaklı senaryolar için geliştirdiği Razor çatısını tanımak. Bu çatıda sayfalar doğrudan istemci taleplerini karşılayıp arada bir Controller'a uğramadan sayfa modeli _(PageModel)_ ile konuşabiliyorlar. Razor sayfaları SayfaAdı.cshtml benzeri olup kullandıkları sayfa modelleri SayfaAdi.cshtml.cs şeklinde oluşturuluyorlar. Genel hatları ile URL eşleştirmeleri aşağıdaki gibi oluyor. [Daha fazla]
Node.js, MongoDB, Fastify ve Swagger Kullanılan Web API Servisi Geliştirmek 13 Mayıs 2019 Burak-Selim-Senyurt Node.js Bu sefer eski örneklerden birisini masaya yatırmaya karar verdim. 07 numaralı örnekteki amacım MongoDB kullanan Node.Js tabanlı Web API servisi geliştirmekti. Ancak bunu yaparken web framework olarak sıklıkla kullandığım express yerine Fastify'ı denemiştim. Ayrcıa web api tarafından sunulan operayonların kullanıcı dostu bir şekilde sunulabilmesi için Swagger'dan yararlandım. Örneği geliştirdiğim WestWorld'de (Ubuntu 18.04 64bit) Node.js, npm ve MongoDB yüklü durumdaydı. Bu örneğe ait notların üstünden bir kez daha geçerken javascript, node.js, mongodb ve REST API bilgilerimi yeniden hatırlama fırsatı bulmuş oldum. [Daha fazla]
Bir .Net Core Web API Servisini Minikube Üzerinden Çalıştırmak 10 Mayıs 2019 Burak-Selim-Senyurt .Net Core Birden fazla konteyner'ın bir araya geldiği, yönetilmeleri, kolayca dağıtılmaları, küçülerek veya büyüyerek ölçeklenebilmeleri gerektiği durumlarda orkestrasyon işi çoğunlukla Kubernetes (k8s) tarafından sağlanır. Kubernetes bir konteyner kümeleme aracı olarak Google tarafından Go dili ile yazılmıştır. [Daha fazla]
Angular ile Basit Bir Görevler Listesi Uygulaması Yazmak 08 Mayıs 2019 Burak-Selim-Senyurt Angular Bu çalışmadaki temel amacım Angular ile basit bir Hello World uygulaması oluşturmak. Güncel Angular bilgim oldukça düşük olduğu için bu tip bir çalışma içerisine girdim diyebilirim. Nitekim şirketteki projelerde Vue.js kullanılıyor ancak ben Angular tarafını da öğrenmek istiyorum. Çalışmayı uzun zamandır yaptığım gibi yine WestWorld (Ubuntu 18.04, 64bit) üzerinde icra etmekteyim. [Daha fazla]
Peki ya Kong Kim? 06 Mayıs 2019 Burak-Selim-Senyurt DevOps Hali hazırda çalışmakta olduğum firmada, microservice'lerin orkestrasyonu için KONG isimli bir araç kullanılıyor. Kabaca bir API Gateway rolünü üstlenen KONG microservice'lere gelen request'lerle ilgili olarak Load Balancing, Authentication, Rate Limiting, Caching, Logging gibi cross-cutting olarak tabir edebileceğimiz yapıları hazır olarak sunuyor(muş) Web, Mobil ve IoT gibi uygulamalar geliştirirken backend servisleri çoğunlukla microservis formunda yaşamaktalar. Bunların orkestrasyonunda görev alan KONG, Lua dili ile geliştirilmiş performansı ile ön plana çıkan NGINX üzerinde koşan açık kaynaklı bir proje olmasıyla da dikkat çekiyor. [Daha fazla]
Angular ile Basit Bir Tahmin Oyunu Yazmak 01 Mayıs 2019 Burak-Selim-Senyurt Angular Angular tarafını yavaş yavaş tanımaya başlıyorum. Ancak bilgilerimi pekiştirmek için farklı öğretileri uygulamaya devam etmem gerekiyor. Bu kez temelleri basit şekilde anlamak adına bir şehir tahmin oyunu yazmaya karar verdim. Uygulama havanın rastsal durumuna göre kullanıcısına bir soru soracak ve hangi şehirde olduğunu bulmasını isteyecek. Kabaca şu aşağıdaki cümleye benzer bir düşünce ile yola çıktım. [Daha fazla]
Kimdir Bu Travis? 29 Nisan 2019 Burak-Selim-Senyurt .Net Core Continuous Integration kaliteli ve sorunsuz kod çıkartmanın önemli safhalarından birisi. DevOps kültürü için değerli olan, Continuous Deployment/Delivery ile bir anılan CI'ın uygulanmasında en temel noktalar kodun sürekli test edilebilir olması ve ne kadarının kontrol altına alındığının bilinmesi. Başarılı bir Build için bu kriterlerin metrik olarak gerekli değerlerin üzerine çıkması şart. Ancak bu metriklere uyan bir Build, dağıtıma gönderilebilir bir aday sürüm haline gelebilir. [Daha fazla]
Python Loglamada ELK Kullanımı 27 Nisan 2019 Burak-Selim-Senyurt python ELK yani Elasticsearch, Logstash ve Kibana üçlüsü. Microservis'lerde log stratejisi olarak sıklıkla kullanılıyorlar. Uygulamaların log bilgileri logstash tarafından dinlenip JSON formatına dönüştürülüyor ve Elasticsearch'e basılıyor. Elasticsearch'e alınan log'lar Kibana arayüzü ile izleniyor. Benim amacım ELK üçlüsünü WestWorld'de _(Ubuntu 18.04, 64bit)_ deneyimlemek ve loglama işini yapan uygulama tarafında basit bir Python kodunu kullanmak. WestWorld'ün uzun denemeler sonrası bozulan ekosistemini daha da dağıtmak istemediğimden Elasticsearch ve Kibana tarafı için Docker Container'larını kullanmak istiyorum. Kabaca aşağıdaki gibi bir senaryo söz konusu. [Daha fazla]
Apollo Server ile Bir GraphQL Sunucusu Yazmak 26 Nisan 2019 Burak-Selim-Senyurt Node.js Apollo Server, web, mobile gibi istemciler için GraphQL servisi sunan bir ürün olarak düşünülebilir. Otomatik API doküman desteği sunar ve herhangibir veri kaynağını kullanabilir. Yani bir veri tabanını veya bir mikroservisi ya da bir REST APIyi, GraphQL hizmeti verebilecek şekilde istemcilere açabilir. Tek başına sunucu gibi çalıştırılabileceğinden de ilgimi çekti aslında. Pek tabii Heroku gibi ortamlarca Serverless modda da kullanılabiliyor. [Daha fazla]
gRPC Nedir, Nasıl Uygulanır? 24 Nisan 2019 Burak-Selim-Senyurt Node.js Bu yazımızda protobuf tabanlı çalışan Google Remote Procedure Call(gRPC) protokolünü inclemeye çalışacağız. Özellikle dağıtık sistemlerde taraflar arası haberleşmede TCP bazlı binary serileştirm ilkelerine dayanan bu protokol REST'in standart iletişim teknikleri yerine daha çok tercih edilmeye başlanmış görünüyor. Genel amaç binary serileştirmenin performans avantajını kullanarak Remote Procedure Call tekniğini microservice sistemlerinde uygulayabilmek. Bizde bu konuyu Node.js tabanlı bir örnekle incelemeye çalışacağız. [Daha fazla]
HTTP/2 Server Push Nasıl Bir Şeydir? 09 Nisan 2019 Burak-Selim-Senyurt Node.js HTTP/2 protokolü ile gelen önemli özelliklerden birisi de, tek bir TCP/IP bağlantısında sunucudan istemciye birden fazla dosya içeriğinin gönderilebilmesidir. Yazının ilerleyen kısımlarında kaynakçada işlenen node.js örneğini ele alacak ve çalışma zamanındaki işleyişleri irdelemeye çalışacağız. [Daha fazla]
Json, Protobuf ve MessagePack Serileştirme Performansları 01 Nisan 2019 Burak-Selim-Senyurt .Net Core Bu yazımızda bir Entity listesi için JSON, Protobuf ve MessagePack tipinde gerçekleştirilecek serileştirme işlemlerinin hız ve alan büyüklüklükleri açısından karşılaştırmalarını yapmaya çalışacağız. Bunun için BenchmarkDotnet paketinden yardım alacağız. [Daha fazla]
Servis Çıktılarını Plotly.js ile Grafikleştirmek 19 Mart 2019 Burak-Selim-Senyurt Node.js West-World'de eğlence tüm hızı ile devam ediyor. Bu geceki "Easy Graphics of new Era" isimli partinin onur konuğu ise açık kaynak javascript grafik kütüphanesi Plotly. Oldukça renkli bir kişiliğe sahip olan plotly github şehrinin de en sevilen karakterlerinden birisi. Kendisini West-World'e getirense en yakın arkadaşları D3.js ve WebGL. Ona West-World sakinleri adına bir soru yönelttik ve izleyicilerini nasıl büyülediğini sorduk. Enerjik ve içten uslübuyla "dans figürlerimi çalışırken çoğunlukla JSON ve CSV melodilerinden ilham alıyorum. Kareografide uzun zamandarı Mr. jQuery ile ilerliyorum. Ayrıca Node'un bana sağladığı içsel motivasyondan bahsetmeden geçemem. Hepsi içimde harika bir karmanın oluşmasına neden oluyor. Sonuç gülümseyen ve ritmime uymaya çalışan insanların ortaya çıkarttığı müthiş enerji" diyor... [Daha fazla]
Scala ile Tanışmak 01 Mart 2019 Burak-Selim-Senyurt Scala Bir çok programlama dili var. Scala'nın dikkatimi çekmesindeki en büyük sebepse daha önceden çalıştığım turuncu bankanın merkezde servis odaklı süreçlerin yönetimi için backend tarafında kullanıyor olması. Bunu bir konuşma sırasında fark etmiştim ancak inceleme fırsatını henüz bulamamıştım. Derken zaman geçti, hayatlar değişti, teknolojiler farklılaştı ve araştırılacak konu listesinde sıra ona geldi. Bir bakalım neymiş bu Scala dedikleri programlama dili. [Daha fazla]
EF Core : Testlerde InMemory Context Kullanımı 12 Şubat 2019 Burak-Selim-Senyurt .Net Core Entity Framework ile çalışırken test süreçlerini zorlaştırabilecek bağımlılıklardan birisi de uzak veritabanı bağlantısıdır. Genellikle bir SQL sunucusu ile çalışıldığından connectionString bilgisinde belirtilen adrese test ortamında da gidilebiliyor olması beklenir. Ancak bu şu anki durumda şart değil. EF context'ini bellekte çalışacak şekilde o anki process içerisinde de kullanabiliriz. Bunun için... [Daha fazla]
Code Coverage 06 Şubat 2019 Burak-Selim-Senyurt .Net Core Bu yazımızda .Net Core tarafında geliştireceğimiz kod parçaları için Code Coverage değerlerine nasıl bakabileceğimizi inceleme çalışıyoruz. Bunu yaparken Coverlet kütüphanesi ve SonarQube'ün docker üzerinde çalıştıracağımız versiyonundan yararlanıyoruz. Sonarscanner aracını da işin içerisine katarak test değerlerini SonarQube'e göndermeyi deniyoruz. [Daha fazla]
Bilmiyordum, Öğrendim : SQL Merge 13 Ocak 2019 Burak-Selim-Senyurt T SQL Gün geçmiyor ki çevremdeki insanlardan yeni bir şey daha öğrenmeyeyim. İş yerindeki sıkıcı sayılabilecek SQL sorguları arasında gezinirken takım arkadaşım Mustafa'nın bir önerisi üzerine SQL Merge komutunu araştırmaya başladım. 2008den beri var olan benim bihaber olduğum bu komutu öğrenirken keyifli anlar yaşadım. Normalde çok kötü bir SQLciyimdir ama Merge komutunu uygulamalı olarak denedikten sonra şirketteki o kallavi sorgunun hem daha da hızlandığını hem de daha okunur hale geldiğini gördüm. Sonunda konuyu kaleme alıp paylaşmanın iyi olacağını fark ettim. Haydi gelin başlayalım. [Daha fazla]
Node.js - Asenkron Talep Karşılama 10 Ocak 2019 Burak-Selim-Senyurt Node.js Bu yazımızda Node.js ile geliştirilmiş sunucu uygulamalarında async kullanımını inceleyeceğiz. Amacımız istemci talebi sonrası arka planda paralel servis çağrıları gerçekleştirmek ve ayrıca bu süreç sırasında sunucuya gelecek diğer isteklerinde değerlendirilebileceğini görmek. Bunlara ilaveten ön tarafta konuşlandıracağımız ana servisin bir yönlendirici(router) gibi kullanılabileceğini öğreneceğiz. Haydi gelin hiç vakit kaybetmeden serüvenimize başlayalım. Konuyu basit bir şekilde anlayabilmek adına örnek bir senaryo üzerinden gitmekte yarar var... [Daha fazla]
Teknik Borçları(Technical Debt) Azaltmak 04 Ocak 2019 Burak-Selim-Senyurt DevOps Teknik borçlar pek çoğumuzun bilmeden de olsa gelecek programcılara bıraktığı sorunlar. Bu sorunlar sebebiyle zamanla kalitesi bozulan ürünler ortaya çıkıyor. Teknik borçların temizlenmesi mi, müşterinin yeni isteklerinin karşılanması mı derken ürün üzerinde çalışan programcıları eskitmeye devam edebiliyor. Sonunda legacy olarak tanımlanan, kimsenin ellemek istemediği ama yaşamını devam ettirmek zorunda olan devasa projeler oluşuyor. Bunun önüne geçmek sanıldığı kadar zor değil aslında. En başından test odaklı yaklaşımlarla ilerlemek sadece bir başlangıç. [Daha fazla]
Dependency Injection'ın TDD'deki Yeri 21 Aralık 2018 Burak-Selim-Senyurt C# Test odaklı yazılım geliştirirken özellikle entegrasyon testlerinde(Integration Tests) yaşadığımız önemli sorunlardan birisi de test edilen nesnelerin diğer nesnelerle olan bağımlılıklarıdır. Söz gelimi test edilmek istenen birimin bağımlılıkları arasında servis çağrıları, veritabanı operasyonları veya uzak sunucu dosya hareketleri gibi işlemler söz konusuysa otomatik olarak çalıştırılan birim testlerinin CI sürecini sekteye uğratmaması için bir şeyler yapılması gerekebilir. Biliyorum çok karışık bir paragraf ile işe başladım. O yüzden problemi ortaya koymak adına aşağıdaki kod parçalarını göz önüne alalım. [Daha fazla]
Daha Verimli Konfigürasyon Yönetimi (.Net Core) 10 Aralık 2018 Burak-Selim-Senyurt .Net Core .Net core'da konfigurasyon bilgileri varsayılan olarak json formatlı olarak tutulur(appsettings.json) Burada çalışma zamanına özgü varsayılan parametreler dışında özel konfigurasyon içeriklerini tutmak da mümkündür. Hatta istersek birden fazla konfigurasyon dosyasını da bir arada kullanabiliriz. Her ikisini uygulamak da oldukça kolay aslında. Nasıl mı? Gelin birlikte bakalım. [Daha fazla]
Electron ile Cross-Platform Uygulama Geliştirmek 30 Kasım 2018 Burak-Selim-Senyurt .Net Core Haftasonu kendimi bir şekilde ilginç bir maceranın içerisinde buldum. West-World'de Windows Forms benzeri bir uygulama yazabileceğimi ve bunu hem macos hem de windows platformunda yapabileceğimi öğrendim. Bunun için HTML, Node.js ve CSS yeterli. İşin aslı electron isimli açık kaynak geliştirilen ürün sayesinde platform bağımsız masaüstü uygulamaları geliştirmek mümkünmüş. Hızlı bir deneyim için interneti taramaya ve basit bir "Hello World" yazmaya karar verdim. Amacım West-World(Ubuntu) üzerinde geliştireceğim masaüstü uygulamasını hem macox hem de windows üzerinde çalıştırabilmekti... [Daha fazla]
Visual Studio Code İçinde Unit Test Yazmak 27 Kasım 2018 Burak-Selim-Senyurt .Net Core Bu yazımızda Visual Studio Code içerisinde Unit Test barındıran bir çözümün nasıl geliştirilebileceğini inceliyoruz. İdeal klasör yapısını oluşturuyor, MSTest çatısını kullanarak çok basit bir test vakasını işletmeye çalışıyoruz. Amaçlarımızdan birisi de Visual Studio Code arabirimi dışına çıkmadan proje iskeletini oluşturmak ve testleri kurgulayarak deneyimlemek. [Daha fazla]
Bir Web API Servisi Nasıl Hata Döndürmeli ? 19 Kasım 2018 Burak-Selim-Senyurt .Net Core Bu yazımızda IETF(Internet Engineering Task Force) ekibinin koyduğu önemli standartlardan birisi olan "Problem Details for HTTP APIs" konusunu incelemeye çalışıyoruz. Bu bağlamda RFC 7807 maddesinde belirtilen sonuçları elde edebilmek için Kristian Hellang'in geliştirdiği Hellang.Middleware.ProblemDetails nuget paketinden yararlanıyoruz. [Daha fazla]
Docker SQL Server Kullanımı 09 Kasım 2018 Burak-Selim-Senyurt .Net Core West-World'e daha önceden Microsoft SQL Server sürümünü kurmuş ve basit denemeler yapmıştık. Esasında bu şart değildi. SQL Server'ın Linux platformu için olan Docker imajını da kullanabilirdik. İşte bu yazımızda docker imajını baz alarak, Entity Framework çatısının kullanan basit bir Web API servisini nasıl geliştirebileceğimizi öğrenmeye çalışacağız. [Daha fazla]