PyMedia

Uzun zamandır yazı yazmıyordum. Zaman buldukça Python ile ilgilenmeye yeni bilgiler edinmeye çalışıyorum. Pythonda ses dosyalarının nasıl çalıştığını merak ettim. pyaudio, pymedia, pygst gibi modüller olduğunu gördüm. Esasen amacım uzun vadede vaktim oldukça mp3, wav dosyalarını çalabilen bir küçük uygulama yaparak olayı anlamaya çalışmak.

Pymedia modülü mp3, wma, ogg, ac3, aac gibi dosyaları çalabildiğini belirtmiş. Gerçi sadece ses değil videoda gösterebiliyormuş(daha bir örnek yapmadım). Resmi sitesi http://pymedia.org

Modül bu dosyaları çalabilmek için

  • libogg-1.1+
  • libvorbis-1.0.1+
  • liblame-3.95.1+
  • libfaad2

kitaplıklarını istiyor. Pardusda zaten mevcut. Yükleme işlemi ise şu şekilde; (tabiki önce siteden Pymedianın linux sürümünü indirmek gerekiyor.)

İndirdiğiniz sıkıştırılmış dosyayı açıyorsunuz. Konsoldan bu dizine giderek aşağıdaki komutları veriyorsunuz.

python setup.py build

python setup.py install

Kurulumun hepsi bu. Modülün içeriğinde ise şu fonksiyonlar mevcut.

audio’, ‘getMetaData’, ‘meta’, ‘muxer’, ‘player’, ‘removable’, ‘video’

İş bundan sonra başlayacak. Pythonda ses merakı olanlara duyurulur.

Yeni Python Kitabı-Mı?

Geçenlerde Python Programlama Dilini öğrenmek için sürekli takip ettiğim site olan istihza.com’ da çok ilginç ve bir o kadar da üzücü günlük girdisi okudum. Ve yapılan olayı kişisel haklara saldırı olarak görüyorum. Yazıyı aynen yayınlıyorum ve yorum sizlerin.

Bildiğiniz gibi dün KODLAB Yayınları yeni bir Python kitabının duyurusunu yaptı. Bu duyuruya göre kitabın yazarı Talat Uyarer. Biz bu yazarı Pusula Yayıncılık’tan çıkardığı “Her Yönüyle Pardus” adlı kitabıyla tanıyoruz…

Türkiye’de Python’la ilgili ilk kitap Mustafa Başer tarafından 2006 yılında yazılmıştı. Ondan sonra uzun süre Python’la ilgili bir kitap çalışmasına rastlamamıştık. Bu yüzden Mustafa Başer’in ardından Python konusunda kitap yazan birilerinin olduğunu duyunca gerçekten heyecanlandım ve hemen KODLAB’ın http://www.kodlab.com/programlama/64-uzmanindan-python.html adresindeki kitap duyurusuna tıkladım. Ancak bu sayfada yer alan Flash biçimli içindekiler dizinini görünce gözlerim yuvalarından fırladı! Çünkü oradaki içindekiler dizini, istihza.com’daki Python 2.x bölümüne ait içindekiler diziniyle tıpatıp aynıydı. Ben açıkçası insanların gözüne soka soka intihal yapılmayacağını düşündüğümden iyi niyetimi korumaya çalıştım… Herhalde bir yanlışlık olmuştur diye düşündüm sürekli olarak. Dün gece, konuyu aydınlatmak için KODLAB’a bir e.posta gönderdim. Attığım bu e.postaya bu sabah KODLAB’ın Yayın Yönetmeni Suat Bey’den cevap geldi. Sabahtan itibaren akşama kadar gün boyu yazıştık Suat Bey’le. Akşam da bir saat telefonla konuştuk…

Sonuç olarak, o içindekiler dizini doğruymuş. Talat Uyarer istihza.com’ daki Python bilgilerini kopyalayıp, kendi adıyla kitap olarak basılmak üzere KODLAB’ a vermiş… Üstelik kitap bu haliyle basılmış… Suat Bey durumu düzeltmek için birinci baskıda kendilerinin internet üzerinde bilgi vereceğini, ikinci baskı için ise benden ön söz yazmamı isteyeceklerini söyledi. Ben kendisine açıkça bu kitabın basılmasına razı olmadığımı ve kesinlikle herhangi bir şekilde kitaba ön söz yazmayacağımı söyledim…

Bu arada kitaptaki Django bölümünün de tartışmalı olduğu ortaya çıktı. Ben açıkçası oradaki başlıkları bir yerlerden hatırlıyorum. O başlıkları, o yazıların sahipleri daha kolay tanıyacaktır…

Dün ve bugün bu konuyla ilgili http://forum.ubuntu-tr.org/index.php/topic,11522.0.html adresinde baya bir tartışma yaşandı. Bu konunun ayrıntılarına o adresten de erişebilirsiniz…Orada da dediğim gibi, benim için epey üzücü bir durum oldu bu… İnsan böyle durumlarda hevesini yitiriyor…

Sevgiler,

istihza

Artık adı geçen şahıs gibilerin yasal yollardan yaptıklarının karşılığını bulması gerekli. Bakalım önümüzde ki günler neyi gösterecek.

Eclipse ve PyDev (Python Düzenleyici)

Uzun zamandır Python ile ilgili yazamıyorum. BİTEFO kursu okul sonu işleri falan derken en sonun da biraz zaman buldum ve Eclipse kurarak Python kodlamayı buradan yapma isteği oldu. Zaten Eclipse ve PyDev paketleri depoda mevcut bize sadece küçük ayarlamalar yapmak kalıyor. Şimdi dilimin döndüğünce size bu ayarları anlatmaya çalışacağım. Eclipse bilindiği gibi Java geliştirme ortamı, sadece  Java değil C ve Python da geliştirilebiliyor.

Depodan gerekli paketleri kurduktan sonra Pardus-Uygulamalar-Geliştirme yolunu kullanarak Eclipse programını çalıştıralım. Eclipse programına Python yolunu(Path) göstermemiz gerekmektedir. Bu pencerede İnterpreter-Python bölümüne tıklayarak ilgili bölümün açılmasını sağlıyoruz. Bu pencerede New… düğmesine tıklıyoruz.

EclipsePyDev1

New… düğmesine tıkladıktan sonra karşımıza aşağıdaki gibi bir pencere çıkıyor. Bu pencere Interpreter Name kısmına ben Pardus 2009 kullandığım için Python 2.6 yazdım. Çünkü Pardus Python 2.6 kullanıyor. İnterpreter Executable bölümnüde hemen Browse… düğmesini tıklıyoruz. Pardus 2009′ da Python yolu /usr/bin/python2.6 dır. Bu dosyayı seçerek OK düğmesine tıklıyoruz.

EclipsePyDev2

Eclipse var olan kütüphaneleri kendisi otomatik olarak buluyor. Burada da OK düğmesine tıklayarak geçiyoruz.

EclipsePyDev3

Artık başladğımız yere geri dönüyoruz. Program bulduğu Python kütüphaneleri ve yolunu ilk girdimiz pencereye bilgi olarak girdi ve OK dememizi bekliyor. OK diyerek artık Eclipse programının Python kodlayıcı(editör) olarak çalışmasını sağlıyoruz.

EclipsePyDev4

Eclipse artık Python’ u ve kütüphanelerini tanımaya başlıyor.

EclipsePyDev5

Yeni proje oluştur diyerek Eclipse’ i Python kodlayıcı(editör) olarak kullanabilirsiniz. Hayırlı olsun. İyi geliştirme süreçleri dilerim.

EclipsePyDev6

Bu yazı da burada biter.

Python Programlama Dili Türkçe Kaynak (e-kitap)

Aşağıda http://www.istihza.com’ dan hazırlanan, Python Programa Dili ile ilgili pdf dosyasının bağlantısı mevcuttur. Python ile ilgili Türkçe ve açık kaynak kitap olması dolayısıyla önemli bir yere sahiptir. Sayın Fırat Özgül’ e çalışmalarında başarılar diler, böyle bir çalışmayı Creative Commons lisansıyla dağıttığı için teşekkür ederiz.

Bu lisans okurlara şu hakları veriyor:Python

1. Çalışmayı kopyalama, dağıtma, başkalarıyla paylaşma.
2. Çalışmayı adapte etme, üzerinde değişiklik yapma.

Bu lisansa göre okurun iki adet sorumluluğu var. Buna göre okur;

1. istihza.com sitesini kaynak olarak göstermeli.
2. Bu bilgileri ticari amaçla kullanmamalı.

Python Programlama Dili e-kitap(Türkçe) indirmek için tıklayın.

Not: Bağlantı yenilenmiştir.

Python-PyQt-QT4 Türkçe Kaynaklar

Python ve PyQt ile ilgili galiba en çok Türkçe kaynak bulmak konusunda zorlanıyorum. Bulduğum kaynakları burada paylaşayım ki hem ben unutmam hem de meraklısı olanlar da kullanır.

Python ve PyQt için buraya, özellikle PyQt’ ye giriş için güzel bir kaynak.

Python ve Tkinter için internette gördüğüm en geniş Türkçe kaynak için buraya. Şuanda Python 3.0 bölümü eklendi.

Şimdi vereceğim adres bir kurs sitesi, sakın reklam yaptığımı sanmayın, bu siteyi eklememin amacı kod örnekleri olmasındandır. Göz atmak için buraya.

Resmi olmayan Python grubunun yeri için buraya.

Python Türk sitesi için buraya.

Belgeler.org içindeki Python belgeleri için buraya.

Python ile ilgili yazıların olduğu güzel bir blog, giriş buradan.

Ömer Ücel adlı vatandaşımızın günlüğüde bakılmaya değer bilgiler içeriyor. Buradan.

QT4 Türkçe kaynak için buraya.

Math Modülü-Python

MATH MODÜLÜ

Python’ da matematiksel fonksiyonları math modülü ile kullanmaktayız. Şimdi math modülümüzün içeriğine bakalım. Unutmadan modülümüzü çalışmamıza çağıralım.

import math

Bu komut ile modülümüzü çalışmamıza dahil etmiş olduk. Şimdi içerdiği fonksiyonları aşağıdaki komutu vererek görelim.

dir(math)

[‘__doc__’, ‘__file__’, ‘__name__’, ‘acos’, ‘asin’, ‘atan’, ‘atan2’, ‘ceil’, ‘cos’, ‘cosh’, ‘degrees’, ‘e’, ‘exp’, ‘fabs’, ‘floor’, ‘fmod’, ‘frexp’, ‘hypot’, ‘ldexp’, ‘log’, ‘log10’, ‘modf’, ‘pi’, ‘pow’, ‘radians’, ‘sin’, ‘sinh’, ‘sqrt’, ‘tan’, ‘tanh’]

Modülümüzün içeriğini de gördüğümüze göre şimdi kosinüs, sinüs, tanjant, pi, karekök, üslü ifadeler gibi fonksiyonlarla ilgili örneklerle kullanımını anlamaya çalışalım.

Okumaya devam et

Random Modülü-Python

Geçenlerde Python.org dökümanlarında random modülü gözüme çarptı. random kelimesinin Türkçe karşılığı rasgele anlamına geliyor. Yani rasgele yapılacak işlemlerde random modülünü kullanabiliriz.Hemen aklıma gelen iki örneği vermek istiyorum. Birincisi müzik oynatıcılardaki rasgele müzik çalma, ikincisi ise rasgele sayı üreteci, sayısal çekilişlerinde kullanılmak üzere. Tabiki verdiğim örnekler ne kadar doğru ya da kullanılabilir bilmiyorum. sadece aklıma ilk gelen fikirler bunlar. Şimdi random modülü ile ilgili bir kaç örnek vereyim.

import random

Bu satır ile random modülünü programımıza davet ediyoruz.

random.choice([‘okursat’, ‘kursat’, ‘orsel’, ‘python’, ‘pardus])

Bu satır ile oluşturduğumuz listeden herhangi bir liste ögeyi seçmesini sağlaya biliriz. Bu arada choice seçim anlamına gelmektedir.

random.sample(xrange(50), 10)

Bu satır da ise sample fonksiyonunu kullandık. sample örnek anlamına geliyor. İçerisinde ise xrange kullandık; range kelimesi dizmek, değer kümesi anlamına geliyor. Bu kodla ise 50′ ye kadar olan sayılardan 10 tane örnek seçmesini söyledik. İşte bu örneği sayısal gibi oyunlar için kullanabiliriz diye düşünüyorum. Birde arayüz tasarlandımı olur gibi.

random.randrange(50)

Bu kod ile değer kümesinden rasgele tamsayı seçmeye yarıyor. 50′ ye kadar olan sayılardan rasgele birini seçiyor.

Şimdi yukarıda bahsettiğim sayısal mıydı, altılı mıydı ismi tam bilmiyorum ama, hatırladığım kadarı ile 50′ ye kadar olan sayılardan 6 tane seçip kupona yazıyorlardı. Aşağıdaki kodlarla bu işlemi bizim yerimize Python yapsın.

#/usr/bin/env python
#-*- coding:utf-8 -*-

import random
rasgele = random.sample(xrange(50), 6)
print rasgele

Bol şanslar. 🙂

İlk PyQt Arayüz Çalışmam-Qt4

İlk arayüz çalışmamı yaptım ve hemen paylaşmak istedim. Arayüz çalışmasını QT4 ile gerçekleştirdim. Bu gerçek anlamda ilk QT4 deneyimim. QT4′ ün tasarımcıya çok büyük kolaylıklar sağlayan arabirimi ve kullanışlılığı sayesinde arayüz tasarımım 5 dakika gibi kısa bir sürede bitti. Zaten işin QT4 kısmı basit ve zevkli. İşin zor bölümü  ise tasarladığınız arayüz ile yazdığınız kodların entegre edilmesi. Bütün bu işlemleri yapabilmemiz için bildiğiniz üzere sistemimizde Qt4 ve Python kurulu olmalıdır.

QT4 ile arayüz çalışmalarından görüntüler aşağıdaki gibi olacak.

qt1

Yukarıda görüldüğü gibi gerekli bileşenleri formumuza sürükleyerek ekliyoruz.

qt3

Ve düğmelere fonksiyon atayarak arayüz çalışmamız burada bitiyor. Bu arada arayüz çalışmaları ile ilgili pek fazla bir açıklama yazmadım. Bunu bir kaç sebebi var. Birincisi daha yeni öğreniyorum, yeterli bilgim yok. İkincisi en iyi öğrenme yollarından biri deneme yanılmadır. PyQt ile ilgili buradaki örneklere bakabilirsiniz. Anlatımı çok güzel.

Arayüzü oluşturduktan sonra sıkıntılı olan (benim için) Python kodları ile entegre etme işlemini yaptım. Kodların son hali aşağıdaki gibi oldu.

# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui
from datetime import date
import sys
class ogren:
def __init__(self, ui):
self.ui = ui

def bilgi(self):
global bugun
global dg
global yas
bugun = date.today()
ui.label_6.setText(u”Bugün :”)
ui.label_7.setText(str(bugun))
ui.label_5.setText(u”Alanları doldurup Öğren tuşuna tıklayın.”)
yol = int(ui.lineEdit.text())
ay = int(ui.lineEdit_2.text())
gun = int(ui.lineEdit_3.text())
dg = date(yol, ay, gun)
yas = bugun – dg
ui.lineEdit.clear()
ui.lineEdit_2.clear()
ui.lineEdit_3.clear()
ui.label_4.setText(str(yas))

class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(438, 387)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(“centralwidget”)
self.lineEdit = QtGui.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(70, 80, 113, 29))
self.lineEdit.setObjectName(“lineEdit”)
self.lineEdit_2 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(70, 110, 113, 29))
self.lineEdit_2.setObjectName(“lineEdit_2”)
self.lineEdit_3 = QtGui.QLineEdit(self.centralwidget)
self.lineEdit_3.setGeometry(QtCore.QRect(70, 140, 113, 29))
self.lineEdit_3.setObjectName(“lineEdit_3”)
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 240, 131, 28))
self.pushButton.setObjectName(“pushButton”)
self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(150, 240, 106, 28))
self.pushButton_2.setObjectName(“pushButton_2”)
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(30, 80, 62, 19))
self.label.setObjectName(“label”)
self.label_2 = QtGui.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(30, 110, 62, 19))
self.label_2.setObjectName(“label_2”)
self.label_3 = QtGui.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(30, 140, 62, 19))
self.label_3.setObjectName(“label_3”)
self.label_4 = QtGui.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(30, 210, 231, 19))
self.label_4.setObjectName(“label_4”)
self.label_5 = QtGui.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(10, 20, 421, 20))
self.label_5.setObjectName(“label_5”)
self.label_6 = QtGui.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(260, 50, 62, 19))
self.label_6.setObjectName(“label_6”)
self.label_7 = QtGui.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(320, 50, 111, 19))
self.label_7.setObjectName(“label_7”)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 438, 27))
self.menubar.setObjectName(“menubar”)
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(“statusbar”)
MainWindow.setStatusBar(self.statusbar)

self.retranslateUi(MainWindow)
self.ogren = ogren(self)
QtCore.QObject.connect(self.pushButton_2, QtCore.SIGNAL(“clicked()”), MainWindow.close)
QtCore.QObject.connect(self.pushButton,QtCore.SIGNAL(“clicked()”),self.ogren.bilgi)
QtCore.QObject.connect(self.lineEdit_3, QtCore.SIGNAL(“returnPressed()”), self.pushButton.animateClick)
QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate(“MainWindow”, “Kaç Gün Yaşadın”, None, QtGui.QApplication.UnicodeUTF8))
self.pushButton.setText(QtGui.QApplication.translate(“MainWindow”, “Öğ&ren”, None, QtGui.QApplication.UnicodeUTF8))
self.pushButton_2.setText(QtGui.QApplication.translate(“MainWindow”, “&Kapat”, None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate(“MainWindow”, “Yıl”, None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate(“MainWindow”, “Ay”, None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate(“MainWindow”, “Gün”, None, QtGui.QApplication.UnicodeUTF8))
self.label_4.setText(QtGui.QApplication.translate(“MainWindow”, “…”, None, QtGui.QApplication.UnicodeUTF8))
self.label_5.setText(QtGui.QApplication.translate(“MainWindow”, “Alanları doldurup Öğren tuşuna tıklayın.”, None, QtGui.QApplication.UnicodeUTF8))
self.label_6.setText(QtGui.QApplication.translate(“MainWindow”, “Bugün :”, None, QtGui.QApplication.UnicodeUTF8))
self.label_7.setText(QtGui.QApplication.translate(“MainWindow”, ” “, None, QtGui.QApplication.UnicodeUTF8))
app = QtGui.QApplication(sys.argv)
window = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(window)

window.show()
sys.exit(app.exec_())

Ve son olarak dosyayı python ogren.py komutu ile konsoldan çalıştırdığımda aldığım ekran görüntüleri aşağıda.

datetime1datetime2datetime3datetime4

Mutlu son. Tabiiki program çok ilkel, ne de olsa yeni başladım. Vakit buldukça arayüz denemelerine devam edeceğim ve paylaşacağım.

Python DateTime Modülü

Python’ da DateTime modülünün kullanımı ile ilgili küçük bir çalışma.

#/usr/bin/env python
#coding:utf-8 -*-

from datetime import date   #datetime modülünden date fonksiyonunu çektik.
bugun = date.today()      #bugun adlı bir değişken oluşturup, günün tarihini gösteren fonksiyonu atadık.
print “Bu günün tarihi”, bugun #günün tarihini ekrana yazdırdık.
a = input(“Lütfen doğduğunuz yılı girin:”) # a isimli bir değişken tanımlayıp, kullanıcıdan integer olarak doğduğu yılı girmesini istedik.
b = input(“Lütfen doğduğunuz ayı girin:” # b isimli bir değişken tanımlayıp, kullanıcıdan integer olarak doğduğu ayı girmesini istedik.
c = input(“Lütfen doğduğunuz günü girin:”) # c isimli bir değişken tanımlayıp, kullanıcıdan integer olarak doğduğu günü girmesini istedik.
dg = date(a, b, c) # dg isimli bir değişkene date fonksiyonunu atadık.
yas = bugun – dg   # yas adlı değişken oluşturarak, bugun adlı değişkenden, dg adlı değişkeni çıkardık.
print yas # ve son olarakta yas değişkeninin sonucunu ekrana yazdırdık. Böylelikle kaç gündür yaşadığımızı öğrenmiş olduk.

Bu arada Python kodları ile ilgili  soru sormazsanız sevinirim. Ben de yeni yeni öğreniyorum. Kodlarla ilgili olarak ingilizcesi olanlar aşağıdaki  adrese bir göz atabilirler.

http://www.python.org/doc/current/