2009
09.30

Okul işte Ben!

Okula gidip, geleli, bir hafta oldu ortalama, bu bir haftada okulda polinomlar, kayaçlar, Osmanlı Devleti, Almanca(Vi hays to? Ih hayse Taha (gibi garip bir şey))…

Okul, okul, okul birçok hobinizden uzaklaşmak, geceleri saat bilmem kaçlara kadar oturmalar ne yazık ki son buldurtuyor insana. Eskiden saat 4′de yatarım diyen (ben de diyordum artık susmayı tercih ediyorum) saat 8′den saat 17:10-50 gibi okula dönünce saat 10′da tıpış tıpış uyumayı tercih ediyor. Ne kadar dezavantaj saysam, ne kadar “ulan tatilde bitti” desem, ne kadar ağıt yaksam bitti işte bitti, bitti, bitti(Nayırrrrrr! gibi haykırışlar, evet duyabiliyorum.).

Okula ilk gittiğimde aklıma takılan klasik öğrenciliğin sizde oluşturduğu sorular vardı bende de. “Hangi sınıftayım acaba? Arkadaşlarım var mı yok mu? Hangi öğretmenler bizim sınıfa gelecek ? Bu senenin sonu gelecek mi ? Notlar ile aram bozulacak mı ? Konular ne olacak ? Bir sene daha büyüdük, acaba artık çömezleri ezebilecek miyiz ?” gibi sorulardan sonra “Lütfen ama lütfen bugün hemen bitsin!” dedikten sonra da aslında önemli bir noktanın kaçtığını unutabilirsiniz. Bu da geçen sene aynı soruların cevaplarını aldığınızı(iyi-kötü) ve bir senenin anlaşılmayacak kadar kısa sürede bittiğidir.  Fakat beklediğim o sıkıntılı, endişeli okula gidiş bir an da hoşuma gitmeye başlamıştı. Okula artık sıradaki arkadaşlarımı görünce “Okul işte Ben!” dedikten sonra biriken o üç ayın tüm faturasını çıkarıp, arkadaşlarla o fatura hakkında oturup, konuşmak sanki o kocaman yoğun geçecek tüm okul günlerinin başlangıç gününe gelmeye değerdi.

Böyle bir güzel günden sonra son olarak “Ev işte Ben!” demek belki de son nokta için yeter de artar değil mi ?

Sorulabilecek güzel bir soru: Devlet’in bastırdığı kitapları yerine yardımcı kitap almamız acaba devletin parasını çöpe atmamız olmaz mı ? Onun yerine baştan yardımcı kitap alsaydık ?
Güzel bir cevap: Kapat o bilgisayarı, görmeyeceğim onun açık olduğunu!
Güzel bir cevaba, güzel bir cevap: p(x) = x**2 + ax + 12 ifadesinin ….

Kendime bir not: Daha çok kişisel yazılar yaz.

(Okul başladı diye Python’a ara yok, _
Gelsin mi  bir “Python’da Nesne Tabanlı Programlama’ya Giriş” yazısı ?)

2009
09.15

guk

Özgürlük İçin’de Charlotte v1.0′i görünce, aklıma saat başı (ya da dakika başı) öten cd-rom’ı açıp, kapatan bir guguklu saat yapma fikri geldi. Ama sonra cd-rom’un ömrünü tüketmektense sadece ötüp, dursun diye düşünmeye başladım. İlk önce pygame .mp3 çalan önceki yazımda belirtiğim betiği kullandım. Sonra güzel bir while döngüsü ile sistem saatini durmadan güncelleyip, dakika bölümünün 0 olmasını bekleyerek ilk denememi yaptım. Fakat gelin görün ki işlemcim PyGuguk’un döngüsüyle %90′larda çalışmaya başladı.

time.sleep() kullanarak sadece saatin bir kere güncellenmesiyle yapabileceğini görüp, ikinci bir deneme daha yaptığımda pyguguk işlemcimi yormadan “guuuguuk” demeye başladı. Sonra bu güzel guguklamayı, Knazar gibi saatin yanında yer almasını istedim. Qt’deki TrayIcon ile bunu başarmışken, kullandığım while döngüsü beni yüz üstü bırakmıştı. Çünkü qt donuyordu. Google’da yaptığım onlarca aramadan sonra bana gereken thread (en küçük yönetim birimi) denen bir modülmüş. Bu modül ile arkaplanda iş yapabilir, arayüzünüze bir şey olmamasını sağlıyabiliyormuşuz. Yaptığım birkaç denemeden sonra artık PyGuguk, Knazar gibi, saatin yanında guguklamaya devam ediyor.

Fakat başaramadığım bir konu da, program açıkken sesini kesememen. Programı eğer denerseniz, “Kes sesini” dediğinizde program kendini kapatıyor.

Hataları var mı ? Evet var. guguk-thread.py’da garip bir kapatma yolu var. Neyse gene de çalışıyor. Thread modülü için güzel bir örnek olabilir.

İndirmek için buraya gidebilir, logoyu beğenmediyseniz (ben de pek beğenmedim) güzel bir logo yapabilirsiniz.
(Bu dakika başı öten sürümüdür. Python’a yeni başlayanlar modifiye edebilirler. Eğer güzel yorumlar alırsam,  guguklu saati baştan geliştireceğim.)

2009
09.11

Geçenlerde bir arkadaşım bana “random” ile ilgili bir örnek gönderdi. Hatalı olan minik betiği düzeltirken aklımdan, yaptığı oyuna bir şifreli hile açan bir şey koymak geldi. Ve şifreyi kodlarda görmemesini istiyordum. “raw_input” kullanırsam başkaları tarafından görülebilecekti. Ben biraz daha profesyonel bir şey düşünüyordum. Aynı zamanda aldığı şifreyi, bir seri numaraya dönüştürüp önceki kayıt ile karşılaştıracaktı.  Kodlamaya oturduğum da benim için yaratılmış iki modül karşıma geldi. Bunlar: “getpass” ve “hashlib” idi.

	elif cevap == "sayiyigoster":
	  a = getpass.getpass()
	  b = hashlib.md5()
	  b.update(a)
          toplam = b.hexdigest()
	  print toplam
          if toplam == "d8383ab2db089aed597fc628990caa69":
	      print "Tutulan sayı: %s" % rnumber

Yukarıdaki betik arkadaşımın oynuna eklediğim bir betik. Buradan basitçe “getpass.getpass()” ve altındaki “md5″ oluşturucuyu görebilirsiniz.

İyi pythonlamalar!

2009
09.10

Python ile MySQL bağlantısı yaptık bakalım şimdi python ile nasıl .mp3 ve .midi dosyalarını dinleyebiliriz. Öncelikle yapmanız gereken pygame paketini Pardus deposundan indirmek. Neden pygame’i kullanıyoruz diye bir soru sorarsanız cevabım ise Pardus deposundaki bir paket olduğu ve ek olarak başka büyük kütüphaneleri kullanmayacağımızdır. Aslında .mp3 ve .midi dosyalarını açarken pygame yerine direk “os.system(“play dosyadi”) ” şeklinde bir komut da kullanabilirsiniz ama python içinden bu işi yapmak daha mantıklı olduğunu söylemeliyim.

PyGame modülünü edindikten sonra kod yazımına sıra geldi. Basitçe internetten nasıl yapabilirim diye kendime sorduğumda şu sitede aşağıdaki kodlar yer alıyordu.

 
# -*- coding: utf-8 -*-
import pygame
dosya = raw_input("Dosya adı:\n")
def baslat(dosya):
    clock = pygame.time.Clock()
    try:
	print "- Dosya yüklendi -"
        pygame.mixer.music.load(dosya) #dosyayı yükler
    except pygame.error:
        print "%s adlı dosya bulunamadı.\n(%s)" % (dosya, pygame.get_error())
        return
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        clock.tick(30)
 
freq = 44100     # audio CD kalitesi
bitsize = -16    # 16 bit
channels = 2     # 1 mono, 2 stereo
buffer = 2048    
pygame.mixer.init(freq, bitsize, channels, buffer)
# 0 'dan 1.0 kadar ses seviyesi
pygame.mixer.music.set_volume(0.75)
 
try:
    baslat(dosya)
except KeyboardInterrupt:
    # CTRL-C ile kapanırsa
    pygame.mixer.music.fadeout(1000)
    pygame.mixer.music.stop()
    raise SystemExit

Kodları sitedekine göre Türkçeleştirip, bir de “raw_input” ekledim. Ama arada bir bir daha programı açarsanız, bazen susmayı ve hata vermemeyi tercih edebiliyor.

İyi Pythonlamalar!

2009
08.30

MySQL notları

Bir önceki yazımda Python ile MySQL nasıl kullanılır yazdığımda son not olarak MySQL’i bir öğrenin demiştim. Gelin MySQL komutlarına bakalım. Basit olarak nasıl tüm tablo’daki verileri alırız. Yeni bir tablo oluştururuz? gibi soruları cevaplayalım.

Not: Bu komutları direk MySQL sunucusunda çalıştırıp da deneyebilirsiniz. Sunucuyu açmak için “Servis Yöneticisi”‘ne bir uğrayın. (Plasmoid’i de var, bu arada Servis Yöneticisi’nin)

2. Not: Komutların sonuna “;” noktali virgül koymanız gerekebilir. Aşağıdaki örneklerde ben gene de noktalı virgül koydum. Yanlış yazım değil yani, boşu boşuna silmeyin. :)

Veritabanı oluşturmak için:

CREATE DATABASE veritabanım;

Veritabanını kullanabilir kılmak için:

USE veritabanım;

Veritabanında bir tablo oluşturmak için:

CREATE TABLE tablom (ad VARCHAR(20), soyad VARCHAR(20));

Veritabanındaki tabloları görmek için:

SHOW TABLES;

Veritabanındaki alanları(Fields) görmek için:

DESCRIBE tablom;

Tabloya veri girmek için:

INSERT INTO tablom VALUES (‘Taha Doğan’, ‘Güneş’);

Tablodaki verileri görmek için:

SELECT * FROM tablom

Tabloda basit bir arama yapmak için:

SELECT * FROM tablom WHERE soyad = ‘Güneş’;

MySQL’in kendi sitesine teşekkür etmek gerek, bu yazı için. Artık Python ile MySQL için basit komutları biliyorsunuz. “cursor.execute(“öğrendiğiniz komutlar”)” yazmanın vakti sizin için gelmiştir. Ama bu kadarcık not ile koca MySQL’i bitiremezsiniz. :)

İyi MySQL ile uğraşmalar…

2009
08.28

Küçük bir yazılım üzerinde uğraşıyordum bu aralar. Adı “Adresci” olan bu yazılım, MySQL sunucumuza istediğiniz adresleri kaydediyor. Sonra başka birgün bakmak isterseniz listeliyor, adresler arasından arama yapabiliyor. Kısacası basit bir yazılım fakat veritabanına başlayacaklar için (benim için) kendinize yararı olabilir. Peki Python ile basitçe nasıl bir MySQL sunucusuna bağlanırız?

Öncelikle bize

mysql-python – Python için MySQL modülü

adlı paket gerekiyor. Paket yönetinicisinden ya da “sudo pisi it mysql-python” ile kurabilirsiniz. Sonra “mysqldeneme.py” adlı bir dosya oluşturalım. Ve dosyamıza şunları yazalım.

import MySQLdb

baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)
cursor = baglan.cursor ()
cursor.execute(“SELECT VERSION()”)
print cursor.fetchone ()
cursor.close()

Bu kısa deneme ile MySQL sunucunuzun versiyonu hakkında bilgi alabilirsiniz. Ayrıca “SELECT * FROM tablo” gibi komutları “execute” metodunu kullanabilir, cursor.fetchone ya da cursor.fetchall kullanıp çıktıları alabilirsiniz. Kodları tek tek açıklarsak:

import MySQLdb

Python ile MySQL sunucusunun arasında iletişimi kurmasına yardımcı olacak “MySQLdb” adlı modülü programda kullanılabilir ettik.

baglan = MySQLdb.connect (host = “localhost”, user = “kullaniciadi”, passwd = “sifre”, db = “veritabaniadi”)

“baglan” ile sunucuya baglanacağımız bilgileri belirttik. Ve sunucuya bağlandık.

cursor = baglan.cursor()

“cursor” objesi ile bağlantının metodunu kullanabilir yaptık.

cursor.execute(“SELECT VERSION()”)

Sunucuya bir komut gönderdik.

print cursor.fetchone

Komuttun geri çıktısını çıkardık.

cursor.close()

Bağlantımızı kapattık.

Bu metni uygulamadan önce lütfen MySQL komutlarını bir öğrenin. İşin derinliğini görmeden Python ile işe hemen atlamayın derim.

İyi Pythonlamalar!

2009
08.27

Geri dönmenin vakti geldi!

Uzun bir zamandır, bir açılış yazışı için birkaç defa denemelerde bulunsam  da yazdıklarımın hiçbirinin tam olarak açılış için uygun olmadığını gördüm. Son bir deneme yapıp, artık yazılarımıza devam etmenin vakti geldi, geçiyor.

Biz buralarda yokken olanlar:

  • Pardus 2009 çıktı! Birçok yabancı, yerli sitelerden güzel yorumlarla beraber  Pardus’un Ati kartları için sürücü eksikliği vardı.
  • Ve Pardus 2009 için Ati Sürücüleri çıkar.
  • Pardus 2009′un en başarılı KDE uyumu olduğu hemen hemen her yerde görülür olur.

Fakat artık Pardus’a aşırı yoğunlaşmak yerine, python ile serüvenimdekiler de yer alacak.

Kısaca, GERİ DÖNDÜM.

Peki ben yokken neler yapıyordum.

  • Bloguma tema beğenmeye çalışıyordum. Ve uzun zamandır süren veritabanı hatasını, veritabanını uçurarak çözdüm.
  • Kontrolcu adlı bir proje üzerinde çalışıyordum. İleri yazılarda bahsedeceğim.
  • Pardus 2009′un Ati desteği olmamasının üzüntüsünü yaşıyordum.(Tabi artık geçti :) )
  • Yeni temayı Türkçeleştiriyordum. (Uykusuz bir geceye mal oldu tabi)

Yeni ve ilginç yazılar ile sizlerle olacağız. Kanalınızı değiştirmeyin :)

2009
05.28

13. Özgürlük İçin E-Dergisi’nin editörü Kubilay Kocabalkan’dan sonra 30 Mayıs 09 tarihinde çıkacak olan E-Dergi’nin editörü artık Şaban Kuş. Şaban Kuş’un editörlüğündeki E-dergi’nin 14. sayısının teması “Pardus ve Grafik Araçları”. 13. Sayı 70 sayfa iken, yeni sayı için 70 sayfanın geçildiği söyleniyor.  Birçok özgür yazılımlar hakkında bilgi alabileceğimiz bu yazılardan sonra ben de bir yazı e-dergi’ye ekledim. (Benim yazımı okumadan geçmeyin :) )

Tema : Pardus ve Grafik Araçları

  • Gimp Filtrelerini Tanıyalım-9 (Şaban KUŞ)
  • Krita (Seyit Gönenç Çalıcı)
  • Scribus (Taha Doğan Güneş)
  • Inkscape (Ali Erkan İMREK)
  • Blender (Eray Şahbaz)
  • Synfig Animation Studio (Seval Ünver)
  • OpenOffice.org Çizim (Hakan Hamurcu)
  • Özgür Pençe de özgür (Aydın Gündüz)
  • Digikam4 (Kubilay Kocabalkan)

E-Dergi için bu güzel yazıların çıkmasına yakın dün gece (Hiç kimsenin haberi olmadan) Pardus 2009 Alpha sürümü yayınlandı. Alpha sürüm için bilinen birkaç hata var:

  • Paket kurulumları çok geç başlaması
  • Kaptan Türkçe kurulum yapılsa bile İngilizce olarak başlıyor.

Pardus 2009 açıklarını kapatarak ana sürüme doğru koşar adımlarla geliyor.

PreAlpha 3 kullanıcıları ilk yüklediklerinide sistemi “Network-Manager” komutuyla ağ yöneticisini açıtıklarında, bir ağ kaydedip kapattığınızda “Dbus” hatalarıyla karşılaşabiliyorlardı. Hatta sistemi güncellemeyi başardınız diyelim bir iki dakika sonra yeni sürüm karşınıza çıkıyordu.

Bence şu an için düzeltilmesi gereken en büyük hata, (prealpha4′de) sistem açılırken ortalama 2 dakika soluksuz, sessiz, sedasız beklemesi. Alpha sürümünde bunun düzeltildiğini umuyorum.(Daha test edemedim.)

Son olarak Pardus 2008 sürümünün artık biteceğeni duymak biraz üzücü. Çünkü çoğu kullanıcı 2009′a güncelledikleri zaman sistemleri doğal olarak biraz daha yavaşlayacak.(Sistemi yavaş olanlar daha kötü etkilenecekler.) Ben bir Pardus 2008.3 sürümünün çıkmasını beklerken bir anda kendimizi Pardus 2009 testlerini yaparken bulduk. Umarım Pardus 2009 beklediğimizden daha hızlı çıkar.

2009
05.10

pardus2009

Cidden geliyorlar! Yavaş yavaş ama emin adımlarla…

2009
05.03

Pardus 2009 sürümüne artık çok az kala, birçok kullanıcı kendilerini 2008 sürümünün üzerine KDE4 ile alıştırıyorlar. (Bu kullanıcılardan biri de benim.) Fakat KDE4′ü biraz kurcalağınca çökmeler yaratmak çok zor değil. Bu çökmelerden biri ise Plasma’daki Plasmoid’ler ile ilgili.(Plasmoid = Plasma arayüzündeki programcıklar) Bu çökme ise Plasma’ya Plasmoidleri eklerken bir anda hata verip giriş bölümüne atması.

Hatayı çözmek için ilk önce veri toplamak demişler. :) Ben de öyle yapıp bir daha kullanıcı girişi yerinden giriş yaptım. Açtığımda bir daha Plasma çöktü ama sistem çalışıyordu. Alt-F2‘ye basarak hızlı başlat penceresinden konsola erişerek hemen “plasma” kodu verdiğimde böyle bir çıktı ile karşılaştım.

tdgunes@TDG-PARDUS:~/.kde4/share/config> plasma
plasma(5728) KWallet::Wallet::openWallet: Pass a valid window to KWallet::Wallet::openWallet().
plasma: symbol lookup error: /usr/lib/kde4/plasma_applet_showdesktop.so: undefined symbol: _ZN6Plasma14ToolTipManager4selfEv
plasma(5727): Communication problem with “plasma” , it probably crashed.
Error message was: “org.freedesktop.DBus.Error.NoReply” : ” “Message did not receive a reply (timeout by message bus)”

Hata’dan anlaşıldığı gibi Plasma, Plasmoidlerin birisinden dolayı çalışamıyordu. Yapılacak iş  yukarıdaki koyu yazılan yerde düzenleme yapmaktı.

tdgunes@TDG-PARDUS:> kwrite ~/.kde4/share/config/plasma-appletsrc

Bunun için kwrite ile o dosyayı açtım. Dosyada Plasmoid’lerin tüm ayarlamaları yer alıyordu. Oradan temel olanların dışındakileri(kdetwitter gibi) programcıkları sildikten sonra konsoldan bir daha açtığımda KDE4′ün Plasma’sıyla karşılaştım.

Bu sorunu çözerken başka kullanıcıdan denerseniz, değiştireceğiniz kullanıcının yoluyla .kde4 klasörüne ulaşın yoksa geçerli kullanıcının Plasma ayarı ile oynarsınız. Bu hatanın çözümünü ise Plasma açmadan Plasmoid’leri değiştirebilme şeklinde kullanmak size kalmış.

Çözüm hakkında yardımcı olan şu bloga teşekkürler.

Pardus 2009 hadi gel artık :)