Dağıtık Uygulamada Büyük Veri Okumak
2020 senesi içerisinde Inomera‘da Telekom sektörü için geliştirdiğimiz devasa bir projeyi başarıyla canlıya aldık. Oldukça güncel teknolojiler kullandığımız ve mikroservis mimarisi ile geliştirdiğimiz bu sistem Kubernetes ortamı üzerinde çalışmakta. Bu yazıda bu sistemde yaklaşık 22 milyon satır kullanıcı verisini veritabanından okuyup dağıtık bir cache Map’ine dolduran küçük bir mikroserviste uyguladığımız dağıtık veri okuma yöntemini anlatmaya çalışacağım.
Daha Tatlı Bir Git Log
git log
, Git versiyon kontrol sisteminde oluşturulmuş
commit geçmişini tarihsel olarak sondan başa doğru sırasıyla
konsola yazan bir Git komutudur.
Tek başına kullanıldığında oldukça sıkıcı bir görünüme sahip olan
git log
komutunu birkaç parametre ile daha tatlı bir hale getirebiliyoruz.
Git Commit Mesajı Nasıl Yazılmalı
Kaynak kodda yaptığımız bir değişikliği versiyon kontrol sistemine kaydederken yapmamız gereken en önemli maddelerden bir tanesi bu değişikliği iyi yazılmış bir mesaj ile açıklamaktır. Peki iyi bir commit mesajını diğerlerinden ayıran özellikler nelerdir? Bu yazıda dünya genelinde kabul görmüş bazı standartları göreceğiz.
Thread Local Nedir?
Bu yazıda Java dünyasında sıkça kullanıldığına
veya bahsedildiğine şahit olduğumuz ThreadLocal
sınıfını inceleyeceğiz.
ThreadLocal
sınıfı belirlediğimiz nesnelerin sadece aynı thread tarafından erişilebilir olmasını sağlar.
Bu sayede thread safe olmayan nesneleri thread safe kullanmış oluruz.
Bir ThreadLocal
nesnesi içerisine yazdığımız nesne,
ThreadLocal
‘e yazan thread tarafından çalıştırılan tüm methodlar tarafından okunabilir olacaktır.
Gelin bu güçlü aracı avantajları ve dezavantajları ile inceleyelim.
Slf4j: MDC Kullanarak Log Takibini Kolaylaştırma
Bu yazıda birden fazla sınıfın log yazdığı bir log dosyasında spesifik bir HTTP isteğine ait logları nasıl buluruz sorusuna kolay uygulanabilir bir cevap paylaşacağım.
User Threads vs Daemon Threads
Java’da birden fazla görevi eş zamanlı gerçekleştirmek istediğimizde
Thread
‘lerden faydalanırız.
Yeni bir Thread
nesnesi oluşturur,
constructor argümanı olarak bir Runnable
geçeriz veya
Thread
sınıfını extend eder,
void run()
methodunu override ederiz.
Bunları daha önce yaptıysanız belki Thread
sınıfının üzerindeki
setDaemon(boolean on)
methodunu da farketmişsinizdir.
Peki kimdir bu daemon?
Bootstrap 4 - Grid Sistemi
Çoğunlukla yazılımcılar için ön yüz geliştirmek bir baş belası haline gelir. Asıl işimiz bu olmadığı için bir türlü derinlemesine öğrenmeyiz.
Eğer üzerinde çalışmakta olduğumuz proje geniş bir kitleye hitap etmiyorsa, arayüzünün başkalarından farklı ve daha şık olmaya ihtiyacı yoksa, önemli olan kullanılabilirlikse; ben genellikle Bootstrap üzerine geliştirilmiş ücretsiz bir tema bulup özelliklerimizi onun üzerine entegre ediyorum. Böylece ön yüz geliştirmedeki zamandan ettiğimiz tasarruf ile daha sağlam bir backend geliştirebiliyoruz.
Docker ile WordPress Kurulumu ve Https
Yakın zamanda blogumda bir takım radikal değişiklikler yaptım. Bunlardan en önemlisi wordpress altyapısına geçmem oldu. Yaklaşık 12-13 yıldır kullandığım Blogger hizmetinden ayrılmanın burukluğu ile bu kadar özgür olduğum bir platformda blog yazmanın sevinci birbirine karıştı. Hem wordpress ile yazı yazmaya elim alışsın hem de wordpress’e geçiş tecrübelerimi paylaşayım amacıyla bu yazıyı yazıyorum.
Data Abstraction Nedir, Nerede Bulunur?
Yazılım geliştirme prensiplerinin en önemlilerinden birisi olan abstraction, yani soyutlama, kendi içinde iki çeşide ayrılıyor. Bunlar procedural abstraction ve data abstraction. Bu yazıda kısaca data abstraction‘ın ne olduğundan bahsetmeye çalışacağım.
Öncelikle abstraction ve encapsulation terimleri ne anlama geliyor ondan bahsetmek istiyorum çünkü bu terimler tanımları çok yakın olduğundan genellikle birbiri ile karıştırılıyorlar.
Visitor Design Pattern
Bu gece de çirkin kod yazmaktan bıkmış haldeyken kendime bir süredir temiz kod yazmak ile ilgili ahkam kesmediğimi hatırlattım. Hepimiz inheritance, polymorphism, abstraction, encapsulation gibi nesne tabanlı programlama konseptlerini geliştirdiğimiz projelerde bolca kullanıyoruz. Belki bir iş mülakatında sorsalar bunlar ne diye bülbül gibi anlatırız da. Peki yazılımın kalite çıtasını Allahuekber dağlarına kadar çıkartabilecek olan bu güçlü araçları yeterince doğru kullanabiliyor muyuz?
Adapter Pattern: Farklı Sistemler, Aynı Arayüz
Bir sistem geliştirirsiniz ve bu sistemin işlevini görebilmesi için başka sistemlere entegre olması gerekir. Bazen o kadar eski teknolojiler ile geliştirilmiş sistemlere entegre olmak zorundasınızdır ki, bu amaç için yazdığınız kod geliştirmekte olduğunuz projeye hiç yakışmaz, sürekli gözünüzü tırmalar. Özetle, elinizde başka bir sisteme ait bir interface vardır ve bu interface’in yapısı sizin projenizin yapısına uygun değildir.
Builder Pattern Kullanarak Daha Temiz Kod Yazmak
Yazılım geliştirirken sık sık onlarca parametre alan metodlar geliştirmek zorunda kalmışsınızdır. Eğer temiz kod yazma konusunda özen sahibiyseniz bu tarz metodlar yazmak sizi oldukça rahatsız etmiş ve zamanla çeşitli alternatif çözüm yolları edinmişsinizdir.
Bu yazıda bu soruna “Builder Pattern” kullanarak bir çözüm bulmaya çalışacağız. Bu yazıyı yazarken Uzi Landsmann‘ın blogunda yazdığı “Builder pattern with a twist” yazısından esinlendim. İngilizce ile aranız iyiyse o yazıyı da okumanızı tavsiye ederim.