7 Kasım 2013 Perşembe

Versiyon Kontrol Sistemleri

Versiyon Kontrol Sistemi; bir dosya veya dosyalar üzerinde zaman içerisinde yapılmış tüm değişiklikleri tutan sistemdir.

Versiyon Kontrol Sistemi özellikleri:

  • Dosyanın veya projenin tamamının daha önceki, değişiklik yapılmış/yapılmamış herhangi bir hâline geçme imkânı sağlar
  • Zaman içerisinde yapılan değişikliklere göz atma imkânı sağlar
  • Problem oluşturan veya faydalı olan bir kısım üzerinde kimin değişiklik yaptığını öğrenme imkânı sağlar
Versiyon Kontrol Sistemleri Tipleri
  1. Yerel Versiyon Kontrol Sistemleri
  2. Merkezi Versiyon Kontrol Sistemleri
  3. Dağıtık Versiyon Kontrol Sistemleri
1. Yerel Versiyon Kontrol Sistemleri

En eski versiyon kontrol sistemi yaklaşımıdır. Üzerinde çalışılan proje ve yapılan değişiklikler, kullanıcı makinası üzerindeki veritabanında tutulur. Yerel versiyon kontrol sisteminde yalnızca bir kullanıcı etkin bir şekilde çalışabilir. Metin dosyaları dışındaki dosya türleri üzerinde versiyonlama yapmak oldukça zordur. Sunucu yönetiminde, yalnızca yönetici yapılandırma dosyaları ve script'ler üzerinde sıkça çalıştığından dolayı; bu yaklaşım tercih edilebilir.
En popüler yerel versiyon kontrol sistemi RCS(Revision Kontrol System)'dir.
Yerel Versiyon Kontrol Sistemleri Çalışma Mimarisi

2. Merkezi Versiyon Kontrol Sistemleri

İstemci-sunucu mimarisi şeklinde çalışan versiyonlama yaklaşımıdır. Yerel versiyon kontrol sistemlerinde birden fazla kişinin proje üzerinde etkin çalışabilmesi için ortaya atılmış bir versiyonlama sistemidir. Proje katkıcılarının ortak olarak kullandığı bir veri deposu vardır. Katkıcılar bu depo üzerinden checkout ve commit işlemlerini gerçekleştiriler.
İlk merkezi kontrol sistemi CVS(Concurrent Version Control System)'dir ve en popüler olan SVN(Subversion), CVS baz alınarak gerçekleştirimi yapılan bir versiyon kontrol sistemidir.
Merkezi Versiyon Kontrol Sistemleri Çalışma Mimarisi


3. Dağıtık Versiyon Kontrol Sistemleri

Merkezi versiyon sistemlerinin "katkıcıların offline çalışabilme" ve "deponun zarar görmesi durumunda geri getirilmesi" gibi durumlardaki eksikliklerinden dolayı ortaya atılmış bir versiyonlama sistemidir. Uzak depo sunucusu dışında, proje üzerinde çalışan her makina projenin tamamının kopyasını yerelinde tuttuğundan dolayı; her biri birer depo görevi görmektedir aslında. Böylelikle katkıcılar proje üzerinde değişiklik yapmak istediklerinde veya proje geçmişine göz atmak istediklerinde uzak depo ile iletişime geçmek zorunda değildir. Ayrıca katkıcılar, uzak depoyu hiç işin içine katmadan birbirleri arasında da veri alışverişi yapabilirler.
Dağıtık Versiyon Kontrol Sistemleri Çalışma Mimarisi

Dağıtık versiyonlama sistemi öncülerinden birisi BitKeeper'dır ve son dönemde en yaygın kullanılan örneği olan, Linus Torvalds'ın geliştirdiği Git'in geliştirilmesinde de ilham kaynağı olmuştur. Linux çekirdeği geliştirilmesi sırasındaki versiyonlama işi bir dönem BitKeeper'da yapılıyordu. BitKeeper'ın telif hakkı sahibi Larry McVoy'un bu ürünün artık ücretli olduğunu duyurmasının ardından, Andrew Tridgell BitKeeper protokollerini geriye mühendislik(reverse engineering) yardımıyla çözümlemiş ve Git'in önemli bir temel taşını oluşturmuştur.
Git'in tasarımında Linus 3 temel kriter belirlemiştir:
  1.  Merkezi kontrol sisteminin öncüsü olan CVS'i "ne yapmama" konusunda örnek al ve tasarımı ona göre şekillendir.
  2. BirKeeper benzeri, dağıtık çalışmayı destekleyen iş akışları oluştur.
  3. Bozulma(corruption) anında güçlü koruma önlemleri al.
Git'i denemek isterseniz; temel Git terimlerinin oldukça faydalı açıklamalarının da yer aldığı sayfaya buradan erişebilirsiniz.

Referanslar
  1. http://git-scm.com/book
  2. http://en.wikipedia.org/wiki/Git_%28software%29
  3. http://en.wikipedia.org/wiki/Apache_Subversion#cite_note-26
  4. http://www.pushok.com/software/svn-vscvs.html
  5. http://en.wikipedia.org/wiki/Revision_Control_System
  6. http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/



1 Kasım 2013 Cuma

AngularJS - Directives

Bu yazıda, AngularJS'de directive'lerin ne olduğundan ve hangi durumlarda kullanıldığından bahsedeceğim. Ayrıca directive kullanımı ile ilgili bir html kod bloğu paylaşacağım.

Directive nedir?
AngularJS'de directive'ler, özel(custom) HTML element'leri oluşturmak ve DOM işleme için kullanılmaktadır. Directive'ler, attribute, element, class ve comment gibi DOM elemanlarına özel davranışlar eklememizi sağlar.

Directive ne için kullanılır?
Mevcut bir element'e yeni davranışlar eklemek istediğimizde veya kendi özel bileşenlerimizi(component) oluşturmak için directive'ler kullanılır. Örneğin formunuzda yeni bir girdi elemanı kullanmak istiyorsanız <input> etiketin "type" attribute'u için yeni bir tip tanımlayabilirsiniz. Bu durumda directive kullanılabilir. Bunun dışında; yeni <input> tipi için yeni bir doğrulama(validation)'ı da directive olarak tanımlayabilirsiniz.

Angular ile birlikte gelen ön tanımlı pek çok kullanışlı directive vardır. Her ön tanımlı Angular directive'i ng- şeklinde başlamaktadır. Ancak bunların arka planda gerçekletirimi camelCase olarak yapılmaktadır. Örnegin; gerçekletirimi ngDisabled şeklinde yapılan directive'in HTML kodunda kullanımı ng-disabled şeklinde olmalıdır. Kendi directive'imizi yazarken de bu duruma dikkat etmemiz gerekiyor. Ön tanımlı directive'lerin bir kaçını aşağıdaki örnekte kullanacağız ancak, tüm directive listesine buradan erişebilirsiniz.

<html ng-app>
    
        
 Angular directives test sayfası
 
    
    
        

Kişi listesi

  • {{person.firstname}} {{person.lastname}}
</html>

Kişi listesi

  • {{person.firstname}} {{person.lastname}}
HTML üzerinde oynama yapmak istiyorsanız, benzer kodda Plunker üzerinde burada çalışabilirsiniz.

Kodu inceleyecek olursak; hmtl etiketindeki ng-app directive'i, bu html'in bir Angular uygulaması olduğunu ifade ediyor ve auto bootstrap sağlıyor. ng-init directive'ini kullanarak HTML üzerindeki herhangi bir bileşen'e üzerinde çalışabileceği verileri gönderebiliyoruz. ng-repeat="person in persons"; "persons" dizisindeki her bir elemanı "person" nesnesi olarak temsil edeceği anlamına geliyor(for each diyebiliriz). ng-model ile checkbox'ın model ismini belirtiyoruz. ng-disabled directive'i ise; ilgili elemanın etkin olup olmayacağını belirlemek için kullanılıyor. ng-disabled içerisindeki değeri de checkbox'daki model'in değerine göre belirleniyor.