Tired of attached modal dialogs in GNOME 3?

Modal dialogs are by default attached to their parent windows in GNOME 3. This is why you can’t change the position of a “Save as” dialog when you are in Firefox for example. If you want to disable this behaviour you can change it using gsettings:

$ gsettings set org.gnome.shell.overrides attach-modal-dialogs false

Google Summer of Code 2013 Başlıyor!

Google’ın her yaz düzenlediği “Google Summer of Code” etkinliği başlıyor. Bugün Galatasaray Üniversitesi öğrencileriyle bir toplantı yaptık ve onlara GSoC nedir, ne değildir sunumu yaptım. Sunumu buraya da koyuyorum. Sunumda Necdet Yücel’in sitesindeki güzel istatistiklerden çokça faydalandım.

Kendisine biraz güvenen, “Ben bu yaz bir projeye vakit ayırıp başarılı olup karşılığında güzel bir maddi destek alırım!” diyen tüm öğrencilere başvurmalarını şiddetle tavsiye ediyorum.

Multiple filesystem signatures on a partition

I have a separate partition for /root which is mounted through /etc/fstab. Last night I’ve done a huge update to my Fedora 18 laptop and today it got stuck in the mounting step.

Use rdbreak=pre-mount boot parameter

This is a nice kernel command line parameter which tells dracut to spawn a shell before mounting the filesystems. After dropping into the shell, I looked at blkid output:

# blkid
/dev/sda1: UUID="3E1691BA1691739D" TYPE="ntfs"
/dev/sda4: LABEL="LENOVO_PART" UUID="D4F69CB3F69C9778" TYPE="ntfs"
/dev/sda6: LABEL="f18" UUID="d73af424-0839-49d8-baff-fc3021f8160d" TYPE="ext4"

Oops, blkid doesn’t show /dev/sda2. Let’s force it to do low-level superblock probing which avoids blkid caches:

# blkid -p /dev/sda2
/dev/sda2: ambivalent result (probably more filesystems on
           the device, use wipefs(8) to see more details)

So, it seems that somehow the partition got multiple filesystem signatures instead of only ext4. Let’s look at it using wipefs:

# wipefs /dev/sda2
offset               type
----------------------------------------------------------------
0x4000040            btrfs   [filesystem]
                     UUID:  7630c42b-4275-45af-b7a0-24d05bfa4e5f
 
0x438                ext4   [filesystem]
                     LABEL: ssd75g
                     UUID:  d2675c32-931a-4e6d-8b73-5d9d488f2492

Well this is interesting. As far as I remember, I used btrfs before ext4 on this partition. So it is possible that after the latest updates, the fact that the partition got multiple signatures is not handled anymore by a layer. Let’s erase the signature for btrfs giving its offset:

# wipefs -o 0x4000040 /dev/sda2
/dev/sda2: 8 bytes were erased at offset 0x04000040 (btrfs): 5f 42 48 52 66 53 5f 4d

Now let’s look at what btrfs detects now:

# blkid
/dev/sda1: UUID="3E1691BA1691739D" TYPE="ntfs"
/dev/sda4: LABEL="LENOVO_PART" UUID="D4F69CB3F69C9778" TYPE="ntfs"
/dev/sda6: LABEL="f18" UUID="d73af424-0839-49d8-baff-fc3021f8160d" TYPE="ext4"
/dev/sda2: LABEL="ssd75g" UUID="d2675c32-931a-4e6d-8b73-5d9d488f2492" TYPE="ext4"

Woot, it came back 🙂

Benim Pardus Hikayem

Aşağıdaki yazıyı Ocak 2012’de Pardus Projesi’nde görevimden ayrıldıktan sonra yazmıştım. O günden bugüne çok değişiklik oldu. Öncelikle projede resmi olarak çalışan kalmadı. Pardus’taki bütün emekler çöpe atıldı ve Pardus, Debian tabanlı “çakma” bir işe dönüştürüldü. Yakın zamanda gönderilen Göktürk-2 uydusunun tüm kahrını çeken ekip tasfiye edilmiş ve yeni gelenler eski başarıya tabiri caizse “çöreklenmişlerdi”. Bizler aynı şeyin Pardus’un başına gelmesini istemiyoruz.

Tübitak ekibi ve o zamanki gönüllü arkadaşlarımız olarak bizlerin geliştirdikleri Pardus dağıtımı, 2011 ve Kurumsal 2 sürümleriyle yaşamını noktalamıştır. Etrafta dolaşan, uğruna yeni internet siteleri tasarlanan, Fatih Projesi’nde 400bin akıllı tahtaya yükleneceği söylenen “şey” adı değiştirilmiş bir Debian’dan başka bir şey değildir.

CHP Genel Başkan Yardımcısı Umut Oran’ın Pardus Ekibi’nin neden tasfiye edildiği ile ilgili soru önergesine dair haber aşağıdadır:
http://t24.com.tr/haber/pardus-ekibi-neden-dagitildi/221303

Benim için her şey büyük bir raslantı zinciriyle başladı aslında..

Tanışma ve Staj Başvurusu (Ocak 2007 – Nisan 2007)

Önce yurtdışında Erasmus yapmaya karar verdim. Sonra gitmek istediğim okul ile kendi okulum arasında zorla anlaşma yaptırdım. Ocak 2007’de Fransa’nın Grenoble şehri’ne gittim. Derslerime başladım ve gördüm ki gerek derslerde gerek laboratuvarlarda kısacası her yerde Linux kullanılıyor. Eve döndüm, dizüstü bilgisayarıma Pardus 2007 kurdum. 6 ay Skype ihtiyacım dışında sadece Pardus 2007 kullandım.

Bir gece yattığımda “Keşke Pardus Projesi’nde staj imkanı olsaydı..” dedim. Uyandıktan sonraki 1-2 gün içerisinde Pardus’un ilk defa stajyer alacağını öğrendim. Heyecanlandım tabii. Bir yandan çok istiyordum bir yandan da elle tutulur bir Linux tecrübem olmadığından kabul edilme olasılığımın düşük olduğunu düşünüyordum. 1-2 hata bildirmiştim o kadar.

Neyse vakit kaybetmeden bir CV ile niyet mektubu hazırlayarak başvurdum (29 Mart 2007):

Sevgili Pardus Ekibi,

Öncelikle biraz kendimden bahsedeyim. Galatasaray Üniversitesi, Bilgisayar Mühendisliği 3.Sınıf öğrencisiyim. Geçen sene yaptığım başvuru sonucu, Ocak 2007’den beri Fransa’nın Grenoble şehri’nde okumaktayım. Haziran 2007’ye kadar sürecek bu değişim programı sonunda İstanbul’a dönecek ve 2 ay boyunca zorunlu yaz stajımı gerçekleştireceğim.

Doğduğumdan beri bilgisayarla bir şekilde ilişki içerisindeyim ve bundan oldukça memnunum ve halen ilk gün sahip olduğum heyecana sahibim. Bu heyecanımı da arkama alarak lisans eğitimimi de bilgisayar üzerine yapmaya karar verdim. Bilgisayar ve elektronik dallarına ait her konu başlığına ilgiliyim. Ancak özellikle bilgisayarın elektroniksel olarak tasarımı, işlemci organizasyonu, işletim sistemi tasarımı ve sinyal işleme konularına ilgi duyuyorum. Tamam bu konular hakkında inanılmaz bir bilgi birikimine sahip olduğumu söyleyemem ancak uğraşırken en çok zevk aldığım konu başlıkları bunlar.

2004 yılından beri Linux ile uğraşıyorum. Üniversite’nin ilk senesinde, okulun köklü gruplarından GSULinux tarafından verilen dersleri takip ederek ilk sene sonunda Staff kadroya dahil edildim. Lise yıllarımda çekinerek ama merakla baktığım UNIX dünyasıyla
pratik olarak tanışmam bu yolla oldu. Özellikle Gentoo işletim sistemini kurma çabalarım süresince oldukça deneyim kazandığımı söyleyebilirim. Bunun dışında 2003 yılından beri C programlama diliyle bir şekilde iç içeyim ve bundan oldukça memnunum.

Lafın kısası, stajımı pardus ekibinde yapmak istiyorum çünkü 2 aydır laptopumda kullandığım işletim sisteminin iyileştirilmesinde en ufak bir faydam olursa bundan oldukça gurur duyacağım. Kullanırken bile gurur duyduğum bu işletim sisteminin ileride ülkem için mükemmel bir iftihar kaynağı olacağını seziyorum. Stajımı geçen sene de TÜBİTAK UEKAE bünyesindeki optoelektronik laboratuvarında yaptım ve ortamı tanıyorum. Ekipteki herkesten bilgi ve birikimime katkıda olacağına inandığım bir ton şey öğreneceğimi biliyorum. Python ile maalesef çok fazla uğraşmışlığım yok. Sadece geçen yaz vakit bulduğumda biraz bakmıştım ancak tabi ki pratik yapmadığım için çok fazla bir şey hatırlamıyorum. QT kullanarak grafiksel arayüz de geliştirmedim. Öğrenmemin çok fazla zaman alacağını düşünmüyorum, yaza kadar vakit bulursam çalışmayı, kurcalamayı düşünüyorum. Aşağıya staj projeleri listesinden seçtiklerimi yazıyorum. Bunlar aralarında, zorluğuna ve bilgi ihtiyacına bakmaksızın, en çok ilgimi çekenler:

– Göç aracı
– Proxy Ayar Arayüzü
– Paket Yapım Aracı
– Diğer Linux dağıtımlarının GRUB’a eklenmesi.
– Grafik yapılandırma arayüzü

Özgeçmişim ektedir. Yapmam gereken stajın resmi süresi 2 ay olup (40 iş günü), Temmuz 2007’den, Eylül 2007’ye kadar olan sürede herhangi bir zaman diliminde gerçekleştirebilirim. Bilgilerinize arz ederim. İyi çalışmalar.

Kişisel cevap 24 Nisan 2007 tarihinde geldi:

(A.Murat Eren tarafından yazılan detaylı blog girdisi de okumaya değerdir.)

Staj (Temmuz 2007 – Ağustos 2007)

Staja başladıktan sonra farkettiğim şey çevremde Pardus ve Linux adına benden daha fazla şey bilen, ofisteki geliştiricilerle tanışan insanların olduğuydu. Ben derleme çiftliğine XMLRPC tabanlı bir iletişim katmanı eklemekle uğraştım, bunu yaparken de karşıma çıkan hataları düzelttim. Genelde Ekin Meroğlu ve S.Çağlar Onur ile çalışıyorduk, ben onların yanına gidiyor, bir şeyler soruyor, yanıtları not alıyor geri stajyer ofisine dönüyor bir şeyler yapmaya çalışıyordum.

Staj süresi çabuk geçti, bir sürü şey öğrendim, Anibal’in Mezarı’nı gezdim, bir sürü değerli insanla tanıştım, eğlendim falan derken 11 Eylül 2007’de Çağlar Jabber üzerinden “Bizimle yarı zamanlı çalışmak ister misin?” dedi. Teklifin doğum günüme gelmesi ilginçti. Kabul ettim.

Yarı Zamanlı Katkı (Ekim 2007 – Ağustos 2008)

Ekim 2007 – Haziran 2008 arası yarı zamanlı olarak projeye destek verdim. Otomatik yazıcı tanıma altyapısı üzerinde çalışıyordum vakit buldukça. İlk olarak Pardus 2008 sürümünde bu altyapıyı devreye almıştık ve kullanıcılara oldukça kolaylık sağlamıştık. Benimle beraber Gökçen Eraslan tam zamanlı, Fatih Aşıcı ise yarı zamanlı olarak işe başlamıştı.

Yarı zamanlı çalıştığım süre üniversitenin son sıfına denk geldiğinde aynı zamanda tez çalışmalarıyla boğuşmaktan Pardus’a yeterli vakit ayıramıyordum. Tezi tamamlayıp Haziran 2008’de mezun olarak ofise geldiğimde Erkan Tekman ile “Ben akademik bir şeyler yapmak istiyorum, yüksek lisans yapacağım, bir süredir de tez ile uğraşmaktan projeye vakit ayıramadım ve aramıza mesafe girdi” temalı bir konuşma yaptım ancak beni projede kalmaya ikna etti, akademik iznimi kullanarak yüksek lisans da yapabileceğimi belirtti. Ağustos 2008 itibariyle tam zamanlı olarak projede çalışmaya başladım.

Tam Zamanlı Katkı (Ağustos 2008 – Ocak 2012)

Ağustos 2008’de tam zamanlı bir geliştirici oldum. Aynı zamanda Boğaziçi Üniversitesi Biyomedikal Mühendisliği Bölümü’nde yüksek lisansa başladım. Ancak bazı kişisel ve takvimsel sebeplerden dolayı hem işin hem de yüksek lisansın beraber yürümeyeceğini anlayarak yüksek lisansı bıraktım.

Staj ve yarı zamanlı çalıştığım dönemlerde beraber katkı vermeye çok fazla fırsat bulamadığım Gürer Özenİsmail Dönmez, S.Çağlar Onur birbirlerine yakın sayılabilecek zamanlarda projeden ayrıldılar. Çağlar’ın ayrılmasıyla bir anda çekirdek paketini elimde buldum. Çekirdek paketinin ve çekirdek sürücülerinin bakımını üstlendiğimde Pardus 2008 sürümü aktif olarak geliştiriliyordu ve 2.6.25 serisi çekirdek kullanıyorduk.

15 Kasım 2008 tarihinde çekirdeği 2.6.25.20 sürümüne yükselttim ve SUSE’den aldığım yamalarla çekirdeğe UDF desteği ekledim. Bu benim çekirdek paketine ilk güncellememdi.

Daha sonra Pardus 2009’u 2.6.31 serisiyle yayınladık. Kurumsal 2 sürümündeyse önce 2.6.32 serisini kullandık sonra ise 2.6.35 serisine geçiş yaptık. Pardus 2011’de ise 2.6.36 ve 2.6.37 çekirdeklerini kullandık.

Çekirdek ve sürücü bakımının yanında kararlı depoya aktarılmamış paketleri yavaş yavaş 2008 kararlı deposuna aktarmaya başladım. Bu esnada derleme hatalarıyla karşılaştım, onları çözmeye çalıştım, yama nedir öğrendim, yama buldum, yama yaptım. Bu süreç paket bakımı konusunda beni oldukça eğitti.

Zamanla Onur Küçük‘ün üzerinden yazıcı ile ilgili paketleri devraldım. Bunun yanında bazı temel kitaplıklar, tarayıcı desteği, yine Çağlar’dan kalan ses altyapısı, Pınar Yanardağ‘dan devraldığım Bluetooth altyapısı, HAL, udev, kablolu/kablosuz ağ altyapısı, falan derken şu an bakıyorum da 2011 kararlı deposunda 425 adet paketin bakıcısı olarak görünüyorum.

Bu süre içerisinde bana atanan ve daha sonra ÇÖZÜLDÜ olarak kapatılan hatalara baktığımda 586 sayısını görüyorum. Bu yaklaşık bir değerdir tabii ki, arada yanlışlıkla çözüldü olarak işaretlenen, bana atanan ancak benim çözmediğim hatalar da vardır mutlaka ancak ne kadar katkı verdiğime dair bir fikir vermesi açısından önemli.

Pardus Kurumsal 2

10 Aralık 2009 tarihinde, Proje Yöneticisi Erkan Tekman tarafından Geliştirici listesinde duyurulduğu üzere, Pardus Kurumsal 2 dağıtımının geçici sürüm yöneticisi oldum. Aslen Ekin’in yöneticiliğinde başlayan bu sürüm, Ekin’in askerlik görevi için projeden bir süreliğine ayrılmasıyla geçici olarak bana devredilmişti. Ekin’in askerden döndükten sonra sözleşmeli projeler sorumlusu olmasıyla, sürümün yöneticiliği asaleten bana devredilmişti.

KDE masaüstü ortamının artık bakımı yapılmayan ancak kararlı ve hızlı olan 3.5 serisinin kullanıldığı Pardus Kurumsal 2 sürümü için çok çaba sarfettik. Sürüm takviminde aksamalar olmadı değil ancak hep son ürünü daha iyi hale getirmek için yaşandı bu aksaklıklar. Bir kurumsal sürümde olması gerektiğine inandığımız unsurları iş gücümüzün ve kabiliyetimizin izin verdiği ölçüde son ürüne yansıtmaya çalıştık ve Şubat 2011’de sürümü yayınladık.

TÜBİTAK içerisinde de ürüne ilgi büyüktü. TÜBİTAK tarafından geliştirilen bir akıllı kart işletim sistemi olan AKİS desteğini eniyileştirmek için AKİS ekibiyle beraber çalıştık, Temmuz 2011’de Kurumsal 2 üzerinde oldukça kapsamlı bir AKİS desteği sağladık, sunumunu yaptık.

Yine EPDK, SKAAS gibi projelerden daha Kurumsal 2 sürümü çıkmadan gelen istek ve eksiklikleri son ürüne olabildiğince yansıtmaya çalıştık. Bu ekiplerle ortak çalışmalar yürüttük, birbirimize destek olduk.

Peki ne oldu?

Milliyet Gazetesi’nin 28 Ağustos 2011 tarihinde yayınladığı haberde de belirtildiği gibi Kamuda yeniden yapılanmayı düzenleyen ‘Kanun Hükmünde Kararname’lerle bürokraside yeni bir atama operasyonu daha gerçekleştirildi ve TÜBİTAK Başkanı Nükhet Yetiş görevinden alındı. Birkaç gün sonra ise BİLGEM başkanı Önder Yetiş istifa etti.

Tabii ki bu son yazımda siyasete bulaşmayacağım. Ağustos 2011’de başlayan ve hâlen devam eden yeniden yapılanma sürecini bu yazının okurları kendi algı ve yorumlama yetileri çerçevesinde değerlendireceklerdir.

Ancak,

bu 5 aydır devam eden süreç TÜBİTAK’ın başına bir çığ gibi indi. Bu çığdan çok fazla etkilenen ve hiç etkilenmeyen araştırmacılar, yöneticiler, projeler, birimler oldu.

FATİH Projesi’nde Pardus Projesi’ne beklenen ve ümit edilen değer asla verilmedi. Hükümetin bakanları Pardus hakkında “Pardus diye TÜBİTAK’ın geliştirdiği bir işletim sistemi var.” gibi trajikomik sözler sarfetti.

FATİH hakkında hiçbir umut ve gelecek görülmüyorken Pardus Projesi Ekim 2011 sonunda UEKAE’den BTE’ye geçirilip “Fatih için Pardus” olarak yeniden adlandırıldı. Acaba? dedik.

Birkaç gün sonra ise üst düzey bir yönetici enstitü çalışanları önünde “Microsoft bilgisayar başına 5TL lisans indirimi yapmış, zaten Ulaştırma Bakanı da geçen gün projeyi Microsoft’a vereceğiz dedi bana” gibi profesyonelliğe pek yakışmayan açıklamalarda bulundu.

Daha sonra yine üst düzey bir yöneticiden FATİH Projesi’nde Microsoft’a kök söktürdüğü için Pardus’a minnettar olunduğunu duyduk.

Böylece en azından ben “Fatih için Pardus” yeniden adlandırmasının oyalamadan başka bir şey olmadığını idrak ettim.

Etrafımızdaki tanıdığımız, saygı gösterdiğimiz, işini iyi yaptığını bildiğimiz araştırmacıların görevlerinden alınarak alt seviye görevlere gönderildiklerine şahit olduk. Basının ve dış dünyanın ise olan bitenden hiç haberi olmadı, olamadı.

Ben?

Bu yeniden yapılanma sürecinin Pardus için iyi bir şekilde sonuçlanacağına dair inancım çok azdı, o az olan inancım da katıldığım bazı toplantılar ve tanıştığım bazı yeni insanlar tarafından yok edildi. Ben de gittiği yere kadar projede devam etmeye, o esnada da elimden geldiğince hatalarla ilgilenmeye karar verdim. Kurumsal 2 için güncelleme paketi yayınladım, oyun alanımda çekirdeği 3.2 serisine çektim, bazı hataları düzelttim. Oyun alanımda systemd, dracut, kmod gibi yeni Linux teknolojilerinin paketlerini hazırladım olası bir yeni sürüm planı için. Bir yandan da devam etmekte olan yüksek lisans eğitimimle ilgili proje ve sınavlarla ilgilenmeye devam ettim.

Görevlendirme

29 Aralık 2011 tarihinde 1 aylığına Ankara’ya görevlendirdiğimi öğrendim.

Ben Ekim 2007’de Pardus Projesi’ne geliştirici olarak alındım, enstitüler ve projeler arası çalışacak taşeron bir yazılım geliştirici olarak değil. Ayrıca Ocak 2012 süresince finallerimin ve proje teslimlerimin olduğu da yönetim tarafından bilindiğine göre bu görevlendirmenin ne kadar iyi niyetli olduğu oldukça şüpheliydi.

Gittiği yer burasıymış dedim ve bu çığ altında kalmış kurumdan sıyrılarak ayrıldım.

Peki şimdi ne olacak?

Şu anda projede 11’i geliştirici olmak üzere 14 kişi çalışıyor. TÜBİTAK, Pardus Projesi’nin geleceği hakkında yakın zamanda bir çalıştay düzenleyecek. Ben davet edileceğimi bile düşünmediğim bu çalıştayın yapıcı değil yıkıcı olacağını düşünüyorum, umarım haksız çıkarım.

Başka bir dağıtım projesi var mı?

Ben hâlen evimde Pardus 2011 kullanıyorum ve Pardus’un diğer dağıtımlara göre avantajlarının olduğuna, daha kullanıcı dostu olduğuna ve PiSi paketleme altyapısının oldukça başarılı ve kullanışlı olduğuna inanıyorum. Bu yüzden Pardus’u tek başıma veya başkalarının da katkısıyla başka bir ad altında devam ettirmek istiyorum. Hatta bir süredir GitHub altında benim yaratmış olduğum bir depoda Pardus 2011 kaynak deposunun bir kopyası var. Yaptığım bazı çalışmaları arada sırada oraya commit ediyorum ancak ortada sadece biraz ilerlemiş bir depo var, ürün olmaya yakın hiçbir şey yok.

Ancak istemekle olmuyor bu iş. Ben ne kadar istiyorum desem de hem yüksek lisansım hem olası bir yeni iş hayatım bu yeni projeye verebileceğim katkı miktarını oldukça düşürecek. O yüzden biraz daha düşünüp ona göre konuşmak istiyorum.

Teşekkür

Öncelikle çabaladığı, savunduğu, hedeflediği her şey için muhteşem yöneticim Erkan Tekman’a,

sonra aklıma gelen kronolojide TÜBİTAK bünyesinde Pardus Projesi için katkı vermiş arkadaşlarım

Gürer Özen, Barış Metin, A. Murat Eren, Barış Metin, Faik Uygur, Onur Küçük, Ekin Meroğlu, S. Çağlar Onur, İsmail Dönmez, Görkem Çetin, Umut Pulat, Koray Löker, Bahadır Kandemir, Gökmen Göksel, Gökçen Eraslan, Fatih Aşıcı, Pınar Yanardağ, Taner Taş, Serbülent Ünsal, Ali Ulvi Tunç, Işıl Poyraz, Semen Cirit, Renan Çakırerk, Serdar Dalgıç, İbrahim Güngör, Eren Türkay, Erdem Bayer, Akın Ömeroğlu, Mete Alpaslan, Fatih Arslan, Meltem Parmaksız, Metin Akdere, Mete Bilgin, Mehmet Emre Atasever, Yasemin Yiğit Kuru, Hakan Şimşek, Uğur Eke, Gökhan Özbulak, Nihan Katipoğlu, Beyza Ermiş, Çağlar Kilimci, Mehmet Özdemir, Bertan Gündoğdu, Kaan Özdinçer ve Pamir Talazan’a,

yine TÜBİTAK bünyesinde çeşitli konumlarda çalışmış veya çalışmakta olan, bana bir şekilde bir şeyler katmış olduklarına inandığım Seda Polat, Fehime Bıyıklıoğlu ve Özmen Emre Demirkol’a,

64-Bit desteği için ÇOMÜ ve Necdet Yücel’e,

Artistanbul ekibinden tanıdığım Ali Işıngör, Seda Akay, Gizem Belen, İrem Çobanoğlu, Uğur Çetin ve tanımadığım diğerlerine,

Özgürlükİçin’in yaratıcıları ve yürütücülerine,

bize daima destek ve katkı veren tüm Pardus kullanıcılarına ve camiasına,

ve son olarak iyi kötü bizi arkadan ittirmiş ve bizi elinden geldiğince desteklemiş olduğunu şimdilerde daha iyi anladığım Önder Yetiş ve eski yönetime

teşekkür ederim.

Son olarak…

Yazılım Güvenliği & Güvenlik Açıkları

Yazılım Güvenliği & Güvenlik Açıkları ile ilgili hazırladığım bir sunumu paylaşıyorum. Olabildiğince basit bir dille ve yüzeysel anlatmaya çalıştım sunumda kaybolmayı engellemek için. Bu sebepten bazı kod demonstrasyonları temizlenerek/özetlenerek yapıldı, gerçek sistemlerde çalışmasını beklemeyiniz.

PDF olarak indirmek için tıklayın.

CMake with multilib support on Linux

Multilib distributions tend to put their architecture-specific binaries in /usr/lib64 directories to provide i686 compatibility through legacy /usr/lib directory. This means that if you ever have to deal with binaries compiled against 32-bit architectures, you can install their compatibility versions through your package manager which will reside in /usr/lib. These compatibility packages have a .i686 suffix on Fedora.

Let’s say that you have a 32-bit binary which requires libXrender. After installing libXrender.i686 with yum, take a look at package contents:

$ rpm -ql libXrender.i686
/usr/lib/libXrender.so.1
/usr/lib/libXrender.so.1.3.0
/usr/share/doc/libXrender-0.9.7
/usr/share/doc/libXrender-0.9.7/AUTHORS
/usr/share/doc/libXrender-0.9.7/COPYING
/usr/share/doc/libXrender-0.9.7/ChangeLog

This makes clear that if you build a project from its source tarball or SCM tree, you don’t want to install them under /usr/lib for keeping things clean. This is also a requirement if you prepare an RPM for that application/library. On Fedora, macros.cmake in /etc/rpm checks the system and sets a CMake variable LIB_SUFFIX to 64 for further using it in CMakeLists.txt. All you have to do is to append this suffix in your project to relevant places. But this solution is limited to builds initiated by rpmbuild as it triggers the macro inclusion.

If you would like to apply a more global solution, CMake provides a module called GNUInstallDirs. You can include that and use the CMake variable CMAKE_INSTALL_LIBDIR when appropriate. The value of this variable is lib64 on multilib x86_64 installations. A quick fix for a a Python module installation looks something like this:

diff --git a/src/python.cmake b/src/python.cmake
index e1d1e20..30815e9 100644
--- a/src/python.cmake
+++ b/src/python.cmake
@@ -83,7 +83,7 @@ endif()
 
# Finally, we setup the python installation prefix centrally. This value is
# standardized by Python as defined in http://docs.python.org/install/index.html
-set(PYTHON_SITE_PACKAGES "lib/python${PYTHON_VERSION}/site-packages" CACHE
+set(PYTHON_SITE_PACKAGES "${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/site-packages" CACHE
  PATH "Default package installation prefix for Python packages")

Android Development with IDEA on Fedora

IntelliJ Idea is a beautiful, extendable and up-to-date IDE for Linux, Mac OS X and Windows. Its community edition is free and open-source. It also has full fledged Android development support.

In this post I will explain how to set it up on Fedora 17 x86_64 (The steps may differ from distribution to distribution but in general it should give you the necessary tips).

  • Grab the latest community version from here and extract the tarball under /opt:
    # cd /opt
    # tar xvf /home/ozan/Downloads/ideaIC-11.1.4.tar.gz
    # ln -s idea-IC-117.963 idea (This will change according to your version)
  • Now let’s create a symlink in /usr/bin for easily launching IDEA:
    # ln -s /opt/idea/bin/idea.sh /usr/bin/idea
  • Some people reported that they had no issues with IDEA + OpenJDK (Open-Source JDK distributed in Fedora) while developing Android applications but the general consensus is to setup Sun JDK/JRE. Grab the latest JRE and JDK for your architecture from here and install them as root or using sudo(Ignore the errors below):
    # rpm -ivh /home/ozan/Downloads/{jdk*,jre*}
    Preparing...                ########################################### [100%]
       1:jre                    ########################################### [ 50%]
    Unpacking JAR files...
    	rt.jar...
    Error: Could not open input file: /usr/java/jre1.7.0_09/lib/rt.pack
    	jsse.jar...
    Error: Could not open input file: /usr/java/jre1.7.0_09/lib/jsse.pack
    	charsets.jar...
    Error: Could not open input file: /usr/java/jre1.7.0_09/lib/charsets.pack
    	localedata.jar...
    Error: Could not open input file: /usr/java/jre1.7.0_09/lib/ext/localedata.pack
       2:jdk                    ########################################### [100%]
    Unpacking JAR files...
    	rt.jar...
    Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/rt.pack
    	jsse.jar...
    Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/jsse.pack
    	charsets.jar...
    Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/charsets.pack
    	tools.jar...
    Error: Could not open input file: /usr/java/jdk1.7.0_09/lib/tools.pack
    	localedata.jar...
    Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/ext/localedata.pack
  • Now the good part is that IDEA supports an environment variable $IDEA_JDK for setting the JRE. This is nice because we can continue to use OpenJDK in anywhere except IDEA. Create a file called idea.sh in /etc/profile.d:
    #!/bin/bash
     
    export IDEA_JDK="/usr/java/latest"
  • Spawn a new shell so that the new variable is set and launch IDEA by calling idea:
    $ idea
    Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)

    As you can see the JRE that we have installed is now in use. We may now proceed to setting JSDK and Android SDK paths through IDEA settings.

  • Go to File->Project Structure in IDEA. Under Platform Settings click SDKs. Click the + sign and select JSDK, point it to /usr/java/latest.
  • Assuming that you already installed the necessary tools from Android Developer Center and downloaded at least one target platform SDK using the tools provided, click the + sign and select Android SDK. Point the chooser to the root folder of Android SDK (The parent folder containing add-ons, extras, platforms, platform-tools, etc.). If you did it correctly IDEA will ask you first for a JSDK version and then a target Android SDK. Repeat this step for each target Android SDK. The final screen should look similar to the one below:

Now you are ready to start with your first Android project. You can follow the tutorial found here. Keep in mind that the tutorials and design guides in developer.android.com are very detailed and well written 🙂

NetworkManager script for Cyberoam Authentication

If you have to authenticate through Cyberoam to get access to the Internet, you need a client. On Windows there is a small tray application which logs you into the system upon every system startup.

On Linux there is also a client but it is a command-line tool and prebuilt for 32-bit x86 architecture. I’ve written a small script for NetworkManager that will log you in on every interface down/up event. In order to make this work, you have to put the downloaded binary into /bin (or adjust the $CRCLIENT variable). You also have to create a configuration file which will include your login credentials (this file is pointed by $CONF).

Also do not forget to install compatibility libraries if you’re running an x86_64 operating systems. Under Fedora, you will have to install the package glibc.i686 to satisfy the dependencies of crclient.

After setting up crclient, copy the below script under /etc/NetworkManager/dispatcher.d/00-cyberoam and make it executable.

#!/bin/sh
 
CRCLIENT=/bin/crclient
CONF="/etc/CyberClient.conf"
USERNAME=`awk '/^User/{print $2}' $CONF`
 
# Cleanup stale PID-like file
rm -rf /tmp/CyberClient*
 
if [ "$2" = "up" ]; then
$CRCLIENT -u $USERNAME -i $1 -f $CONF
fi
 
if [ "$2" = "down" ]; then
$CRCLIENT -l $USERNAME
fi
 
exit 0

Finished assembling Kondo KHR-3HV

I finally finished the assembly of Kondo KHR-3HV humanoid robot and I would like to point people to some useful resources on the Internet about this robot.

One problem with Kondo robots is the lack of English support. The control software HeartToHeart has an English version but not really complete (e.g. the tooltips and servo names are still in Japanese, etc.).

  1. English Assembly Guide [pdf]
  2. English User Manual for HeartToHeart software [pdf]
  3. HeartToHeart4 Ver.2.1. English for Windows [zip]
  4. Open-Source libkondo4 library[source language=”code”][/source]

Origin Setting

During the assembly, you have to set the origin of the servo motors using the HeartToHeart software. The process is explained in detail in the assembly guide. The problem is that the English version of HeartToHeart does not contain the necessary XML files in it. This is why I had to use a Japanese version 1.2.2 of HeartToHeart (which includes those files) and patched it to support English thanks to this forum thread. So keep in mind that for origin setting, you may want to use an older HeartToHeart.

What’s Next?

I will now try to control to robot using a Raspberry Pi ARM board. I don’t think that building libkondo4 against ARM will cause too much trouble. I’m planning to directly interface the RCB4 controller of the robot from Raspberry Pi’s GPIO pins thus eliminating the serial USB adapter.

compat-drivers DRM update

Here are some updates regarding my GSoC 2012 project and the status of compat-drivers.

The aim of my project was to add support for backporting GPU/DRM kernel drivers to older kernels in a way similar to what has been done for Bluetooth/Ethernet/Wireless drivers in the compat-wireless project.

At the end of the summer, I was able to successfully build the three major DRM drivers, namely nouveau, radeon and i915 against kernels down to 3.2 but since I didn’t boot-test them, those were initially disabled in the tree.

After merging the work into a new tree called compat-drivers, my mentor Luis Rodriguez had the occasion of runtime testing the i915 driver on one of his machines and enabled the compilation of it for kernels >= 3.2.

This weekend I pushed a series of commits consisting of some bugfixes for the configuration scripts and some backport patches to the tree which finally enables nouveau (open-source reverse-engineered nVidia driver) and radeon (ATI/AMD GPU driver). Nouveau is built for kernels >= 3.3 and radeon for kernels >= 3.2.

If you ever test these drivers on your hardware, please report any problem to our backports mailing list.