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.

Arama · Arşiv


Maceralar

Toplam 1030 yazı Tüm arşiv Arama RSS
  • Tek Fotoluk İpucu 112 - Acaba Bu Dosya Microsoft Office Open XML(OOXML) Formatında mı?

    Diyelim ki bir yerlerde saklanmış ve kod tarafında byte[] array olarak ifade ediebilecek çeşitli tipte dosya içerikleriniz var ve siz bunların Microsoft Office Open XML formatında olup olmadıklarını anlamak istiyorsunuz. Bir süreci başlatmadan önce DB gibi bir ortamda duran dosyaların gerçekten de istenen tipte olup olmadığını anlamak kritik bir operasyon olabilir. Peki bu tip bir kontrolü gerçekleştirmek için nasıl bir kod parçasına ihtiyacımız olur?

  • Tek Fotoluk İpucu 111 - Dosya Adı İçinden Geçersiz Karakterleri Çıkartmak

    Diyelim ki elinizde bir takım dosya adları var. Bu dosya adları herhangi bir kaynaktan okunuyor. Ancak bazı dosya adlarında geçersiz karakterler yer aldığını tespit ediyorsunuz (?: < vb) Siz de dosya adlarını kendi uygulamanız içerisinde değerlendirirken bu geçersiz karakterlerden arındırarak hareket etmek niyetindesiniz. Ne yaparsınız? Bunun için bir genişletme fonksiyonu (extension method) yazmak isteseniz nasıl hareket edersiniz? Yoksa aşağıdaki gibi bir metod işinize yarar mı?

  • SOA Nedir?

    Yazılım dünyasının zor anlaşılan kavramlarından birisi de çeşitli mimari modellemeleridir. SOA (Service Oriented Architecture) en popüler yazılım mimarilerinden birisi olmakla beraber, anlaşılması ve uygulanması en zor olanlarındandır. Gelin SOA’yı dilimiz döndüğünce anlamaya ve en önemlisi hangi ihtiyacı/ihtiyaçları çözdüğünü bulmaya çalışalım. İlk olarak basit ve genel bir tanımlama ile işe başlamakta fayda var.

  • Tasarım Desenleri – Template Method

    Düzenli olarak teknik paylaşımlarda bulunan internet yazarlarının karşılaştığı en büyük sorunlardan birisi, hızla gelişen teknoloji nedeniyle ele alınan konuların kolayca eskimesidir. Hangi firma olursa olsun bu kural geçerlidir. Bu eskitme işinde elbette başı çeken bir kaç firma var. Zaman zaman yazarların serzenişte bulunup kızdığı Microsoft, Oracle, Google ve diğerleri.

  • WCF 4.5–Built-In UDP Desteği

    Hızzzzz!!! Ben Hızzımmm! Hızlıdan hızlı…Bu repliği bu aralar haftada en az 7 kere seyretmek zorunda kaldığım Cars filminden hatırlıyorum (Pixar’ ın efsane çizgi filmlerinden birisi olmakla birlikte serinin 2nci filmi de süperdir. 3ncü çekilir mi bilemem ama çekilse harika olur) Şimşek McQueen filmin baş ve ana karakteri olarak çok hızlı bir arabadır ve tek derdi çok daha hızlı gitmektir. Hatta serinin ikinci bölümüne kapıştığı Formula 1 arabası dahil pek çok çeşitteki yarış otomobilini sürekli geride bırakır. Bunların arasında ralli araçlarından tutun, LeMans’ da yarışlanlara kadar pek çok çeşit vardır.

  • Managed Extensibility Framework - Hello World

    Günümüzde uygulamaların genişletilebilir olması önemli bir konu. Modüler olarak da nitelendirebileceğimiz bu felsefe ile bir uygulamanın kullanıcıları tarafından kolayca genişletilebilmesi amaçlanır. Hatta akıllı uygulamaların kendilerini bu şekilde genişletmesi de mümkündür. Modülerliği kazandırmak için kullanabileceğimiz farklı yöntemler vardır. Bunlardan belki de en basiti Interface tiplerini ve Reflection’ı kullanarak uygulamanın standart fonksiyonelliklerini genişletilebilir şekilde dışarıya açmaktır. Basittir ancak geliştiricinin iyi tasarlamasını gerekitir ve kod maliyeti yükselebilir.

  • Biyütıful Kod - Ninject ile Bir Dependency Injection Macerası

    Her yazılım geliştirici özellikle büyük bir projeye girdiğinde kodlarının kaliteli olması için uğraşır. Bu yönde adımlar atar. Çoğu zaman bu bir sanata dahi dönüşebilir. Okunabilir kodlar oluşturmanın dışında, mimari açıdan büyüleyici olan, yeniden kullanılabilirliğin üst seviyede olduğu, fazla uğraşılmadan genişleyebilen ürünler ortaya çıkartmak en büyük gayelerden birisi haline gelir. Martin Fowler’ın ilkeleri sıkı sıkıya takip edilir. Kurumsal çözüm içerisinde Fluent API’ler kullanılmaya, “Dependency Injection Container” gibi kavramlar konuşulmaya başlanır. Ne kadar başarılabilir bilinmez ama amaçlardan birisi de Biyütıful Kodu ortaya çıkartmaktır.

  • WCF 4.5–ChannelFactory Tipi için Caching Kullanımı

    Vaktiyle üniversitedeki diferansiyel denklemler dersi hocamızın anlattığı bir efsane vardı (Sene 94 bu arada). Ne kadar gerçektir bilinmez ama beni oldukça etkilemişti. Hikayeye göre üniversite hocaları arasında belirli aralıklarla düzenlenen bir yarışma varmış. Bu yarışmada hocaların tahtaya kalkıp seçtikleri teoremlere ait geometrik şekilleri çizmeleri istenirmiş. En güzel çizim ise mükafatlandırılırmış.

  • Decimal to Binary to Hexadecimal

    Bundan bir kaç sene önce ünlü matematikçi Fermat’ nın son teoreminin nasıl ispat edildiğinin anlatıldığı bir kitabı okumuştum. 1670 yılında ortaya çıkan ve Fermat tarafından o zaman ispat edildiği öne sürülen ama bildiğim kadarı ile kanıt bulunamayan teorem ancak 1995 yılında Andrew Wiles tarafından kanıtlanabilmiştir. Söz konusu teoremin ispatı sırasında (bununla ilişkili olarak wikiden bilgi alabilirsiniz) arada ispat edilmek zorunda kalınan başka teoremler de ortaya çıkmıştı. Kitabın içerisinde altın orandan tutunda, Şimuya-Taniyama konjöktörünün çözümlenmesine kadar pek çok konuya yer verilmişti. Şimdi haklı olarak bunları niye söylüyorsun diyeceksiniz?

  • Entity Framework - Generic Repository ve Unit of Work Uyarlaması

    Yazılım dünyasında var olan mimari prensipler veya tasarım kalıpları tek başlarına belirli sorunları çözseler de, bazı kurumsal projelerde mutlak suretle bir arada düşünülmeleri gerekir. Söz gelimi Repository ve Unit of Work kalıpları, özellikle Domain Driven Design odaklı yapılarda bir arada değerlendirilmesi gerekenlerdendir. DDD denilince aklımıza daha çok veri odaklı uygulamalar gelir ve bu tip ürünlerde RDBMS (Relational Database Management System) lerin yeri hatırı sayılır ölçüde fazladır (Her ne kadar son yıllarda NoSQL cephesinde önemli gelişmeler ve kullanımda ciddi artışlar olsa da…)

  • WCF–Custom AuthenticationService

    Bazen bir yola baş koyarız ama o kadar uzundur ki git git bitmek bilmez. Yolda bin bir türlü zorluğu aşmak zorunda kalırız. Hatta hangi zorluklarla karşılacağımızı da bilemeyebiliriz. Yolun uzunluğuna, karşılaşılan zorluklara bağlı olarak ya geri döneriz ya başka bir yola saparız ya da inat edip sonuna kadar gitmeye çalışırız. Mücadelinin sonunda yolun sonuna varmak da yeterli olmayabilir.

  • WCF–SOAP Servislerinde Custom Header Kullanmak

    Çok uzun zamandır Sosyal ağlardan uzağım. Ne Facebook, ne Twitter ne de bir başkasını kullanmıyorum. Google+ üzerinde bile sırf Hangout söyleşileri nedeniyle mecburen açık tuttuğum bir hesap var. Sosyal ağları terk ettiğim ilk günlerde çevremdeki pek çok yakın dostumla olan iletişimimi de yeniden tesis etmem gerekmişti. Ne acıdır ki pek çoğunun iletişim bilgisi sadece Tweet ve Facebook mesaj kısmı ile sınırlı kalmıştı. Hani nerede telefon numaraları, nerede e-posta adresleri? Çoğunu tedarik etmek epeyce zor oldu.

  • Entity Framework–İki Entity Bir Table ile Lazy ve Eager Loading

    Yandaki görüntü 1988 yılında Mevlüt Dinç (nam-ı diğer Mev Dinc) tarafından kurulan Vivid Image firmasının geliştirdiği oyunlardan birisine ait. The First Samurai. Mev Dinc ülkemizin yetiştirdiği en önemli değerlerden birisidir. Kendisi ile NedirTv topluluğunda yapılmış güzel bir röportaj da bulunmaktadır. Pek çoğumuz onu, SOBEE firması ile de tanımıştır. Ben ise uzun zaman önce Microsoft’ un Darphane’ deki binasında katıldığım bir söyleşiden…

  • Tek Fotoluk İpucu 110 - Control Tipini Extend Edip Basit Bind İşlemleri Gerçekleştirmek

    Diyelim ki, geliştirdiğiniz Windows Forms tabanlı ekranlarınızdaki kontrollerin içerikleri farklı bir veri kaynağından (Strongly Typed özellikte) geliyor ve siz bunları kontrollerin ilgili özelliklerine bağlayacak generic özellikte bir metod geliştirmek istiyorsunuz. Doğrudan özelliklere değer set etmek ile uğraşabilirsiniz de ama, veri kaynağından okuma yapan kod parçasının içerisinde bu işlemi merkezileştirmeyi de düşünüyorsunuz. Ancak ilk adım olarak Control türevli tipler için bir Extension metod üzerinden özelliklere değer bağlama işlemlerini yapmak istiyorsunuz. Nasıl bir yol izlersiniz? Aşağıdaki ip ucu işinize yarayabilir mi?

  • Simetrik Şifreleme(Symmetric Cryptography) Hızları

    Crptograpy… Hayır hayır şöyleydi.Crpytograyph… Yok yok böyle değil. Belki de… Cyrptograhy… Offf! Bir türlü beceremiyorum şunu yazmayı. Hah sanırım buydu. Cryptography. Nihayet! Şifreleme teknikleri sizlerin de bildiği üzere karmaşık matematiksel algoritmaları baz alacak şekilde tesis edilmeye çalışılırlar. Algoritma ne kadar karmaşık veya basit olursa olsun önemli olan çıkan sonuçların zor kırılacak cinsten olmalarıdır. Bu noktada kullanılan anahtarların ve bit değerlerinin de büyük önemi vardır. E tabi doğal olarak zaman içerisinde pek çok şifreleme algoritması ortaya çıkmıştır. Bunları temel de simetrik ve asimetrik olanlar gibi iki ana kategoriye ayırabiliriz. Ama diğer yandan hash algoritmaları veya veri bütünlüğünü korumaya yönelik algoritmalar da mevcuttur.(Ve belki de bizim bilmediğimiz ama üst düzey veri güvenliğinde kullanılan çok gizli olanları)

  • WCF WebHttp Service, JSON, jQuery, Ajax ve CORS ile Yeni Bir Macera

    Bir süredir şirket içerisinde kullanılacak olan web tabanlı bir.Net uygulamasının geliştirilmesinde görev almaktayım. Uygulama, yürütülen süreç gereği her iterasyon sonunda yeni özellikler eklenmiş ve hataları giderilmiş biçimde Üretim (Production) ortamına taşınmakta. Projede kaynak sıkıntısı nedeniyle uzun bir süre servis katmanı haricinde kalan arayüz tarafı ile de ilgilenmek zorunda kaldım. Arayüz tarafı ile uğraşırken iş biriminden gelen isteklere göre CSS (Cascading Style Sheets) ve bol miktarda Javascript kodlamak benim gibi acemiler için epeyce zorlayıcıydı. Lakin en çok zaman kaybettiğim vaka, şirket içinde kullanılmakta olan eski,yeni ve çeşitli tipteki tarayıcıların uyumlu çalışmasının sağlanabilmesiydi. Kimi lokasyonda Internet Explorer 8, kimi yerlede Google Chrome’ un en güncel sürümü bulunmakta. Hatta global çevrimde Firefox standart olarak her bilgisasyarda yüklü geliyor.

  • Tek Fotoluk İpucu 109 - IIS Üzerindeki Uygulamaları Kod Yoluyla Öğrenmek

    Diyelim ki sunucudaki IIS üzerinde konuşlandırdığınız Web uygulamalarının bir listesini almak istiyorsunuz. Bunun elbette pek çok yolu olduğunu biliyorsunuz. Bir Powershell script’i belki de işinizi görür. Ancak belki de siz bunu kendi geliştireceğiniz windows forms uygulamasında bu listeyi kullanmak istiyorsunuz. Ne yaparsınız? Kod yardımıyla IIS üzerindeki Application’ları, Site’ları öğrenebilir misiniz?

  • Data Binding İşlemlerinde Converter Kullanımı

    Daha önceki yazılarımızdan birisinde (Data-Binding Retro Bakış Açısı) özellikle WPF (Windows Presentation Foundation), Windows Phone, WF (Workflow Foundation) gibi XAML tabanlı ara birimlerin sıklıkla kullanıldığı noktalarda veri bağlama (Data Binding) işlemlerinin temellerini kavramaya çalışmış ve çok basit bir örnek ile konuyu irdelemiştik. Bu yazımızda ise, veri bağlama işlemleri sırasında dönüştürücü tiplerden (Converters) nasıl yararlanabileceğimizi incelemeye çalışacağız. Bu güzel kabiliyet sayesinde aslında var olan çalışma zamanı veri bağlama işlemlerine müdahale edebilmekteyiz ki bu, geliştirici açısından oldukça önem arz eden bir konudur. Öyleki, geliştiricinin standart basma kalıpların dışına çıkarak hareket edebilmesine olanak sağlamakta.

  • Asp.Net’ ten HTTPS Tabanlı WCF Çağrısı Gerçekleştirmek

    Özel Ajan Oso! Son yılımda Disney Channel’ de sıklıkla maruz kaldığım bir çizgi karakter. Aslında bu sakar ve bir o kadar da maharetli ve sevimli çizgi dizi kahramının görevi son derece basit. Sadece 3 adımda çocuklara yol gösterici nitelikte yardımcı olmaya çalışmak. Ajanımızın dizi de bir de yöneticisi var. Aynı Mission Impossible’ da olduğu gibi. Onun adı “Bay Dost” Her bölüm Özel Ajan Oso’ ya bir görev veriliyor. Söz gelimi çocuklardan birisi yanlışlıkla kumbarasının bir ayağını kırmış olsun. Bunu nasıl tamir eder? 3 adımda. Dizi de olay şöyle ilerler.

  • NLog için Oracle Database Kullanmak

    Animasyon film meraklısı olupta Pixar’ ın 2003 yapımı Nemo’ sunu izlemeyen sanırım yoktur. Kayıp oğlu Nemo’ yu bulmak isteyen Marlin, uzun ve zorlu yolculuğu sırasında oldukça unutkan olan ve aslında bu özelliği ile balık olduğunu adeta tüm izleyenlere ispat eden Dory ile seyahat etmektedir. Dory neredeyse bir saniye önce söylediğini hatırlamakta zorlanan bir balıktır. Aslında geliştirmekte olduğumuz uygulamaların da buna benzer handikapları vardır. Bir şeyler hatırlamak zorundadırlar ve bu yüzden çeşitli depolama ortamlarını kullanırlar. Bu depolar ile olan iletişimlerinde çeşitli stratejiler uygularlar. Özellikle web tabanlı uygulamalar söz konusu olduğunda istemciler ile olan iletişimde de unutkanlık halleri baş gösterir. Web, doğası gereği çoğu zaman State tutmakta zorlanan bir ortamdır.