Async Python'u bir de benden dinleyin


Çalışan fonksiyonların birbiriyle işbirliği yaparak ne zaman block’ladıklarını birbirine haber ettiği modele async programlama diyoruz. Böyle programlara da eşzamanlı (concurrent) çalışan programlar diyoruz. Eşzamanlı çalışan bir program herhangi anda sadece bir iş yapar. Sadece async bir program yazarak paralel iki işi yürütemezsiniz.

Blocking ne?

Eğer bir fonksiyon ne zaman block’ladığını haberdar edemiyorsa bu fonksiyon blocking bir fonksiyondur. Bu tarz fonksiyonları hiç sevmeyiz zira kendileri diğer haber vermeye çalışan fonksiyonları bekleterek haber vermelerini engeller. Eğer async bir programda bilinçsiz bir şekilde blocking fonksiyonları çağırırsanız günün sonunda daha kötü bir sync program yazmış olursunuz.

Read more ⟶

Modern Django Proje Yapısı & Docker Kullanımı


Bu yazıda, modern (bleeding edge) bir Django projesinin nasıl gözüktüğünü, hangi tool’ların kullanıldığını ve nasıl Docker ile containerize edileceğini göstereceğim.

Yazının sonunda Docker ile development ve production ortamları için birer configuration oluşturmuş olacağız, sadece tek komutla bu ortamlarda projemizi ayağa kaldırabileceğiz.

Yine projemizi lint etmek, formatlamak, ve type checking yapmak için mevcut olan en yeni ve en janjanlı yöntemleri bu yazımda anlatıyorum.

Read more ⟶

Don't develop your app to support Django admin


The Django admin site is a very useful application, bundled with Django itself. It’s considered one of the selling points of the framework.

Having CRUD stuff ready once you write your models is really convenient. I mainly use Django admin for these 3 purposes:

  1. Debugging and testing in my local machine. For example, creating & updating instances and checking things created via endpoints.

Read more ⟶

Python’da distributed lock mekanizması


Bildiğiniz üzere, eşzamanlı programlamada lock bir senkronizasyon primitifidir. Bu arkadaş sayesinde, eşzamanlı çalışan iki fonksiyonun tek bir kaynağı aynı anda yönetmeye çalışmasını engelleyebilirsiniz; bu sayede race condition senaryolarının önüne geçmiş olursunuz.

Farzımuhal bir cüzdan uygulamasında, müşteri hesabından para çektiğinde bakiyesinin azalması senaryosunu düşünelim. Bunu yapmak için kullanıcın mevcut bakiyesinden, çekilen tutarın çıkartılıp veri tabanına kaydedilmesi gerekir.

Read more ⟶

Django’da “bilet” tabanlı WebSocket kimlik doğrulama


Bu yazıda Türkçe’ye “bilet tabanlı kimlik doğrulaması” şeklinde çevirdiğim, İngilizce’de “ticket-based authentication” olarak geçen, WebSocket bağlamında kullanılan bir kimlik doğrulama yöntemini anlatacağım.

Eğer Django’da WebSocket uygulamaları yazdıysanız bilirsiniz ki bu işleri halletmek için genelde channels kütüphanesinin kapısını çalarız, dolayısıyla örnekleri bu kütüphane üzerinden göstereceğim. Yazıyı daha sade tutmak için kütüphaneyi açıklamak için fazla zaman harcamayacağım; bildiğinizi varsayıyorum.

Read more ⟶