Meraklı bir bilgisayar programcısının notları.
Merhaba! Ben Burak Selim Şenyurt - yazılım geliştirici, blogger ve öğrenme tutkunu.
Bu blogda yazılım mühendisliği, sistem tasarımı, programlama dilleri ve yeni teknolojiler üzerine yazılar paylaşıyorum. Özellikle .NET, Rust, Zig, yapay zeka araçları ve mimari konularına ilgi duyuyorum. Kendimi sürekli geliştirmeye ve yeni şeyler öğrenmeye adıyorum.
-
Tek Fotoluk İpucu 62–Byte Array için Sıkıştırma
Kod içerisinde bir yerlerde öyle ya da böyle elde ettiğiniz ama boyutu azcık da olsa küçülebilse dediğiniz byte tipinden array’ ler olduğunu düşünün. Kimi zaman bir dosyanın içeriği olabileceği gibi, sistem içerisinde üretilmiş bir byte dizisi bile olabilir bu. Peki söz konusu içeriği var olan GZip veya Deflate algoritmalarına göre sıkıştırmak isterseniz
-
Tek Fotoluk İpucu 61–Primitive Olmayan Property’ leri Bulmak
Diyelim ki bir değişkenin tipinin içerisinde yer aldığı Assembly’ daki diğer tiplerin Primitive olmayan (int,double,char vb) özelliklerini bulmak gibi bir ihtiyacınız var. Nasıl bir yol izlersiniz? Kuvvetle muhtemel Reflection’ dan yararlanırsınız. Hatta belki biraz da LINQ katarsınız işin içine. Ya da aklınızdan geçen tam olarak aşağıdaki gibi bir Extension Method’ dur.
-
Kodla Saçmalamaca
Programlamaya ister yeni başlamış olun ister yıllardır bu işin içerisinde bulunun, hızlı çözüm üretmek, analitik düşünmek ve olabildiğince işe yarar parçalar çıkartmak en büyük hedeflerimizden birisi olmalıdır. Elbette yıllar içerisinde elde edinilen, kazanılan tecrübe ve bilgi birikimine bağlı olarak kendinize ait bir geliştirme (Development) tarzı da ister istemez oluşacak ve hatta sonrasında değiştirilemez/değiştirilmesi zor bir alışkanlık haline gelecektir.
-
Text Template ve VSIX Project Template Kullanımı
Çoğu zaman geliştiricilerin karşısına zaman kısıtı olan projelerde, sıklıkla tekrar eden çözümsel ihtiyaçlar çıkar. Örneğin, ürünün içerisinde n sayıda ekran kullanıldığını ve bunların aslında belirli bir noktaya kadar bir kaç parametre ile değişen ama standart kod içeriklerine sahip olduğunu düşünün. Hatta bu tip ekranları bir kaç proje için aynı şekilde ürettiğinizi.
-
Tek Fotoluk İpucu 60 - string Kökenli JSON İçeriği Ters Serileştirmek
Tek Fotoluk İpucu 60‘da generic bir nesne örneğinin JSON formatında serileştirilmesini ve serileştirilen içeriğinde string olarak geriye döndürülmesini sağlayan bir extension metod geliştirmiştik. E tabi çok haklı olarak hani bunun ters serileştirmesi nerede diyebilirsiniz. Dediniz di mi? Buyrun öyleyse.
-
Workflow Designer’ ı Yeniden Host Etmek (WF 4.0)
Çoğu zaman sinemada daha önceden vizyona girmiş olan bir filmin yeniden çekilmiş bir versiyonuna rastlarız. Örneğin Batman Begins veya vizyona bu yaz girecek Total Recall gibi. Hatta bazen Cover olarak adlandırdığımız bir durum söz konusu olur ve çeşitli müzik guruplarının önemli parçalarının tekrardan, aynı ekipçe veya başkalarınca yorumlandığını görür, duyarız. Sonuç itibariyle insanlar zaman zaman yapılmış olan bazı çalışmaları hem teknolojinin yeni nimetleri, hem de farklı şekilde yorumlayabilme isteği nedeni ile tekrardan ele alabilirler.
-
Tek Fotoluk İpucu 59–Nesneyi JSON String Olarak Serileştirmek
Diyelimki generic T tipine yazacağınız bir Extension metod ile, JSON formatında serileştirme işlemi yaptırmak ve serileştirme sonucunuda string olarak geriye döndürmek istiyorsunuz. Ne yaparsınız? Aşağıdaki fotoğraf bir ip ucu verebilir mi?
-
Tek Fotoluk ipucu - 58 Derived Tipler için XElement Converter
Farz edelim ki elimizden tonlarca POCO (Plain Old CLR Object) tip var. Hatta laf aramızda tonlarca otomatik olarak üretilmiş SQL User Defined Type karşılığı sınıf var. İstiyorsunuz ki, bu tiplerin çalışma zamanındaki canlı örnekleri, XElement tipine dönüştürülebilsin. Hatta XElement içerisinde özelliklerin adları ile birlikte.Net tarafında ki type bilgileri de detaylı olarak bulunsun. Bulunsun ki başka bir yerden tekrar ayağa kaldırabilelim. Her tip için birer Extension method’mu yazarsınız? Ya da tüm tipler için Convert ile ilişkili bir Interface implementasyonu mu? Belki de bu tipler size Oracle’dan gelmiştir de türedikleri bir base type’da vardır
-
Tek Fotoluk ipucu - 57 LINQ Tarafında Cross Join
Elinizde iki adet nesne koleksiyonu olduğunu ve bunların veri satırı bazındaki olası eşleşmelerine ait kartezyen tablosunu elde etmek istediğinizi düşünün. Aşağıdaki gibi bir sorgu, SQL tarafındaki Cross Join etkisini LINQ ile de gerçekleştirebileceğimizi göstermektedir. Buna göre hangi ülkeden kimin hangi oyun alanlarında yer alabileceğine dair bir kartezyen çarpım içeriği elde etmiş oluruz
-
Tek Fotoluk Ipucu 56 – LINQ Metodlarında String Sorgular
Bazı durumlarda Entity Framework tabanlı nesne koleksiyonlarını sorgularken, Extension Method’ lar içerisine gelecek olan sorgulama ifadelerinin string bazlı olarak gelmesi söz konusu olabilir. Örneğin servis metodlarının istemci tarafından parametre olarak bu tip sorgu ifadeleri aldığı sıklıkla görülmektedir. Peki ama nasıl? Bunun bir örneği var mıdır? Hani elimizin altında dursa ve bir fikir verse iyi olmaz mı?
-
Tek Fotoluk İpucu 55 - Distinct ve IEqualityComparer
Diyelim ki elinizde kendi tipinize ait generic bir liste ve bu liste içerisinde veri bazında tekrarlı nesne örnekleri var. Örneğin bir ürün listesi ve bu liste içerisinde aynı üretici adına ait pek çok kayıt olduğunu düşünelim. Normal şartlar altında SQL tarafında yazacağınız basit bir sorgu ile üreticilerin adlarını tekrarsız olarak elde edebilirsiniz. Peki LINQ tarafındaki Distinct fonksiyonunu kullanarak aynı işi yapabilir misiniz? Ufak bir interface’den yararlanarak bu sorunu aşmanız mümkün. Sorun diyoruz, çünkü interface implementasyonunu yapmassanız, Distinct genişletme metodu (Extension Method) yine çalışır ama beklemediğiniz şekilde
-
Levenshtein Distance Algoritması
Bir süredir yazılım dünyasında sıklıkla kullanılan basit algoritmalara merak salmış durumdayım. Bazıları kafayı yedirtecek cinsten olsalarda arada sırada bunları değerlendirmekte ve paslanan dimamızı açmaya çalışmakta yarar olduğu kanısındayım. Aslına bakarsanız bilgisayar bilimlerinde uygulanabilen, gerçekten çok işe yarayan ve onları keşfedenleri saygıyla hatırlamamız gereken algoritmalar mevcut. Örneğin bunlardan birisi olan Levenshtein Distance algoritması ve mucidi Vladimir Levenshtein
-
Custom Activity Designer Geliştirmek
İnsanın kendisini en çok geliştireceği yer gerçek çalışma sahaları/ortamlarıdır. Ortaya konan ihtiyaçlar ne zaman ki sizin kullanmakta olduğunuz araçların (Tools) sınırlarını zorlamaya başlar, bu noktadan itibaren içerisine gireceğiniz her çeşit mücadele size inanılmaz derece tecrübe ve bilgi katacaktır. Tabi bu know-how bilgisini saklayabilir, kendiniz için dökümante edebilir veya kuralları çerçevesinde paylaşabilirsiniz
-
Çerezlik Algoritmalar ve Extension Methodlar
Akademik yıllarımızda çoğumuz karmaşık matematik algoritmaları ile uğraşmak durumunda kalmışızdır (Sınav stresini hatırlamak bile istemiyorum) Özellikle veri yapıları ve algoritmalar (Data Structures and Alogirthms) veya Numeric Analiz gibi derslerde yoğun algoritma tasarımları üzerinde çalışılmaktadır. Doğruyu söylemek gerekirse ülkemizde bu dersleri layıkıyla veren kurum sayısı oldukça azdır. Konular genellikle sırlama algoritmalarının (özellikle Quick Sort’un) ötesine pek geçmemektedir. En fazla yüksek lisans öğreniminde farklı konulara girilmesi söz konusudur.
-
Tek Fotoluk İpucu–54 Onda 75
Kendi tiplerimize ait koleksiyon nesnelerini kullanırken, Sort metodunu ele aldığımız durumlarda mutlaka neye göre karşılaştırma yapacağımızı belirtmemiz gerekmektedir. Bu amaçla IComparer veya IComparable gibi arayüzleri (Interface) ve bunların generic versiyonlarını kullanırız.
-
Tek Fotoluk İpucu–54Buçuk
Malum Visual Studio 2012 sürümünün RC sürümü geçtiğimiz hafta içerisinde yayınlandı ve internet üzerinden bu konu ile ilişkili yazılarda yayılmaya başlandı. Sadece Visual Studio 2012 değil ama.Net Framework 4.5 tarafında da epey önemli yenilikler geliyor. Ağırlık noktası her ne kadar paralel programlama tarafı ve doğal olarak async ile await anahtar kelimeleri olsa da, temel bazı yenilikler de var. Örneğin artık Zip formatında sıkıştırma desteği var. Söz gelimi bir klasör içeriğini ZIP formatında sıkıştıracak bir Extension metod yazmak istediniz
-
Tek Fotoluk İpucu 54 - Control Nerede?
Diyelim ki çalışma zamanında, Windows Forms’un içerisindeki bir kontrolü (Control tipinden bir nesne örneğini) kodla buldurmanız ve üzerinde bir işlem yaptırmanız gerekiyor. Hatta formunuzun da, otomatik olarak bir veri kaynağına göre üretildiğini ve kontrollerin de iç içe gelecek şekilde yerleştirildiğini düşünün. Kodun belirli bir kontrol üzerinde işlem yapması için önce onu bulması gerekir değil mi? Ancak control ağaç yapısının da çalışma zamanında üretilmesi söz konusudur.
-
Servisleri Monitor Edelim
Banka gibi, pek çok farklı sistemin bir arada yer aldığı ve çalıştığı, çoğu zaman heterojen yapıda olan büyük çaplı çözümlerde, servislerin sıklıkla kullanıldığını görürüz. Çok basit bir operasyonel uygulama bile, çalışacağı veri kümesini sadece veritabanı kaynağı üzerinden değil, sistem içerisinde yer alan başka kanallardan da almak durumunda kalabilir. Tam tersi durumda söz konusudur. Gerçekleşen bir toplu işlemin içerisinde, akışın çeşitli noktalarında yine servisler devreye girerek diğer sistemlerin haberdar edilmesi de söz konusudur. İşte böyle durumlarda, sistem içerisindeki parçalar arasındaki entegrasyonun sağlanabilmesi amacıyla, servis bazlı çözümlere sıklıkla başvurulur.
-
WCF Tarafında Task Bazlı Asenkron Operasyonlar
Gördüğünüz karikatür, aşağıdaki yazıyı bitirdiğim zaman aradığım giriş resmi ile ilişkili olarak karşıma çıkan örneklerden sadece bir tanesiydi. Beni epey bir güldürdüğünü ve neşelendirdiğini ifade edebilirim. Konumuz işlerimizi birilerine yönlendirip yan gelip yatmak değil elbette, ama ona benzer olduğunu ifade edebilirim. Bu adamın görevlerini başkalarına atadıktan sonra, söz konusu işler yapılırken başka işlere (örneğin koltuğunda şöyle bir geriye doğru yaslanarak vakit geçirmek) yönelebildiğine odaklanmaya çalışalım. .Net Framework tarafındaki Delegate tipleri de benzer bir ihtiyacı karşılamıyor mu? Asenkron olarak fonksiyonların çağırılabilmesini sağlamak mümkün mü? (Elbette başka yetenekleri de var ama bu en önemlileri arasında sayılabilir)
-
Tek Fotoluk İpucu 53 - Tarih Dönüşümünde Extract Kullanımı
Diyelim ki text tabanlı veya benzeri bir dosyadan satır bazlı veri okuma ve aktarma işlemi gerçekleştiriyorsunuz. Bu veri dosyasındaki alanlardan birisinde 16022012 094500 gibi bir tarih bilgisi tutulduğunu varsayalım. Kodunuzun bu alanı DateTime tipine çevirmesi işleminde Try kontrolünü kendi içinde yapan ve string içerisindeki harflerin tarihsel anlamda neye karşılık geldiğini belirtmemize yarayan bir fonksiyon olduğunu biliyor muydunuz?