KDE ve GNOME

klogo-official-lineart_detailed-128x128.png

GNOME masaüstünde çalışırken hafıza kullanımı tavan yapıyordu. Öyle ki bir pencereden diğerine geçerken saniyeleri sayıyordum. Dağınık sistemler dersi projesinin yetişmeyeceğini düşünmeye başlamıştım. Ta ki herşeye KDE‘de devam etmeyi deneyene kadar.

Joomla! 1.5 Beta-2 duyuruldu

Joomla! kararlı sürümden önceki son denemeyi yayımladı. Bundan sonra yayımlanacak olan sürüm adayının sunucularda kullanılabilecek kararlılıkta olması bekleniyor.

Joomla Symbol Small Color FLAT.png

Mevcut 1.0.12 sürümü 1.5’e yükseltilemeyecek. Sitelerini yeni sürüme taşımak isteyenlere iki adımlık bir yöntem tavsiye ediliyor. Önce eski site bir bileşen yardımıyla arşivlenecek. Sonra yeni sürümün kurulumu sırasında veritabanı eski sitenin arşivi kullanılarak oluşturulacak. Gerekli değişiklikler kurulum sırasında Joomla! tarafından yapılacak.

Çok sayıda bileşen, eklenti, birim kullanan siteler yeni sürüme geçişte zorlanacaklar. Özellikle SMF köprüsü kullananlara kötü bir haberim var. Joomla! 1.5 sürümü için köprü eklentisi yazılamıyor.

Ben üyelik sistemini SMF köprüsü üzerinden sağladığım bir site için şöyle bir yöntem düşündüm. Sadece üyelere açık olan bölümleri eski sürüm üzerinde bırakacağım. Bunların dışında kalan ve üyelik gerektirmeyen bölümleri yeni sürüme taşıyacağım.

Sizin daha iyi bir fikriniz varsa öğrenmek isterim.

Güncelleme oldu: SMF köprüsü Joomla! 1.5 Beta-2 üzerinde başarıyla çalıştırılmış.

Geçen gün bir döngüye girdim…

Geçen gün bir döngüye (loop) girdim, bir türlü çıkamadım. (Bilgisayar Mühendisi edasıyla okunacak)

İlgili Python satırlarını buraya eklerdim fakat WordPress.com bloglarında kod parçaları beklendiği gibi görüntülenmiyor.

Deneme yanılma yöntemiyle program yazılamayacağını yıllar önce öğrenmiş olmam gerekiyordu. Kendime ceza olarak yeni bir okuma ödevi veriyorum: Teach Yourself Programming in Ten Years ya da On Yılda Programlama Öğrenin.

Pardus’ta staj için başvuranlar Pardus’un ne olduğunu bilmiyor mu?

bunlari-okudum.jpg

Az önce “Bunları okudum!” bölümünde “Pardus staj başvurularına dair..” başlıklı bir yazıyı paylaştım sizlerle. Eğer “Bunları okudum!” bölümünden neyi kastettiğimi anlamadıysanız açıklayayım; günlüğümün sağ sütununda böyle bir bölüm mevcut. Burada Google Reader ile takip ettiğim ve beğendiğim yazıları yayınlıyorum. Günlüğe girdiğinizde bu yazıların başlıklarını görebilirsiniz. Eğer sürekli takip etmek isterseniz ayrı bir sayfa mevcut. Google Reader ile üye olmak isterseniz bu bağlantıyı kullanabilirsiniz. İlginizi çekeceğinden eminim.

staj-2007-dosya-uzantilari.png

Asıl yazmak istediğim meseleye geleyim. “Pardus staj başvurularına dair..” yazısında başvuru için gönderilen özgeçmiş belgelerinin büyük çoğunluğunun Microsoft Office ile yazılmış olduğu açıklanıyor. Konu ile ilgili yapılan yorum ise çok başarılı:

Gelen başvuru e-postaları çoğunlukla CV, kaynak kod ve niyet mektubu gibi ek materyaller içeriyordu haliyle. Dosya formatlarına gösterilen itinanın belirleyiciliği başta bir tartışma konusu idi. Örneğin “doc” uzantılı başvuruları değerlendirmeye dahi almaksızın geri çevirmek bile gündeme gelmişti. Sonuçta Pardus’un savunduğu değerler ve amaçları hakkında bu kadar bilgisiz olan ve en ufak araştırma yapmadan başvuru yapan kişiler ile ilgili ön yargısız davranmak pek kolay olmayacaktı. Fakat neticede bu başvuruları da kabul etmeye ve böyle bir sebeple insanları elememizin doğru olmayacağına kanaat getirdik. Yine de tablo son derece hazin idi.

Sonuç olarak: Yukarıdaki yoruma katılıyorum.

Simple Machines Lisansı’na güvenebilir miyim?

smflogo24bit.png

Simple Machines yazarları GNU GPL yerine kendi lisans metinlerini kullanıyorlar. Kendi metinlerinin GNU GPL’nin ve Açık Kaynak kavramının sunduğu imkanların neredeyse aynılarını sunduğunu savunuyorlar.
Ben kendilerine katılmıyorum. İşte nedenlerim;

  • Simple Machines Lisansının geleceğini kestiremiyoruz. GNU GPL’nin esnekliğini kabul etmeyen bu lisans ileride daha da katılaşabilir.
  • Simple Machines kodunu kendi ürünümüzün içerisinde dağıtamıyoruz. Bugün WordPress gibi sistemler bazı GNU/Linux dağıtımlarının paket depolarından kolaylıkla kurulabiliyor.
  • Simple Machines Lisansı yazılım ile birlikte başkası tarafından dağıtılan bir yazılım aracı veya kütüphanesinin dağıtılmasına izin vermiyor. Böylece yazılımın gelişim süreci kısıtlanıyor.

Dünya üzerindeki en başarılı Açık Kaynak projesi Linux, GNU GPL ile dağıtılıyor. GNU GPL’nin esnekliği sayesinde proje sahipleri kendi haklarını korurken aynı zamanda yazılımlarının geleceğini de güvenceye almış oluyorlar.

3BB: 3 Boyutlu Bilardo

Sabancı Üniversitesi’nde Bilgisayar Bilimi ve Mühendisliği yazısında bilardo oyunundan bahsetmiştim. 3 gün önce Karadeniz Teknik Üniversitesi Bilgisayar Mühendisliği son sınıf öğrencisi olduğunu söyleyen birisinden bir e-posta aldım. Bitirme projesi olarak 3 boyutlu bilardo oyunu hazırladığını ve benim yazdıklarımı görmek istediğini söylüyordu.

Faydalı olur düşüncesiyle projeyi indirmeye açıyorum.

Sadece kaynak kodlarının bulunduğu dağıtımı buradan: 3bb-0.0.1-src.zip

Kaynak kodları ile beraber çalıştırılabilir dosyanın da bulunduğu dağıtımı buradan indirebilirsiniz: 3bb-0.0.1-bin.zip

Notlar:

TotT: Better Stubbing in Python / Tuvalet Duvarında Test

debugging_vs_testing.PNG

Ben Python’la çalışmaya başladığım sıralarda Google “Google Testing Blog“u yayımladı. İlk yazıları ile birlikte yayımladıkları belgeyi hemen indirdim ve incelemeye başladım. Ne yazık ki o zaman Python hakkında yeterli tecrübeye sahip olmadığım için belgede anlatılmak istenen meseleyi anlayamamıştım. Zaman zaman belgeyi tekrar okuyup anlamaya çalışıyordum. En sonunda bugün (28 Ocak 2007) meseleyi tam olarak kavrayabildim.

Belgede anlatılanları ayrıntılı olarak açıklamaya çalışayım:

Elimizde aşağıdaki gibi bir fonksiyon bulunduğunu varsayalım.

def Foo(path):
  if os.path.exists(path):
    return DoSomething()
  else:
    return DoSomethingElse()

Bu fonksiyon dosya sistemimizdeki herhangi bir adresi parametre olarak alıyor. Bu adresin geçerli bir dosyaya işaret edip etmediğini kontrol ediyor. Sonuçta dosya mevcut ise “DoSomething()” değilse “DoSomethingElse()” fonksiyonunu çalıştırıyor.

Şimdi unit test sınıfımızın içerisinde bu fonksiyonu test eden bir fonksiyon yazacağız. Yapmak istediğimiz adresteki dosyanın var olması ve olmaması durumlarında yukarıdaki fonksiyonun davranışlarını test etmek.

def testFoo(self): # Somewhere in your unit test class / Unit test sınıfının içinde biryerde
  old_exists = os.path.exists
  try:
    os.path.exists = lambda x: True
    self.assertEqual(Foo('bar'), something)
    os.path.exists = lambda x: False
    self.assertEqual(Foo('bar'), something_else)
  finally:
    os.path.exists = old_exists # Remember to clean-up after yourself! / İşinizi bitirdikten sonra ortamı temizlemeyi unutmayın!

Bu fonksiyon ile bütün olasılıkları test ediyoruz. Fakat bazı durumlarda testlerin sonucu beklediğimiz gibi olmuyor. Örneğin “DoSomethingElse()” fonksiyonu başka bir dosyanın varlığını kontrol ediyor olabilir.

def DoSomethingElse():
  assert os.path.exists(some_other_file)
  return some_other_file

Sonuç olumsuz olacaktır çünkü “os.path.exists(path)”in hangi sonucu döndüreceğine test sırasında biz karar veriyoruz. Bu sorunu gidermek için birinci “os.path.exist” yapısını parametre olarak atayabiliriz.

def Foo(path, path_checker=os.path.exists):
  if path_checker(path):
    return DoSomething()
  else:
    return DoSomethingElse()

Böylece sadece yukarıda anlatılan problemi gidermiş olmuyoruz, aynı zamanda hız kazanıyoruz çünkü Python yerel değişkenlere daha hızlı ulaşabiliyor. Test fonksiyonumuz da aşağıdaki gibi kısaltılabiliyor.

def testFoo(self):
  self.assertEqual(Foo('bar', lambda x: True), something)
  self.assertEqual(Foo('bar', lambda x: False), something_else)

Debugging socks. Testing rocks. / Böcek avını bırak. Test etmeye bak.

SMF’nin Joomla! 1.0 serisi için köprü eklentisi ve çalışmayan URL’ler

SMF geliştiricilerinin bizlere sunduğu bir eklenti sayesinde Joomla! 1.0 serisi ile SMF arasında köprü kurabiliyoruz. Forum yazılımları arasında sadece SMF bu özelliğe sahip. Eklentinin biri dışında bütün özellikleri ek işlem yapmadan beklendiği gibi çalışıyor. Yalnızca SMF’yi Joomla! bileşeni olarak göstermek istediğinizde bazı URL’ler çalışmıyor. Bu sorunun çözümü Joomla!’nın htaccess.txt dosyasında kısmen verilmiş. Çözümü kısaca aktarayım ve gözden kaçan kısmı tamamlayayım.

“.htaccess” (htaccess.txt dosyasının adını “.htaccess” olarak değiştirmiş olmanız gerekiyor) dosyasının içinde aşağıdaki satıra benzeyen iki satır var.

#RewriteCond %{REQUEST_URI} ^(/component/option,com) [NC,OR] ##optional – see notes##

Bu satırları bulup başlarındaki “#” işaretini silin.

Joomla! web alanınızın kök dizinine kurulu ise artık SMF’ye “http://webalaniniz.com/component/option,com_smf/” adresinden erişebilirsiniz.

Eğer Joomla! web alanınız içinde alt dizinlerden birisine kurulu ise son bir değişiklik daha yapmanız gerekiyor. Mesela Joomla! “http://webalaniniz.com/deneme/” adresindeyse yukarıda verdiğim “.htaccess” dosyasının içindeki satırlardan sadece bir tanesini aşağıdaki gibi değiştirmelisiniz. Bu satır “Begin – Joomla! core SEF Section” başlığı altındaki satır olmalı.

RewriteCond %{REQUEST_URI} ^(/deneme/component/option,com) [NC,OR] ##optional – see notes##

Yeniden PHP

Uzun zamandır PHP kodu yazmamıştım. Bir süredir Python ile uğraşıyorum. Python’a alışan parmaklarım PHP’ye döndüğümde “$” işaretinin klavyedeki yerini bulmakta zorlandılar.

Gelelim PHP’ye neden ihtiyaç duyduğuma. “http://mustafau.com” adresine gelen bir kullanıcıyı tarayıcısının dil ayarlarına göre “http://gunluk.mustafau.com” (Türkçe) veya “http://blog.mustafau.com“a (İngilizce) yönlendirmek istiyorum. mustafau.com‘a yeni bir sunucu alanı almak istemediğim için ilk yönlendirmeyi “http://students.sabanciuniv.edu/~mustafau/r/redirect.php” adresine yapıyorum. Burada tarayıcının dil ayarlarına bakılıyor. Varsayılan ayarlarda “tr” (Türkçe) veya “az” (Azerice) var ise ziyaretçi gunluk.mustafau.com‘a yoksa blog.mustafau.com‘a yönlendiriliyor.

Şimdi de sıra betiği paylaşmaya geldi. Kodları aşağıya yazıyorum. Sıkıştırılmış dosya olarak indirmek isterseniz buyrun burada.

<?php

/**
* @version 1.0, redirect.php, 2007-02-28, 22:50
* @copyright (C)2007 Mustafa Ulu, All rights reserved. / Her hakkı saklıdır.
* @license GNU/GPL
* This is free software. / Bu özgür bir yazılımdır.
*/

// Tarayıcının varsayılan dillerini inceler, belirli dillere rastlar ise uygun
// yönlendirmeyi gerçekleştirir.
// EasyPHP 1.8 sürümü ile gelen 'index.php' dosyasından esinlenildi.

// tarayıcının varsayılan dillerini bir array içine al
$browser_languages = explode(",", getenv("HTTP_ACCEPT_LANGUAGE"));
$browser_languages_size = sizeof($browser_languages);

// İngilizce ve Türkçe dilleri için yönlendirme adresleri
$redirect_en = 'Location: http://blog.mustafau.com/';
$redirect_tr = 'Location: http://gunluk.mustafau.com/';

// varsayılan yönlendirme adresimiz İngilizce günlük
$redirect_str = $redirect_en;

for ($i = 0; $i < $browser_languages_size; $i++)
{
$lg = explode("-", $browser_languages[$i]);

if($lg[0] == 'tr' || $lg[0] == 'az') {
// 'tr' veya 'az' kodlarına rastlarsan Türkçe günlüğe yönlendir
$redirect_str = $redirect_tr;
break;
}
}

header($redirect_str);

?>