Bahadır Kandemir Pardus Geliştirme Notları

15Mar/100

x86_64: Bir Adım Daha

ULAKBIM'deki bazı servislerimizin yedeklerini ve muhtemelen Pardus 2011 derleme tarlasını barındıracağımız sunucumuza PAE destekli bir Linux paketi kurup 4GB üzeri RAM'i yalandan kullanmak yerine, Kurumsal 2 x86_64 kurdum bugün.

Üniversite kütüphanesinin tozlu raflarında kalmaya mahkum olmayan bir bitirme tezi hikayesindeki ufak bir paragraf bu. Tarih 15 Mart 2010.

Başta ÇOMÜ asıllı Pardus geliştiricileri olmak üzere, emeği geçen herkese teşekkürler.

Etiketler: , Yorum yok
14Mar/100

Staj İpuçları ve Öİ Podcast

Bu yazı, staj başvurusunda bulunmak isteyenler ve Özgürlük İçin Podcast'teki staj ipuçları bölümü sonrası gözü korkanlar için. Staj başvurusunda bulunmak istemiyorsanız, Öİ Podcast'i dinlemediyseniz ya da gözünüz korkmadıysa bu yazısı okumayabilirsiniz :)

Geçen sene, staj duyuruları sonrası "Programcılar CV'leri Nasıl Okur?" başlıklı bir karikatürden bahsetmiş, başvuru yapanların nelere dikkat etmesi gerektiğini göstermeye çalışmıştım. Bugün yayınlanan Podcast'i dinlerken, karikatürün gereğinden fazla ciddiye alınabileceğini fark ettim. Sevgili Seda (Akay) ve Gizem (Belen), karikatürdeki "işletim sistemi ya da derleyici yazdıysanız puan kazanırsınız" derken, duyduklarım beni bile ürküttü. Geçen sene o karikatürü günlüğümde yayınlamam ve Gizem'e "geçen sene gönderdiğim karikatürde güzel tavsiyeler var" demem o kadar da iyi bir fikir değildi sanırım.

İşletim sistemi ya da derleyici yazmadıysanız, 3+ programlama dili bilmiyorsanız, bilgisayar kulübüne başkanlık yapmadıysanız, yarışma kazanmadıysanız korkmayın. Benim çizmediğim bir karikatür bu, bazı maddelerini çok beğendiğim için eklemiştim günlüğüme. Okunmasını tavsiye ederim (hâlâ), ama çok fazla da ciddiye almayın. "Pardus'a staja girmek, TÜBİTAK sınavını geçmekten zor" diye söylenmeyin, yok öyle bir şey :)

Ek: Karikatürü, Podcast'e konu olsun ve ziyaretçi sayım artsın diye yayınladığıma dair iddialar asılsızdır :)

Etiketler: , , Yorum yok
5Mar/100

Ofisten Haberler

4 senedir çalıştığımız Ulusal Metroloji Enstitüsü laboratuvarlarını geride bırakarak Ulusal Elektronik ve Kriptoloji Araştırma Enstitüsü içindeki (kısaltma kullanmayayım da yazı uzun görünsün) yeni ofislerimize geçtik bu hafta.

UME laboratuvarları iyiydi, güzeldi ama son zamanlarda Pardus ekibine dar geliyordu. Staj döneminde de öğrenci sayısını sınırlı tutuyor, daha kötüsü rahat bir çalışma ortamı sağlayamıyorduk. Yeni staj döneminde (detaylar çok yakında) önceki senelere daha fazla stajyer alabiliriz.

Eski ofis fotoğraftaki gibi, herkesin sürekli bir arada olduğu bir yerdi. Yeni ofislerimiz ise, yaklaşık 400m²'lik dev bir laboratuvardaki 10 odadan oluşuyor.

Fotoğraf çekme izni alabilirsek, Pınar'ın başlattığı 366 projesini devam ettirmeyi ve her gün bir fotoğraf yayınlamayı planlıyoruz.

Tebdil-i mekanda ferahlık varmış, bizzat tecrübe ettik :)

Etiketler: Yorum yok
4Mar/103

Geliştirici Olmak İsteyenlere Tavsiyeler – I

Bu yazıyı okuyabiliyorsanız, yazılım geliştirmek için gerekli teknik imkana sahipsiniz demektir. Bunun farkındaysanız, muhtemelen bu yazı size sıkıcı gelecektir; "Nasıl yani?", "İmkan derken?" ya da "Hani nerede?" diyorsanız, bu soruların cevaplarını (ve belki de Lost adasının sırlarını) da bu seride bulabileceğinizi umuyorum.

Baştan söyleyeyim: tavsiyelere uymanız Pardus geliştiricisi olmanızı garantilemez ve süper programlama becerilerine sahip olmanızı sağlamaz. Süper programlama becerisine sahip olmak için Balmer Peak'e ulaşmayı deneyebilirsiniz.

Halet-i Ruhiye

  • Sabırlı olun. Herşeyi bir anda öğrenmeniz mümkün değil. Aşırı yükleme yapıp dumanlar tüter halde dolaşmanızı kimse istemez. Yorum bölümünde sevgili Çetin'in hatırlattığı 10 Yılda Programlama Öğrenin makalesi okumanızı öneririm. Peter Norvig, programlamanın neden birkaç günde/haftada öğrenilemeyeceğini anlatıyor.
  • İngilizce öğrenin. En azından, teknik belgeleri okuyabilecek kadar. Kullanacağınız uygulamaların ve okuyacağınız kaynak kodlarının (evet, bol bol kaynak kodu okumanız gerekecek) İngilizce olacağını unutmayın. Okumanızı önereceğim belgelerin büyük bir kısmı ne yazık ki İngilizce olacak.
  • Bir işi yapmanın farklı yollarını arayın. Merak edin, merak iyidir. Araştırın, okuyun, bol bol kod yazın.

Posta Kutusu

  • Yoksa hemen bir tane e-posta adresi edinin. GMail'den iyisini görmedim. GMail hesabınız varsa, Google'ın sunduğu diğer hizmetlerden de faydalanabilirsiniz, serinin ilerleyen bölümlerinde bu servislerden sıkça söz edeceğim.
  • Adres içinde takma isim kullanmayın, isim bölümüne "LiNuX cOdEr" gibi komik şeyler yazmayın. Ciddiye alınmazsınız.
  • E-posta imzanızı kısa tutun. İsim, ünvan ve şirket/proje ismi yeterlidir, sahibi olduğunuz 20 web sitesi kimsenin umrunda olmayacağı gibi, ciddiyetinizden şüphe edilmesine sebep olabilir.
  • Nasıl Akıllıca Sorular Sorulur ve e-posta listeleri etiği belgelerini mutlaka okuyun. Liste etiğine uymayanlara cevap vermeyen bir ofis dolusu insan tanıyorum, haklılar da.

Çalışma Alanı & Araçlar

  • Konsol kullanmayı öğrenin, işlerinizi konsolda yapmaya alışın. Konsol size hız kazandırır. Kullanabileceğiniz uygulamaların geniş bir listesini A'dan Z'ye konsol uygulamaları sayfasında bulabilirsiniz.
  • Rahat kod yazabileceğiniz bir metin editörü ya da bir IDE bulun. Ben VIM kullanıyorum, konsolda çalışan editörlerin IDE'lerden çok daha kullanışlı ve hızlı olduğunu düşünüyorum. VIM kullanmayı denemeden önce kullanım kılavuzunu okumayı unutmayın. "Nereden kapanıyordu bu?" diye gelirseniz pis pis sırıtırım karşınızda :) Emacs da harikadır, lakin VIM daha kolay geliyor bana.
  • En az bir sürüm kontrol (revision control) sistemi kullanmayı öğrenin. Biz SVN kullanıyoruz, fena değil.
  • Python öğrenin. Hep söylerim, Pardus bir kısaltma olsaydı (ki değil), P kesinlikle Python olurdu. Hızlı geliştirme yapılabilen, güçlü bir dil.

Aklıma gelenler şimdilik bu kadar, iyi eğlenceler.

1Mar/104

BİLMÖK 6 – Arayüzlere Değil, Kaynağa Hükmedin

Bilgisayar Mühendisliği Öğrencileri Kongresi'nin altıncısı Konya Selçuk Üniversitesi'nde yapıldı. Mühendis adaylarının, bir işletim sisteminin pazarlamacılarıyla değil, geliştiricileriyle buluşmaları gerektiğini düşündüğümüzden hem sponsor olduk, hem de geliştiriciler olarak aralarında yer aldık.

"Mühendislik ve geliştirmeyi bize bırakın, siz bizim araçları kullanarak web sayfası ve muhasebe uygulaması falan yapın" mesajı veren, mühendislikle uzaktan yakından ilgisi olmayan bir pazarlamacının peşinde "Hocam, hocam" diye koşturan birkaç bilgisayar mühendis adayına fena halde kızsak ve üzülsek de, geleceği şekillendirmeye aday öğrencilerle tanışmak, konuşmak ve atölyede çalışmaktan büyük mutluluk duyduk.

Staj döneminde, fotokopi çekmekten öte işler de yapılabileceğini, bunun için "dayı" torpili gerekmediğini anlattık, elbette bunun nasıl hak edileceği ile birlikte. Biz seminerlerde, atölyelerde, standda ve çay sohbetlerinde defalarca (asla sıkılmadan) söylesek de, sanırım mühendis adaylarının kafalarındaki "ben de yapabilirim" düşüncesi, Çanakkale Onsekiz Mart Üniversitesi öğrencilerinin 64bit Pardus sunumu sonrasında oluştu. Birkaç öğrencinin, Pardus geliştiricisi olma hikayesi, ÇOMÜ ve TÜBİTAK arasında imzalanan protokol ve ortaya çıkan ürünün kenara konup unutulacak sıradan bir okul projesi olmadığı gerçeği, zıplayan çaydanlık animasyonunun ne kadar kolay yapılabildiğinden çok daha etkileyiciydi.

Artık herkes farkında. Özgür yazılım, ücretsiz yazılım demek değil. Kod, satır satır satılan bir mal olmadığı gibi, özgür yazılım geliştiricileri fotosentez yapan organizmalar değil. "Bu işte para kazanamazsınız" yalanını, yalanı uyduranlar bile söylemiyor artık, bir kralcılar kaldı bunu devam ettiren. İki tıkla web sayfası, üç tıkla muhasebe uygulaması [1] yazmayı bırakın. Arayüzlere [2] değil, kaynağa hükmedin. Sizin görev yeriniz orası, aldanmayın.

[1] Bir grup mühendis adayına "Bakın birkaç tıklama ile, ne kadar kolay" mesajı veren pazarlamacılara ithafen söyledim bu sözleri. "Üç tıkla muhasebe uygulaması yazılmaz" türündeki mesajlarınızı "ben saydım, 1000 tıkla yazılır" cümlesi ile bir tutup eşe dosta anlatırım, uyarmadı demeyin.

[2] "Mühendis arayüz tasarımı yapmaz" anlamı çıkarmayın, demedim. Çıkaranlar oldu, üzüldüm, cevap vermeye çalıştım, birkaç yorum sonra XKCD'deki bir karikatür geldi aklıma, pes ettim.

Etiketler: , 4 Yorumlar
20Şub/101

Eve Dönerken

ÇOMÜ 64bit Atölye Çalışması sonrası eve dönerken, Fatih ve Ozan boş durmadı ve tek kaynak depoda birden fazla mimarinin desteklenmesi için gerekli PISI değişikliklerini yapmaya başladı, laptop pilleri bitene dek 3 özelliği tamamladılar.

Tekirdağ'a girerken yaptığım "Paket imzalamayı da yapsaydınız" nüktesi, ilk mola yerinde imzalama ile ilgili mini bir tartışma başlattı, hal böyle olunca da yolun kalan kısmında kodu yazmak kaçınılmaz oldu. Bilgisayarımın pili dayanmadı bu heyecana, 5 dakika geçmeden kapanıverdi, pile servis yolu göründü.

Eve dönünce kodu yazmaya mecbur hissettim kendimi. Sait Faik gibi, "yazmasam deli olacaktım". Kısa bir sürenin ardından ~60 satırlık bir Python modülü çıktı ortaya. Konsol uygulaması haline getirince ~100 satır, dökümantasyonla birlikte ~190 satır oluverdi. Paket imzalama işi için bunu kullanır mıyız bilmiyorum ama, OpenSSL ve Python ile bu işin ne kadar kolay halledilebileceğini keşfetmek eğlenceliydi.

Betiğe ve dökümanlara buradan ulaşabilirsiniz. Anahtar ve (self-signed) sertifika oluşturmak için yapılması gerekenleri de yazdım, afiyet olsun.

Etiketler: , , , 1 yorum
27Ara/093

ÇOMAR ve PiSi

ÇOMAR ve PiSi kardeş, sanırım herkes biliyor bunu. Biri paketleri kuruyor, güncelliyor; diğeri kurulu paketlerin yapılandırma işlerini üstleniyor. Peki, ÇOMAR ve PiSi beraber nasıl çalışıyor? Paket yapıyorsanız ya da yapmak istiyorsanız, eninde sonunda "ÇOMAR betiği yaz" diyecektir birileri size, ve elbet bu soruyu soracaksınız. PiSi paketi yapmak çocuk oyuncağı olduğundan, diğer paketlerdeki ÇOMAR betiklerini alıp ufak değişikliklerle kendi PiSi paketlerinizde kullanabildiğinizden cevabını bilmemeniz ya da öğrenmemeniz muhtemelen uzunca bir süre etkilemez sizi, ama paket yapım işinizi kolaylaştırabilir de.

PiSi kaynak paketlerinde (pspec.xml), ikili paketin (.pisi uzantılı) sağladığı ÇOMAR görevlerinin ve her görevin hangi Python dosyası tarafından sağlandığının listesi bulunur:

    <Package>
        <Name>python</Name>
        <Files>
            ...
        </Files>
        <Provides>
            <COMAR script="package.py">System.Package</COMAR>
            <COMAR script="packhandler.py">System.PackageHandler</COMAR>
        </Provides>
    </Package>

Betikler, kaynak paket ile aynı dizindeki comar/ dizininde (hiç akla gelmez, değil mi?) bulunur. System.Package, System.PackageHandler ve System.Service dışındaki görevler PiSi ile ilgili olmadığından başka bir yazının konusu, bunlar muhtemelen Sistem Ayarları ekranındaki uygulamalardan birinin ihtiyaç duyduğu altyapıyı sağlar.

System.Package görevini yerine getiren betik, paket kurulduktan sonra, kaldırılmadan önce ve kaldırıldıktan sonra çalıştırılacak metodları içerir. Betik içinde, metodlardan herhangi birinin tanımlı olması zorunlu değildir. Dosya haklarını ve sahiplerini değiştirecekseniz postInstall() metodu, paket kaldırılmadan önce ayar dosyalarında değişiklik yapacaksanız (mod_php'yi kaldırmadan önce Apache ayarlarını değiştirmek gibi) preRemove() metodu, paket kaldırıldıktan sonra artık dosyaları temizleyecekseniz postRemove() metodu kodlarınızı yazmanız gereken yer.

import re

def postInstall(fromVersion, fromRelease, toVersion, toRelease):
    module_enable('PHP5')

def preRemove():
    module_disable('PHP5')

def module_enable(mod):
    ...

def module_disable(mod):
    ...

System.PackageHandler'da durum biraz daha farklı. Bu betikler, betiğin çıktığı paket kurulması/kaldırılması sırasında değil, sisteme herhangi bir paket kurulduğunda ya da kaldırıldığında çalıştırılıyor. Çekirdek modülleri ve Python kütüphaneleri gibi, paket deposunda onlarcası bulunan ve hepsine birer System.Package betiği yazsanız üç aşağı beş yukarı aynı betiğin ortaya çıkacağı paketlerde, paketçinin yükünü ve kod tekrarını azaltmak için kullanılıyorlar.

Django paketini kurduğunuzda, sistemdeki her System.PackageHandler betiği çalıştırılır ve betik içindeki metodlara, pakete ait iki XML dosyası parametre olarak verilir: metadata.xml ve files.xml. Bu dosyalardan ilki, pakete ait kimlik bilgilerinin barındırır, ikincisi ise, paketten çıkan her dosyayı ve dosyalara ait özet bilgileri. ÇOMAR betikleri, files.xml dosyasında, kendilerini ilgilendiren bir dosya varsa (mesela, Python'a ait SPH betiği, ikili paket .py dosyası içeriyorsa) ya da metadata.xml'de ilgili oldukları bir veri/etiket bulunuyorsa işlem yaparlar.

Python'a ait SPH betiği aşağıda, yeni başlayanlar için ağır bir örnek ancak örnek olsun diye yazacağım basit bir betik gerçekçi olmazdı.

import piksemel
import sys
import os

pythonPath = "/usr/lib/python%d.%d" % sys.version_info[:2]

def byteCompile(filepath):
    doc = piksemel.parse(filepath)
    paths = []
    for item in doc.tags("File"):
        path = item.getTagData("Path")
        if path.endswith(".py"):
            paths.append("/"+path)

    if paths:
        os.system("/usr/bin/python %s/py_compile.py %s" % (pythonPath, " ".join(paths)))

def removeByteCompiled(filepath):
    doc = piksemel.parse(filepath)
    for item in doc.tags("File"):
        path = item.getTagData("Path")
        if path.endswith(".py"):
            try:
                # Remove .pyc and .pyo
                os.unlink("/%sc" % path)
                os.unlink("/%so" % path)
            except OSError:
                pass

def setupPackage(metapath, filepath):
    byteCompile(filepath)

def postCleanupPackage(metapath, filepath):
    removeByteCompiled(filepath)

Bu gecelik bu kadar...

22Ara/090

ÇOMAR

ÇOMAR (COnfiguration MAnageR - Yapılandırma Yöneticisi), sıradan bir işi yapmak için Google'da saatler geçirmeyin, anlamadığınız bir formatta yazılmış ayar dosyalarını kurcalamayın ve bu sırada sisteminizi uçurmayın diye oluşturulmuş bir ayar yönetim sistemi. PiSi'nin kardeşi olur kendisi; biri uygulamaları kurar, diğeri yapılandırır - ya da en azından yapılandırma işi için kolay kullanılabilir bir ortam yaratır.

Misal, ağ bağlantısı kurmak istiyorsunuz. Bunu farklı yollarla, farklı yöntemlerle yapabilirsiniz. Ethernet, wireless, modem ve 3G kullanabilirsiniz. Ethernet ile yapacaksanız iş nispeten kolaydır; DHCP istemcisini açar, IP almaya çalışırsınız. makul bir süre sonra IP alamazsanız, ağda bir sorun olduğunu anlarsınız; ya da IP alıp hayatınıza devam edersiniz. Kablosuzda durum biraz daha karışıktır. DHCP ile IP almadan önce -varsa- kimlik doğrulama yaparsınız, doğrulama şekline göre farklı ayarlar yapar, farklı uygulamalar çalıştırırsınız. Her işi konsoldan yapmanızı gerektiren sadist bir işletim sistemi kullanmıyorsanız, genelde bu iş için bir araç kullanırsınız. İşlem yapmadan önce sizden yetkili kullanıcı parolasını ister, ilgili dosyaları değiştirir, gerekli programları çalıştırır.

Çoğu Linux dağımı bu işi böyle yapar. Belirli bir görevi yerine getirmek için oluşturulmuş -çoğu dağıtıma özgü- yönetim arabirimleri, kendi yöntemleri ile ayarları değiştirir, komut çalıştırır ve sonuçta kullanıcının isteğini yerine getirir. Sorun ise, aynı ayar dosyaları ya da uygulamalar farklı yönetim araçları ve bu araçlardan bilgi almak isteyen diğer uygulamalar tarafından kullanılmak istendiğinde ve kullanıcılara bir işi yapabilmeleri için yetkili kullanıcı (root) hesabı parolası verilmesi gerektiğinde ortaya çıkar.

ÇOMAR, burada devreye girer, sade ve basit bir çözüm ile. Pardus'ta sık yapılan işler için görev modelleri tanımlanır ve bu görevleri üstlenecek uygulamaların birbirlerinin ayağına basmadan, altyapıdaki değişikliklerden (değişen sürümler, kullanılan yeni teknolojiler, ...) çalışmalarını sağlayacak ve gerektiğinde yetki kontrolü yapabilen bir yönetim katmanı oluşturulur.

  • Ağ bağlantısı yönetimi
    • Aygıtları listele
    • Aygıt üzerinde bir bağlantı oluştur
    • Adres ayarları yap
    • Bağlantıyı aç
    • Bağlantı bilgilerini göster
    • ...
  • Servis yönetimi
    • Servisleri listele
    • Servisi aç
    • Servis bilgilerini al
    • ...
  • ...

Görev modelleri yukarıda görüldüğü gibi olabildiğince sadedir, uygulamalardan ve teknolojilerden bağımsızdır. Alt görevleri yerine getirecek kodlar ise görevi yerine getirecek uygulamanın PiSi paketi ile beraber gelen Python betikleridir (bunlara ÇOMAR betikleri diyoruz) ve bu betikler içinde modelde tanımlı her alt görevi yerine getiren bir fonksiyon bulunmaktadır. Her uygulama, aynı görevi farklı şekillerde yerine getirdiğinden, her uygulamanın ÇOMAR betiği farklıdır. Betikler, uygulamaların PiSi paketlerini hazırlayan -teorik olarak, Pardus geliştiricileri arasında, o uygulamayı en iyi bilen- geliştiriciler tarafından yazıldığından, arabirimlerin keyfi yöntemlerle ayar dosyası değiştirme ya da komut çalıştırmasından daha güvenli ve düzenlidirler. Detaylı bilgi için, mevcut görev modelleri ve bu görevleri yerine getirecek ÇOMAR betiklerinin formatları incelenebilir.

Arabirimler ve ÇOMAR betikleri arasında duran ve yetki kontrolü yapan katmanda ise, yapılan iş teknik olarak karışık görünse de, aslında son derece basittir. Arabirimden alınan bir çağrı, örneğin ağ bağlantısı kurma emri; çağrıyı yapan kullanıcının o işi yapmaya yetkisi olup olmadığı kontrol edildikten sonra, ilgili uygulamanın ÇOMAR betiğine yönlendirilir ve betikte tanımlı fonksiyon çalıştırılır. Sıkıcı detaylar için, iletişim için kullanılan DBus'a (İngilizce) belgeler ve ara katman ile ilgili tasarım notları incelenebilir.

Arabirimlerin, bu ara katman ile iletişimi kolay bir şekilde yapabilmeleri için -nispeten- basit bir Python kütüphanesi bulunmaktadır:

    import comar
    link = comar.Link()
    print "Servis betiği olan uygulamalar:"
    print list(link.System.Service)

Bu Python kütüphanesi ile ilgili daha fazla örnek, COMAR API projesine ait Beni Oku dosyasında ve örnekler dizininde bulunabilir.

21Ara/090

ÖY Sohbetleri I – 26 Aralık’ta Beşiktaş’ta

Özgür Yazılım Sohbetleri'nin ilki, 26 Aralık 2009 Cumartesi 13:30'da Beşiktaş Çıtır Cafe'de yapılacak. Çıtır Cafe, Barbaros Bulvarı ve Hasfırın Caddesi'nin kesiştiği yerde.

Facebook etkinlik sayfası burada.

Kategori: Genel Yorum yok
19Ara/090

Özgür Yazılım Sohbetleri

Ayda bir toplanalım, özgür yazılım konuşalım. Var mısınız?

Ek: Konuları önceden planlanmamış, belki içeriği diğer şehirlerden kalkıp gelmenize değmeyecek, sıradan arkadaş toplantıları tadında olacak bu ÖY sohbetleri.

Sürekli aynı şehirde, aynı mekanda da olmayacak bu sohbetler. İstanbul/Ankara'da her ay düzenli yapılacak muhtemelen bu sohbetler, ama ara sıra otobüse atlayıp Çanakkale'ye, İzmir'e, Burdur'a (Gökçen, bu senin için) gidelim diyeceğiz. Belki de başkaları organize edecek bu tür sohbetleri, kendimizi bir hafta sonu farklı diyarlarda bulacağız.

Ek 2: Ankara Öİ ekibi yapıyordu bu tür etkinlikler, katılamadığım için üzülüyordum. Fikir sizden çıktı, herkese selamlar.

Kategori: Genel Yorum yok