Kategori arşivi: (Web) Programlama

Git, Her “Push” Sonrası Otomatik Olarak E-posta Atsın

Güzel bir başlık olmadı. Git’te kod değişikliklerini depoya göndermek için “git push” komutunu kullanırız. Bu yazıda, her “git push” komutundan sonra belli bir e-posta adresine otomatik olarak bu “push” ile ilgili bilgi gitmesini nasıl sağlayacağınızı yazacağım.

SVN kullananlar için ise konuyu şöyle açıklayabilirim; svn’de her commit’ten sonra belli bir e-posta adresine commit hakkında bilgi gönderilebiliyor. Bu yazıda anlatacağım şey bunun git’te nasıl yapılacağı.

Git repository’lerinde hooks klasörü bulunuyor. Bu işlemi de bir hook dosyası sayesinde yapabiliyoruz. Bu hook dosyasını buradan indirebilirsiniz. İndirdikten sonra bu dosyayı git deponuzudaki hooks klasörü altına taşıyın. Dosya ismini post-receive olarak isimlendirin ve dosyayı çalıştırılabilir bir dosya haline getirin.

Ardından git deponuzdaki config dosyasını düzenleyin. Şuna benzer bir hale gelsin;

[core]
repositoryformatversion = 0
filemode = true
bare = true
[hooks]
mailinglist = “<commitler-bu-eposta>@<adresine-gelecek>.com”
senderemail = “git@<projeniz>.com”
emailprefix = “[<projeniz>-git] “

Bu ayarı da yaptıktan sonra her “git push” sonrası post-receive hook’u otomatik olarak mailinglist’in karşısında bulunan e-posta adresine bir e-posta gönderecek.

E-postalarda proje adınız “UNNAMED PROJECT” olarak görünüyorsa git deponuzdaki description dosyasının içine proje adınızı yazın.

Daha detaylı ingilizce bir yazı; //pkill.info/blog/post/setting-up-git-commit-email-notification.html

Yazılım Sürümlendirme

Bir yazılım hazırladınız. Örneğin; bir WordPress eklentisi.

Şimdi yayınlama zamanı ve size bir sürüm numarası gerek. İlk sürüm numarası olarak 0.1’i öneririm. 1.0’ı önermem çünkü bir yazılıma sürüm 1.0 dendiğinde, genelde o yazılımın işini çok iyi yapan ve kararlı bir hale geldiği hissi uyandırır fakat genelde ilk sürümler böyle olmazlar :)

0.1.0 sürümünü yayınladık. Buradaki 0.1 birincil (major) sürüm numaramız, sondaki 0 ise ikincil (minor) sürüm numaramız.

Peki gelecek sürümleri neye göre vereceğiz ? Benim önerim ve genelde yapılan şöyle;

  • Eğer hata düzeltmesi yapıldıysa ikincil sürümü arttırın. Yani 0.1.1, 0.1.2 gibi…
  • Eğer yeni bir özellik eklendiyse minor sürümü arttırın. Yani 0.2.0, 0.3.0 gibi…

Bu sürümlendirme yöntemini yazdığım WP Favorite Posts eklentisinde kullanıyorum. Ayrıca Tekir’de de benzer bir sürümlendirme yöntemi kullanıyoruz.

Burada bahsettiklerim sadece öneri, siz istediğiniz gibi sürüm numaraları da verebilirsiniz.

Ayrıca sürümlendirme ile ilgili güzel bir de wiki sayfası (İngilizce) var.

PHP mail() ve (unknown sender) hatası

PHP’nin mail() fonksiyonu ile mail gönderebiliyoruz. Ancak bu fonksiyonla mail gönderdiğinizde Gmail gönderen ismini (unknown sender) olarak atayabiliyor. Bunu şu kod ile aşabilirsiniz;

ini_set(sendmail_from, $from);

Yani örnek bir mail gönderme kodu şöyle;

<?php
 
$name = "biraz kisisel"; //gönderen ismi
$from = "[email protected]"; //gonderen e-postası
$recipient = "[email protected]"; // alıcının e-postası
$mail_body = "Merhaba, sitemize üye olduğunuz için teşekkürler. "; //mail içeriği
$subject = "Uyelik hakkinda"; //mail konusu
$header = "From: ". $name . " <" . $from . ">\r\n";
                   "Reply-To: $from" . "\r\n" .
                   "Content-type: text/html; charset=UTF-8\r\n" .
                   'X-Mailer: PHP/' . phpversion();
 
ini_set(sendmail_from, $from);
mail($recipient, $subject, $mail_body, $header);
?>

Web Geliştiriciler İçin Yazılar

Web geliştirme ile uğraşanlar için şimdiye kadar yazdığım yazılardan oluşan bir derleme;

Java List remove() UnsupportedOperationException Hatası ve Çözümü

Bu hatayı aldığınızda öncelikle listelerde geçerli olan remove(int index) fonksiyonunun referans sayfasına bakalım;

Throws:
UnsupportedOperationException – if the remove method is not supported by this list.

Aslında hata gayet açıklayıcıydı ama başka tür hatalar aldığınızda da referans sayfasına bakmanızda fayda olduğundan bu aşamayı da yazdım.

Ben bu hatayı Arrays.asList ile liste oluşturduğumda aldım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        enumList.remove(3);

Bu kodun amacı ApplicationStatus sınıfındaki enum degerleri bir listeye atıp ardından bazı elemanları silme işlemi yapmaktı.

Bu şekilde asList ile oluşturulan listeler java.util.Arrays$ArrayList gibi bir liste döndürüyor ve bu tip listeler remove() add() gibi fonksiyonları desteklemiyor. Bu sebepten UnsupportedOperationException hatasını alıyoruz.

Bunun çözümü bir şekilde düzgün bir liste oluşturmak. Ben şöyle yaptım;

        List enumList = Arrays.asList(ApplicationStatus.values());
        List realList = new ArrayList();
        for (int i = 0; i &lt; enumList.size(); i++) {
            realList.add(enumList.get(i));
        }
        realList.remove(3);

Artık realList ile istediğim gibi remove(), add() fonksiyonlarını kullanabiliyorum.

JavaScript dosyasının içinde başka bir Javascript dosyasını çağırma

Örneğin site.js adında bir javascript dosyamız olsun. Bu javascript dosyasının çalıştırıldığı her yerde jquery.js ve moo.js adlı javascript dosyalarını da çalıştırmak isteyelim.

Bu durumda ya şöyle yaparız;

1
2
3
<script src="site.js" type="text/javascript"></script>
<script src="jquery.js" type="text/javascript"></script>
<script src="moo.js" type="text/javascript"></script>

ya da site.js’in içinde jquery.js ve moo.js’i bir javascript fonksiyonu ile çağırabiliriz. Böyle yapmak için site.js’in içine şu kodlar eklenmeli;

1
2
3
4
5
6
7
8
9
10
function addJavascript(jsname) {
    var th = document.getElementsByTagName('head')[0];
    var s = document.createElement('script');
    s.setAttribute('type','text/javascript');
    s.setAttribute('src',jsname);
    th.appendChild(s);
}
 
addJavascript('jquery.js');
addJavascript('moo.js');

Belki bir gün ihtiyacınız olur.

Java BigDecimal.divide() fonksiyonu

Java’da iki BigDecimal değeri divide() fonksiyonu ile bölmek istediğimde şu hatayı aldım;

Non-terminating decimal expansion; no exact representable decimal result.

Hatayı almamın sebebi divide fonksiyonunu yanlış kullanmammış. Şöyle iki değişkenimiz olsun;

BigDecimal sayi1 = BigDecimal.valueOf(100);
BigDecimal sayi2 = BigDecimal.valueOf(50);

Bunları bölmeye çalışalım;

sayi1.divide(sayi2);

İlgili referans sayfasından da görebileceğiniz gibi bu şekilde bir kullanım yanlış. roundingMode parametresini kullanmamız zorunlu. Peki roundingMode kullanmadan bölmek mümkün mü ? Ben böyle yaptım (alttaki kod tek satır));

BigDecimal sonuc = new BigDecimal(sayi1.doubleValue() / sayi2.doubleValue());

Bu kod çalıştı. Bunun daha iyi bir yolu varsa yorum olarak yazarsanız sevinirim.