Thursday, September 26, 2013

Continuous Integration (Sürekli Entegrasyon) Nedir? Travis-CI Nedir?

Continuous Integration (Sürekli Entegrasyon) yaklaşımı birlikte kullanılan VCS ile yapılan her commit-push işleminden sonra kaynak kodu derleyipi testlerini çalıştırıp yapılan son değişikliklerin projenin sağlık durumuna etkisini görmemizi sağlar. Buradaki ilk akla gelen soru şüphesiz "Projeyi biz derleyemiyormuyuz? / Testlerini çalıştıramıyor muyuz?" Sorunun cevabı, evet. Fakat bir projenin derlenişinin (alışık olmayarak masaüstü yazılımdan bahsediyoruz) ve test edilişinin onu beklerken bize ne kadar vakit kaybettireceğini biliyor muyuz? Continuous Integration'a ihtiyacımız işte tam bu noktada oluyor.

Kullanılan Continuous Integration servisi, asenkron (bizden bağımsız) olarak son commit-push ile beraber projeyi derliyor ve testleri gerçekleştirip bize sonucu belirtiyor, biz de hatrı sayılır bir zamanı ilerleme çubuğunun karşısında geçirmiyoruz.

---

Gel gelelim, Travis-CI.org servisine. Travis-CI servisi açık kaynak uygulamalar için Continuous Integration hizmeti vermektedir. GitHub'la eşsiz etkileşmiyle; GitHub'da bulunan repositorylerimizi otomatik algılayıp kurulum aşamasını da kısaltmaktadır. Birçok dili desteklemesi de birçok community tarafından kullanılmasının sebei olmuştur. An itibariyle şu dilleri desteklemekte: Clojure, PHP, Java, Node.js (JavaScript), Ruby, Python, Objective-C, Scala, Go, Perl.

Şimdilik kullanım hakkında detaylar veremeyeceğim. İlerleyen zamanlar için ayrı bir blog konusu olarak akılda kalmalı.

Kaynaklar
http://www.serdardemir.net/continuous-integration-nedir.html
http://net.tutsplus.com/tutorials/tools-and-tips/travis-ci-what-why-how/

Wednesday, September 18, 2013

Singleton (Tekil Nesne) Tasarım Deseni

Merhabalar,

Bugün en bilinen ve ihtiyaç duyulan 'Tasarım Desenleri'nden biri olan Singleton'u inceleyeceğiz/öğreneceğiz.

Öncelikle, Singleton için Türkçye'ye iyi bir karşılık arayışdaydım. Biraz Googling'ten sonra bu desene kendi çapımda 'Issız Nesne' olarak adlandırmayı uygun gördüm. Fark ettiğiniz üzere bu karşılık Çağan Irmak imzalı 'Issız Adam' filminden gelmekte. Belki de Singleton için daha fazla açıklamaya gerek kalmamıştır, bu benzetmeden sonra. ;P

Olay: Singleton 'Tasarım Deseni' ile hazırladığımız sınıftan sadece bir tane 'örnek' (instance) oluşturmamızı, ve buna her yerden erişebilmemizi sağlar.
Neden: Tamamiyle OOP tabanlı bir proje üzerinde çalıştığınızı düşünün. Bu projeyi elbetteki bazı yönetici sınıflarınız da olacaktır. Örnek vermek gerekirse, uygulamanızda tek bir Database sınıfının varlığı kaçınılmazdır. İşte bu noktada bir uygulamada Database sınıfından kaç tane 'örnek'e (instance) ihtiyacımız olacaktır? Cevap sırıtmakta, sadece bir!

PHP ile Singleton çalışması:

Loading ....

PHP5.4 ile birlikte "traits" denen bir özellik eklendi. Bu traitler dediğimiz özellik, belirteceğimiz property (özellik) ve methodlarının (metot) traiti kullanacağımız sınafa göre şekillenmesi amacıyla eklendi. Aslında bu ayrı bir yazı konusu olurdu. Ancak basit anlamda anlatmak için yeterli cümleleri kurduğuma inanıyorum. Şimdi yapacağımız şey ise traitleri kullanarak Singleton tasarım desenini tüm sınıflarımızda kullanabilmek. Bu sayede DRY (Don't Repeat Yourself) ilkesini de gerçekleştirmiş olacağız. Kalıtım'ın (Inheritance) da dibine vurduğumuz söylenebilir.
Loading ....

JavaScript ile Singleton çalışması:
Loading ....

Java ile Singleton çalışması:
Loading ....

Ruby ile Singleton çalışması:
Loading ....

Monday, September 16, 2013

Git "Signed-off" Nedir?

Büyük çaplı açık kaynak projelerde ana repoya pushlanan o kadar commit bulunmasından dolayı, commitin kime ait olduğunun bilinemesi için bir ihtiyaç olarak çıkmış, commit mesajınızın sonuna "Signed-off-by: xxx <xxx@xxx.xxx>" satırına Signed-off (satırı) denir.

Günümüzde Git "incelemelerini" GitHub, BitBucket gibi web servislerinden karşıladığımızdan dolayı (CLI'ya saygımız sonsuz!), açıkçası Signed-off satırını gerekli bulmuyorum. Ancak geleneklere sağdık kalmakta ısrarcı projelerde Signed-off (satırı) eklenmesi isteniyor. Bu son derece basit. Commit komutuna --signoff parametresi eklenmesi yeterli oluyor. Tabii isim ve mail adresinizin "global" olarak ayarlanmış olması gerekli.

Paragraf Soruları Nasıl Çözülür?

FEM'in bu yaklaşımı gayet mantıklı geldi.

Post by FEM.

Git 'Fork'umuzu Ana Repo ile Güncel Tutmak

Merhaba,

Git'in "dağıtık" yapısı her ne kadar güzel işlere yarasa da bir problem de oluşturmuyor değil.

Çok büyük bir komüniteye sahip bir projede çalıştığınızı (örneğin ben SMF için kod yazıyorum) düşünün. Siz kendi forkunuzda bir şeyler yaparken ana repoda dönen taklalardan bir haber olak istemezsiniz. Kendi forkunuzu ana repoyla arada eşleştirmek gerekir. Bu yazının ana fikri de budur.

CLI'dan $ git remote -v komutunu çalıştırdğımızda bize aşağıdaki gibi, projemizin uzak kaynakları (remotes) verilecektir:
origin https://github.com/user/repo.git (fetch)
origin https://github.com/user/repo.git (push)

Bizim buraya ana repoyu eklememiz da gerekli -ki oradan güncel verileri alabilelim. Bunu aşağıdaki git komutu ile yapıyoruz:
$ git remote add upstream https://github.com/anaUser/anaRepo.git
Şimdi $ git remote -v komutunu çalıştırdığımızda 'upstream' isminde ana repoya ait uzak kaynak (remote) eklenmiş olarak görünmeli:
origin    https://github.com/user/repo.git (fetch)
origin    https://github.com/user/repo.git (push)
upstream  https://github.com/anaUser/anaRepo.git (fetch)
upstream  https://github.com/anaUser/anaRepo.git (push)
Harika! Şimdi yapılacak işlem, 'upstream'den değişiklikleri öğrenip kendi forkumuza uygulamak:

# 'upstream'den değişiklikleri çektik:
$ git fetch upstream 
# Kendi forkumuza uyguladık:
$ git merge upstream/master
Bu kadar.

---

Bunu sadece ana repo için uygulamak zorunda değilsiniz. Diğer kullanıcıların forklarından da bu adımlarla değişiklikleri kendi forkunuza alabilirsiniz.

Sunday, September 15, 2013

Tasarım Desenleri Serüvenleri

Merhabalar,

'Tasarım Desenleri' konulu uzun süreli bir serüven yaşayacağız. Bu serüvende bizi yanlız bırakmayacak değerli dostlarımız PHP, Java, JavaScript ve Ruby dilleri olacaktır. 4 dili birden kullanmamızın tabii ki bir sebebi var: Dil yeteneklerimizi geliştirebilmek.

 'Tasarım Desenleri'ni tam anlamıyla kavrayabilmek amaçlı bir serüven olacak bu. Serüvenlerimizde olabildiğinde güncel yaşamda karşımıza çıkabilecek örnekler kullanıp öğrenme eğirimizi minimuma düşürmeye çalışacağız.

Öğreneceğimiz 'Tasarım Desenleri'ni kavramamıza yardımcı olacak UML diagramlarından da yararlanacağız tabii. Bu nedenle UML'ler hakkında en azından başlangıç seviyesinde bir bilgi edinmeniz önerilir.

Eğer 'Tasarım Desenleri' konusunda 'Nedir?' sorusu ile başlayayacaksanız sizi buradan Wikipedia sayfasına alalım.

Serüvenler:

Kurucu Tasarım Desenleri (Creational Design Patterns)

Yapısal Tasarım Desenleri (Structural Design Patterns)

Davranışsal Tasarım Desenleri (Behavioral Design Patterns)

Saturday, September 14, 2013

Merhaba Dünya!

Merhaba! Ben, Berat Doğan. PHP ağırlıklı olmakla birlikte "Yazılım Geliştiricliği" ile uğraşıyorum.

Bu blog ise mesleki tecrübeleri ve kişisel düşünceleri Dünya'ya sunmak sebebiyle açıldı. Yakında tekrar görüşmek üzere!