Gtk <= 2.18.9 Pencere Gizleme Sorunu

Gtk Gece gece uyku tutmadı var olan bir programı kurcalamaya başladım. Amacım programın sitem çekmecesinden çalışabilir hale getirmekti.

Her şeyi yaptım fakat bir türlü pencereyi gizleyemiyordum :) Doküman gtk_window_get_mnemonics_visible () fonksiyonunu kullanmamı söylüyordu, fakat kullandığım gtk sürümünde bu fonksiyon tanımlı değildi(2.18.7). Eski sürüm için olan dokümanı incelediğimde bu işi yapan bir fonksiyon yoktu. Sistemde kurulu gtk ve python ile bu işi yapabiliyordum. Normal olarak c ile de yapabilmem lazımdı:) Biraz inceledikten sonra, önce pencereyi gizleyen, ardından boyutunu eski haline getirip sonra tekrar gösteren bir fonksiyon olduğunu fark ettim. Benim istediğim işi yapıyor fakat yanında birde fazlalığı vardı.(gtk_window_reshow_with_initial_size) İnternette biraz daha araştırıp umudumu kaybedince mecburen kaynak koda baktım.

grep -rHn gtk_window_reshow_with_initial_size *

bu komut bana gtk_window_reshow_with_initial_size fonksiyonun nerelerde olduğunu gösterdi. Bu fonksiyonunun içine bakınca istediğim kodu hemen buldum :)

gtk_window_reshow_with_initial_size (GtkWindow *window)
{
  GtkWidget *widget;

  g_return_if_fail (GTK_IS_WINDOW (window));

  widget = GTK_WIDGET (window);

  gtk_widget_hide (widget);
  gtk_widget_unrealize (widget);
  gtk_widget_show (widget);
}

Önce pencereyi widgeta çevirebilme imkanım varmış, böyle basit bir şeyi nasıl bulamadım bilemiyorum.


Blogger'a Kendi Alan Adınızı Yönlendirme

Blogger Daha önce birkaç kez yapmıştım, fakat her seferinde neler yaptığımı unutup acaba olmadı mı diye kuşkulanmıştım. En güzeli böyle bir yere yazıp gerektiğinde kopya çekmek :)

Öncelikle bloggerda bir blogunuz olduğunu varsayıyorum :D
Blooger hesabımıza giriş yapıyoruz.
Şu adımları takip ediyoruz.
Özelleştir -> Ayarlar -> Yayıncılık -> Özel Alan-> Gelişmiş Ayarlara Geçiş Yapın
Buradaki kutuya alan adını yazın.
“Eksik dosya barındırma sistemini mi kullanıyorsunuz?” kısmını olduğu gibi bırakıp, kelime doğrulamayı yapıp ayarları kaydediyoruz.

Bu adımları geçtikten sonra google tarafında yapılacak ayarları tamamlamış oluyoruz.
Alan adınızın bloggera yönlenmesi için CNAME kaydı oluşturmanız gerekiyor. Bunu alan adını aldığınız yerden yapacaksınız.
CNAME kaydına değer olarak ghs.google.com adresini vermelisiniz. Domain firmanızın güncellenme hızına göre alan adının aktif olma süresi değişecektir.

Toplam 2 adımdan oluşuyor. Akılda tutmak kolay ama alan adının yönlenmesi biraz zaman aldığından dolayı insanın içinde bir şüphe oluyor her zaman :P


PyGtk ile Sistem Çekmecesi

Gtk Gtk ile çok kolay bir şekilde geliştirdiğiniz uygulamayı sistem çekmecesinde gösterebilirsiniz.

Ufak bir örnek kod veriyorum. Onun üzerinden anlatacağım.

import pygtk
import gtk

class ShowIcon:
    def __init__(self):
    self.icon = gtk.StatusIcon()
        self.icon.set_from_file('gtk.png')
        self.icon.set_tooltip_text('Hello Python!!!')
        self.icon.set_visible(True)
        self.icon.connect("activate", self.hello)
        gtk.main()

    def hello(self, widget):
        print 'Hello Python !!!'

if __name__ == '__main__':
    icon = ShowIcon()

6. satırda asıl işimizi yapacak olan StatusIcon nesnesini yaratıyoruz.
7. satırda sistem çekmecesinde hangi ikonun görüntüleneceğini belirtiyoruz. set_from_file ikonu dosyadan alacağımız anlamına geliyor. Eğer gtk’nın sunduğu standart ikonları kullanmak istiyorsanız set_from_stock kullanmalısınız.

icon.set_from_stock(gtk.STOCK_ABOUT)

8. satırda ikonun üzerine geldiğimizde görünmesini istediğimiz yazıyı belirliyoruz.
9. satırda ikonun başlangıçtaki görünürlüğünü belirliyoruz. Bu satırı yazmasak da görünür başlıyor.
10. satırda ikonun “activate” sinyali aldığında çağırmasını istediğimiz metodu belirliyoruz. Kısacası üzerine tıklandığında ne iş yapacağını belirtiyoruz. “activate” yerine “popup_menu” yazarsak ikona sağ tıkladığımızda çağrılacak metodu belirliyoruz.
11. gkt.main() haydi yapalım şu işi manasında :)

Ayrıntılı dökümanı PyGtk Belgelerinde bulabilirisiniz. Yukarıda verdiğim kodu ve benim kullandığım ikonu buradan indirebilirsiniz.


PyGtk ve Thread Sorunu

PyGtk ile ara yüzüzünü hazırladığım bir program içinde thread kullanmam gerekiyordu. Kod çalışıyordu fakat thread işlemi istediğim gibi çalışmıyordu. Arayüzde bir değişiklik olduğu zaman thread çalışıyor, onun dışında hiç bir şekilde tepki vermiyordu. Uzun süre hatanın kodda olabileceğini düşündüm. Ama sonunda python gtk.main() ve thread 3’lüsünü aynı sorgu içinde googleda aratınca cevabı buldum. Gtk’ya thread kullandığımı anlatmam gerekiyordu :) gtk.gdk.threads_init() Bu satırı kodumun başına eklediğimde herşey istediğim gibi çalışmaya başladı :)

Pardus Ağ Yöneticisi İle Eduroam Ağına Bağlanmak

Pardus Bikaç gündür Pardus ve Eduroam ile uğraşıyordum. Eduroama bağlanmak için pratik yollar buldum fakat hiç birisi Ağ Yöneticisi kullanarak bağlanmanın zevkini vermiyordu.

2 gün boyunca Ağ Yöneticisinin neresini değiştirmem gerektiğini arayıp durdum. Sonunda wireless-tools adlı paketin aradığım paket olduğunu keşfettim :) wireless tools paketi wpa_supplicant kullanarak wpa şifreleme kullanan ağlara bağlanmaya yarıyor. Sağolsun Pardus geliştiricileri wpa_supplicant paketi için dbus kullanan bir python betiği yazmışlar. Bu betik içinde tanımlanan methodlarla wpa_supplicantı yönetebiliyoruz. Bu betiğe eduroam ağına bağlanmak için gerekli parametreleri alan bir method ekledim.
Daha sonra wireless-tools paketi içindeki comar betiğine bu methodu kullanmasını sağlayacak birkaç değişiklik yaptım.

Sırf bu işi denemek için bugün okulum olmadığı halde sabahın 8’inde okula gelip deneme yaptım. Ayarlarını evde yaptığım için bilgisayarı açar açmaz internete bağlandı :) Hayatımda ilk kez yazdığım bir kod direk çalıştı :P

Düzenlediğim bu 2 pakete aşağıdaki adreslerden ulaşabilirsiniz.
http://github.com/askin/kelebekpisi/tree/master/wpa_supplicant/
http://github.com/askin/kelebekpisi/tree/master/wireless-tools/

Paketleri kendiniz derlemek için root yetkileriyle

pisi bi http://github.com/askin/kelebekpisi/raw/master/wpa_supplicant/pspec.xml
pisi bi http://github.com/askin/kelebekpisi/raw/master/wireless-tools/pspec.xml

komutlarını vermelisiniz, ardından oluşan pisi paketlerini kurabilirsiniz.

Ya da hazır ikili pisi paketlerini http://askin.ws/pisi/eduroam/ adresinden bulabilirsiniz.

Paketleri kurduktan sonra ayarları yaparken Güvenlik Türü seçeneğini “WPA & WPA2 Enterprise” olarak seçmelisiniz.

Son olarak wireless-tools paketi Pardus’un temel paketlerinden birisidir, wpa_supplicant paketi de wpa ağlarına bağlanmak için gerekli temel bir pakettir. Bunları Pardus deposu dışında bir yerden kurmak sisteminize zarar verebilir. Sorumluluk kullanıcıya aittir :)

Benim sistemime hiç bir şey olmadı, %99.99 olasılıkla sizin siteminize de zarar gelmez fakat ben yinede hiç bir sorumluluk almıyorum :)


Pardus ile Eduroam ağına bağlanma

Eduroam Pardusun ağ yöneticisi gayet şık bir arayüze sahip, fakat bize Eduroam ağına bağlanma özelliği sunmuyor.
Ancak Pardus kurulumu ile birlikte gelen 2 araç bizim bu ağa bağlanmamız için yeterli. Bu araçlar wpa_supplicant ve dhcpcd. Wpa_supplicant ağda kimlik denetimini sağlamak için, dhcpcd ise ağdan ip almamız için gerekli.

Öncelikle wpa_supplicant için ayar dosyası oluşturmamız gerekiyor.

network={
        ssid="eduroam"
        key_mgmt=WPA-EAP
        pairwise=TKIP
        group=TKIP
        eap=TTLS
        phase2="auth=PAP"
        anonymous_identity="anonymous@ogr.deu.edu.tr"
        identity="ogrencinumarasi@ogr.deu.edu.tr"
        password="sifre"
}

Bu ayarlar Dokuz Eylül Üniversitesi için. Kendi okulunuza göre düzenlemeniz gerekiyor. Sadece ogr.deu.edu.tr adresi yerine kendi okulunuzun adresini yazmalısınız.

Bu dosyayı /etc/wpa_supplicant.con adıyla kaydediyoruz.

Sıra geldi wpa_supplicantı çalıştırmaya.

wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant.conf

-D parametresi hangi sürücüyü kullanacağımızı belirtiyor. Wpa_supplicantın man dosyalarına bakarak kendinize uygun bir sürücü seçebilirsiniz.
-i hangi arayüzü kullanacağınızı belirtiyor. Genellikle wlan0 dır. iwconfig komutunun çıktısı size kablosuz ağ kartlarını gösterecektir.
-c ile ayar dosyamızın yerini belirtiyoruz.

Eğer bu komut başarılı olursa artık ip alabiliriz.

dhcpcd wlan0

Eğer bu komutta başarılı olduysa artık internete bağlanabilirsiniz hayırlı olsun :)

Bu işlemi kolaylaştırmak için pem adında bi script yazdım.

git clone git://github.com/askin/pem.git

Bu komutla pem’e ulaşabilirsiniz.
Bu aracı daha fazla geliştirecektim fakat ağ yöneticisiyle bu işleri nasıl yapabileceğimi öğrendim. Bugün oturup biraz network-managerın kodlarıyla uğraştım. Sanırım pazartesi günü bu işi ağ yöneticisiyle kolayca yapılabilecek bir hale getirebilirim. Şimdilik en güzel yöntem bu gibi :)

Ayrıca sevgili dostum Mete bu işin wicd kullanarak nasıl yapıldığını daha önce yazmış buradan o yazıya ulaşabilirsiniz.


TrekStor maxi g.u 500GB harici hard disk

TrekStor Geçen hafta bilgisayarım bozulunca, verilerimi kurtarmak için bir harici disk almak zorunda kaldım.
Malum servisler arıza ne olursa olsun hemen format atma merakındalar.
Tekrar bulamayacağım 20GB kadar, film müzik derken 100GB kadar verim vardı. Diski alınca benim hard diski arkadaşın bilgisayarına takıp hepsini aldım.

Birazda harici diskten bahsedeyim.
Disk biraz büyük gibi. Gerçi daha büyüklerini de gördüm, ama biraz daha ufak olabilirdi. Gayet hafif, Yanında taşımamız gereken bir adaptörü olmasa tadından yenmez. Hızı gayet tatmin edici. Saniyede 30MB’ı görebildim. Gecikme süresi rahatsız edici boyutta değil. Üzerine Pardus kurdum normal disk üzerinde gibi hızlı açılıp kapanıyor.
Kutu üzerinde 500GB yazmasına rağmen 466GB. Disk üreticilerine göre 1GB, 1073741824 yerine 1000000000 Byte. Bu nedenle arada 34GB oynuyor. Kutu üzerinde de zaten bunu belirtmişler.

Piyasayı çok araştırmama rağmen fiyatı bana çok makul geldi. Teknosadan 100TLye aldım. Herkese tavsiye ederim.
Buda resmi.
TrekStor maxi g.u


post 2 del.icio.us

Daha önce post to del.icio.us eklentisinden bahsetmiştim. Hazır eklentiye el atmışken birkaç özellik ekledim. Gizli gönderim Var olan linkin üzerine yazılma seçeneği Türkçe desteği Ön tanımlı atanan kısayolu linuxta gizli gezinme kısayolu ile çakıştığı için değiştirdim. Fakat windowsta yer imleri kısayolu ile çakışmaya başladı bu sefer. Bir sonraki ekleyeceğim özellik bu kısa yolun kullanıcı tarafından değiştirilebilmesini sağlamak olacak. Eklentinin proje sayfası burası. Proje sayfasından eklentinin ekran görüntülerine bakabilirsiniz.

Ah şu spamcılar

Bugün akismet‘e takılmış 34 spam vardı kutumda. Silmeden önce hep bi göz atarım ne yazmışlar diye. Genelde mesajın tamamı linklerden oluşur. Çok nadir olarak sadece 1 link olur ve ingilizcedir herzaman. Bugün gelen spamlardan biri türkçeydi ve hiç link yoktu. Sadece websitesi bömünde acayip bi site vardı. Mesajın içeriği de yazıyla tamamen uyumluydu. Tam elim spam değil tuşuna gideceği sırada garip duygularla yorumun yapıldığı yazıya bakma ihtiyacı duydum ve ardından gülümsedim :) Kahraman spamcımız gelen mesajı aynen almış, site kısmına reklamını yapacağı siteyi yazıp tekrar yollamış.

Post to del.icio.us

del.icio.us. icon Delicious için kullanılabilecek en güze eklenti bence Post to del.icio.us eklentisi. Fakat firefox 3.5 ile uyumsuz olduğu için kurmak sıkıntılı oluyordu. Bugune kadar .mozilla dizinimi hiç silmediğim için uyumsuz demesine rağmen kullanabildim. Fakat nedense bugün çalışmıyordu. Bende açtım içini baktım nesi var diye :)
install.rdf dosyası içinde maxVersion tagları arasında 3.0.* yazıyordu, buda 3.1 ve üzeri sürümde çalışmaz manasına geliyor. Düzenleyip bide xpi dosyası haline getirdim. Burdan kullanabilirsiniz.