Belgelik: Eylül, 2008

Pardus’ta staj – 4′üncü hafta

Not: Bu bir yazı dizisidir. 1′inci, 2′inci ve 3′üncü hafta yaptıklarımı okumak isteyebilirsiniz

  • 16.gün: Subprocess ile synergy süreçini başlatıktan sonra, subprocessin metotlarından biri olan “pid” ile sürecin pid numarasını alıp, “kill” metodu ile süreci öldürebiliyorduk. Fakat bu bende çalışmıyordu. Bugün o yüzden biraz bununla uğraştım, problem günlerdir vardı aslında fakat ben hep sonraya ertelemiştim. Sonra Python’un listelerine bir e-posta attım ve bu konuyu belirtmiştim, kendileri de benim daha önce denediğim yöntemlerden bahsetmişti. Yani sorun başka bir yerdeydi. Sonra anladım ki synergy’i -f ibaresi ile çalıştırmam gerekiyormuş, diğer türlü daemon olarak çalışacak ve arka planda öldürdüğümde bile kalıntıları kalacaktı. Bunu anladıktan sonra birde subprocess’i kullanmayı da bırakıp doğrudan QProcess kullanmaya başladım. Kullanmamın sebebi ise madem PyQt kullanıyorum, Qt ilgili fonksiyonlar kullanayım bir bütünlük olsun demiştim(subprocess mi QProcess mi sorusunu tam cevap bulamadım yine de). Bunun dışında konsol’da çıkan synergy çıktılarını(stdout) da parse etmeye çalıştım. Düzenli ifadeler bilgim yeterli değildi, Faik abi sonra kolay bir yol gösterdi. Bu sayede doğrudan çıktıdan synergy’inin bağlanıp bağlanmadığını görebiliyordum. Bunları da libnotify’e bağladım. Yani bağlantı olduğunda sistem çekmecesinden bilgilendirme balonu çıkacaktı.
  • 17.gün: Tüm gün setup.py ile uğraşmışım, fakat sonuç alamadım. Sinirlenmişim baya :)
  • 18.gün: Setup.py dosyasını halletim, kolaymış fakat ben bilmediğimden değişik şeylere bakmışım. Setup.py ile kolay bir şekilde .tar.gz yani kaynak kod paketleri oluşturabiliyordum. Sonra pspec.xml dosyası da hazırlamışım. Ardından sistem’de pisi ile kurulunca çalışıp çalışmadığını test ediyordum, her seferinde de pspec.xml’deki dosya kısmını değiştirmem gerekiyordu(kaynak değişti için sha1sum da değişiyordu). Bu yüzden Emre’nin kendi isteklerine göre yazdığı bir betiği kendi isteklerime göre değiştirdim. Kendisi kaynak’tan paket oluşturuyor, ssh ile sunucuma yolluyor, sha1sum oluşturuyor, sonra bu sha1sum’u pspec.xml’e ekliyor, pisi paketini inşa etmeye başlıyor, pisi paketinin içeriğini lspisi ile gösteriyor sonrasında ise kurmak isteyip istemediğimi bana soruyor. İşleri otomatik bir yola sokuyor yani.
  • 19.gün: Birden fazla sunucu aynı istemci’ye istek yolladığında istekler kendi arasında çakışıyordu. Sadece biri bilgilendirme balonu ile gözüküyordu. Bu sorun ile baya uğraştım, kod’u bu yönde ciddi bir şekilde değiştim ve sonunda halletmiştim. Bununla beraber notifier.py dosyasını da değiştirdim. Günün sonuna doğru da Işıl ve Gökçen ile yüksek lisan, lisan, üniversite’deki olaylar, ileride ne yapabiliriz gibi konular hakkında konuştuk, keyifli bir sohbeti açıkçası.

  • 20.gün: Bugün biraz serbest geçmişti, işleri ağırdan aldım biraz galiba. Yine de daha önce eklemek istediğim otomatik tanımlama özelliğini eklemiştim. Google Suggest’de arama yaparken anlık ileti ile size özel aramaları gösteriyordu. Bu tarz bir şey, bizde ise sunucu liste’sindeki sunucuları anlık ileti şeklinde bize gösteriyordu. Şirketinizde 20-30′dan fazla bilgisayar varsa bir bilgisayarın ismini liste’den seçmek zor olacak bu yüzden ismini biliyorsanız ilk harflerini yazarak doğrudan sunucuya ulaşmanızı sağlayabilir. Bunun ardından uygulamayı yine bir kaç test ettim ve gözüme çarpan ufak hataları düzeltim. Sonrasında ise README, AUTHORS gibi dosyaları oluşturdum. Birde setup.py’deki hataları da düzelttim. Tüm bunlar bittikten sonra uygulamayı Kde-apps.org‘a ekledim ve 0.1 sürümü olarak çıktığını açıkladım.

    Sonrasında ise herkes vedalaştı ve stajımız resmi olarak bitmişti(herkese tekrardan çok teşekkür ederim). Güzel bir zaman geçirmenin mutluluğu ile odamın yolunu tutmuştum.

Pardus’ta staj – 3′üncü Hafta

Not: Bu bir yazı dizisidir. 1′inci ve 2′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 11.gün : Kod temizlemesi ile başladım. Proje’ye başlarken aniden giriş yaparak başladığım için modüler,fonksiyonlar hepsi birbirine girmişti. Kod’ları biraz daha düzgün bir hale getirdikten sonra, avahi’nin yolladığı verileri parse etmeye başladım. Daha önce sadece sunucu’yu alıyordum. Fakat artık seçtiğimiz bilgisayarın pozisyonu da yolluyorum. Fakat yollarken verilerde hata oluşuyor. Verileri sadece “string” türünde yollayabiliyorum. O yüzden kolay edilebilecek bir şekilde yollamaya çalıştım. Öğlenden sonra Faik abi gelip bir bakmıştı, avahi ile yollanan verilerde sorun çıktığını neden olduğunu da bilmediğimi anlattım, sonra kendisi ile bunu bir şekilde çözmeye başardık. Bunun dışında subprocess ile oluşturduğum süreçleri, uygulama kapatırken öldürmem gerekiyordu. Oluşan süreçlerin pid numalarını bir şekilde alma ve öldürme işlemlerine baktım kısaca. Günün sonuna doğru ise avahi ile yolladığım verileri parse etme fonksiyonu ile geçirdim
  • 12.gün: Sinerji’nin kullanabilir sürümü çıktı. Avahi ile yollanan verileri parse edebiliyorum artık. Ayrıca QSystemTray de ekledim, yani artık Sinerji bir tray uygulaması ve doğrudan sistem erişilebilinecek. Ayrıca arayüz’deki iki tane radio butonun da sildik. Sunucudan yollanan istekler bundan sonra istemcisinin arayüzüne yansımayacak, onun yerine oluşturduğum QSystemTray’ın kendi metodu olan showMessage() ile gösterilecek. Yani kısaca bir balon çıkacak ve ona tıkladığımızda kabul etmiş olacağız.
  • 13.gün ve 14.gün: Bu günleri günlüğüme tek bir yazı olarak yazmışım. İki gündür tray işi ile uğraşıyormuşum. showMessage() metodu yerine DBus’un kendi bilgilendirme balonlarını kullanacağız. Çünkü Qt’nin balonlarına buton ekleyemiyoruz, DBus’un kendi balonlarına ise buton ekleyebiliriz, böylelikle istemci tarafında çıkan balonlar’da “kabul” ve “iptal” gibi buton çıkacak ayrıca. Sunucu tarafı synergy’i başlatıktan sonra, diğer bilgisayarda arka planda çalışan _sinerji._tcp arama servisi bizim sunucuyu bulacak. Sonra da bu balon çıkacak. O yüzden belirli aralıklarda sinerji servisi araması lazım uygulama. Bunu da QTimer ile halletmişim. Kendisi belirli aralıklarda _sinerji._tcp servisini arıyor. Uygulama bitmiş(böyle demişim :) ). Yarın Faik abi’ye gösterip, projenin bittiğini söyleme niyetim olmuş. (Fakat bitmediğini sonraki gün anlayacağım)
  • 15.gün: Faik abi’ye gösterim ve kendisi ile yaklaşık 7-8 tane yapılması gereken iş bulduk(uygulama bitmemiş yanı :) ). İlk önce uygulamadaki bazı hataları düzeltim. Neler olduğunu yazmamışım günlüğüme. Ardından “Disconnect” adında bir QDialog oluşturmuşum. Yani bir tane bilgilendirme arayüzü. Örneğin istemci, sunucun yolladığı isteği kabul ettikten sonra ne durumda olduğunu kullanıcıyı bildirmesi lazımdı. Arayüzün kaybolup, onun yerine sistem çekmecesindeki simgeye tıkladığımızda bu bilgilendirme arayüzü çıkması gerekiyordu. QDialog yerine ilk başta QMessageBox kullandım, fakat onun sinyal yollamadığını, bu yüzden kullanıcının tıkladığı butonları belirli fonksiyonlara bağlayamayacağımı öğrendiğim için günün sonuna doğru QDialog ile yeni bir arayüz oluşturdum.

Pardus’ta staj – 2′inci hafta

Not: Bu bir yazı dizisidir. 1′inci hafta’da yaptıklarımı okumak isteyebilirsiniz

  • 6.gün: Bugün avahi ile hem servis oluşturma hem de servise arama işiyle uğraştım. Sonrasında ise arama ve bulma işlemlerini halletikten sonra bunları birer fonksiyon haline getirdim. Böylelikle istediğim her servis için ayrı ayrı modül yazmak zorunda kalmadım. Bunun dışında PyQt4 kullandığım için DBusGmainLoop yerine DbusQtMainLoop kullanmam gerektiğini öğrendim. İnternet’te bu konuda pek bilgi bulamamıştım, fakat sonra Google Codesearch’de bir şeyler buldum ve entegre etmeye başarmıştım.(Blog’a da bir yazı yazmışım bu aralar)
  • 7.gün: Bugün tüm gün createsynergy.py adlı modülü oluşturma ile uğraşmışım. Bu biraz kafamı kurcalıyordu nasıl yaparım ederim diye. Synergy’nin ayarların kaydedildiği bir dosya var ve biz Synergy’i çalıştırdığımızda bu dosyadan verileri okuyarak başlıyor. Sinerji’de ise ayarladıktan sonra bu dosya oluşması lazım ki Synergy bu dosyayı okusun. İlk başlarda zor gelmişti, yapamamıştım. Hatta o gün bu konuda mesai bitimine kadar da bir şey yapamadığımı hatırlıyorum. Akşam odamda düşünürken birden dank etti ve yazmaya başlamıştım ve bitirmiştim.
  • 8.gün: synergy.conf dosyasını oluşturmayı yapabiliyordum. Fakat parse etmeyi bilmiyordum. Yani parse işini halleden modülü yazmamıştım. Onu da bugün bitirdim. Kullanıcı sinerji’yi çalıştırdığında ilk önce bu dosya’yı okuyarak daha önceki ayarları arayüze yansıtacak. Yani her zaman her seferinde aynı işleri yapmaktan kurtaracaktı. Bunun dışında _sinerji._tcp servisini oluşturma ve bulma koduyla ilgilendim. Henüz bilmediğim bir nedenle iki tane servisi ayna arattığımda uygulama çöküyordu. Ya da aynı anda arama ve bulma yapınca da çöküyordu. Bunun nedenini bulamamıştım bugün(Sonraki günler çözüme ulaştım ama)
  • 9.gün: Günlüğümde bu gün için 2-3 satırlık çok kısa bir şey yazmışım. Hala aynı anda arama ve bulma işi ile uğraşıyormuşum bu gün. Fakat henüz çözememişim olayı. Birde sinerji.py yani bizim ana betiğimizdeki avahi ile olan kısımları ayırıp modül olarak ayrı bir dosya olarak yazmışım. Galiba bir iş bitmeden başka bir işe başlayamıyorum. 2 gündür uğraştım bu konu üzerinde.
  • 10.gün: Bugün 2 gündür uğraştığım çökme problemini çözmüşüm. Sorun DBusQtMainLoop olayının her seferinde çalışmasından kaynaklanıyormuş. Ben bu çalıştırma işini avahi’deki arama ve oluşturma fonksiyonların başına koymuştum. Fakat sadece bir kere çalıştırmam yeterliymiş. Bunu main() altına koyduktan sonra sorunsuz bir şekilde iki tane aramayı aynı anda çalıştırmaya başardım. Yani artık hem _workstation._tcp hem de _sinerji._tcp servislerini ağ’da arayabiliyordum. Ayrıca bunun dışında artık sunucu’yu başlatıktan sonra, verileri yollamaya da başardım. Yani oluşturduğum _sinerji._tcp servisi ile verileri de yollayabiliyordum. Birde son olarak os.system yerine subprocess kullanmaya başladım. Normalde os.system ile bash üzerinden istediğimiz komutları çalıştırabiliyorduk. Fakat sonra Gökçen bunun iyi bir fikir olmadığını söyledi bana. Çünkü kullanıcı ayarlarda “rm -rf /” gibi bir isim girebilir ve biz bunu çalıştırabiliriz. Subprocess’de bu olay yok, ön tanımlı olarak bash kapalı geliyor. Kendi içinde çalıştırıyor.

Pardus’ta staj – 1′inci hafta

Bildiğiniz gibi Pardus’ta staja başlamıştım ve 4 haftalık süre sonunda Türkiye’de yaptığım ilk stajımı bitirmiş bulunmaktayım. Bu 4 hafta içinde bir çok şey öğrendim, hatalarımı da gördüm ve ileride ne yapabilirim sorusuna da az olsa cevabımı buldum. Hayatımda bir dönüm noktası olduğu kesin, en azından benim için, çünkü bundan sonra yapmak istediklerimi daha sağlam temeler ile yapabileceğim. Bu benim için çok önemliydi. Staj döneminde bana yardımlarını esirgemeyen herkese çokça teşekkür ederim, ne kadar teşekkür etsem azdır.

Staj dönemimde her akşam ne yaptıklarımı günlüğüme yazmıştım. Hem neler yaptığımı unutmamak için hem de ileride geriye dönüp neler yaptığımı ve nasıl bir gelişme yaptığımı gördüm. İyi ki de yazmışım. Ayrıca açık kaynak kodlu bir proje olduğu için yaptığım tüm kod değişiklikleri de kayıt altına alındı, yani hangi gün ne yaptığımı svn sunucusundan görebileceğiz. Sırayla hangi günler neler yaptığımı anlatayım:

  • 1.gün: İlk gün proje herkes kendini tanıttı. Daha önce neler yaptığımız ve Pardus hakkında neler bildiğimizi sordular. Ardından tahta’ya çeşitli projeleri yazdılar ve yaktın olduğumuz alanlara yönelik bize projeleri verdiler. Yaklaşık 1-2 saat boyunca bunu tartıştık tabi, kim ne yapmak istiyor, ne yapmak istemiyor bunların hepsi Pardus ekibi için çok önemliydi. Onların tek amacı bize 4 hafta boyunca en verimli zamanı yaşatmaktı. Bu günün sonunda “Synergy” projesini seçtim. Danışmanım ise Pınar’dı(Sonra değişti gerçi).Ardından tüm gün boyunca Synergy hakkında dokümanlar topladım, nedir ne değildir bunları öğrendim. Synergy ağ üzerinden çalışan bir program olduğu için en az iki tane bilgisayara ihtiyacım vardı. Bu yüzden ana bilgisayarım dışında bir tane de laptop verdiler. Sonrasında ise bu iki bilgisayara Synergy kurup çalıştırmaya çalıştım. Çalışırken takılıyordu, biraz araştırdım ve 2-3 tane patch buldum, ardından Faik abi ile bunlardan bir tanesini uyguladık.
  • 2.gün: Synergy için arayüz yazmaya başladım. Uygulamanın adına da Sinerji koydum. Türkçe ismi olsun dedim. İlk önce Kitaptan okuyarak PyQt ile denemeler yapmaya başladım, amacım biraz ısınmak ve bir şeyler öğrenmekti. Pınar Qt-Designer ile yapmamı istedi(Daha mantıklı çünkü, arayüz Qt-designer ile yapılacaktı, sonrası ise kendimiz elle yapacaktık) . Bu yüzden kitaptaki 7′inci bölümü okudum ve bir taslak oluşturdum. .ui dosyasını oluşturdum ve bunu mkpyqt.py ile python dosyasına çevirdim
  • 3.gün: Arayüz fikrinden vazgeçtik. Tasma için bir modül yazalım dedik. Ayrıca istemci tarafı otomatik olarak sunucun isteklerini kabul etsin dedik, yani biz Synergy’i çalıştırdıktan sonra diğer bilgisayar sadece kabul etsin, başka bir şey yapmasın dedik. Faik abi ağ’daki bilgisayarlar arasında bağlantı kurmak için avahi’yi söyledi bana. Avahi ile uygulamaları ağ üzerinden birbirleri ile iletişime geçmesini sağlayabiliyoruz. Örneğin Pidgin avahi kullanıyor, bu sayede hiç bir IM servisi gerekmeden, yani Msn, Jabber gibi bir protokoller gerekmeden avahi üzerinden de konuşabilirsiniz. Neyse bugün tüm günümü avahi’ye adadım, nedir ne değildir bunları öğrendim ve python ile nasıl kullanabileceğime baktım. Sitesindeki python bindingleri inceledim, Faik abi’nin yanına 3-4 kere gitmişimdir çünkü anlamadığım çok şey vardı(başını ağrıttım biraz yani). Günün sonunda ise bir servis oluşturabildim. Yani kısaca _sinerji._tcp altında bir servis tüm ağ’ya yayınlanıyordu. Herkes sinerjiyi görebiliyordu. (Not bundan sonra danışmanım Faik abi olacaktı)
  • 4.gün: Bugün hiç bir şey yapmadım. Çünkü ne yapacağımı tam bilmiyordum. Ayrıca tasma modülü yazamayacağımı öğrendim. Tasma Qt3 ile yazılmıştı, ben ise sadece PyQt4 biliyordum yani Qt4 biliyordum sadece. O yüzden tekrar arayüzü oluşturmaya başladım.
  • 5.gün: Faik abi ile tekrar projeyinin gidişatını değiştirdik. Arayüz farklı olsun dedik. Aslında Synergy’de sunucu ve istemci bilgilerini kendimiz yazıyorduk, sonra dedik ki, neden kendimiz yazıyoruz? Neden ağdaki bilgisayarları sinerji kendisi bulup bize göstermiyor. Yani sunucu tarafı da otomatik olacaktı. Ağdaki tüm bilgisayarları görüp, yönetmek istediklerimizi seçecektik. Kısaca bir ileri noktaya çıkartıp daha kullanışlı ve otomatik hale getirmeye başladık. 4 tane combobox(Her yönde bir tane) olsun dedik, ve buradan seçilsin dedik. Seçip programı başlatıktan sonra , karşı tarafta da combobox’larda istek yollayan bilgisayarlar görüntülensin dedik (bu benim fikrimdi). Fakat sonra bu fikirden de vazgeçip daha da kullanışlı bir hale getirecektik

(Not: Bu bir yazı dizisi, uzun olduğu için haftalara ayırdım her hafta için bir yazı, bu yazi birinci hafta’da yaptığım işler ile ilgili)

Verimliliği artıran minimal bir firefox teması ve eklentileri

Emre‘nin daha önce bahsettiği Chromifox temasını kullanmaya başladım. Gerçekten çok hoş ve sade bir tema olmuş. Google Chrome’u baz alan ve onun iconlarınu kullanan bir tema. Kurmak için Chromifox sayfasına gidebilirsiniz. Ayrıca menu çubuğunu da gizlemek için bir eklenti buldum, o da Hide Menubar. Kurduktan sonra alt tuşu ile istediğiniz zaman ön plana çıkartabilirsiniz. Son olarak bir de uzun linklerde domain ya da subdomain ismini daha belirgin kılmak için Locationbar eklentisini kullanabilirsiniz. Sonuç ise şöyle bir şey:

Sinerji’de son durum

Baya bir gelişme katedildi diyebilirim. Kullanabilinirlik açısından biraz düşündük ve arayüzünü hafif değiştirdik. Daha doğrusu küçültük diyebiliriz. Daha önce gördüğünüz ekran görüntüsünde üste iki tane radio-button vardı. Onları tamamen kaldırdık. Artık arayüz sadece başka bilgisayarı kullanmak isteyenler için hazırlandı. Ya peki başka birisi sizin bilgisayarı kullanmak istiyorsa ne olacak ? O zaman tray’de bir uyarı çıkıp size izin verip vermeyeceğinizi soracak. Ekran görüntüleri şu şekilde(Uygulama PyQt4 ile yazılmıştı hatırlarsanız, o yüzden KDE4 altında arayüzü biraz daha güzel duruyor):

Daha ufak tefek hataları var. Onları düzeltmeye çalışacağım. Proje bittikten sonra da yazdığım kodlar ile ilgili de ayrıntılı bir yazı yazacağım, nerde neyi nasıl kullandım, neler öğrendiğim gibi şeyler.

Sonraki Sayfa »