»
Y
A
N
M
E
N
Ü
«
180 milyon dolar maliyetli bug
ibrahim dursun @ 17 Ocak 2009 15:28

Düşününki C++ için bir IDE hazırlamışsınız ve bu IDE de oldukça popüler olmuş. 20,000 geliştirici tarafından kullanılıyor ve yıllardır da bunu satıyorsunuz. IDE’nin performansı fena değil ne de olsa C++ derleyiciler yavaşlıkları ile ünlüdürler.
My code is compiling

Fakat bu IDE’nin kullanıcılarından birisi (Andread Hausladen) öyle bir yama yapıyorki derleme zamanı %75 azalıyor. Görünen o ki; derleme işlemi başlatıldığında derleyiciye IDE tarafından bazı callback fonksiyonları kaydediliyormuş ve bunlardan birisi de OpenFile fonksiyonuymuş. Sorun ise OpenFile fonksiyonunun aynı zamanda dosya var mı yok mu kontrol etmek için de kullanılıyor olmasıymış ki bu da oldukça zaman kaybına neden oluyormuş. Andreas ise yamasında OpenFile çağırılmadan önce GetFileAttributes fonksiyonu ile dosyanın var olup olmadığının kontrol edilmesini, dosya varsa OpenFile çağırılmasını sağlamış ki bu da 30 saniyelik derleme süresini 4.5 saniyeye düşürmüş!

İşin ironik tarafı ise enerji tasarruflu uygulama geliştirme için yapılabileceklerle ilgili StackOverflow’da sorulan bu soruda karşıma çıktı. İlk cevap şu an C++ Builder’ı geliştiren CodeGear’ın ürün sorumlusu Nick Hodges‘dan gelmiş, ikinci cevap ise tam bir ayar niteliğinde.

C++ Builder’ın yılda 200 gün çalışıp, günde 15 dakikasını derleme işleminin bitmesini bekleyerek harcayan 20000 geliştirici tarafından 5 yıldır kullanıldığını düşünürsek saatte 50$ masraf ile toplam maliyet 187.5 milyon doları buluyor. Borland’ın neden bu hale geldiğine şaşmamak lazım.

NUnit.Framework.SyntaxHelpers
ibrahim dursun @ 31 Temmuz 2008 19:19

.Net’te test için NUnit’ten başka kütüphane kullanmıyorum. Uzun zamandır da 2.2 sürümünü kullanmaktaydım ve memnundum fakat geçenlerde 2.4 sürümündeki bir özellik dikkatimi çekti. NUnit.Framework.SyntaxHelpers namespace’inin altında testleri daha okunaklı kılacak bir takım yardımcı sınıflar ve metodlar eklemişler, güzel olmuş. Örneğin önceden yazdığımız bu testi:

Assert.IsNotNull(items);
Assert.AreEqual(2, items.Count);
artık şu şekilde yazabiliriz:
Assert.That(items, Is.Not.Null);
Assert.That(items.Count, Is.EqualTo(2));
İşinize yarayabilir.

Dijkstra’nın En Kısa Yol Algoritması
ibrahim dursun @ 18 Mayıs 2008 19:06

Dijkstra’nın en kısa yol algoritması (DJK) ya da Dijkstra’nın deyişiyle “benim en kısa yol algoritmam” graf üzerinde bir noktadan diğer tüm noktalara en kısa yolu çıkarır ve bunu n noktalı bir grafta en kötü olarak O(n*n) zorlukta tamamlar. Daha önceden bahsettiğim Floyd-Warshall algoritması ise tüm noktalar arasındaki en kısa mesafeyi O(nnn) zorlukta çıkarıyordu. Dikkat ettiyseniz birisi yolu diğeri mesafeyi çıkarıyor. Algoritmanın aşamalarını ayrı ayrı değerlendirdiğimizde anlamamız daha kolay olacaktır. Örnek olarak 10×10′luk bir tahtanın üzerinde olduğumuzu düşünün. İlerlemeye (0,0) noktasından başlayıp, (9,9) noktasına ulaşmaya çalışacağız. Tahta üzerindeki her karede bir sayı olsun ve biz o kare üzerine geldiğimizde orada yazılı olan sayı kadar saniye beklemek zorunda kalalım. Bu durumda hedefimiz olan (9,9) noktasına en kısa zamanda nasıl ulaşırız? Devam…

C# 1 => 2 => 3
ibrahim dursun @ 5 Nisan 2008 15:27

C#’ın gelişmiyle birlikte söz diziminde (syntax) de bazı iyileştirmeler olduğunu heralde duymuşsunuzdur. Bu yazıda c# 1′den itibaren c# 3′e kadar ne gibi değişikler olduğunu kısaca bir toparlayalım.

Bahsedeceğim iyileştirmelerin bir çoğunun temeli C# 2′de atıldı. Örneğin C# 1′de bir formu kapatmak için bir butona event handler eklemek istediğimizde aşağıdaki gibi bir kod yazmamız gerekiyordu. Devam…

Maziye gittim şöyle bir
ibrahim dursun @ 11 Ekim 2007 22:43

İ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.

Yayılma Öncelikli Arama (Breadth-First Search)
ibrahim dursun @ 6 Ekim 2007 14:10

Recursion doğru kullanıldığı zaman çok işimize yarayabilir. Özellikle ağaç tipi data yapılarının tüm nodelarını dolaşmak istediğimizde recursiondan faydalanabiliriz. Fakat bu ağaç yapısının ne kadar derinliğe sahip olduğunu kestiremediğimiz durumlarda bu yönteme çok da bel bağlamamak lazım zira stack (yığın) taşabilir ve overflow hatasıyla karşılaşabiliriz.

Alternatif bir yöntem ise kendi yığınımızı kullanarak bu işi yapmaktır. Genel adı ile Breadth First Search (Yayılma Öncelikli Arama):

  • Bir stack yaratılır ve root node’u bu yığına eklenir. (Queue ile de yapılabilir sadece işleme sıranız değişir)
  • Herhangi bir node’un alt node’ları varsa bunlar da yığına eklenir
  • Bulunduğumuz node işlenir ve yığından bir sonraki node çekilir.
  • Yığın boşalana kadar bu işlem tekrarlanır.
Tüm dizin yapısını dolaşan örnek kod: Devam…

String de null kontrolü
ibrahim dursun @ 16 Temmuz 2007 20:42

C# ve Java gibi dillerde string genelde bir sınıf ile temsil edilir. Dolayısıyla null olma durumu mevcuttur. Null kontrolünü

if (name != null && name == "t-hex") {
...}

yazmak yerine kısaca

if ("t-hex".equals(name)) {
...}

yazmak daha bir afilli durur(muş).

C# 3.0 Yenilikleri
ibrahim dursun @ 27 Nisan 2006 09:51

C# 3.0 da kod yazımını kolaylaştırmak için bir çok yeni özellik eklenecek. Özellikle iyi bir IDE kullanmayan yazılımcıların ağzını sulandırabilecek bu özelliklerden en çarpıcı olanı bence Lamda ve Sorgu İfadeleri (SQL & XQuery) Devam…

Dot Net ile T.C. Kimlik Sorgulama
ibrahim dursun @ 25 Nisan 2006 15:35

Delphi de WSDL Importer sihirbazı ile web servislerini kullanabilmek için gerekli kodu üretip projemizde kullanabiliyorduk. Benzer bir araç .Net Framework içinde de mevcut.

Adı wsdl.exe ve kullanımı da çok basit. Parametre olarak sadece adresi geçiyorsunuz.

wdsl http://tckimlik.nvi.gov.tr/kpspublic.asmx?WSDL

Sonuçta KPSPublicWebService.cs adıyla bir dosya elde ediyosunuz. Bunu projeye eklemeniz yeterli.

KPSPublicWebService ws = new KPSPublicWebService();
String tckimlikno = edtTCKimlikNo.Text;
TCKimlikNoDogrulamaSonucu sonuc = ws.TCKimlikNoDogrula(95464647544);

»  Substance: WordPress   »  Style: Ahren Ahimsa