Author Archives: idursun - Page 2

ReSharper

Efendim, uzun zamandır yapmak isteyipte bir türlü zaman bulamadığım ReShaper yazı dizisine başlıyorum ziyadesiyle. Öncelikle ReSharper nedir bilmeyen arkadaşları onunla tanışmaya davet ediyorum. Hemen gidip Nightly Buildlerden “Works here” yazanlardan bir tanesini indirip kurun ki anlattıklarımın bir anlamı olsun. ReSharper için kısaca Visual Studio’yu kullanılabilir kılan bir eklenti diyebiliriz. Benzer bir ürün de Developer Express’in CodeRush‘ıdır. Fakat ikisini de tam anlamıyla denedikten sonra sizde benim gibi Developer Express otursun grid yazmaya devam etsin diyeceksiniz. ReSharper’ın belli başlı özelliklerini 4 kategoride toplayabiliriz:

Read more »

Floyd-Warshall Algoritması

Floyd-Warshall Algoritması, graf olarak ifade edilebilecek herhangi bir veri yapısında herhangi iki nokta arasındaki en kısa yolu bulmak için kullanılabilecek kodlaması oldukça basit bir algoritmadır. İnternette bu algoritmayı anlatan birçok kaynak bulabilirsiniz. Benim burada anlatacaklarım ise minimum teori ile maksimum pratik sunmak olacak. Pseudo kod yerine örnekler ve kod parçaları üzerinden açıklamaya çalışacağım. Floyd-Warshall algoritmasının özü çok basit bir formülden oluşuyor. A,B,C diye 3 tane noktamız olduğunu varsayalım. Bu durumda A ile C arasındaki en kısa mesafe min(mesafe(A,C), mesafe(A,B) + mesafe(B,C)) kadar olacaktır. Read more »

Etkili Birim Testleri Yazmaaaağğhh!!!

Birçoğumuz [Agile Development][1], [Test Driven Development][2] (TDD) ve [Extreme Programming][3] gibi terimleri sıkça duyuyoruzdur. Altlı üstlü bu yöntemlerin tümünün uzlaştığı bir nokta ise yazılımımızın sağlığı için gerekli birim testlerin (Unit Test) yazılmasıdır.

Peki bu birim testleri nasıl yazmalıyız ki hem etkili olsunlar hem de bakımları kolay olsun? Aslında bu sorunun cevabının büyük bir kısmı sizin projenizin tasarımızla ilişkili. Çünkü birim testler adı üzerinde birimleri test etmelidir. Nesne yönelimli programlama (OOP) paradigması ışığında hazırlanmış bir yazılımın birimleri ise sınıflardır. Sınıflarımızı tasarlarken de hayatımızı kolaylaştırması için uymamız gereken belli başlı prensipler var. Mesela her sınıf değişime kapalı fakat genişletilebilirliğe karşı açık olmalıdır ki buna -Açık Kapalı Prensibi- denir. vs vs..

Read more »

Asal sayılar üzerine

Tanım: Sadece 1′ ve kendisine tam bölünebilen pozitif tam sayılara asal sayı denir. Peki bir sayının asal olup olmadığını nasıl kontrol edebiliriz? Sayımız n olsun. Bu durumda 2 ile n-1 arasında tüm tam sayılara tam bölünüp bölünmediğini kontrol ederek asal olup olmadığını söyleyebiliriz. Bu durumda (n-3) tane bölme işlemi yapmamız gerekiyor.

Bilgi: Tek çift asal sayı 2′dir. Bu bilgi ışığında; yaptığımız bölme işlemlerinin sayısını yarıya indirebiliriz. 2 hariç çift sayılar için asallık kontrolü yapmamıza gerek yok.

Teorem: Bir sayısı kareköküne kadar hiçbir sayıya tam bölünmüyorsa o sayı asaldır. Bu durumda yaptığımız bölme işlemlerinin sayısı baya bir azalacak, çünkü sadece çift olmayan ve karekök n’den küçük tam sayılar için bu testi yapmamız yeterli olacaktır.

public bool isPrime(int n)
{
  if (n < 2) return false;
  for (int i = 2; i*i <= n; i+=2)
    if (n % i == 0) return false;
  return true;
}

WPF ve Lambda Converterlar

Visual Studio 2008‘in çıkmasının ardından .Net 3.5 kullanan yazılımlarda da artık bir artış bekleyebiliriz. Bana göre, .Net 3.0 ile gelen yeni teknolojilerden en göze batanı ise Windows Presentation Foundation. WPF ile yapılabilecekleri gördükten sonra insanın ağzının açık kalmaması mümkün değil. Görsellik, esneklik, doğrulama (validation) ve veri bağlama (databinding) gibi arayüz hazırlarken karşılaşılan bir çok güçlük için hazır yapılar WPF ile sunuluyor.

Bu kadar güzel olan bu teknolojinin bence eksik kalan taraflarından birisi veri dönüştürücüler (Data Converter). Arayüzde sunmak istediğiniz verinin bazı durumlarda dönüştürülmesini veya formatlanmasını isteyebilirsiz. Ne kadar gariptirki WPF ile hazır gelen dönüştürücü yok. En basitinden, DateTime tipindeki bir veriyi formatlayarak görüntületebilmenin tek yolu bunun için bir converter yazmak.

M.Orçun Topdağı, blogunda buna çok basit ve güzel bir çözüm sunmuş. Üstelik hali hazırda mevcut olan parçaları bir araya getirerek. Lamda expression’lardan faydalanarak veri dönüştürme nasıl olur diye merak ediyorsanız yazısını okumanızı tavsiye ederim.

5 haziran 1999 roland garros bayanlar finali

tarih 5 haziran 1999. final maçı steffi graf ile martina hingis ile oynanıyor. graf uzun bir aradan sonra jubile yapmak için sahalara geri dönmüş ve finale kadar yükselmiş. hingis ise 16 yaşında graf’ı wimbledonda eleyerek adını duyurmuş, dolayısıyla bu final ikisi için de önemli. hingis genç, atik, teknik. graf ise tecrübeli ve yaşına göre oldukça iyi durumda. maç çok hızlı başlıyor kesinlikle tenisin en uç noktalarında ceyran ediyor, olmayacak toplar çevriliyor, kıran kırana bir birinci setin ardından hingis 6-4 önde ilk seti alıyor. Read more »

Resharper gösterimi

Resharper, JetBrains tarafından geliştirilmiş bir Visual Studio eklentisinin adı.

Bu eklenti kod yazmayı oldukça kolaylaştıran ve hatta bazı durumlarda olası buglar için bile sizi uyaran mükemmel bir araç. Resharper ile kod yazmanın nasıl olduğunu göstermek için 9 dakika civarında bir video hazırladım. Kullanabildiğim kadar çok özelliği kullanmaya çalıştım. Bazı yerlerde sırf neler önerdiğini göstermek için bilerek hatalı ya da eksik yazdım. Video bittikten sonra birde kendim seyrettim ve size şunu söyleyebilirimki videoda kullandıklarım Resharper’ın yapabildiklerinin sadece %10′u olabilir. Fakat size yinede fikir verir umarım.

Bir de son not olarak yazdığım kodun bir anlamı veya mantığı yok, sadece bir şeyler yazmak için yazdım :)

Videoyu izlemek için buraya tıklayın

Dependency Injection de ne?

GoF’un Design Pattern kataloğundan sonra da bir sürü pattern adı ortaya atıldı ve atılmaya devam ediyor. Bu iş tam bir çılgınlığa döndü. Aynen Extreme Programming paradigmalarından sonra Agile Development, Alt.Net adıyla bir sürü türevinin ortaya çıkması gibi.

Efendim, nedir bu Dependency Injection?

Bir sınıfın ne olduğuna bakmaksızın ortak bir arayüz veya ortak bir sınıfı kullanması, yani o sınıfa ya da arayüze bağımlı hale getirilmesi. Örneğin bir veritabanı bağlantısı için IDbConnection diye bir arayüz tanımlanmış olsun. MSSQL, MySQL, vb veritabanlarına bağlanmak için bağlantı sınıfları oluştururken doğal olarak bu arayüzü kullanarak sınıflar tanımlarızki araya bir katman koyalım da veritabanı bağlantısıyla işi olan sınıflar veritabanının ne olduğuna bakmasızın işlerini yapabilsinler. Aşağıdaki kodda da dependency injection yapmış oluyoruz. Hatta bunların türleri var: Read more »

Operator Overloading kod okunurluğunu düşürür mü?

Javada operator overloading yok. Baya bir süre neden koymuyorlar diye merak etmiştim, hatta bir yerde operator overloading’in kodun okunurluğunu azaltacağı için Sun’ın bu özelliği eklemeye sıcak bakmadığını okumuştum. O zaman da saçma gelmişti, şimdi de. Ne yani? Bir yerimizi keseriz diye evde hiç bıçak bulundurmayalım mı?

Elbette fütursuzca kullanıldığında kodun okunurluğunu düşürür fakat inanılmaz derecede arttıracağı yerler de yok değil.

.Net için Entity Spaces adında veritabanı katmanı var. NHibernate‘in aksine bu katman hiç reflection kullanmıyor, onun yerine veritabanı şablonuna göre kod oluşturuyor. Böylece xml ayar dosyalarıyla uğraşmıyorsunuz ve oldukça iyi performans elde ediyorsunuz. İşin en güzel yanı ise kod içindeki sorgular aynen bir SQL sorgusu gibi görünüyor ve okunurluğu arttırıyor. Peki bunu nasıl yapıyor? Operator Overloading ile… Read more »

Maziye gittim şöyle bir

İlk çıktığında Visual C# 2008 Express Edition Beta 2′yi indirmiştim ama fırsat buldukça kurcalıyordum. Özellikle WPF’yi kurcalıyorum fakat henüz beta olduğu için sürekli göçüp duruyor hatta belli bir zaman sonra doğru yazdığım XAML’i bile derleyemez hale geliyor ve hatalı olduğunu söylerek beni yanıltıyordu. Ben de bir süre WPF’ye ara verdim ve diğer yenilikleri inceleye başladım.

Mesela LINQ. Deneme olsun diye bir klasör içinde yer alan dosyalardan adında önce o sonra a harfi geçen kaç tane var bir saydırayım dedim. Efendim oldu bitti. Yaptım, gözlerim karardı bir an ve şöyle bir maziye gittim, taa pascal günlerine…

Turbo Pascal veya Delphi veya dinamik olmayan herhangi bir dilde bu işi yapmak için en az 5-10 satır kod yazmak lazım. Peki bu işlem c# 3.0′da kaç satır? Bu yazıyı yazdığıma göre 5 satırdan kısa ve büyük ihtimalle 1 satır. Evet bildiniz, ben kod ekrandan taşmasın diye birkaç satıra bölüp yazıyorum buraya ama aslında 1 satır.

Console.WriteLine(
  new DirectoryInfo(@"c:downloads")
  .GetFiles()
  .Count(f => Regex.IsMatch(System.IO.Path.GetFileName(f.Name), "o.*a"))
);

Aynı dosyaların toplam boyutu??

Console.WriteLine(
  new DirectoryInfo(@"c:downloads")
  .GetFiles()
  .Where(x => Regex.IsMatch(System.IO.Path.GetFileName(x.Name), "o.*a"))
  .Sum(x => x.Length)
);

Hiçbir döngü yok.