3
Tem

İngiltere’den aldığım iPhone 4′ü, Türkiye’ye geldiğimde hemen kullanamadım. Malum micro sim kartına geçen yeni iPhone’dan dolayı, iş eski sim kartı üzerinde minik bir ameliyata kalmıştı. İlk ameliyat başarız oldu. Biraz üstün körü kesildi. Yeni bir sim kartı aldıktan sonra onu bu sefer şuradaki taslak üzerine koyup, kesildiğinde bu sefer çalışmıştı. Eğer Turkcell’i bekleseydim eylül hatta ekime kadar bekleyecektim.

Tatilde internet bulamayacağımdan Turkcell’in sattığı internet paketi ile sadece telefondan değil, bilgisayardan da internete ulaşmak istiyordum. İnternette bir çok kimse Ubuntu üzerinde denemiş. Hatta Ubuntu’ya “iPhone Ethernet Driver” projesi bile var. Fakat iPhone 4′de çalışmıyor. (3GS’de çalıştı.) Ama Bluetooth PAN ile bu iş kolayca yapılabiliyor Ubuntu’da. Pardus’da da hemen hemen aynı fakat Ağ Yöneticisi ile biraz oynamanız gerekiyor.

İlk önce “blueman”‘i pisi ile indirelim.(sudo pisi it blueman). Sonra Bluetooth Yöneticisi adıyla bulabilirsiniz. Çalıştırmadan önce, lütfen iPhone’nunuzdan Ayarlar->Genel->Ağ->İnternet Paylaşımı’nı açın ve bluetooth ile olsun diyin. Sonra Bluetooth Yöneticisi’ni açın ve “Ara” diyin.  “Smartphone” olarak bulunacaktır.  Listede ona sağ tıklayın ve “Ağ Erişim Noktası” diyin. Burada eğer cihaz ile eşleşmemişseniz eşlenmeniz için pin numarası isteyecek sizden. Eşledikten sonra tüm işlem tamamlandığında Ağ Yöneticisi’ni açın. Kablolu ağlarda iki tane yeni eklenmiş ağ göreceksiniz. Birisi “pan0″, diğeri “bnep0″ olacaktır. bnep0 ile bağlanmaya çalışın. IP alırsa internete bağlanmışsınızdır ve sörf yapmaya hazırsınızdır.

Ubuntu’da ise işlemlere başlamadan önce. NMPANSupport eklentisini eklentilerden açmanız gerekiyor .

Artık her yerden iPhone 4 veya 3GS(3G’yi denemedim büyük ihtimalle onla da olacaktır.) internete Pardus ile girebilirsiniz.

27
May

Bu 3′lüyü yan yana getirmek benim için zordu. Fakat en sonunda bunu başardım. Diğer sitelerdeki gibi sadece konfigürasyonu yazıp, bırakmayacağım. Hepsini tek tek adımlar şeklinde yazdım. Süreç kısacası Django projesi oluşturup bunu Apache ile ilişkilendirmeniz.

1. Edinmek:

Django, Apache ve mod_python üçlüsünü indirmemiz gerek. (Bu adımlar sadece Pardus içindir. Diğer dağıtımlar hakkında bir şey diyemeceğim.)

sudo pisi it Django apache mod_python

2. Django işine başlamak ve bitirmek:

Dikkat: Projeyi oluşturmadan önce lütfen django projenizi koyacağınız bir klasör oluşturun ki Apache’de sıkıntı yaşamayın.

Bir Django projesi oluşturmamız gerek.

django-manage.py startproject newsite

“/home/tdgunes/django/mysite”‘da duruyor diyelim.

Ve Django Test Sunucusu’nun çalışıp çalışmadığını kontrol edebilirsiniz..

python manage.py runserver

3.  Apache’yi Ayarlamak:

Konsola tek tek yazın:

cd /etc/apache2/modules.d/

sudo nano 16_mod_python.conf

Sonra alttakileri dosyanın en sonuna yazın.

<Location “/”>

SetHandler python-program

PythonHandler django.core.handlers.modpython

PythonPath “['/home/yourname/django/] + sys.path ”

SetEnv DJANGO_SETTINGS_MODULE newsite.settings

PythonDebug On

</Location>

4. Apache’yi çalıştırmak:

Yazın:

sudo service apache start

Her açılışta çalışmasını istiyorsanız:

sudo service apache on

ya da servis yöneticisinin plasmoidini kullanabilirsiniz.

Hepsi bu kadar. Tüm bu parçaları yerine koymak zordu fakat şu an bu yöntem ile sunucunuz sorunsuz bir şekilde çalışmalı.

27
Mar

Uğraştığım projelerimde genellikle yazdığım kütüphaneleri Python’un bulabilmesi bir zorluk haline geliyordu. Eğer  zorluk olmasın diye tüm kütüphanelerimi aynı klasöre atarsam o zaman da büyük bir karmaşa oluyordu. Ve karşıma “__init__.py” dosyası çıktı.

“__init__” adını Nesne Tabanlı Programlama yazımdan hatırlayacaksınız, orada bizim için nesnemizin parametrelerini tutan aynı zamanda belirlemeler yaptığımız bir tür içindekiler listesiydi. Şimdi ise “__init__.py” dosyası bizim için aynı işi görecek.

Diyelim ki ben matematik hesapları yaptırdığım bir projem var. Ve kütüphanelerim şöyle:

  • Kare için kare.py
  • Dikdörtgen içeren dikdortgen.py
  • Daire içeren daire.py
  • Küp içeren  kup.py
  • Prizmalar içeren prizma.py
  • Küre içeren kure.py

Ve biz elimizde bu tüm geometrik cisimleri 2 ve 3 boyut olmak üzere ayıralım. 2 boyutluları ikiboyut klasörüne koyalım, 3 boyutluları ucboyut klasörüne koyalım. Ve şimdi bu klasörlerin yanına “main.py”(başlangıç betiğimiz) oluşturduktan sonra dosyamızdan klasörlerden çağırmak için bu oluşturduğumuz iki klasörün içine “__init__.py” dosyayı oluşturalım ve içine hiçbir şey yazmalayalım.*

Şimdi main.py’dan “from ikiboyut.kup import *” ya da “import ucboyut.prizma as prizma” diyebiliriz. Böylece klasörlerin içinden kütüphanelerimizi rahatça çağırmış olduk.

Bu işin aynısını sys modülü ile yapabiliriz anca büyük bir karmaşa oluşabilir. Sys için ise “sys.path.append(os.getcwd()+”/ucboyut/”)” demeniz gerekiyor. Böylece başlangıç betiğiniz kütüphanelerinizi bulabilir.

Kısacası “__init__.py” ile klasörlerinizi bir kütüphane gibi düşünebilirsiniz. Kütüphanenin içindeki kütüphaneyi çağırıp, düzenli bir şekilde rahatça programınızı geliştirebilirsiniz.

Not*: Gördüğünüz üzere “__init__.py” dosyasını boş bıraktık. Eğer çok isterseniz belirlemelerinizi orada da yapabilirsiniz. “deneme = 10″ diyip, klasörün adından çağırdığınız da “import ucboyut.deneme as deneme”, “print deneme” size 10 diyerek geri dönecektir. İsterseniz nesne belirlemelerinizi de orada yapabilirsiniz.

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.

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.

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