C# dilini nereden ve nasıl öğrenirim diyenlere “bu kitaptan” diyebilirim. Çünkü kitabın yazarlarından biri de C# dilinin baş mimarı diyebileceğimiz Anders Hejlsberg’dir. Her işi ustasından öğrenmek gerektiğine inananlardan olduğum için bu kitabı edinerek hemen okumaya başladım. Kitapta C# dilinin bütün özellikleri derinlemesine anlatılmış ve yerinde örneklendirmeler yapılarak anlaşılırlık daha da güçlendirilmiştir. Bu anlamda tam bir başucu kitabı demek yanlış olmaz.
Kitaptaki örnek kodlara baktığınızda bile bu kitabın usta kalemlerden çıktığını anlayabiliyorsunuz. C# dilini anlatan kitapların çok azında bulabileceğiniz bir anlatım derinliği ve genişliği sunmaktadır. Kitap, özünde C# dilini kavratmakta ve dilin neden önemli olduğunu okuyucuya ikna edici bir dil ile anlatmaktadır.
Kitabın C# 4.0 versiyonunu okuma fırsatı buldum ve merak ettiğim konuları açıp okumaya devam ediyorum. Herkese tavsiye ederim. Kitabın yazarlarına da böyle bir eseri bizlerle buluşturduğu için teşekkür ederim.
Github üzerinde repository oluştururken karşılaşabileceğiniz sorunlardan biri “Push” komutu kullanılırken alacağınız hata mesajıdır. Benim bu sorunu yaşamama sebep olan durum, Github üzerinde repository oluştururken “Initialize this repository with a README” seçeneğini işaretleyerek README dosyasının oluşturulması neticesinde uzak depoda(repository) oluşan değişikliklerdi.
Bilgisayarım üzerinden local depo(repository) dosyalarımı “Push” komutu ile göndermeye çalıştığımda aşağıdaki hata ile karşılaştım.
Bu hatanın sebebinin uzak depodaki(repository) değişiklikleri local depo üzerindekilerle birleştirmemek olduğunu “Merge the remote changes (e.g. ‘git pull’)” mesajından anlayabiliyoruz. Yani uzak depoda olan bitenden local depo haberdar değildir. Yukarıda belirttiğim gibi uzak depo oluşturulurken README dosyası da oluşturulmuştu.
Aslında takım halinde çalışılan bir projede çalıştığımızı varsayacak olursak, takım arkadaşımızın uzak depoya attığı projeji biz tarafımıza alıp değişiklikleri birleştirmeden depoya gönderemeyiz.
Bu gibi durumlarda uzak depodaki değişiklikleri çekmek için “Pull” komutunu kullanmalıyız. Bu durumda değişikliklerin local tarafa çekilmesi, birleştirme işlemini de gerektirecek çünkü local tarafta da bir değişklik olmuş olacak.
Uzak depodaki değişiklikleri çekmek için şu komutu kullanmalıyız:
git pull origin master
“Pull” komutunun ardından “Push” komutunun düzgün bir şekilde çalıştığını görmekteyiz. Çünkü “Pull” komutu uzak depodaki değişiklikleri çekerek local depo ile birleştirdi. Böylece sorunumuz çözülmüş oldu.
GIT bir versiyon kontrol sistemidir. Yazılımcılar için geliştirme sürecinde önemli bir yeri olan versiyonlama mekanizmasını otomatikleştirebilen bir sistemdir. GIT, kökeni Linux tabanlı bir topluluk olsa da Windows tarafındaki gönüllüler sayesinde Windows dünyasına da kazandırılmıştır. Windows için GIT geliştirmek amacıyla MSys/MinGW projeleri baz alınmıştır.
Git for Windows(MinGW) projesi temel düzeyde Git kullanıcılarına hitap ederken, msysGit projesi geliştiriciler, testçiler, bakım ve dağıtım ekibi tarafına hitap etmektedir.
Hem MinGW hem de msysGit projelerinin depolama yeri Web tabanlı GitHub platformudur.
Ben kendi projelerimi versiyonlamak için msysGit uygulamasını kullanıyorum. msysGit programına buradan ulaşabilirsiniz. Programı indirip kurmak gayet basit olduğu için kurulum anlatımı yapmadım.
Programın kullanım arayüzü olarak komut ve GUI destekli olmak üzere iki seçeneği bulunmaktadır.
Git grafiksel arayüzü (Git GUI) şu şekildedir:
Git komut arayüz görüntüsü (Git Bash) şu şeklidedir:
Git Bash için bazı komutlar şu şeklidedir:
clear: Komut ekrarnını temizler.
mkdir: Bulunduğunuz dizin içerisine yeni bir dizin oluşturur.
ls: Bulunduğunuz dizindeki dosya ve dizinleri listeler.
cd: Dizin değiştirir.
git –version: Sistemde kurulu olan Git versiyonunu verir.
git init: Bulunduğu dizine “.git” adında yeni bir git deposu(repository) oluşturur.
git add: Çalıştığınız dizindeki dosyalarda oluşan değişiklikleri indekse ekler.
git status: Çalıştığınız dizindeki dosyaların indeksteki durumunu gösterir.
git commit: İndekse yazılmış tüm değişiklikleri alır ve bu değişiklikleri işaret eden yeni bir icra(commit) nesnesi oluşturur ve bu icra nesnesine şube ayarlar.
git remote: uzak depoların takma adlarını listeler.
git remote add: projenize yeni bir uzak depo ekler.
git push: Değiştirilmiş tüm yerel nesneleri uzaktaki depoda bulunan şubelere atar.
Yukarıdaki komutlar ile bir depo(repository) oluşturup uzaktaki bir depoya gönderme işlemi yapılabilmektedir. Bu komutlardan başka birçok komut vardır ancak şimdilik yeterli olacak komutlar elimizdekilerdir.
Örnek Uygulama
Geliştiriciler olarak projelerimizi versiyonlar halinde uzak bir depoda tutmak istediğimizde aklımıza ilk gelecek olan GitHub platformudur. Git de zaten bu platforma veri gönderebilmektedir.
Bu örnek uygulamamızda bir Visual Studio projemizi msysGit yardımıyla GitHub üzerinde oluşturduğumuz bir depoya(repository) göndermeye çalışalım.
Git tarafında ön bilgiye sahip olduğumuza göre bir de GitHub tarafında neler yapmamız gerektiğine göz atalım. Öncelikle GitHub web sayfasında bir hesap oluşturmamız gerekmektedir. Hesap oluşturduktan sonra GitHub web sayfasında “Create New Repository” veya “New Repository” şeklinde oluşturulmuş link yardımıyla yeni depo oluşturma sayfasına yönlendiriliriz.
Yukarıdaki resimde de görüldüğü üzere TestConsoleApplication adında bir repository oluşturuyoruz.
Dikkat: Github üzerindeki repository içerisine veri gönderebilmek için bir güvenlik seviyesi ayarı olan SSH Key oluşturup sitedeki Account Settings bölümüne kaydetmemiz gerekmektedir. Bu işlemi Github burada bizim için anlatmış. Bu ayarı yapmadığımızda gönderdiğimiz veriyi almayacaktır.
Bu güvenlik ayarını da başarılı bir şeklide yaptıktan sonra Visual Studio ortamında oluşturulmuş “TestConsoleApplication” adında bir c# projesini Github depomuza gönderelim.
Projemizi D sürücüsü üzerinde TestConsoleApplication adında bir dizinde tutacağız ve Git üzerinden bu dizinde işlem yapacağız.
KOMUT:1 D sürücümüzde projemizin bulundupu TestConsoleApplication dizinine girer.
KOMUT:2 Dizin içerisine .git adında bir yerel depo oluşturur. Oluşturulan bu dizin (.git) gizli olabilir. Göremezsseniz klasör seçeneklerinden “gizli dosya ve klasörleri göster” seçeneğini seçip bakabilirsiniz.
Kocaeli Büyükşehir Belediyesi İSU Genel Müdürlüğünde hazırlanan İKABİS (v.1.0) projesi İSU bünyesinde yayına açılmıştır.
Projenin amacı, imalatı tamamlanan altyapıların Coğrafi Bilgi Sistemi(CBS) standartlarına getirilmiş sayısal bilgilerinin WEB ortamından yayına sunulmasıdır.
Yayına açılan altyapı bilgileri, koordinatlı uydu fotoğrafı üzerinde görüntülenebilmektedir. Bu sayede hangi altyapı bilgisinin nerede olduğu kolayca bulunabilmektedir.
Yayına açılan altyapı bilgileri şu şeklidedir.
İçmesuyu hatları
Kanalizasyon hatları
Yağmursuyu hatları
Su depoları
Arıtma tesisleri
Terfi merkezleri
Abone noktaları
Dere Islahları
Vanalar
Yangın muslukları
Diğer donatı bilgileri
Ben bu projenin veritabanı standartlarının geliştirilmesi ve WEB yazılımının hazırlanmasından sorumluydum. Harita mühendisi arkadaşlarım Azize KOÇ, Yusuf Ziya DEMİRCİ ve Abdullah Talha DERİCİ de harita verilerinin hazrılanması, altyapıların sayısallaştırılması, CBS’ye hazır halegetirilmesi ve ArcGIS server’da yayına açılması sürecinde görev almışlardır. 6 ay gibi bir sürenin sonunda projeyi başrıyla hayata geçirmiş bulunuyoruz.
Projeyle ilgili bazı ekran görüntüleri şu şeklidedir.
Projenin altyapısın oluşturan teknolojiler ise şu şeklide:
CAD Programları (Altyapıların çizimi)
ArcGIS (CAD verilerinin CBS formatına dönüştürülmesi)
ArcGIS Server (Map service yayını)
Oracle database (ArcSDE)
Esri Silverlight API (Web Yazılımı)
Uygulamanın sonucunda bir WEB yazılımı ortaya çıkmıştır. Bu WEB yazılımının arkasında iyi bir ekip çalışması olduğu görünmektedir. Harita çalışmasından sistem mimarisine, veritabanından yazılım geliştirmeye kadar değişik süreçler iç içedir.
Nakliye Noktası projesi, yük sahipleri ile nakliyecileri buluşturan bir platformdur. Üye olan kullanıcılar ücretsiz üye olarak yüklerini ve nakliye için bekleyen boş araçlarını bu sitede yayınlayarak daha kolay bir şeklide ihtiyaçlarını karşılayabilmektedirler.
www.nakliyenoktasi.com sitesinde yayınlanan ilanların sahipleri ile iletişim bilgilerine üye olan kullanıcılar ulaşabilmektedir.
Araçlarıyla nakliye işine çıkan kullanıcılar dönüş tarihlerini ilan olarak bıraktıklarında dönüş tarihine kadar nakliyeci arayan kullanıcılar aranarak işlerini garantiye alabilmektedirler.
Tüm nakliyeciler ve yük göndermek isteyen kullanıcıları aramızda görmekten mutluluk duyarız.
3 ile bölünebilen sayılar için sonuç Fizz
5 ile bölünebilen sayılar için sonuç Buzz
3 ve 5 ile bölünebilen sayılar için sonuç FizzBuzz
Ne 3 ile ne de 5 ile bölünebilen sayılar için sayının kendisini veren bir birim test pratiğidir.
Yukarıda birim testlerin listesi çıkarılmıştır ve bu listeye göre testler icra edilmektedir.
NOT: Makinemdeki donanım (işlemci) yetersizliğinden dolayı hem görüntü kaydı hemde Visual Studio’nun çalışması sırasında NCrunch aracı eş zamanlı derlemelerde biraz yavaş kaldı. Çünkü video kaydı başlar başlamaz işlemci %100’lere dayandı.
NCrunch, kodlama esnasında birim testleri (unit tests) otomatik ve eş zamanlı olarak çalıştıran bir Visual Studio eklentisidir.
Projelerini teste dayalı geliştirenler için mükemmel bir araç diyebilirim. Performans konusunda donanımınızın yeterliliğine ve test sayınıza göre NCrunch analiz süresi değişiklik gösterebilir.
NCrunch aracı, siz kodunuzu yazarken arka planda otomatik olarak kodu testlerden geçirerek durumu size bildirir.
İsterseniz testleri otomatik olarak değil de el yordamıyla da yaptırabilirsiniz. Testlerin durumunu aşağıdaki pencereden de görebilirsiniz.
Büyük projeler düşünülerek, Visual Studio IDE performansı üzerindeki etkileri en aza indirmek için, proje mimarisindeki bağımlılıkları analiz ederek, testleri yürütme işlemi için öncelik sırasına koyar ve asenkron süreçler, ek işlemci çekirdeği kullanır.
Bir diğer özellik ise test kapsamına girmeyen kodların belirlenmesidir.
Siyah noktayla işaretlenen satırların test edilmediğini anlayabilmekteyiz. Yeşil noktayla işaretlenen kod satırlarının testlerden başarıyla geçtiğini göstermektedir.
Testlerin çalıştırılma süresini ölçen özelliği sayesinde ise uzun sürebilecek testler işaretlenir.
NCrunch aracının noktasal işaretleme özelliğinin renkleri isteğe göre değiştirilebilmektedir.
Test Driven Development yapanlar için çok iyi bir araçtır.