Z Raporu — 2020

Ahmed Şeref Güneysu
5 min readDec 22, 2020

2020, birçok yönden zor geçti. Allah 2020'yi aratmasın.

Photo by Jess Bailey Designs from Pexels

Bu yazıda, 2020'deki iş hayatıyla alakalı kazanımlarım ve hobi projelerimi özetleyeceğim.

Kayda değer proje ve karşılaştığımız bug çözümleri ve bunlara yaklaşımlarımdan bahsedeceğim.

Hobi Projelerim

10. underscore.net

Her zaman elimin altında bulunacak yardımcı bir proje olarak düşündüğüm underscore.net kütüphanesi ve dökümantasyonu üzerinde çalışıyorum. Yardımcı bir kütüphane, olduğu için bütün metotların unit testleri mevcut.

Bir kütüphane ve framework’ü geliştirebilmek için aktif olarak kullanmanız ve eksiklerini görmeniz gerekiyor.

Bu yüzden hobi projelerimde mutlaka elimin altında bulunduruyor ve böylece refactor ederek daha kullanılır hale getirmeye çalışıyorum.

myget üzerine ara ara yeni Nuget paketlerini çıkıyorum fakat henüz umuma açmadım.

9. Predicate Builder

Kullanıcıdan gelen arama isteklerini dinamik hale getirebilmek için farklı çözümler mevcut. Bu ifadeleri LINQ Where extension metodu içerisindeki predicate parametresine çevirebilirseniz, bu ifadeleri SQL’e çevirmekten kurtulabilirsiniz ve Entity Framework gibi bir LINQ provider kullanıyorsanız, mevcut sayfalama metotlarınızı baştan yazmaktan kurtulabilirsiniz.

https://docs.microsoft.com/en-us/dotnet/api/system.linq.queryable.where

Basit ama ilham alınası, faydalı bir PoC projesi oldu.

8. wox için namaz vakti plugini

Wox, uzun süredir elim, ayağım oldu. C# ile kolayca plugin yazılabiliyor ve genişletilebilyor.

  • ALT+Space
  • prayer BOŞLUK
  • ⬇ İstanbul ENTER

Hazır bir namaz vakti API’ye sahipken, bir de Wox plugini yazayım dedim. (Laf aramızda, bir C# kütüphanesi yazmışken bunu PowerShell modülü içinde bir fonksiyon altına neden dönüştürmeyeyim ki dedim)

Prayer Times Powershell
Prayer Times Powershell

7. pe/hex viewer

Codepen üzerinde başladığım ILSpy ve dnSpy gibi fakat web tabanlı .NET PE (Portable exe) inceleme uygulaması yazmaya başladım. Vakit almaya başlayınca bıraktım. Tamamen tarayıcıda çalışan uygulama, performans sebebiyle şimdilik 15 KB kadarlık kısmı gösteriyor.

Birkaç kilobaytlık her türlü dosya için elinizin altında web tabanlı bir hex viewer var, bilin istedim. BOM karakteri tespit veya dosya türü tespit edebilmek için kullanılabilir.

Devam etmeyi istediğim projelerimden.

Demo:

6. dingil

Geçen sene Django benzeri bir yapıyı ASP.Net core ile hayata geçirme denemem olmuştu.

Runtime’da dinamik olarak Controller ve Entity Framework repoları oluşturarak kafamdaki hedefe ulaşabilmiştim.

Peki modellerimi YAML dosyaları halinde tanımlasam nasıl olur diyerek bir güncelleme geçtim.

Bir sonraki güncellememde, System.String gibi .NET türleri yerine number, text gibi daha insani ifadeleri kullanmayı planlıyorum.

Doğru dürüst bir isim bulamadığım için biraz şey oldu, baştaki din- ifadesi dinamik anlamında. Sonuna da artık ne uydurursanız.

https://github.com/guneysus/dingil/blob/master/src/Dingil.Tests/Models.yml

5. Namaz Vakti API

Belli başlı il merkezleri için namaz vakitlerini diyanet üzerinden bir Python scripti ile alarak TravisCI aracılığıyla AWS S3 üzerinden statik olarak yayınlıyorum. Diyanet, hala XML tabanlı API ile çalışıyor projeyi bu sebeple yazdım.

REST kırmızı çizgimizdir.

4. underscore.net.ps1

Özellikle underscore içinde yazdığım bazı metotları, Powershell tarafında kukullanılabilmek için modül haline getirdim. Myget üzerinden kurulabilir bir nuget paketini yayınlamamışım. Şimdilik 56 adet fonksiyon metot mevcut. Bunlardan biri pipe aldığı veriyi base64'e encode edebilen fonksiyon

underscore.net.ps1

3. Android için Namaz Vakti Uygulaması

Diyanetin namaz vakti uygulamasını haddinden fazla büyük ve hantal bulduğum için hayatımda ilk defa mobil uygulama yazdım. İstediğim sadece bildirim çubuğunda kalıcı ve kendi kendini güncelleyen, batarya dostu bir uygulamaydı. Kullanıcı olarak yeterince memnunum diyebilirim. Birkaç MB’lık minnak bir uygulama işimi fazlasıyla görüyor.

“Peki neden hala Diyanet’in uygulamasını telefonunda tutuyorsun?” diye soracak olursanız, TravisCI sebebiyle bir süre namaz vakitlerini güncelleyemedim, kısaca kendi yazdığım uygulamaya güvenemiyorum

¯\_(ツ)_/¯

Prayer Times Android

2. dinamik plugin load/execute

Genellikle zararlı yazılımlarda ve uzaktan kontrol yazılımlarında kullanılan yöntemle geliştirdiğim bu projenin ana motivasyon kaynağı, runtime anında bağımlılıkların güncellenebilmesiydi.

Dosyadan plugin yükleme dışında, gist ve github üzerinden de plugin yükleyip çalıştırabiliyor.

USE AT YOUR OWN RISK!

1. ndig

İşletim sistemi metotlarını C# ile kullanabilmeyi öğrenmek için yazdığım bir DNS sorgu CLI aracı.

scoop ile kurulabilir hale getirdim, nslookup alternatifi olarak değerlendirebilir.

ndig

Buglar

Ünlü bir düşünürün de dediği gibi:

Seni öldürmeyen bug güçlendirir.

Hayatımda daha ötesini görebileceğimi sanmadığım buglardan birine bu sene denk geldim. Bir web uygulamasındaki hangi özellik bilgisayara mavi ekran verdirebilir?

Bu bug macerasını farklı bir yazıda anlatacağım.

Connection Pooling ile alakalı bir problem yaşadık.

Zaman zaman test ortamlarımızdan birinde yeni connection açılamadığı için hatalar alıyorduk. Sorunu SQL Connection Pool size değerini yükselterek çözebilirdik, çözmedik sorunun asıl kaynağını belirlemek için önce bir konsol projesinde basit bir PoC projesi hazırladık.

Eş zamanlı olarak açtığımız SQL Connectionlar ile aynı hatayı alabildik. Sorunun asıl sebebi, uygulama içerisinde ve sürekli çalışmadığını tahmin ettiğimiz bir yerde, connection’ın pool’a geri döndürülmesinin unutulduğu yönündeydi. Birkaç kişi toplanarak mevcut kodu review ederek

— AHA! diyerek ilgili kod bloğunu bulduk.

--

--