PiSi'yi Paketlerken 1: piksemel
Devamını getirebilirsem bu yazı Fedora'da PiSi'yi paketlerken öğrendiklerimi konuyla ilgilenenlere aktarmaya çalışacağım iki - üç yazılık bir serinin başlangıcı olacak. Yazının devamının gelmemesi ihtimaline karşı konunun ana hatlarına vakıf olabileceğiniz şu Google+ girdisine bakmayı da göz önünde bulundurabilirsiniz.
Her ne kadar TÜBİTAK anlamakta güçlük çektiğim nedenlerle PiSi'den vazgeçmiş olsa da Pardus topluluğunun bunu kolay kolay yapacağını hiç düşünmüyorum. PiSi'nin geliştirilmeye başlanması keyfi bir karar değildi. Diğer paket yönetim sistemlerindeki eksiklikler ve asla -daha doğrusu kolay kolay- değişmeyecek tasarım kararları nedeniyle yeni ve modern bir paket yönetim sistemine ihtiyaç duyulmuştu.
Geçmişte alınmış bu teknik kararı şimdiki proje yönetimi elbette değiştirebilir ama bunu teknik nedenleri, değişen şartları, PiSi ve diğer paket yönetim sistemlerinin şu anki durumlarının analizlerini, karşılaştırmalarını açıklamadan yaptığında ister istemez çoğu kişinin aklına bu -çok azını- saydığım şeylerden hiçbirinin yapılmadığını ve en popüler paket yönetim sistemlerinden birinin alelacele seçildiğini getiriyor. Konumuz bu değildi doğru ya, geçelim.
PiSi'yi neden Fedora için paketlemek istediğim sonraki yazılarda kendiliğinden ortaya çıkacağı için (çıkmazsa da son yazının sonuç kısmı ne için değil mi ama) şimdi daha fazla uzatmadan piksemel'e geçmek istiyorum. İlk önce biraz bağlantı vermekle başlayacağım.
Twitter'da piksemel:
Günlük yazılarında piksemel:
Bunları yazı sonunda değil de şimdi vermemin tek nedeni dünya kadar açılmış sekmelerden bir an önce kurtulmak istemem :) Şimdi yazıp, sonra yazının en sonuna eklemek de okuyucuyu kandırmak olacağı için böyle yazının ortasında bırakıyorum, bu kısmı atlayıp sonra dönebilirsiniz ki en normali de bu olur zaten.
piksemel'in GNU/Linux dağıtımları paketleri:
Bu kadar bağlantı şimdilik yeter, piksemel hakkında daha fazla bilgi için Pardus listelerinde arama da yapabilirsiniz. Artık piksemel'i tanımaya başlayalım.
piksemel, Python için basit, hızlı, ufak ve sağlam bir XML ayrıştırıcısıdır. Taban aldığı iksemel'e Python desteği sunar. Lisansı GPLv2+'dir. piksemel bir AUTHORS dosyasına sahip olmadığı için geliştiricilerinden atladığım isimler olabilir ama bu riski göze alarak Gürer Özen ismini anmamak olmaz. Sanırım hem iksemel hem de piksemel'in ana ve tek geliştiricisi kendisi. Yazıya başlamadan önce iksemel'in geliştiricisinin kim olduğunu bilmiyor, piksemel'in ise Pardus geliştirilerince yazıldığını ve Gürer Özen'in bu geliştiricilerden biri olduğunu biliyordum / sanıyordum sadece.
Parçaları yanlış birleştirmediysem piksemel ilk önce (Pardus için) ayrı bir proje olarak geliştirilmeye başlanmış ve daha sonra ana proje iksemel ile birleştirilmiş. iksemel bir süredir de geliştirilmediği için Python bağlayıcılarının yer alacağı 1.5 sürümü henüz yayınlanmamış. Bu yüzden piksemel'i ayrıca paketlememiş olan pek çok dağıtımda henüz piksemel bulunmuyor.
Pardus'a veya PiSi'ye destek vermek için iksemel'in geliştirim çalışmalarına yardım etmek epey güzel bir fikir gibi duruyor. Kod katkıları ve hata bildirimi için projenin durum takip sistemini kullanabilir veya daha ciddi katkılar verebileceğinizi düşünüyorsanız geliştiricisiyle iletişime geçip projeye katılabilirsiniz.
Ayrıca iksemel'in pek çok platform ve özel amaç için özelleştirilmiş çatalı da bulunuyor, bunlara da göz atmak isteyebilirsiniz:
piksemel'in README dosyasında bulunan belgelendirmesinin Türkçe çevirisi de aşağıdaki gibi:
Modül Sabitleri
Bu enumerator sabitleri Node (Düğüm) nesnelerinin türünü belirtmek için kullanılır.
Modül İstisnaları
ParseError (AyrıştırmaHatası)
Verilen dize veya dosya geçersiz XML içerirse ortaya çıkar.
NotTag (EtiketDeğil)
Bir fonksiyon bir etiket düğümü kabul ederken başka türde nesne aldığında gösterilir.
NotData (VeriDeğil)
Bir fonksiyon bir veri düğümü kabul ederken başka türde nesne aldığında gösterilir.
Modül Fonksiyonları
parse(filename) ayrıştır(dosyaismi)
Verilen XML dosyasını ayrıştırır ve üst düzey etiketin düğüm nesnesini döndürür.
parseString(string) dizeAyrıştır(dize)
Verilen XML dizesini ayrıştırır ve üst düzey etiketin düğüm nesnesini döndürür.
newDocument(tagname) yeniBelge(etiketismi)
Verile etiket ismiyle yeni bir üst düzey etiket düğüm nesnesi oluşturur.
Modül Nesneleri
Node (Düğüm)
Bu nesne XML belge ağacındaki bir düğümü temsil eder. Eğer bir düğüm nesnesi üzerinde yineleme yaparsanız o düğüm nesnesinin alt seviyedeki düğümlerinin listesini alırsınız.
Düğüm Nesne Metotları
type() tür()
Düğüm türünü döndürür.
data() veri()
Veri düğümleri için karakter verileri döndürür.
name() isim()
Etiket düğümleri için etiket ismini döndürür.
attributes() öznitelikler()
Düğümün öznitelik isimlerinin listesini döndürür. Hiçbir öznitelik yoksa boş bir liste döndürür.
getAttribute(attributename) özniteliğiAl(öznitelikismi)
Etiket düğümleri için verilen özniteliğin değerini döndürür. Böyle bir öznitelik yoksa None döndürür.
setAttribute(attributename, value) öznitelikAyarla(öznitelikismi, değer)
Etiket düğümleri için verilen özniteliğin değerini ayarlar. Bir özniteliği silmek için değer olarak None verebilirsiniz.
getTag(tagname) etiketiAl(etiketismi)
Verilen isimdeki ilk alt etiket düğümünü döndürür. Böyle bir alt seviye düğüm yoksa None döndürür.
getTagData(tagname) EtiketVerisiniAl(etiketismi)
Verilen isimdeki ilk alt etiket düğümünün içerdiği karakter verisini döndürür.
tags(tagname=None) etiketler(etiketismi=None)
Alt etiket düğümleri üzerinde dolaşır. Eğer isteği bağlı etiket ismi verilirse yalnızca verilen isme sahip etiketler üzerinde dolaşır.
firstChild() ilkAlt()
İlk alt düğümü döndürür.
parent() üst()
Üst düzey düğümü döndürür.
root() kök()
En üst düzey düğümü döndürür.
next() sonraki()
Sonraki düğümü döndürür. Eğer bu aynı seviyedeki son düğümse None döndürür.
nextTag(tagname=None) sonrakiEtiket(etiketismi=None)
Sonraki etiket düğümünü döndürür. İsteğe bağlı olan etiket ismi verilirse verilen isimdeki sonraki aynı seviyedeki etiket düğümünü döndürür. Böyle bir aynı seviyede etiket düğümü yoksa None döndürür.
previous() önceki()
Önceki düğümü döndürür. Eğer bu aynı seviyedeki ilk düğümse None döndürür.
previousTag(tagname=None) öncekiEtiket(etiketismi=None)
Önceki etiket düğümünü döndürür. İsteğe bağlı olan etiket ismi verilirse verilen isimdeki önceki aynı seviyedeki etiket düğümünü döndürür. Böyle bir aynı seviyede etiket düğümü yoksa None döndürür.
insertTag(tagname) etiketEkle(etiketismi)
Alt seviyede düğümlerin arasına verilen isimde yeni bir alt seviye etiket düğümü ekler. Yeni oluşturulan etiket düğümü nesnesini döndürür.
insertData(data) VeriEkle(veri)
Verilen karakter verisini alt seviye düğümlere ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
setData(data) VeriAyarla(veri)
Verilen etiketin mevcut alt seviye düğümlerini siler, sonra veriyi etiketin alt seviye düğümü olarak ekler.
insertNode(node) DüğümEkle(düğüm)
Verilen düğüm ağacına alt seviyede düğümler ekler. Yeni oluşturulan düğüm nesnelerini döndürür.
appendTag(tagname) sonunaEtiketEkle(etiketismi)
Verilen isimde bir etiket düğümü oluşturur ve sonraki aynı seviyedeki düğüm olarak ekler. Yeni oluşturulan etiket düğüm nesnesini döndürür.
appendData(data) sonunaVeriEkle(veri)
Verilen karakter verisini sonraki aynı seviyedeki veri olarak ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
prependTag(tagname) başınaEtiketEkle(etiketismi)
Verilen isimde bir etiket düğümü oluşturur ve önceki aynı seviyedeki düğüm olarak ekler. Yeni oluşturulan etiket düğüm nesnesini döndürür.
prependData(data) başınaVeriEkle(veri)
Verilen karakter verisini önceki aynı seviyedeki veri olarak ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
hide() gizle()
Belge ağacından düğümü siler.
toString() dizeyeDönüştür()
Düğüm ağacının XML dize temsilini döndürür.
toPrettyString() hoşDizeyeDönüştür()
Düğüm ağacının XML dize temsilini döndürür. Yeni satır ve sekmeler hoş görünüm elde edilmesi için belgeye eklenir.
Her ne kadar TÜBİTAK anlamakta güçlük çektiğim nedenlerle PiSi'den vazgeçmiş olsa da Pardus topluluğunun bunu kolay kolay yapacağını hiç düşünmüyorum. PiSi'nin geliştirilmeye başlanması keyfi bir karar değildi. Diğer paket yönetim sistemlerindeki eksiklikler ve asla -daha doğrusu kolay kolay- değişmeyecek tasarım kararları nedeniyle yeni ve modern bir paket yönetim sistemine ihtiyaç duyulmuştu.
Geçmişte alınmış bu teknik kararı şimdiki proje yönetimi elbette değiştirebilir ama bunu teknik nedenleri, değişen şartları, PiSi ve diğer paket yönetim sistemlerinin şu anki durumlarının analizlerini, karşılaştırmalarını açıklamadan yaptığında ister istemez çoğu kişinin aklına bu -çok azını- saydığım şeylerden hiçbirinin yapılmadığını ve en popüler paket yönetim sistemlerinden birinin alelacele seçildiğini getiriyor. Konumuz bu değildi doğru ya, geçelim.
PiSi'yi neden Fedora için paketlemek istediğim sonraki yazılarda kendiliğinden ortaya çıkacağı için (çıkmazsa da son yazının sonuç kısmı ne için değil mi ama) şimdi daha fazla uzatmadan piksemel'e geçmek istiyorum. İlk önce biraz bağlantı vermekle başlayacağım.
Twitter'da piksemel:
Günlük yazılarında piksemel:
Bunları yazı sonunda değil de şimdi vermemin tek nedeni dünya kadar açılmış sekmelerden bir an önce kurtulmak istemem :) Şimdi yazıp, sonra yazının en sonuna eklemek de okuyucuyu kandırmak olacağı için böyle yazının ortasında bırakıyorum, bu kısmı atlayıp sonra dönebilirsiniz ki en normali de bu olur zaten.
piksemel'in GNU/Linux dağıtımları paketleri:
Bu kadar bağlantı şimdilik yeter, piksemel hakkında daha fazla bilgi için Pardus listelerinde arama da yapabilirsiniz. Artık piksemel'i tanımaya başlayalım.
piksemel, Python için basit, hızlı, ufak ve sağlam bir XML ayrıştırıcısıdır. Taban aldığı iksemel'e Python desteği sunar. Lisansı GPLv2+'dir. piksemel bir AUTHORS dosyasına sahip olmadığı için geliştiricilerinden atladığım isimler olabilir ama bu riski göze alarak Gürer Özen ismini anmamak olmaz. Sanırım hem iksemel hem de piksemel'in ana ve tek geliştiricisi kendisi. Yazıya başlamadan önce iksemel'in geliştiricisinin kim olduğunu bilmiyor, piksemel'in ise Pardus geliştirilerince yazıldığını ve Gürer Özen'in bu geliştiricilerden biri olduğunu biliyordum / sanıyordum sadece.
Parçaları yanlış birleştirmediysem piksemel ilk önce (Pardus için) ayrı bir proje olarak geliştirilmeye başlanmış ve daha sonra ana proje iksemel ile birleştirilmiş. iksemel bir süredir de geliştirilmediği için Python bağlayıcılarının yer alacağı 1.5 sürümü henüz yayınlanmamış. Bu yüzden piksemel'i ayrıca paketlememiş olan pek çok dağıtımda henüz piksemel bulunmuyor.
Pardus'a veya PiSi'ye destek vermek için iksemel'in geliştirim çalışmalarına yardım etmek epey güzel bir fikir gibi duruyor. Kod katkıları ve hata bildirimi için projenin durum takip sistemini kullanabilir veya daha ciddi katkılar verebileceğinizi düşünüyorsanız geliştiricisiyle iletişime geçip projeye katılabilirsiniz.
Ayrıca iksemel'in pek çok platform ve özel amaç için özelleştirilmiş çatalı da bulunuyor, bunlara da göz atmak isteyebilirsiniz:
- zlvvtl-iksemel
- cswei99-iksemel
- iksemel for Symbian OS
- iksemel-ext
- small version of iksemel
- A modified iksemel library
- minmay
piksemel'in README dosyasında bulunan belgelendirmesinin Türkçe çevirisi de aşağıdaki gibi:
Modül Sabitleri
- TAG (ETİKET)
- ATTRIBUTE (ÖZNİTELİK)
- DATA (VERİ)
Bu enumerator sabitleri Node (Düğüm) nesnelerinin türünü belirtmek için kullanılır.
Modül İstisnaları
ParseError (AyrıştırmaHatası)
Verilen dize veya dosya geçersiz XML içerirse ortaya çıkar.
NotTag (EtiketDeğil)
Bir fonksiyon bir etiket düğümü kabul ederken başka türde nesne aldığında gösterilir.
NotData (VeriDeğil)
Bir fonksiyon bir veri düğümü kabul ederken başka türde nesne aldığında gösterilir.
Modül Fonksiyonları
parse(filename) ayrıştır(dosyaismi)
Verilen XML dosyasını ayrıştırır ve üst düzey etiketin düğüm nesnesini döndürür.
parseString(string) dizeAyrıştır(dize)
Verilen XML dizesini ayrıştırır ve üst düzey etiketin düğüm nesnesini döndürür.
newDocument(tagname) yeniBelge(etiketismi)
Verile etiket ismiyle yeni bir üst düzey etiket düğüm nesnesi oluşturur.
Modül Nesneleri
Node (Düğüm)
Bu nesne XML belge ağacındaki bir düğümü temsil eder. Eğer bir düğüm nesnesi üzerinde yineleme yaparsanız o düğüm nesnesinin alt seviyedeki düğümlerinin listesini alırsınız.
Düğüm Nesne Metotları
type() tür()
Düğüm türünü döndürür.
data() veri()
Veri düğümleri için karakter verileri döndürür.
name() isim()
Etiket düğümleri için etiket ismini döndürür.
attributes() öznitelikler()
Düğümün öznitelik isimlerinin listesini döndürür. Hiçbir öznitelik yoksa boş bir liste döndürür.
getAttribute(attributename) özniteliğiAl(öznitelikismi)
Etiket düğümleri için verilen özniteliğin değerini döndürür. Böyle bir öznitelik yoksa None döndürür.
setAttribute(attributename, value) öznitelikAyarla(öznitelikismi, değer)
Etiket düğümleri için verilen özniteliğin değerini ayarlar. Bir özniteliği silmek için değer olarak None verebilirsiniz.
getTag(tagname) etiketiAl(etiketismi)
Verilen isimdeki ilk alt etiket düğümünü döndürür. Böyle bir alt seviye düğüm yoksa None döndürür.
getTagData(tagname) EtiketVerisiniAl(etiketismi)
Verilen isimdeki ilk alt etiket düğümünün içerdiği karakter verisini döndürür.
tags(tagname=None) etiketler(etiketismi=None)
Alt etiket düğümleri üzerinde dolaşır. Eğer isteği bağlı etiket ismi verilirse yalnızca verilen isme sahip etiketler üzerinde dolaşır.
firstChild() ilkAlt()
İlk alt düğümü döndürür.
parent() üst()
Üst düzey düğümü döndürür.
root() kök()
En üst düzey düğümü döndürür.
next() sonraki()
Sonraki düğümü döndürür. Eğer bu aynı seviyedeki son düğümse None döndürür.
nextTag(tagname=None) sonrakiEtiket(etiketismi=None)
Sonraki etiket düğümünü döndürür. İsteğe bağlı olan etiket ismi verilirse verilen isimdeki sonraki aynı seviyedeki etiket düğümünü döndürür. Böyle bir aynı seviyede etiket düğümü yoksa None döndürür.
previous() önceki()
Önceki düğümü döndürür. Eğer bu aynı seviyedeki ilk düğümse None döndürür.
previousTag(tagname=None) öncekiEtiket(etiketismi=None)
Önceki etiket düğümünü döndürür. İsteğe bağlı olan etiket ismi verilirse verilen isimdeki önceki aynı seviyedeki etiket düğümünü döndürür. Böyle bir aynı seviyede etiket düğümü yoksa None döndürür.
insertTag(tagname) etiketEkle(etiketismi)
Alt seviyede düğümlerin arasına verilen isimde yeni bir alt seviye etiket düğümü ekler. Yeni oluşturulan etiket düğümü nesnesini döndürür.
insertData(data) VeriEkle(veri)
Verilen karakter verisini alt seviye düğümlere ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
setData(data) VeriAyarla(veri)
Verilen etiketin mevcut alt seviye düğümlerini siler, sonra veriyi etiketin alt seviye düğümü olarak ekler.
insertNode(node) DüğümEkle(düğüm)
Verilen düğüm ağacına alt seviyede düğümler ekler. Yeni oluşturulan düğüm nesnelerini döndürür.
appendTag(tagname) sonunaEtiketEkle(etiketismi)
Verilen isimde bir etiket düğümü oluşturur ve sonraki aynı seviyedeki düğüm olarak ekler. Yeni oluşturulan etiket düğüm nesnesini döndürür.
appendData(data) sonunaVeriEkle(veri)
Verilen karakter verisini sonraki aynı seviyedeki veri olarak ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
prependTag(tagname) başınaEtiketEkle(etiketismi)
Verilen isimde bir etiket düğümü oluşturur ve önceki aynı seviyedeki düğüm olarak ekler. Yeni oluşturulan etiket düğüm nesnesini döndürür.
prependData(data) başınaVeriEkle(veri)
Verilen karakter verisini önceki aynı seviyedeki veri olarak ekler. Yeni oluşturulan veri düğüm nesnesini döndürür.
hide() gizle()
Belge ağacından düğümü siler.
toString() dizeyeDönüştür()
Düğüm ağacının XML dize temsilini döndürür.
toPrettyString() hoşDizeyeDönüştür()
Düğüm ağacının XML dize temsilini döndürür. Yeni satır ve sekmeler hoş görünüm elde edilmesi için belgeye eklenir.
Lütfen hem belgenin genelindeki hem de özellikle yukarıdaki belgelendirmedeki hataları yorum olarak belirtin.
piksemel ile geliştirilen küçük kod parçacıklarını da Google'dan veya Pardus ile ilgili betiklerin olduğu dizinden bularak piksemel'in nasıl kullanılacağı hakkında detaylı bilgi edinebilirsiniz. Çok basit bir iki örnek yazarsanız yorum olarak ekleyebilirsiniz. Bir pspec.xml'deki paketçi isminin döndürülmesi veya inşa bağımlılıklarının sıralanması gibi. Bunları yazıya ekleyebilirim böylece. Şu an değilse de daha sonra ben de yazmayı deneyebilirim.
Umarım piksemel ile ilgilenmeyi düşünecekler için yardımcı bir şeyler çıkmıştır yukarıda. Sonraki yazı catbox hakkında olacak büyük ihtimalle. O yazıda görüşürüz.
Umarım piksemel ile ilgilenmeyi düşünecekler için yardımcı bir şeyler çıkmıştır yukarıda. Sonraki yazı catbox hakkında olacak büyük ihtimalle. O yazıda görüşürüz.
Lisansı LGPLv2+ de olabilir, birkaç yerde bu şekilde geçmiş.
YanıtlaSil