29
Eyl

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.

27
Eyl

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.
25
Eyl

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.