6
Mar

Kontrolcu 2.0 ile Mutlu Son!

r207 ile başlayan r333 ile biten, (yani toplam r126) 14 Kasım 2009′da 2.0 sürümünün çalışmalarına başladığımız Kontrolcu’nün yeni sürümünü bugün 06.03.2010 tarihinde çıkardık. 2009′un Mayıs ayında osmank3 (Osman Karagöz) ile tanışmamız ile başladı ve bugünlere kadar geldi. Çıkardığımız alpha-1, beta-1′den sonra (tabi arada bir sürü revizyonlarda var.) stabil sürümü yayınlamanın vakti geldi.

Öncelikle stabil sürüm beta-1′den çok farklı değil. Görünüş olarak logomuz ve sağ altaki ? işaretini (?) şeklinde yaptık.  Bunun dışında Windows’da PyQt’den kaynaklanan komik bir hata vardı ki Windows’da QListWidget sürükle bırak”da kara delik oluşturduğundan, güzel bir ‘if os.name == nt’ diyerek bu olayı çözmüş olduk.

Bir başka yeniliğimiz ise artık üç büyük platforma yani Windows, Linux ve Mac OS X’e destek veriyoruz. Hatta çok isterseniz oturup ’setup.py’ üzerinden can sıkıntısı niyetine, üç platformda derleme çalışmalarına başlayabilirsiniz.

Osman Karagöz’ün wine ile cebelleşmesi sonucunda artık Windows’da dil desteğinin önü açılmış oldu. (Tabi ben üşengeçlik edip Mac OS X’de dil desteği için uğraşmadım. ) Şu an için bazı güncellenmeyen dillerimiz dışında desteğimiz hazır.

İngilizce bir kılavuz hazırlandı ama bir sürü hatası var.  Kılavuzu yazan arkadaş ilgilenecektir umarım. :)

Unutmadan KDE için çok güzel bir servis menüsünün bulunduğunu söyleyeyim. Sağ tıkladığınızda ‘Eylemler’ bölümünde dosya kontrolü yapabilirsiniz.

Son olarak logomuzu yapan Cemalettin Kara’ya teşekkür ederiz.

Kontrolcu 2.0 ve Mac OS X adlı resim  ile sizleri  baş başa bırakıyorum.

Kontrolcu Mac'de

Benzer yazılar:

  1. Kontrolcu 2.0-alpha’yı Yayınladık!
  2. Kontrolcu 2.0 Beta-1′e Merhaba!

23
Şub

Geçen seneki yazımda, QBasic ve Python’da nasıl faktöriyel hesaplanır güzelce anlatmışım gibi görünüyor. Bu seferde C++’de Faktöriyel nasıl olur bir deneme yaptım(Biraz kitaptan yardım aldım tabi :) ). Çok da güzel oldu.  For döngüsü ile faktöriyel hesaplamasını basitçe yapıyor.

#include <iostream>
 
int main (int argc, char * const argv[]) {
        using namespace std;
	int endit;	
	cout << "Enter a number: ";
	cin >> endit;
	endit++;
	double factorials[endit];
	factorials[1] = factorials[0] = 1.0;
	int i;
	for (i = 2; i < endit; i++)
		factorials[i] = i * factorials[i-1];
	for (i= endit-1; i< endit; i++)
		cout << i << "! = " << factorials[i] << endl;
    return 0;
}

Bu arada iki döngü olmasının sebebi, diğer döngüden basit bir düzenleme ile bir sınır verip o sayıya kadar faktöriyel çıkartabilirsiniz.

Python’da ise şöyle yapmışım,

QBasic’de ise,

Öğrenmeye devam…

Benzer yazılar:

  1. C++ Başlamak!
  2. Pardus için Bir Mini Program Daha!
  3. PyGuguk – Zamandan Kopmayın! :)

30
Oca

Şu günlerde bazı açık kaynak projelerin kurulum dökümanlarına ve başlangıç betiklerine bakarken karşıma ‘glob’ isimli bir modül geldi. Meğerse ne şahane bir şeymiş, haberim yok. Efendim glob ile istediğiniz dosyaları uzantılarına göre dosya yakayalabiliyorsunuz. Nasıl mı ? Şöyle:

import glob
pdfdosya = glob.glob('/home/tdgunes/*.pdf')

ile pdf dosyalarınızı bulabilirsiniz. Eğer betiği çalıştırdığınız noktadaki dosyaları bulacaksanız yapmanız gereken

import glob, os
pdfdosya = glob.glob(os.getcwd() + '/*.pdf')

Kurulum betiklerinde genellikle .ui, .qrc gibi dosyaların derlenmesinden önce dosyaların bulunması için kullanılıyormuş. İsterseniz güzel bir betikle tüm diskteki .pdf dosyalarını da bulabilirsiniz.

Python ile dosya bulmakta böylece kolay oldu.

Benzer yazılar:

  1. Python ile Konsoldan Tıklanan Tuşları Yakalamak!
  2. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek
  3. Python ile MySQL!

27
Oca

Python’dan sonra bana gücünü gösterebilecek, yapacağım zorlu işleri hızlıca yapabilecek, fakat bir o kadar da karmaşık olan bir dile başlamanın vakti benim için geldi. İlk kafanızı karıştırabilecek soru C++ nedir ? Bence C++, C’nin daha basitleştirilmiş bir sürümü diyebiliriz. Birçok şeyi daha kolay yapabilmeniz için tasarlanmış.  Tabi beni üzen bir başka konu ise platform bağımsızlığının Python kadar kolay olmaması. Çünkü her platformun derleyicilerinin birbirinden çok farklı oluşu burada büyük bir dezavantaj yaratıyor. Ama şu var ki Qt, platform bağımsızlığını size sunabiliyor.

Her şey bir yana en büyük faktör “HIZ” diyebiliriz. Hız, ama ne kadar hızlı ? Python’da asal sayıları bulan 3 farklı betik hazırlamıştım. İlk sürümünde 40.000.000-400.000.000.000 arasında ilk asal sayıyı 1 dakika 12 saniye 14 salise’de buldu. Sonra biraz daha geliştirip, saçma olan yerleri düzeltince, ilk sayıyı 23 saniye 66 salise’de buldu. Azıcık daha uğraşınca, son sürüm ilk asal sayıyı 17 saniye 27 salise’de buldu. Fakat C++ gelirsek ilk sayıyı bulmasını kronometre ile yakalayamadım diyebilirim. İnanılmaz bir hızla sayıları buluyordu. Son Python betiğimdeki mantığın aynısını C++’de uygulamıştım. Ve satır sayıları C++’nin tabiki daha uzundu.

Python’daki betik şöyleydi:

aralik = raw_input("Aralık belirtin(ör: 30-200 ):\n")
aralik = aralik.split("-")
last = int(aralik[1]) 
first = int(aralik[0]) 
sayi = 1
print "İşlem Başladı..."
while last>first:
    first = first + 1
    for b in range(2,first):
	if b>(first/2):
	    break
	sayi = first % b
	if sayi == 0:
	    break
    if sayi != 0:
	print first

C++’deki ise:

#include <iostream>
int main()
{
    using namespace std;
    long first = 0;
    long last = 0;
    long number = 0;
    cout << "Enter a number that 'prime' begins:";
    cin >> first;
    cout << "Enter a number that 'prime' stops:";
    cin >> last;
    cout << "----- Results: -----" << endl;
    while (last>first)
    {
        first = first + 1;
        for (long b = 2; b<first; b++)
        {
 
            if (b>(first/2))
            {
                break;
            }
            number = first % b;
            if (number == 0)
            {
                break;
            }
        }
        if (number != 0)
        {
            cout << "Result: " << first << endl;
        }
    }
}

Satır sayıları gördüğünüz gibi C++’nin daha fazla. Fakat şunu unutmamak lazım. Python yüksek seviyeli bir dil, bu yüzden hız bakımında C++’ye yetişemiyor.

Aynı zamanda programlama dillerini yarıştırmak, bunla daha az kod yazılıyor bu çok hızlı demenin pek bir anlamı da yok. Neyse bakalım C++ maceram da neler olacak.

Benzer yazılar:

  1. Mucize Sayılar
  2. C++’de Faktöriyel
  3. Kontrolcu 2.0 Beta-1′e Merhaba!

31
Ara

Her şey için teşekkürler Pardus!

2008 tişörtü ise burada.

Herhangi benzer bir yazı yok!

21
Ara

2.0 Alpha’dan sonra 21 gün geçmiş. Bu süreçte Alpha’da çıkan hataları buldukça içimden ‘İyi ki Alpha demişiz, ya demeseydik de bu stabil bir sürüm deseydik ne olurdu acaba ?” diye diye Beta-1′ye geldik. Alpha’dan sonra neler yaptık bir sıralayalım bakalım:

  • Alpha’daki bence en büyük sorun olan 50 MB’dan büyük dosyalar için gelen yükleme çubuğunun yaptığı her kontrolün yanlış olması, bizi gece gece sinirden çıldırttı. En sonunda Osman’ın hashlib.xxx <- değerini sıfırlamasıyla bu trajikomik sorundan da kurtulmuş olduk.
  • Arayüzümüzdeki 2 tane sekmeyi de unutmadık onlara da yükleme çubuğu desteği getirdik ve böylece artık donmalara son verdik.
  • Güzel bir logo ekledik. Aşağıdaki resimde de görebilirsiniz.
  • QSlider adlı pencerenin en altındaki sürükleyici ile biliyorsunuz ki ‘Check’ bölümünün yazı boyutunu büyütüp, küçültebiliyorduk artık diğer sekmelerde de bu çalışıyor.
  • Konsola düşen ve hata takibinde işimize yarayabilecek çıktıları düzenledik büyük çapta.
  • Birkaç kişi “Bu ne biçim ‘AboutBox’ ? ” dedi. Bu yorumlardan sonra onu da güzelce makyajladık.
  • Ve artık GNOME ve KDE-**’de dizin sürükleme* desteği geldi. Böylece dizin sürüklediğinizde içindeki dosyaların hepsini listeye ekliyor. Fakat sürüklenen dizinin içindeki dizinlerde bulunan dosyaları ellemiyor. Yoksa kontrol dosyalarında karmaşa olacağını biliyor. ( ‘Ne zeki şeymiş diye içinizden geçirin lüften :) ’ )
  • Türkçe karakterli dosyaları kontrol ederken artık tüm platformlarda sorun çıkarmaması gerekiyor. (Test edilen sistemler:  Arch Linux, Ubuntu 9.10, Pardus 2009, Windows 7)
  • Ve artık ortaya çıkan hata mesaj kutusu, ‘Check’ bölümü şu an için hatalara karşı dayanıklı ama diğer bölümleri bilmiyorum. Aklımızdan ‘Traceback’ yakalayan sonra bunu hata mesaj kutusunda belirtip, ‘Bunu bildir!’ diyen bir bölüm yapmayı düşünüyoruz. Aklımızda bin türlü fikir var.  Bakalım, bakalım :D

Bu arada 2.1 ile belki cd-dvd-bluray sürücülerdeki ortamların kontrolünün yapılması işine girişebiliriz. Hatta çaktırmadan söyleyeyim, şu an ki 2.0′da ‘Compare’ bölümüne yol olarak disk yolunu yazarsanız, (/dev/sr1 gibi) bir kontrol yapacaktır ama kontrolcu donabilir ve sürücünüzden garip sesler gelebilir :) . Bu çıkan numara ile yazdırdığınız iso’nun kontrol toplamı aynı olması gerekiyor. Eğer aynı değilse yazarken bir şeyler ters gitmiş olabilir.

*: Hala Windows’da kara delik oluşturan QListWidget’a sakın ama sakın önemli bir dosyanızı sürüklemeyin. Sürüklemeden önce 2 defa :) düşünün. Büyük bir ihtimalle stabil sürümde sürükle-bırak bölümünü Windows’da devre dışı bırakacağız eğer bunun çözümünü biliyorsanız ya yorum bölümüne yazın ya da sonsuza kadar susun. :)

**: KDE ve GNOME’da sürükle bırak rahatça çalışsa da XFCE’de ve Windows”da (yukarda belirtiğim gibi) sürükle bırak çalışmıyor. Çözümü bile lütfen yorumlara

Not: Beta-1 için çevirmenler ile görüşmedik en son stabil sürümde tüm çevirilerin yapılmasını kararlaştırdık. Şu an için İngilizce ve Türkçe desteği hazır. Windows’da sadece İngilizce desteği var. Eğer gettext modülünün nasıl Windows’da dil değişimi yapacağını çözebilirsem, stabil sürüme Windows’a da diğer dil desteği gelebilir.

Planladığımız dil desteği sekiz olmakla birlikte bu sayının her an değişip, değişmeyeceğini bildirmekte fayda var.

Stabil sürümü yavaş yavaş emin adımlarla geliştirmeye devam ediyoruz. Bir sonraki sürüme kadar hoşça kalın! :P

Kontrolcu 2.0 Beta Windows'da

Son Not:  Niye hep ben Windows’dan ekran görüntüsü yolluyorum, çünkü en son Windows’da .exe yapma işi bana kaldığı için size Windows görüntüsü vermek zorundayım. Unutmadan bir sorun yaşarsanız ‘ ? ‘ butonuna basın ve gelen kontrolcu’nun web sitesinden hatalarınızı bizden esirgemeyin.

Benzer yazılar:

  1. Kontrolcu 2.0-alpha’yı Yayınladık!
  2. İşte Mutlu Son!
  3. Python’da ‘Finally’!

30
Kas

Herkese selamlar,

Öncelikle uzun süredir yazamadığım bloguma artık, yazamamamın sebebini söylemenin zamanı geldi. O da “Kontrolcu”. Bu proje aslında çok basit bir iş yapsa da bizi baya uğraştırdı. 2009 Mayıs’da başladığımız bu projeye,(Buraya yazmak istemedim çünkü ametör bir başlangıç yaptık.) daha yeni 2.0 sürümüne vardık.

Kontrolcu peki nedir ? Bilinen tüm dosyaları kontrol etmek için kullanılan ‘checksum’ları oluşturabilen, bunu dosyaya yazabilen ve daha sonra dosyaları karşılaştırabilen 2.0 sürümü ile aklımıza yatan bir python projesi.

kontrolcwin7

Windows 7 Görüntüsü*

Projeye Osman Karagöz ile başladık. Pardus kanalında bir dosyanın md5 checksum’u nasıl oluşturulur diye soruyordum. Bu arada Osman Karagöz ile karşılaşıp, neden bizde bu işi basitleştiricek konsoldan korkanları korkutmayacak bir program yazmayalım dedik. İlk önce md5kontrolcu ile başladık. Bir süre sonra ortada başka dosya kontrol tiplerinin olduğunu görüp sadece md5 yerine sha1′i de ekledik. Bir taraftan arayüz ile bir taraftan konsol tipi ile uğraştık.

Daha sonra 1.0′ı çıkardık sessiz sedasız. Neden sessiz sedasız, hala sanki bir şeyler eksik dedik. Ben bir taraftan PyQt arayüzünü çıkarırken, Osman üşenmedi oturdu Tkinter arayüzünü yazdı. Kontrolcu’nün o güzel kütüphanesinin adını da “libkontrolcu.py” koyduktan sonra bu proje bitti dedik. Fakat baktık daha bir sürü kontrol tipleri varmış. 1.5 sürümü ile onları da ekledik.

Ama ortada çok komik hatalar vardı. Örneğin 20 GB’lık bir dosya kontrol edeceksiniz, Kontrolcu ya güzelce donuyor ya da MemoryError diyordu. Python’un nesne yapısını hiç bilmediğimiz için herşey fonksiyon tabanlıydı ve böyle olduğu için kafamız baya karışıyordu geliştirirken.

Qt’yi geliştirirken Qt-Designer’ı hiç bilmemem ve yanlış kaynaklardan çalışmam bir o kadar daha kafamı karıştırmıştı.  Her neyse bu hikaye 1.6 ile devam etti. Bu sefer KDE’de sağ tıkladığınız da direk kontrol dosyası oluşuyordu.

Uzun süre sonra 1.7 için çalışmalara başladık fakat o kadar saçma sapan kodlama yaptığımızı anladık. (Tabi uzun süre içinde baya şeyler kattık bilgilerimize.) Bir gün, iki gün geliştirdik fakat sonra bıraktık. Osman’ın 2.0′ı çıkaralım tavsiyesi üzerine çalışmalara başladık. Baktık ki 1.6′dan bir şey olmaz oturduk tamamen yeniden yazdık. Yaklaşık üç hafta oldu sanırım. Baya geliştirdik. 2.0-alpha için hazırız.

Bu uzun hikayemiz de İndirilme sayımız çok düşüktü. Hiçbir zaman Kontrolcu’yu geliştirirken herkes kullansın, ben de ünlü olayım değil, amacımız öğrenmek idi. 2009 Mayıs’tan bu yana baktığımız da gerçekten Kontrolcu, tüm ekibimize (ben, Osman Karagöz, Okan Okuroğulları(Türkçe çeviriler ve belgelendirme)) çokça şeyler kattı. Umarım 2.0′ın devamında, Kontrolcu bize daha çok şeyler katar.

2.0-alpha1 diye adlandırdığımız sürüm şu an Türkçe ve İtalyanca çevirileri ile sunduk. Ayrıca şu an elime İspanyolca çevirisi de geldi. İlk İtalyanca çevirisini görünce cidden çok hoşuma gitti. İyi ki İngilizce başlamışız 2.0′ı yapmaya dedim.

Unutmadan Kontrolcu plasmoidi söyleyeyim. KDE-LOOK sayfasından KDE4 için yaptığımız plasmoidi bulabilirsiniz. (Sadece md5 kontrolü ve MemoryError’lar ortaya çıkabilir. :) )

*: Şu an Pardus’a geçemediğim için sadece görüntüsü veriyorum afedersiniz :)

Benzer yazılar:

  1. Kontrolcu 2.0 Beta-1′e Merhaba!
  2. İşte Mutlu Son!
  3. Öİ E-Dergi 14. Sayı ve Pardus 2009 Alpha

6
Kas

İnternet’ten Python öğrenenlerde genellikle bazı konular eksik kalabiliyor. Örneğin ‘Finally’ gibi. ‘Finally’, hata yakalarken yaptığınız işlemde son adım olarak ortaya çıkan verilerin temizlenmesi olarak kullanabileceğimiz kullanışlı bir komut. Klasik ‘try:’, ‘except:’ yazdıktan sonra ‘finally:’ koyabiliyoruz demek oluyor bu. Peki nasıl uyguluyoruz bir bakalım.

a = 10
try:
    a += "10"
except TypeError:
   print 'Tipler uyuşmadı.'
finally:
   print 'Veriler sıfırlanıyor'
   a = 0

‘finally’inin kullanımı böyle. Bu kodu tanımlarsak sırasıyla:

  1. Bir a değeri belirledik ve buna 10 dedik.
  2. Sonra bir de üstüne string(yazı) olan “10″ eklemeye çalıştık.
  3. Bunun sonucunda bir ‘TypeError’ aldık.
  4. Sonra a’yı sıfırladık.

Burada merak edeceğiniz mevzu eğer ‘TypeError’ oluşmasaydı ne olacağıydı. Eğer bu hata oluşmasaydı, veriler gene sıfırlanacaktı. Finally işlemini temizleme olarak görebilirsiniz. Ama çok isterseniz, bu ifadenin altına da temizleme komutunu yazabilirsiniz. Bu tercih size kalmış.

Benzer yazılar:

  1. Python ile Konsoldan Tıklanan Tuşları Yakalamak!
  2. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek
  3. Kontrolcu 2.0 Beta-1′e Merhaba!

18
Eki

Nesne tabanlı programlamadan sonra bir başka merak ettiğim konu ise: Konsol tabanlı bir program yaptığımda ona verdiğim komutları, hep uzun uzun yazmam gerekiyordu. Mesela bir oyun yaptınız. Konsoldaki haritanızda ileri,geri,sağ ve sola gitmesi için durmadan “ileri,geri …” yazmanız gerekiyor.

Fakat artık direk “WASD” tuşları olsun klavyedeki her tuşla programa komutlar gönderebileceksiniz. Yapmanız gereken “tty” modülünü kullanmak fakat bu modül çok ilginç ki, programı kapattıktan sonra bile sizin klavye komutlarınızı alıyor.  Bunun yerine hem Linux, hem Windows, hem de Macintosh’larda çalışacak bir yöntem ve sadece “tty” modülüyle değil de başka modülleri de kullanmalı. Çünkü tty modülü sadece Linux’da çalışıyor ve stabil değil.

Küçük bir google araması yaptığınızda karşınıza şöyle bir site geliyor. (Macintosh desteğini denemediğim için örneklere yazmayacağım ama o siteden Macintosh desteğine bakabilirsiniz.)

İlk önce tane .py dosyası oluşturun ve onun içine şunları yazın.

# -*- coding: utf-8 -*-
class _Getch(object):
    """Gets a single character from standard input.
       Does not echo to the screen."""
    def __init__(self):
        try:
            self.impl = _GetchWindows()
        except ImportError:
            self.impl = _GetchUnix()
 
    def __call__(self):
        return self.impl()
 
class _GetchUnix(object):
    def __init__(self):
        import tty, sys
 
    def __call__(self):
        import sys, tty, termios
        fd = sys.stdin.fileno()
        old_settings = termios.tcgetattr(fd)
        try:
            tty.setraw(sys.stdin.fileno())
            ch = sys.stdin.read(1)
        finally:
            termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
        return ch
 
class _GetchWindows(object):
    def __init__(self):
        import msvcrt
 
    def __call__(self):
        import msvcrt
        return msvcrt.getch()
 
getch = _Getch()

Bunu sonra ana programınıza “form dosyanız import *” şeklinde ekleyin. Sonra kullanırken:

from alici import *
while True:
    karakter = getch().upper()
    print "Tıklanan tuş: %s"  % karakter

şeklinde yazabilirsiniz. Burada “getch().upper()” yazarken “upper()” yazmamızdaki mantık, gelen karakterin büyük ya da küçük problemi yaşamamak için hepsini büyük yapıp öyle işlemektir.  Bu yazdığınız “.getch()” bu haliyle Linux’da ve Windows’da çalışabilir.

Ayrıca bu olay PyGame gibi başka kütüphanelerle yapılabilir fakat eğer tamamen konsol tabanlı bir programda bunu istiyorsanız tek çözüm bu.

Not: Son örnekteki döngüden kurtulamazsanız kurtarıcınız “CTRL-C” olsun.

Benzer yazılar:

  1. Python’da Glob ile Dosya Yakalamak
  2. Python ile Nesne Tabanlı Programlama’ya Giriş
  3. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek

8
Eki

Python’u ilk duyduğum da, Python’un nesne tabanlı olduğunu üstüne basa basa söylediler ama şu ana kadar uğraştığım birçok projede olsun, yazdığım kodların çoğunda olsun, “Ben bunu nesne tabanlı olsun diye yapıyorum.” diyerek yapmadım ve nesne tabanlı programlamayı da kullanmanın ne kadar büyük bir kolaylık getirdiğinin de farkında değilmişim.

Nesne tabanlı programlamayı basitçe, kendi dünyanıza ekleyeceğiniz nesnelerin yapım aracı olarak düşünebilirsiniz. Ben dünyamda kare istiyorum ve karemin alanı, çevresi belli olsun diyebilirsiniz. Eski bilgilerinizle böyle bir şey isteğiniz de fonksiyonlar yazıp, sonra çağırımlar yapabilirdiniz ama artık nesne tabanlı programlamayla, fonksiyon çağırımlarıyla uğraşmadan direk a = kare(2) (2 burada kenarın uzunluğu)” diyebilirsiniz.  Kafanızda “Nasıl olacak bu iş?” diye bir soru oluştuysa hadi bakalım nasıl oluyormuş.

Şu ana kadar sınıf(class) kullanmadıysanız sınıflara merhaba diyin. Eğer kullandıysanız, (Arayüz falan yazarken) belki de bilmeden kullandınız.(Tıpkı benim gibi :) ) Sınıflar nesneler üretmenin en güzel yoludur. Gelin bir kare nesnesinin sınıfını yazalım.

class kare():
    def __init__(self, kenar):
	self.kenar = kenar
    def cevresi(self):
        return self.kenar*4
    def alani(self):
        return self.kenar*self.kenar

Yaratığımız bu kare sınıfının en çok kafa karıştıran yeri “__init__” kısmı olabilir. Peki nedir “__init__” kısmı ? Basitçe burayı bir kitabın içindekiler bölümü olarak görebilirsiniz. Burada bizim kare için sadece “kenar” yerimiz var.  Bir başka soru neden “self.kenar = kenar” dediğimiz olabilir. self ile sınıf içinde fonksiyonlara ulaşmak için global gibi bir değer kullanmak yerine kolayca fonksiyonlar arasında bu değerleri kullanabiliyoruz.

Peki son olarak gelin a bir kare nesnesi olsun. Bunu yapmak için “raw_input” kullanabiliriz.

b = int(raw_input("Kare'nin kenarı kaç olsun? : "))
a = kare(b)

Bundan sonra yapacağımız kare sınıfındaki fonksiyonları çağırmak olacaktır.  Onu da şöyle halledebiliriz:

print "Çevresi: %s Alanı: %s" % (a.cevresi(), a.alani())

Kare cismimizi yaratarak nesne tabanlı programlama’yı az da olsa öğrenmiş olduk.

Not: Sınıfların içine yazdığımız fonksiyonlarda, __str__ adlı bir fonksiyon olduğunu ve bunla str(a) dediğinizde bir olayı başlatabileceğinizi biliyor muydunuz ? __str__ kısmını __int__ yapabilir ve daha birçok built_in fonksiyonlarla oynayabilirsiniz.

Python, Python, Python :)

Benzer yazılar:

  1. Python ile Konsoldan Tıklanan Tuşları Yakalamak!
  2. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek
  3. Python ile şifre oluşturmak/kullanmak

30
Eyl

6xqbj5pa4f

Deneme!

Herhangi benzer bir yazı yok!

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ı ?)

Herhangi benzer bir yazı yok!

14
Eyl

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.)

Benzer yazılar:

  1. Kontrolcu 2.0-alpha’yı Yayınladık!

10
Eyl

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!

Benzer yazılar:

  1. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek
  2. C++ Başlamak!
  3. OOXML'e Hayır Diyenler!

9
Eyl

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!

Benzer yazılar:

  1. Python ile Konsoldan Tıklanan Tuşları Yakalamak!
  2. Kontrolcu 2.0-alpha’yı Yayınladık!
  3. Python ile şifre oluşturmak/kullanmak

30
Ağu

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…

Herhangi benzer bir yazı yok!

28
Ağu

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!

Benzer yazılar:

  1. MySQL notları
  2. Python ile .mp3 ve .midi dosyalarını açmak/dinlemek

27
Ağu

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 :)

Benzer yazılar:

  1. Pardus Tişörtüm Geldi!

28
May

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.

Benzer yazılar:

  1. Pardus İkinci Ara Sürümü
  2. Firefox Pardus'da hata veriyor!
  3. Pardus Tişörtleri Satışta!

10
May

pardus2009

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

Herhangi benzer bir yazı yok!