Nginx Üzerinde Web API Servisi Çalıştırmak

Nginx(Engine X olarak telafuz ediliyor) Kazakistan Almatı doğumlu bilgisyar programcısı Igor Sysoev tarafından 2002 yılında geliştirilmeye başlanmış ve 2004 yılında ürünleşmiş açık kaynak bir web sunucusudur. İlk olarak mail.ru için mail sunucu olarak geliştirilmiş ama sonrasında çok daha geniş yetenekler kazanarak web siteleri için Apache'den çok daha hızlı çalışabilen bir sunucu haline gelmiştir. Henüz doğrulayamadığım ama genel kabul görmüş bazı performans testlerine göre muadili olan Apache ve Lightpdd gibi ürünlere göre çok yüksek cevap süreleri ve minimum bellek tüketimi sağlamaktadır. Bu açılardan oldukça popüler olduğunu ifade edebiliriz. Yük dengeleme(Load Balancing), Sana sunucu(Virtual Host), Otomatik indeksleme ve ters vekil sunucu(Reverse Proxy) gibi temel özellikleri vardır. [Daha fazla]

.Net Core Tarafında SignalR Kullanımı

Bir süre önce araştırmaya başladığım ama araya giren diğer konular(WebSockets ve CORS) nedeniyle askıda kalan SignalR ile ilgili West-World tarafında haftasonu önemli gelişmeler oldu. Öncelikle çalıştığım kaynaklardan yararlanarak aşağıdaki özet şekli oluşturdum ve bir örnek yapmaya karar verdim. [Daha fazla]

Docker Üzerinde .Net Core Uygulaması Çalıştırmak

Internet üzerinde Docker ile ilgili pek çok bilgi ve kaynağa ulaştım. Ama özellikle Asiye Yiğit'in Linkedin üzerinden paylaştığı yazılar giriş seviyesinde bilgi sahibi olmamı sağladı. Çıkarttığım notlardan yararlanarak konuyu kavramak için şekilleri tekrardan ele aldım ve kısa özet çıkarttım. Öncelikle bu notlarımı temize çekeceğim. Sonrasında Ubuntu üzerine Docker kuracağım. Ardından .Net Core 2.0 için basit bir Console uygulaması yazacağım. Son adımda ise bu uygulamayı Docker üzerinde ayağa kaldıracağım. Haydi gelin başlayalım. [Daha fazla]

GoLang - Redis ile Anlaşmak

Bir Cumartesi gecesiydi. Dışarıda hava nemli ve sıcaktı. Bir süre önce başlayan yağmurun sesi çalışma odama tatlı tatlı geliyordu. Biraz da toprak kokusu. Evde el ayak çekilmiş sakin bir ortam oluşmuştu. GoLang öğrenme çalışmaları devam ediyordu. Dili ufak ufak kavramaya başlamıştım ama örnek senaryolar işleterek ilerlemem gerektiğini de biliyordum. Derken aklıma eskiden .Net tarafında kullandığım NoSQL sistemlerinden olan Redis ile ilgili bir şeyler yapmak geldi. [Daha fazla]

GoLang - Unit Test Yazmak

Aranızda birim test(Unit Test) yazmayan hala var mı? diyerek konuya giriş yapmak istiyorum. Yazdığımız atomik fonksiyonelliklerin taşınan ortamlarda başımızı ağrıtmasını istemiyorsak birim testleri mutlaka yazmalıyız. Belki birim testler uygulama geliştirme süresini uzatabilirler ancak uzun vadede kalp krizi geçirme riskini de azaltırlar. Üstelik test senaryoları sayesinde gerçekten ne yapmak istediğimizin farkında olarak da hareket edebiliriz. Eğer test güdümlü yaklaşımla ilerliyorsak bilinçli olarak yaptırılan hata sonrası kodun çalışır hale getirilmesi ve iyileştirilmesi(Refactoring) de önemli kazanımlarımızdır. [Daha fazla]

GoLang - Google ProtoBuf Kullanımı

Veriyi kullandığımız dile göre çeşitli şekillerde ifade edebiliriz. Eğer nesne yönelimli bir dil kullanıyorsak buradaki başrol oyuncumuz sınıflar olacaktır. Verinin nesnel olarak ifade edilişinde rol olan sınıf ve benzeri tipler, çalışma zamanında taşıdıkları içerikleri ile hareket halindedir. Bu hareket aynı uygulamana alanında olabileceği gibi uygulamalar arasında da gerçekleşebilir. Veri ağ üzerinde de hareket edebilir. Verinin bu şekilde dolaşımı sırasında bazen serileştirilmesi de gerekir. Tabii bu noktada karşımıza platform bağımsızlık, okunabilirlik, genişletilebilirlik ve performans gibi kriterler çıkar. [Daha fazla]

WCF Servis Yolunda Debelenirken

Geçtiğimiz günlerde çalıştığım turuncu bankada bölümüm değişti. Yeni bölümümdeki ilk görevim ise ServiceStack yerini alabilecek bir çatının oluşturulması konusunda bir takım POC çalışmalarının yapılması. Önemli hedeflerden birisi Servislerin IIS bağımsız dinamik olarak ayağa kaldırılması ve servislere gidip gelen mesajların yakalanabildiğinin görülmesi. Epey zamandır WCF alt tarafında çalışmamıştım. Pas tuttuğumu itiraf edeyim. Tabii yazının konusu devam etmekte olan POC çalışmasının tamamını anlatmak değil ancak dinamik olarak host edilen servislere gelen ve servisten dönen mesajları nasıl yakalayabiliriz bunun bir yolunu göstermeye çalışacağım. [Daha fazla]

GoLang - Bir ORM Denemesi

Veri depolamanın en popüler yolu NoSQL veya RDBMS bazlı sistemler. 90lı yıllardan beri program yazan insanlar için de özellikle Microsoft SQL Server, Oracle ve sonrasında gelen MySQL ya da SQLite gibi yapılar da oldukça fazla oranda kullanılmaktalar. E tabii bildiğiniz üzere bu serüvenin ortalarında bir yerlerde SQL dili ve RDBMS'in yapısının, programcıların kodlama mantığına biraz ters gelişi de vuku buldu. Sonuçta SQL tarafındaki varlıkların programatik ortamda ve özellikle nesne yönelimli(Object Oriented) dünyada nasıl daha anlamlı ele alınabileceğinin yolları araştırıldı. Artık popüler olma zamanı nesne ilişkilendirmelerini sağlayan araçlardaydı. Yani Object Relational Mapping(O/RM) konusu gündemdeydi. Neredeyse bütün programlama çatılarının bu tip araçlarla yakın ilişkisi bulunmakta. Hibernate ve Entity Framework gibi en azından ülkemizde adını sıklıkla duyduğumuz araçlar dışında farklı pek çok ürün de bulunmakta. Ben de GoLang tarafında SQLite operasyonlarını incelemeye çalışırken "bir O/RM aracı var mıdır?" sorusuna cevap ararken buldum kendimi. Murat Hoca'nın kitabı, GoLang'in resmi dokümanları, Stackoverflow konuları derken gitub üzerinden sunulan GORM ile karşlılaştım. [Daha fazla]

GoLang - Static Web İçeriği ve JSON Üretimi

Bir önceki yazımızda yönlendiricileri tanımaya çalışmış ve github üzerinden sunulan httpRouter paketini kullanarak dinamik HTML içeriği ürettiğimiz bir örnek geliştirmiştik. HttpRouter paketi oldukça ilgimi çekti ve çeşitli örnekler ile konuyu pekiştirmeye çalıştım. Bu yeni örneğimizde static web içeriğini ve gelen taleplere göre JSON bazlı çıktı üretecek yönlendirme işlemlerini ele almaya çalışacağız. Başrol oyuncusu olarak yine Star Wars dünyasından bir kaç modeli kullanmaya gayret edeceğiz. Bu kez şu adresten yararlandığımı ifade edebilirim. [Daha fazla]

Python - PEP8 Uyumlu Kod Geliştirmek

Geçtiğimiz günlerde senelik kişisel gelişim döngümün ikinci yarısının ilk konusu olan Python'a başladım. Yine bir önceki yılın aynı dönemlerinde Raspberry Pi ile ilgili olarak Python üzerine bir şeyler yapmaya çalışmıştım. Döngünün bir sonraki adımında yine Python ile başbaşayım. Head First Python, A Brain Friendly Guilde isimli kitabı takip ediyorum. Her örneği tek tek yapmaya çalışıyorum. Bayram tatilinde ilgimi çeken bir konu ile karşılaştım. Yazdığımız python kodlarının PEP8(Python Enhancement Proposals) adı verilen standartlara uygun olup olmadığının tespiti. [Daha fazla]

GoLang - Yönlendiriciler (Routers)

Yönlendirme(Routers) mekanizmaları özellikle anlamlı http taleplerinde önemli bir rol oynar. Bir tarayıcının URL satırından gelen ifadelerin sunucu tarafında ele alınması sırasında işleri kolaylaştırıcı kütüphaneler de bulunmaktadır. Sevgili Murat Özalp'ın kitabında ilerlerken GO'nun built-in yönlendirme mekanizmaları dışında github üzerinden sunulan pek çok basit ve kullanışlı çatının daha olduğunu öğrendim. Tabii burada bahsedilen kütüphaneler ağırlıklı olarak web taleplerinin bir eşleştirme koduna göre uygun fonksiyonlara yönlendirilmesi ve cevaplandırılması ile alakalıydı. [Daha fazla]

GoLang - Ticker ile Periyodik İş Çalıştırma

GO dilinin en güçlü yanlarından birisi eş zamanlı programlama(Concurrent Programming) kabiliyetlerinde sunduğu performans ve kullanım kolaylıkları. Daha önceden şu yazıda Concurrency konusunu GoRoutine ve Channel kavramları üzerinden incelemeye çalışmıştım. Çalıştığım kaynaklarda ilerledikçe eş zamanlı programlama konusunda yeni şeyler de öğrendim. Bunlardan birisi time paketinden yer alan time tipi. Bu tipin NewTimer ve NewTicker isimli iki önemli fonksiyonu bulunuyor. [Daha fazla]

GoLang - Built-In JSON Desteği

JSON(JavaScriptObjectNotation) ile barışık yaşamayan programlama dili neredeyse yok gibi. Özellikle son on yıl zarfında geliştirilen veya ön plana çıkan ne kadar dil varsa JSON için çekirdekten destek sunuyor. GoLang için de benzer durum söz konusu. Nasıl mı? Aynen aşağıdaki kod parçasında görüldüğü gibi. [Daha fazla]