Category Archives: Yazılar

Google Code: Subversion’dan Mercurial’a dönüştürme

Google Code, Mayıs 2009 tarihinden beridir barındırdığı projelerde sürüm kontrol sistemi olarak SubVersion veya Mercurial kullanabilmemize olanak sağlıyor. Fakat daha önceden oluşturulmuş Subversion ambarlarının Mercurial’a dönüştürülmesinin ise elle yapılması lazım.

Dönüşüm için benim uyguladığım adımlar şöyle:

  • Cygwin‘i svn-pyhton ve mercurial paketleri ile birlikte kurun.
  • C:\cygwin altına kurulumu gerçekleştirdiğinizi varsayarsak, c:\cygwin\bin\ash.exe aracını çalıştırın.
  • /bin/rebaseall komutunu çalıştırın. (Bu işlem cygwin altında pyhton’un düzgün çalışması için gerekli)
  • c:\cygwinhome\<kullanıcıadı> klasörü altına .hgrc adında bir dosya oluşturun. Ve içeriğini şu şekilde belirleyin:

    [extensions]
    hgext.convert=
    
  • Cygwin’i çalıştırın.

  • Sırası ile aşağıdaki komutları çalıştırın:

    svn co http://<projeadı>.googlecode.com/svn svn-repo
    hg convert svn-repo hg-repo
    
  • Google code projenizin sürümleme kontrol sistemini Mercurial olarak değiştirin.

  • Yerel mercurial ambarınızı google code ambarına gönderin (push)

    cd hg-repo
    hg push https://<projeadı>.googlecode.com/hg/
    

Mercurial istemcisi olarak TortoiseHG kullanabilirsiniz. Ayrıca Visual Studio entegrasyonu için de hgscc eklentisini deneyebilirsiniz.

180 milyon dolar maliyetli bug

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.

Delphi’ye Oksijen lazım

Delphi’nin hızlı yazılım geliştirmeye getirdiği kolaylıklar anlatmakla bitmez. 90′ların sonu ve 2000′lerin başında; saniyeler içinde derleme, tüm uygulamanın tek exe olarak çıkarılabilmesi, veritabanından arayüze data bağlamadaki kolaylıkları ve arkasındaki çok büyük bir komünite ile zirvedeydi diyebiliriz.

Öncesinde Java, sonrasında .Net’in gelmesi ve Borland-Inprise-Borland-CodeGear-Embarcadero arasında sekmesi sürecinde oldukça kötü delphi sürümleri (Delphi 8, Delphi 2005, Delphi 2006) arkası arkasına geldi ve Delphi popüleritesini kaybetti. Read more »

DelphiPI 0.33 hazır

DelphiPI‘nin 0.33 sürümünü hazırladım. Bu sürümdeki bazı yenilikler:

Yerelleştirme: Şimdilik sadece Türkçe ve İngilizce dilleri destekleniyor. Yeni diller eklenebilir. Yerelleştirme işlemi için dxgettext kütüphanesini kullandım.

Paketlerin seçildiği sayfada bazı iyileştimeler yaptım. Paketleri listelerken artık listview yerine mük-kemmel virtualtreeview bileşenini kullandım. Böylece kullanıcı hem istediği paketleri seçebiliyor, hem de klasör yapısını görebiliyor. Ayrıca ağaç üzerine sağ tıklayarak çıkan yardımcı menü ile bir dosya şablonu (*d7.dpk gibi) kullanarak da paketleri seçebiliyorsunuz. Şimdilik paket bağımlılıkları ile ilgili bir geribildirim verilmiyor fakat ilerideki sürümlerde bunu da ekleyeceğim. Böylece kendisine bağımlı bir paket kaldırıldığında, bağımlı paketler de otomatik olarak kaldırılacak. Şu andaki kod bunu yapmaya müsait, sadece bu özelliği mükemmelleştirecek zaman bulamadım.

Read more »

NUnit.Framework.SyntaxHelpers

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

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? Read more »

Birkaç güzel websitesi

  • AideRSS.com Okuduğunuz bir sürü blog var fakat hepsini okuyacak kadar zamanınız yok mu? İyi içeriği olan yazıları da kaçırmak istemiyor musunuz? O zaman bu site tam size göre. Okuduğunuz blogları buraya yazın ve içerik kalitesine göre filtrelenmesini sağlayın. Mesela ben codebetter.com‘u okuyorum fakat burayı takip etmeyi bir iki günlüğüne kaçırdığınızda okunmamış gönderi sayısı 30′u geçiyor. Bende aiderss ile sadece “en iyi” olarak puanlanmış içerikleri alıyorum. Rahat ediyorum. Hemen arayın!
  • Project EULER Matematiğe ilginiz var ve ilginç matematik sorularını çözmeyi seviyorsanız Project Euler’i ziyaret edebilirsiniz. Bu sitede matematik ve geometri ile ilgili 170′in üzerinde soru var. İster kod yazarak ister kağıt kalem kullanarak bu soruları çözebilirsiniz. Çözdükten sonra forumdan diğerlerinin nasıl bir yaklaşım izlediğini görebilir, kendinizinkini paylaşabilirsiniz.
  • Sphere Online Judge Project Euler’e benzeyen bir site ama bu sefer sadece kağıt kalem yok, sadece kod ile çözüyorsunuz ve kullanabileceğiniz programlama dilleri oldukça çeşitli: (Java, C/C++, Ruby, Mono .Net, Pascal, Pyhton, vs). Çeşitli yarışmalarda çıkmış problemlerin devasa bir arşivi diyebiliriz. Problemlerin hepsinde süre kısıtlaması var. Bazı problemlerde kaynak kod boyutu veya derleyici sınırlaması var. Ben baya sardım, tavsiye ederim.
  • TopCoder SPOJ’un ticari ve popüler hali.
  • StumbleUpon Bazen internette ne yapacağınız bilemiyorsanız ve zevkinize göre farklı websitelerini rastgele gezmek istiyorsanız, gidin tarayıcınız için uygun eklentiyi indirin, bir hesap açın, ilgilendiğinizi kategorileri seçin ve sörf yapmaya başlayın. Siz stumble düğmesine bastıkça karşınıza farklı websiteleri gelecektir. Saatleriniz geçer bunu yaparken, benden uyarması.

C# 1 => 2 => 3

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. Read more »

ReSharper: Konumlanma, Arama, Tarama

Biraz da ReSharper’ın konumlanma, arama tarama özellikleri üzerinden bahsetmek istiyorum. Visual Studio’da bir dosyaya gitmek, bir tipe konumlanmak veya bir dosya içerisinde arama yapmak o kadar zor ve yavaşki Resharper’ın bu özellikleri altın değerinde oluyor. Read more »

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 »