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]
Eğlenceli SignalR 01 Kasım 2018 Burak-Selim-Senyurt .Net Core Bu yazımızda, Chart.js kütüphanesini kullanarak, tarayıcı üzerindeki bir grafiğin SignalR üzerinden nasıl beslenebileceğini incelemeye çalışıyoruz. Bunu yaparken Chart.js'in nefis özelliklerini kullacağız ama daha da önemlisi verilerin belirli periyotlarla istemci tarafına akmasını ve grafik üzerinden anlık(SignalR kullanmamızın bir sebebidir) olarak izlenebilmesini sağlayacağız. [Daha fazla]
Elasticsearch'ü West-World'e Kurdum 25 Ekim 2018 Burak-Selim-Senyurt Elasticsearch Elasticsearch bir veritabanı üzerindeki google arama motoru olarak düşünülebilir. Özellikle arama ve raporlama konularında hız avantajı sağlayan açık kaynak bu ürünün kurulumu da kullanımı da oldukça kolay. Bu yazımızda Ubuntu 16.04 üzerine Elasticsearch'ü kurmaya çalışacağız. Kurulum sonrası Postman'den yararlanarak RESTful bazlı API servislerini deneyeceğiz. Ardından Serilog'a el atacağız ve bir Web API üzerinden Elasticsearch'e nasıl log atabileceğimizi göreceğiz. Son olarak bu log'ları görsel bir arabirimden izleyebilmek adına Kibana ürününü kullanacağız. Kibana'yı ve Elasticsearch'ü Docker imajları üzerinden de deneyimleyeceğiz. [Daha fazla]
.Net Core Web API Uygulamalarını Windows Service Üstünden Sunmak 17 Ekim 2018 Burak-Selim-Senyurt .Net Core .Net Core 2.1 sürümü ile birlikte bazı yeni özellikler geldi. Bunlardan birisi de Asp.Net Core uygulamalarını Windows Service üzerinden sunabilmek. Söz konusu yeniliği inceleyeceğimiz bu yazımızda bir Web API hizmetini host etmeyi öğreneceğiz. [Daha fazla]
ITIL'ın Farkına Vardım 06 Ekim 2018 Burak-Selim-Senyurt Dokuman Seksenli yıllarda İngilizlerin Central Computer and Telecommunications Agency isimli departmanı, IT hizmetlerindeki sıkıntıların tespiti ve doğru yolun bulunması amacıyla ITIL olarak kısaltılan bir konseptin temellerini ortaya koymuş. Tam olarak açılımı Information Technology Infrastructure Library şeklinde. Ona kütüphane denmesinin makul bir sebebi de süreçlere ait pratikleri içeren beş kitaptan oluşması. O yıllarda temelleri atılan ITIL zaman içerisinde yeni versiyonları ile birlikte gelişmeye devam etmiş. Bugün pek çok IT firmasının(ki sadece IT ile sınırlamak doğru değil nitekim içerisinde hizmet geçen her alanda ele alınabilir) uygulamaya çalıştığı bir, bir…Şey…Immm…Bir ne? [Daha fazla]
Satranç ve ELO Puanlama Sistemi 01 Ekim 2018 Burak-Selim-Senyurt Satranç oynamayalı yıllar olmuştur. Lise yıllarında okurken kadim dostum Burak Gürkan ile karşılıklı maçlar yapardık. Kerata çok iyiydi. Çoğunlukla kaybederdim. Yine de hoşuma giden bir oyundu. Herhalde dostlar arasında yapılabilecek en güzel aktivitelerden birisidir. Sebat etmek, stratejik düşünmek, saygı göstermek, kabullenmek, odaklanmak. Faydaları saymakla bitmez. En faal oynadığımız yıllarsa 1990 ile 1993 arasındaydı. Burak ailesi ile birlikte Kadıköy'ün sakin sokaklarından birisinde otururdu. Sabahçı olduğumuz için öğleden sonraları zaman zaman evlerine giderdim. Annesi Nimet Hanım'ın lezzetli sütlü kahvesi yanında mutlaka tahinli çörek de olurdu. Burağın odası arka bahçeye doğru bakardı. Herhalde hayatımın orada geçen hiç bir dakikasında tek çıt dahi duymamışımdır. O günleri özlediğimi itiraf edebilirim. Çok fazla ve hatta neredeyse hiç problemimiz yoktu(Üniversite sınavı, okul dersleri ve kızlardan başka) [Daha fazla]
Basit Bir JsonConverter Uyarlaması 22 Eylül 2018 Burak-Selim-Senyurt .Net Core Elimizde aynı anlamları taşıyan ama key adları farklı olan JSON içerikleri bulunmakta. Farklı paketleri kullanan servislerden dönen farklı cevaplar oluşuyor. İstemci tarafı aynı anlamdaki bu farklı çıktılar için farklı sınıflar tasarlamak istemiyor. Acaba ters serileştirme işlemi sırasında araya girip farklı key değerlerini aynı nesne örneğinin özelliklerine atamamız mümkün olabilir mi? JsonConverter sınıfını kullanarak konuya çözüm üretmeye çalışıyoruz. [Daha fazla]
Web API'leri Swagger ile Zenginleştirelim 21 Eylül 2018 Burak-Selim-Senyurt Asp.Net Core Bu yazımızda Web API servislerimizi OpenAPI Specification'da belirtilen dokümanlaştırma standartlarına göre nasıl zenginleştirebileceğimizi incelemeye çalışıyoruz. Web api servisinin ne işe yaradığını gösteren ve sunduğu operasyonları hızlıca test edebilmemize olanak tanıyan Swagger arabirimini de deneyimliyoruz. [Daha fazla]
West-World'ün RabbitMQ ile Tanışmasının Zamanı Gelmişti 10 Eylül 2018 Burak-Selim-Senyurt .Net Core Küçük bir çocukken, soğuk bir kış gününde ablamın elini tutmuş Kadıköy'deki büyük postaneye doğru yol aldığımı hatırlarım. O yaz mektuplaşmak için adresini aldığım arkadaşıma yazdıklarımı göndermek istiyordum. Hayal mayal hatırladığım anlar. İlkokul zamanlarından kalma. Üzerinden onca yıl geçmiş durumda. Gönderen belli, alıcı belli, mektup ortada, pulları üstünde, yazılanlar içinde, taşıyıcı PTT her zaman ki gibi hizmetimizde. Tabii postaneye gelen bir çok mektup daha var. Hepsinin göndericisi ve gideceği adresler de belli...Diyerek girizgahımızı yapıyoruz. Konumuz Linux üzerine RabbitMQ kurmak ve .Net Core ile onu kullanmak. [Daha fazla]
Azure Üzerinde Redis Cache Kullanımı 01 Eylül 2018 Burak-Selim-Senyurt Azure Bu yazımızda Azure üzerindeki minik maceralarımıza devam ediyoruz. Amacımız bir Redis Cache hizmetini devreye almak ve basit bir .Net Core istemcisinden yararlanarak kendisiyle konuşmak. Önce portaldan yararlanarak bir Redis Cache hizmetini devreye alacağız. Ardından StackExchange.Redis paketini kullanıp istemci tarafını geliştireceğiz. Redis'e ECHO komutu ile mesaj gönderecek ve kullanıcı tanımlı nesne örneklerini de nasıl kullanacağımız irdeleyeceğiz. Haydi gelin başlayalım. [Daha fazla]
Linkedin Bağlantılarını Elde Etmek 18 Ağustos 2018 Burak-Selim-Senyurt .Net Core Linkedin üzerindeki bağlantılarınızın listesini elde etmek ister misiniz? Aslında bu sanıldığı kadar kolay değil ancak nasıl yapıldığını öğrenmeye çalışırken OAuth 2.0 standartları ile kendimizi doğrulatmam��z gerekiyor. Kabaca pek çok platformun yaptığı gibi bir yol izlememiz gerektiğini söyleyebiliriz. Gelin maceramıza başlayalım ve OAuth 2.0 tabanlı bir sistemin nasıl işlediğini anlamaya çalışalım. [Daha fazla]
Simple Stack ile Bir Başka TDD Pratiği 09 Ağustos 2018 Burak-Selim-Senyurt CodeKata Code Kata pratiklerine ara vermeden devam etmekte yarar var. Bu videomuzda da Test Driven Development odaklı bir pratiği icra etmeye çalışıyoruz. Çok basit ve ilkel bir Stack sınıfını yazmaya çalışacağız. Bildiğiniz üzere Stack veri yapısı Last In First Out(LIFO) ilkesine göre çalışan bir nesne modeli. Bu code kata senaryomuz için dört farklı test senaryomuz olacak. Stack'e son giren nesnenin çekilmesi, Stack'e birden fazla nesnenin atılıp eklenme sıralarına göre çekilmeleri, boş bir stack oluşturulması halinde null döndürülmesi ve sonr olarak null bir öğenin Stack'e eklenememesi. Bu kez dinlendirici Study Soundtrack listesi eşliğinde ilerliyoruz. [Daha fazla]
FizzBuzz ile Basit Bir TDD Pratiği 09 Ağustos 2018 Burak-Selim-Senyurt CodeKata DevOps felsefesinin içerdiği önemli pratiklerden birisi de test süreçleridir ve bu noktada TDD(Test Driven Development) büyük önem taşımaktadır. TDD, temel olarak Unit Tests, Integration Tests, User Acceptance Tests gibi pratikleri içerir ve en azından bunların DevOps süreçlerine dahil edilmesi beklenir. Ancak TDD ve DevOps söz konusu olunca daha bir çok test tekniği vardır. Smoke Testing, Penetration Testing, Stress Testing, A/B testing, Fuzz Testing ve Boundary Testing gibi. [Daha fazla]
Nasıl bir Web API Tasarımı? 06 Ağustos 2018 Burak-Selim-Senyurt REST Web API'ler dahası RESTful API türünden servisler çok uzun zamandır hayatımızda. Benim de gerek blog yazılarımdaki örnekler olsun gerek iş yerinde kullandıklarımız olsun sürekli haşırneşir olduğum enstrümanlar. Ancak son zamanlarda okuduğum kaynaklardan sonra bir çok isimlendirme hatası yaptığımı fark ettim. Nedir bu işin doğru yolu diyerek ortak standartları araştırmaya başladım. Elde ettiğim bir takım sonuçlar oldu. Bu sonuçlardan basit bir çizelge de hazırladım. Öncesinde bir kaç kısa bilgi verelim. [Daha fazla]
Post Görünümlü Put 02 Ağustos 2018 Burak-Selim-Senyurt .Net Core Hiç bir REST servisine Post talebi gönderip aslında onun Put işlemini yapmasını istediğiniz oldu mu? Bir kaç değişik sebepten dolayı tasarlayacağınız REST tabanlı servisin bu tip senaryolara hizmet verebilir olmasını isteyebilirsiniz. Haydi gelin bir .Net Core Web API için bunu nasıl yapacağımıza bakalım. [Daha fazla]
Blockchain Eliptik Eğri Şifreleme Algoritması 24 Temmuz 2018 Burak-Selim-Senyurt Algoritma Blockchain ve onu baz alarak günümüzün popüler ilgi alanlarından birisi haline gelen BitCoin, kriptolamada Elliptic Curve Cryptography(ECC) olarak adlandırılan bir algoritmayı kullanmakta. Bu yazımızda temel matematik bilgilerimizi işin içerisine katıp, Fermat'nın Little Therorem'ine uğrayacak, Modüler aritmetik'ten yararlanıp, grup kavramı ve eliptik eğriler üzerinden geçerek algoritmanın temel dayanak noktalarını öğrenmeye çalışacağız. [Daha fazla]
Google Cloud Pub/Sub Service Macerası 20 Temmuz 2018 Burak-Selim-Senyurt .Net Core, GCP Bu makalemizde Google Cloud Platform'un önemli servislerinden birisi olan Pub/Sub API'yi incelemeye çalışıyoruz. gCloud ile komut satırından topic oluşturup, buna abone oluyor ve mesaj yayınlayıp, yayınlanan mesajı okuyoruz. Ardından .Net Core ile geliştirdiğimiz uygulamada Google.Cloud.PubSub.V1 paketini kullanarak mesaj yayınlama ve yayınlanan mesajları okuma işlemlerini nasıl gerçekleştirebileceğimize bakıyoruz. [Daha fazla]