Dubluve.net » Boğaç Aslanyürek http://www.dubluve.net Biz de yazılımcıyız Wed, 18 Feb 2015 19:18:05 +0000 tr-TR hourly 1 http://wordpress.org/?v=3.9.1 Sayısal Veri İçeren Karakter Alanlar http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/ http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/#comments Wed, 16 Jul 2014 16:39:40 +0000 http://dubluve.net/?p=2875 Oracle veri tabanında, sayısal veri içermesi beklenen karakter tipinde (CHAR,VARCHAR) alanlar sorun yaşamak için birebirdir. Örneğin müşteri numarası tutulan bir alana, servis ve grafik arayüz seviyesinde yeterli kontroller yapılmazsa müşteri adı, soyadı..vs gibi bilgiler yazılıyor olabilir :) Bu alanda to_number() kullanarak bir sorgu yazdığınızda ve ya tabloyu bu alan üzerinden başka bir tablodaki nümerik bir alana bağlamak istediğinizde ORA-01722 hatası alırsınız.

Alanın yer aldığı tablodaki satırları düzeltmek için hangisinde hata olduğu bulmak da ayrı bir sorundur. Bunun için UPPER () ve LOWER () metotlarını kullanabilirsiniz. UPPER () ve LOWER () metotları numerik değerler için aynı, karakter değerleri için farklı sonucu vereceğinden, hatalı satırlara ulaşabilirsiniz. Diyelim ki tablomuzun adı MUSTERI, alanın adı MUSTERINO olsun:


CREATE TABLE MUSTERI
(
RECORDOID NUMBER(16) NOT NULL,
MUSTERINO VARCHAR(10) NOT NULL,
MUSTERIADI VARCHAR(10) NOT NULL
);

Tabloya bazı kayıtlar atalım:


Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(4, '!', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(3, '-', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(2, 'bogac', 'aslan');
Insert into MUSTERI
(RECORDOID, MUSTERINO, MUSTERIADI)
Values
(1, '100', 'bogac');
COMMIT;

Tabloyu yarattıktan sonra geçersiz değerler içeren satırları bulalım:


SELECT *
FROM MUSTERI M
WHERE UPPER(M.MUSTERINO) != LOWER(M.MUSTERINO)

Bu çözüm UPPER ve LOWER metotlarında aynı sonucu veren bazı diğer karakterler (“!”,”-” gibi) için yeterli olmayabilir, sadece bu karakterleri içeren satırlar olduğundan şüpheleniyorsanız ek sorgular yazmak gerekebilir. Sorunla Oracle veri tabanında karşılaşmış olsam da, diğer veri tabanı sistemleri için de çözüm olacağını düşünüyorum.

Kolay gelsin :)

]]>
http://www.dubluve.net/2014/07/16/sayisal-veri-iceren-karakter-alanlar/feed/ 0
Owning Side/Inverse Side Terimleri Ne Anlama Geliyor http://www.dubluve.net/2013/02/06/owning-sideinverse-side-terimleri-ne-anlama-geliyor/ http://www.dubluve.net/2013/02/06/owning-sideinverse-side-terimleri-ne-anlama-geliyor/#comments Wed, 06 Feb 2013 15:58:03 +0000 http://dubluve.net/?p=2444 Bugün Doctrine dokümantasyonunu okurken, kafamı karıştıran bir konu oldu. Dokümantasyonda belirtilen “owning side” ifadesi, yani iki nesne arasındaki “sahip” olan taraf, bildiğimin tam tersi bir anlamda kullanılmıştı. Örneğin bir müşterinin siparişlerinden bahsedersek, “Müşteri” değil, “Sipariş” tablosu sahip taraf olarak belirtilmişti.

Bu durumu araştırırken, cevabımı stackoverflow’da buldum. Burada bir cevapta anlatıldığı üzere, OO kodlama yaparken düşündüğümüz sahip taraf, yukarıdaki örnekte tabii ki “Müşteri” oluyor. Yani müşteriye ait siparişler olacağından, müşterinin siparişlere “sahip” taraf olduğunu düşünüyoruz.

Fakat bu durum, ORM jargonunda tam tersi olarak belirtiliyor. Müşterilerin ve siparişlerin tabloları olduğunu düşünelim. Siparişler tablosundaki her bir sipariş, bir müşteri referansı tutacaktır. Yani siparişler tablosunda, ilgili müşteriye ait bir referans foreign key olarak tutulacaktır. İşte ORM ile ilgili konuşurken, “sahip taraf (owning side)” bu foreign key’e sahip olan taraf olarak kabul ediliyor. Yani OO programlama yaparken düşündüğümüzün tam tersi :)

Umarım bu bilgi faydalı olur. İlerleyen zamanlarda nesneler arası bağlantılar (assosication) ve bağlantı yönleri (unidirectional-bidirectional) hakkında da bir yazı hazırlayacağım. Örneğin yukarıda bahsettiğimiz durum Unidirectional ManyToOne bağlantıya bir örnek teşkil ediyor.

Tekrar görüşmek üzere.

]]>
http://www.dubluve.net/2013/02/06/owning-sideinverse-side-terimleri-ne-anlama-geliyor/feed/ 4
Symfony2 Formlarini Ozellestirmek ve Bootstrap CSS http://www.dubluve.net/2012/10/30/symfony2-formlarini-ozellestirmek-ve-bootstrap-css/ http://www.dubluve.net/2012/10/30/symfony2-formlarini-ozellestirmek-ve-bootstrap-css/#comments Tue, 30 Oct 2012 21:28:43 +0000 http://dubluve.net/?p=2179 Hazırladığım bir projede Symfony2 formlarını özelleştirerek Bootstrap CSS ile entegre etmek istedim. Bunu başarmak için tabii ki Symfony2′de bir formül var: Form Themes. Symfony2 ile oluşturulan formlardaki tüm elemanların formatlarının tutulduğu bir dosya bulunuyor. Bu formatlarda istediğimiz gibi değişiklik yaparak, örneğin <div> tag’leri ekleyerek ve ya sınıflar atayarak Bootstrap ile uyumlu hale getirebiliyoruz.

Bu yazıda Bootstrap CSS’in detayından bahsetmeyeceğim, fakat genel olarak ön yüz tasarımcılarının işini kolaylaştıran, daha da önemlisi yazılım geliştiricileri tasarım yapmaktan kurtaran bir CSS framework’u olduğunu söyleyebiliriz. Twitter tarafından tasarlanan bu framework, kullanım kolaylığı, tarayıcılarla uyumu ve estetik güzellik gibi çok iyi özelliklere sahip.

Boostrap Kurulumu

Öncelikle Bootstrap CSS indirip uygulamamıza dahil edelim. Şu adresten Bootstrap için gerekli dosyaları indirdikten sonra web klasörü altına açıyoruz. Daha sonra kullandığımız layout içerisinde bootstrap için gerekli dosyaları dahil ediyoruz.

# app/Resources/views/base.html.twig
<head><link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet"></head>
<body>
<script type="text/javascript" src="{{ asset('js/bootstrap.min.js') }}"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script></body>

Bootstrap ile birlikte kullanabileceğiniz bazı javascript eklentileri de bulunuyor, bunlar jQuery gerektirdiğinden bu kütüphaneyi de dahil ediyoruz.

Symfony2 Formlarını Özelleştirmek

Symfony2′de oluşturduğumuz formları sayfada gösterirken bazı fonksiyonlar kullanıyoruz. Örneğin integer tipinde bir alanı integer_widget metodundan faydalanıyoruz. Fakat oluşan çıktının formatını değiştirmek istersek, iki yöntem kullanabiliriz. Birisi sadece ilgili fom için bu metodun çıktısını değiştirmek. Bu her ne kadar daha basit gibi görünse de, aynı işleme başka yerde ihtiyacımız olduğunda eziyet olacaktır. Bu yüzden bu yönteme ek olarak tüm formlarda bir metodun çıktısını değiştirmek için de bir yöntem bulunuyor.

Önce sadece ilgili formda form_row metodunu değiştirelim:

#src\Dubluve\NewBundle\Default\new.html.twig
{% extends '::base.html.twig' %}
{% form_theme form _self %}
{% block form_row %}
{% spaceless %}
    <div class="control-group">
        {{ form_label(form) }}
        {{ form_errors(form) }}
        <div class="controls">{{ form_widget(form) }}</div>
    </div>
  {% endspaceless %}
{% endblock form_row %}
{% block content %}
    {{ form_row(form.email) }}
{% endblock %}

Bu sayfada kullanılan form için form_row metodu farklı bir çıktı oluşturacak, fakat diğer sayfalardaki formlar için çıktı aynı olacaktır.

Eğer bu değişikliğin tüm formlar için geçerli olmasını istiyorsak kendi formatlarımızın bulunduğu bir dosya oluşturmamız gerekiyor. Yeni dosyada çıktısını değiştirmek istediğimiz metodlar olacak, diğerleri ise eskisi gibi çıktı oluşturmaya devam edecek. Yeni dosyayı proje klasörü içerisinde src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig  dosyasını yaratıyoruz.

#src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig
{% extends 'form_div_layout.html.twig' %}
 {% block form_row %}
{% spaceless %}
    <div>
        {{ form_label(form) }}
        {{ form_errors(form) }}
        <div>{{ form_widget(form) }}</div>
    </div>
  {% endspaceless %}
{% endblock form_row %}

Dosyadaki extends ifadesi, form_div_layout.html.twig dosyasını baz aldığımızı belirtiyor. Dolayısıyla değiştirilmeyen form elemanları form_div_layout.html.twig dosyasındaki gibi kalacaktır. Yeni dosyayı  oluşturduktan sonra config.yml dosyasını da aşağıdaki şekilde güncelliyoruz ve bu dosyanın global olarak kullanılacağını belirtiyoruz.

# Twig Configuration
twig:
    form:
      resources:
        - 'DubluveNewBundle:Form:bootstrap.html.twig'

Bootstrap İle Entegrasyon

Yukarıdaki yöntemleri anlattıktan sonra aslında sadece bootstrap ile değil herhangi bir CSS framework ile entegrasyon oldukça basit. Aslında sadece bootstrap dosyalarını sisteme entegre etmek bile güzel bir görünüm sağlıyor :) Hazırladığım projede tüm formların bootstrap dokümantasyonunda anlatılan horizontal-form formatında olmasını ve hata mesajlarının bootstrap formatında çıkmasını istemiş ve dosyayı buna göre düzenlemiştim. Aşağıda kullandığım dosyayı görebilirsiniz.

#src\Dubluve\NewBundle\Resources\views\Form\bootstrap.html.twig
{% extends 'form_div_layout.html.twig' %}
{% block form_row %}
{% spaceless %}
{% if not form.children %}
<div class="control-group">
{{ form_label(form) }}
{{ form_errors(form) }}
<div class="controls">{{ form_widget(form) }}</div>
</div>
{% else %}
{{ form_errors(form) }}
{{ form_widget(form) }}
{% endif %}
{% endspaceless %}
{% endblock form_row %}
{% block form_label %}
{% spaceless %}
{% if not compound %}
{% set label_attr = label_attr|merge({'for': id}) %}
{% endif %}
{% if required %}
{% set label_attr = label_attr|merge({'class': (label_attr.class|default('') ~ ' required control-label')|trim}) %}
{% endif %}
{% if label is empty %}
{% set label = name|humanize %}
{% endif %}
<label {% for attrname, attrvalue in label_attr %} {{ attrname }}="{{ attrvalue }}"{% endfor %} >{{ label|trans({}, translation_domain) }}</label>
{% endspaceless %}
{% endblock form_label %}
{% block form_errors %}
{% spaceless %}
{% if errors|length > 0 %}
{% for error in errors %}
<div class="alert alert-error">{{
error.messagePluralization is null
? error.messageTemplate|trans(error.messageParameters, 'validators')
: error.messageTemplate|transchoice(error.messagePluralization, error.messageParameters, 'validators')
}}</div>
{% endfor %}
{% endif %}
{% endspaceless %}
{% endblock form_errors %}
]]>
http://www.dubluve.net/2012/10/30/symfony2-formlarini-ozellestirmek-ve-bootstrap-css/feed/ 8
Symfony2 Türkçe Belgeleri http://www.dubluve.net/2012/06/12/symfony2-turkce-belgeleri/ http://www.dubluve.net/2012/06/12/symfony2-turkce-belgeleri/#comments Tue, 12 Jun 2012 15:10:30 +0000 http://dubluve.net/?p=1435 Yaklaşık 1 ay önce Symfony2 yazılarıma denk gelen Sedat Kocadoğan’ın benimle iletişime geçmesiyle, Symfony2 için Türkçe dokümantasyon oluşturmak amaçlı bir avuç gönüllü insan olarak bir araya geldik. Benim çok yoğun bir dönemime rastladığı için pek katkıda bulunamasam da Osman Üngür’ün de katkılarıyla dokümantasyonun yarısı tamamlandı. Dokümantasyona buradan ulaşabilirsiniz.

Siz de katkıda bulunmak isterseniz yapmanız gerekenleri yine bu sitede bulabilirsiniz. Ben de çevirinin kalan kısımlarında destek olmaya çalışacağım.

Tamamen gönüllü olarak yapılan bu proje umarım Symfony2 gibi güncel teknolojiyi içeren framework’lerin bilinirliğini arttırır ve ülkemizde üretilen yazılımların kalitesini arttırır.

]]>
http://www.dubluve.net/2012/06/12/symfony2-turkce-belgeleri/feed/ 7
Symfony2 – Ek Kutuphaneleri Yonetmek http://www.dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/ http://www.dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/#comments Thu, 03 May 2012 18:20:59 +0000 http://dubluve.net/?p=1308 Symfony2 için kullanılan ek kütüphaneleriyle tek bir bilgisayarda çalışırsanız sorun yaşamayabilirsiniz. Fakat canlı bir ortama ve ya başka bir yazılımcının bilgisayarına kurmak istediğinizde, hangi kütüphanenin hangi versiyonunu kurduğunuzu unutabilirsiniz ya da zamanla herkes farklı bir versiyona sahip olabilir. Ayrıca ek kütüphane klasörünüz fazlasıyla şişeceği için kullandığınız git deposunda gereksiz yer kaplar.

Hataları önlemek ve işleri kolaylaştırmak için Symfony2 ile birlikte ek kütüphanelerinizin versiyonlarının yönetildiği bir dosya ve bunun için tek basit bir komutla çalıştırabileğiniz bir program geliştirilmiş. Bu program git versiyon kontrol sistemini kullanıyor, dolayısıyla git sisteminin bilgisayarınızda yüklü olması gerekiyor. Eğer git yüklü değilse Windows’ta yüklemek için şuradaki talimatları izleyebilirsiniz.

deps Dosyası ve bin/vendors komutu

Öncelikle Symfony2 framework şu adresten ek kütüphaneler olmadan (without vendors) indiriyoruz, arşiv dosyasını açıyoruz. Arşivin açıldığı  klasörde deps ve deps.lock isminde 2 adet dosya göreceksiniz. Deps dosyasındaki her bir blok ek kütüphaneleri göstermekte ve ek kütüphaneler kurmak için kullanacağımız program bu dosyayı okuyor. Deps.lock dosyası ise yüklediğiniz kütüphanenin git tarafından oluşturulan ve o commit’e ait commit-hash bilgisini (burada bahsetmiştim) tutuyor.

Peki yeni bir kütüphane yüklemek için ne yapacağız? Oldukça basit, deps dosyasına yeni bir kayıt gireceğiz. Deps dosyasına göz atarsanız kayıtlar genel olarak şöyledir:

[FOSUserBundle]
 git=git://github.com/FriendsOfSymfony/FOSUserBundle.git
 target=bundles/FOS/UserBundle
 version=1.2.0

Bu blokta [] içindeki bilgi ek kütüphanemizin ismini gösterir. Eğer target parametresiyle herhangi bir klasör belirmediyseniz varsayılan olarak burada verilen isimde bir klasör yaratılır ve dosyalar bu klasöre indirilir.

git=<git_repo_url> kısmına yazılan adres kısım ek kütüphanenini alınacağı adresi gösterir. Bu adrese git ve http/https ile başlayan kütüphane adreslerini girebilirsiniz. Gerekli olan parametreler aslında bu kadar, fakat diğer parametrelere de göz atalım.

target=<vendor_target> kısmında kütüphane dosyalarının indirileceği klasörü giriyoruz. Buraya girilen klasör <proje_klasörü>/vendor altında yaratılıyor.

Son olarak version= <versiyon> kısmında ise bir kütüphane için belli bir versiyon ve ya branch belirtebiliyoruz.

Deps dosyasında kayıtlı olan ek kütüphaneleri indirmek için proje klasörüne geçtikten yapmamız gereken sadece aşağıdaki komutu çalıştırmak:

php bin/vendors install

Bu komuttan sonra eğer vendor klasörünüzde hiçbir klasör görmezseniz ve ya klasörleriniz hepsi boşsa, git sistemini işletim sisteminize düzgün kuramamış olabilirsiniz. Eğer bazı kütüphaneler yüklenemiyorsa tekrar denediğinizde bunlar da yüklenecektir. İlk kez çalıştırdığınızda bu işlem zaman alabilir, sabırlı olun :)

Sistem Nasıl İşliyor?

Peki sistem nasıl işliyor, yukarıdaki komutu çalıştırdığımda neler oluyor diyenler için aşağıdaki şemayı hazırladım. Ek kütüphanelerimiz hayırlı olsun :)

vendors script flowchart

 

]]>
http://www.dubluve.net/2012/05/03/symfony2-ek-kutuphaneleri-yonetmek/feed/ 3
Symfony2- FOSFacebook – Facebook needs the CURL PHP Extension Hatasi http://www.dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/ http://www.dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/#comments Sun, 29 Apr 2012 10:40:50 +0000 http://dubluve.net/?p=1291 Symfony2′de FOSFaceBookBundle yüklemesi yaptıktan sonra, herhangi bir konsol komutu çağırmaya çalıştığımda aşağıdaki hatayı alıyordum.

[Exception] Facebook needs the CURL PHP extension.

Biraz araştırdığımda, WAMP gibi 3′ü bir yerde kurulumlarda Apache tarafından kullanılan php.ini dosyası ile konsoldan aşağıdaki şekilde çağırdığımız php komutunun farklı php.ini dosyası kullandığını öğrendim.

php app/console container:debug


Yani wamp’ın menüsünü kullanarak curl uzantısını aktifleştirseniz bile aslında konsoldan çağrılan php programının kullandığı php.ini değişmiyor. WAMP için örnek vermek gerekirse, C:\wamp\bin\php\php5.3.8 klasöründeki php.ini dosyasını şu şekilde düzenlemek gerekiyor:

;extension=php_curl.dll
extension=php_curl.dll

]]>
http://www.dubluve.net/2012/04/29/symfony2-fosfacebook-facebook-needs-the-curl-php-extension-hatasi/feed/ 2
Git Versiyon Kontrol Sistemi Genel Komutları http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemi-genel-komutlari/ http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemi-genel-komutlari/#comments Sat, 31 Mar 2012 21:32:38 +0000 http://dubluve.net/?p=1135 Daha önceki yazımda Git sisteminden biraz bahsetmiştim. Git’e yabancı olanlar öncelikle o yazıyı incelemek isteyebilirler. Bu yazıda Git komutlarına genelde kullanıldığı sıra ile değineceğim.

Git deposunu lokalde oluşturmak

Git sistemini kullanmak için önce uzak bir sunucudan Git deposunu lokalimize indirelim. Bu komut SVN’deki checkout’a denk geliyor diyebiliriz (mantık tam olarak benzemese de).

git clone [-b <branch_adi>] <depo_adresi> [<indirilecek_klasor_adi>]

Bu komutta herhangi bir Git deposunu tüm branch bilgisiyle ve ya sadece belirli bir branch’i belirttiğimiz bir klasöre indiriyoruz. Daha sonra bu klasöre geçiyoruz.

Lokaldeki değişiklikleri görmek

Depoyu ve dosyaları lokale indirdikten sonra bazı değişiklikler yaptık ve ne olduğu görmek istiyoruz, bu durumda aşağıdaki komuttan faydalanıyoruz.

git status

Bu kısacık komut bize çalışma klasörümüzde versiyon açısından neler olup bittiğini gösteriyor. Git ayrıca bir takım ufak yorum satırlarıyla bize yardımcı olmaya çalışıyor :)

$ git status
# On branch dev
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       README
nothing added to commit but untracked files present (use "git add" to track)

Gönderilecek değişiklikleri işaretlemek

Git’in de anlattığı üzere, README dosyası şu an sistem tarafından takip edilmiyor ve bunu takip edilecek olarak işaretlemek için aşağıdaki komutu çalıştırmak gerekiyor.

git add <dosya_yolu>

Burada dosya yolu tam olarak verilebilir ya da sadece “.” verilerek tüm değişikliklerin eklenmesi sağlanabilir. Önemli bir nokta, yukarıdaki komutu sadece yeni dosyaları sisteme eklemek için değil, varolan dosyalarda  yapılan  değişiklikleri göndermek için de kullanıyoruz. Yani README dosyası daha önce sisteme eklenmiş olsaydı ve bazı güncellemeler yapıp göndermek isteseydik, yine aynı komutu kullanacaktık.

Değişiklikleri göndermek (commit)

Gönderilecek olan tüm değişiklikleri işaretledikten sonra Git sistemine gönderme işlemini gerçekleştiriyoruz.

$ git commit -m "added README file"
[dev b9b5954] added README file
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README

Git her versiyon oluşturma aşamasında bizden yapılan değişikliklere ait bir mesaj girmemizi ister. Bunu -m parametresinden sonra belirtiyoruz. Buraya “qweqwe” yerine anlamlı bir şeyler girerseniz ileride kendinize teşekkür edersiniz :) Bu işlemden sonra bir versiyon oluşturmuş olduk.

Lokaldeki versiyonu uzak bir sunucudaki Git deposuna atmak

Her ne kadar Git sisteminde zorunlu olmasa da, projenizi başkaları ile geliştiriyorsanız ortak bir uzak depo kullanmak zorundasınız. Değişikliklerinizi lokal Git deposuna gönderdikten sonra paylaşılan uzak bir depoya (GitHub gibi) da gönderebilirsiniz. Bunun için şu komuttan faydalanabilirsiniz.

git push <uzak_depo_adi> <branch_adi>

Eğer değişiklik yapmazsanız uzak depo,  projeyi ilk aldığımız depoyu gösterecektir ve branch “master” olacaktır.  Eğer yetkiniz varsa en son versiyonunuzu depoya bu komutla gönderebilirsiniz.

Daha detaylı komutları ilerleyen yazılarda paylaşacağım :)

]]>
http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemi-genel-komutlari/feed/ 8
Git Versiyon Kontrol Sistemine Giriş http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemine-giris/ http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemine-giris/#comments Sat, 31 Mar 2012 20:36:06 +0000 http://dubluve.net/?p=850 Git Nedir?

Daha önceki yazılarımızda versiyon kontrol sistemlerinin yazılım geliştirme için önemini belirtmiştik. Bu yazıda diğer versiyon kontrol sistemlerinden farklı ve  oldukça esnek bir yapıya sahip olan Git versiyon kontrol sistemini genel olarak anlatacağım.

Git versiyon kontrol sistemi, Linus Torvalds tarafından BitKeeper yerine geliştirilmeye başlamış bir versiyon kontrol sistemidir.  Linux’un geliştirilmesinde kullanılan BitKeeper’ın açık kaynak lisansı kaldırılınca Git sistemi geliştirilmeye başlamıştır. Git geliştirilirken ön planda tutulan tasarım kriterleri dağıtık olması, tutarlı olması, büyük projelerde verimli bir şekilde çalışması ve doğrusal olmayan çalışma şekillerini desteklemesi olarak sayılabilir. Git sisteminin bazı özelliklerinin şöyle listeleyebiliriz:

  • Dağıtık (Distributed)  Sistem: Git işletim sisteminde, her kullanıcının lokal çalışma alanı bir sunucu görevi görür. Her kullanıcı kendi lokalinde versiyonlama ve geri yükleme yapabilir, SVN’de olduğu gibi başka sunuculara ihtiyacı yoktur. Dilediğinde lokalindeki değişiklikleri merkezi bir sunucuya atarak herkesle paylaşabilir. Birçok işlem lokalde gerçekleştiği için yapılan değişiklikleri listelemek, yenilerini commit etmek, geri almak, yeni bir branch açmak ve ya branch’ları birleştirmek işlemleri hızlıca gerçekleşir. Yani örneğin internet olmayan bir yerde tüm geliştirmelere devam edip, daha sonra uzak bir sunucuya değişiklikleri atabilirsiniz.
  • Performans: Birçok işlem lokalde yapıldığından, diğer versyion kontrol sistemlerine göre Git daha hızlı sonuç vermektedir. Ayrıca branch işlemlerinde de diğer sistemler gibi branch dosyalarını ek bir klasörde tutmayarak bir çeşit pointer mantığı kullanmaktadır. Böylece çok sayıda branch içeren büyük projelerde de iyi sonuç vermektedir.
  • Tutarlılık (Integrity) : Versiyon kontrol sistemlerinde versiyonlar arası geçişlerde bilginin bozulmaması ve tutarlılık çok önemlidir. Git, sisteme eklenen her bir dosyanın SHA-1 algoritmasıyla hash bilgisini oluşturarak bu bilgiyi kaydetmektedir. Bu nedenle versiyonlar arası geçişte bilgi kaybı olması söz konusu değildir.
  • Mevcut Protokollerle Entegrasyon : Git  sunucuları HTTP üzerinden hizmet verebilirken, SSH ve ya Git protokolü üzerinden de dosyalarınızı sunabilirsiniz.

Git Sisteminin İşleyişi

Git sistemini ve komutlarını doğru kullanmak için işleyişini net olarak anlamak gerekiyor. Aşağıda anlatılanlar ve şemayı anlamak oldukça kritik, bunları anladıktan sonra Git kullanmak çok kolay diyebilirim :)

Git sisteminde dosyalarımızın bulunabileceği 3 durum bulunuyor:  modified(düzenlenmiş),  staged(gönderilecek), ve committed(gönderildi). Git’e eklemediğimiz fakat proje klasöründe yer alan dosyalar ise untracked (takip edilmiyor) durumunda oluyor.

Dosyaları Git sistemine eklersek ve ya zaten eklenmiş olan dosyalarda değişiklik yaparsak bu dosyalar modified durumuna geçiyor. Modified durumundaki dosyaları bir sonraki commit işleminde gönderilmek üzere işaretlersek durumu staged olarak değişiyor . Daha sonra commit işlemi gerçekleştirdiğimizde sadece staged durumdaki dosyalar commit işlemine dahil ediliyor ve commit ile gönderiliyor, böylece committed  durumuna sahip oluyorlar.

 

 

Yukarıdaki şemada da genel kullanım sırasına göre klasörler arası geçişi görebilirsiniz. Önce bir Git klasöründen (git directory) ilgili dosyaları lokal çalışma alanımıza (working directory) alıyoruz (checkout). Daha sonra projede değişiklikler yapıp bu değişiklikleri gönderilecek olarak işaretliyoruz, ilgili dosyalar gönderilecekler alanına atılıyor (staging area). En sonunda da bu değişiklikleri gönderiyoruz (commit) ve ilgili Git klasörüne bunlar gönderiliyor. Burada Git klasörü SVN’deki gibi uzak bir sunucuda yer almıyor, her kullanıcının lokal çalışma alanı bir sunucu görevi gördüğü için, bu işlemler lokalde yapılıyor.

Eğer durum geçişlerini tam olarak anladıysanız bundan sonraki yazılarda anlatacağım komutları anlamakta zorluk çekmeyeceksiniz demektir :) Git’e hoşgeldiniz diyelim o zaman :)

Kaynaklar

http://progit.org/book/

http://en.wikipedia.org/wiki/Git_(software)

]]>
http://www.dubluve.net/2012/03/31/git-versiyon-kontrol-sistemine-giris/feed/ 6
PHP Saydam (Transparent) Resim Yaratmak http://www.dubluve.net/2012/03/04/php-transparent-image/ http://www.dubluve.net/2012/03/04/php-transparent-image/#comments Sun, 04 Mar 2012 20:49:00 +0000 http://dubluve.net/?p=972 PHP’de GD ile eklediğiniz resimlerin arkası varsayılan olarak siyah oluyor. Eğer saydam bir arka planı olmasını istiyorsanız, şu şekilde ilerlemek gerekiyor:

Önce yeni ve boş bir resim yaratıyoruz:

 $im = imagecreatetruecolor(100, 100);

Daha sonra bu resimden saydam olacak rengi oluşturuyoruz. Aşağıdaki örnekte beyaz renk saydam olacak, sizin resminizde bu renk kullanmadığınız herhangi bir renk olabilir.

$transparent = imagecolorallocatealpha($im, 255, 255, 255, 127);

Yarattığımız bu renk saydam olacağı için, boş resmi bu renk ile dolduruyoruz:

imagefill($im, 0, 0, $transparent);

Artık bu resme istediğimiz herhangi bir nesneyi ekleyebiliriz. Örneğin yazı ekleyelim, önce yazı rengini belirleyelim. Bu renk arka plan renginden farklı olmalı ki saydam olmasın:

$black = imagecolorallocate($im, 0, 0, 0);
imagestring ($im , 5 , 0 , 0 , "dubluve" , $black);

Yazımızı da ekledikten sonra, saydamlığı destekleyen PNG formatında resmi kaydetmemiz gerekiyor:

imagepng($im,"dubluve.png");

Saydam resminizle mutluluklar dileriz :)

]]>
http://www.dubluve.net/2012/03/04/php-transparent-image/feed/ 6
Aptana Studio 3 – Could not initialize class com.kenai.jaffl.* Hatasi http://www.dubluve.net/2012/02/10/aptana-studio-3-could-not-initialize-class-com-kenai-jaffl-hatasi/ http://www.dubluve.net/2012/02/10/aptana-studio-3-could-not-initialize-class-com-kenai-jaffl-hatasi/#comments Thu, 09 Feb 2012 22:31:40 +0000 http://dubluve.net/?p=857 Aptana Studio 3 yüklediyseniz ve açılışta Console ekranında başlıktakine benzer hatalar alıyorsanız, sorun bilgisayarınızın işletim sisteminin yerel ayarlarının Türkçe olmasından kaynaklanıyor.

http://jira.codehaus.org/browse/JRUBY-5896

Yerel ayarlarınızı İngilizce olarak değiştirdiğinizde Aptana Studio’nun problemsiz çalıştığını göreceksiniz. Ayarlarınızı Windows 7 ‘de değiştirmek için:

  • Denetim Masası\Saat, Dil ve Bölge ekranına girin.
  • Bölge ve Dil ekranını açın
  • Biçimler sekmesinde İngilizce (Amerikan) seçin.
  • Aptana Studio eğer açıksa kapatıp tekrar açın.
  • Eğer bu şeklide de sorun yaşıyorsanız, yine Denetim Masası\Saat, Dil ve Bölge  ekranında Yönetimsel sekmesine gelin.
  • “Sistem yerel ayarlarını değiştir” seçeneğine tıklayarak geçerli sistem ayarının İngilizce (Amerikan) seçin.
]]>
http://www.dubluve.net/2012/02/10/aptana-studio-3-could-not-initialize-class-com-kenai-jaffl-hatasi/feed/ 0

Plugin by Social Author Bio