cpanel eximstatsi otomatik bosaltmak – python

Eximstats tablonuz zaman zaman şişip, makinanızın diskinde gereksiz yer kaplıyorsa, aşağıdaki python kodu ile bu veritabanınızı boşaltabilirsiniz.
Bu dosyayı da cronjob’a eklerseniz, her gün otomatik olarak bu işlem gerçekleşmiş olur.

import MySQLdb as sql
import sys

connection = sql.connect('localhost','root','mysqlrootsifresi','eximstats')
cursor = connection.cursor()
cursor.execute("show tables")
result=cursor.fetchall()
for x in result:
        cursor.execute("truncate %s" % str(x[0]))

Not : python 2.4 üzerinde geliştirilmiştir. 2.7 de veya 3.x te çalışacğaının garantisini veremeyiz.
* python-mysql eklentsinin yüklenmiş olması gerekmektedir.

django Framework Nedir? Farkı Nedir?

Django; hızlı, temiz ve pragmatik tasarımı teşvik eden , üst seviye bir Python Web Framework’üdür. (Her frameworkun olduğu gibi esnekliğe performansa önem verdiğini iddia etmektedir, fakat bunu denemeden göremeyeceksiniz malesef).

Django , kendinizi tekrar etmeme prensiplerine (DRY – Dont repeat yourself) bağlı olarak, işlemleri olabildiğince otomatize etmeye odaklandır.

Bir yazılım frameworknden ne beklersiniz? İşte Django

İlişkisel nesne eşleştirmesi
Veri modellerinizi tamamen Pythonda tanımlayın. Zengin, dinamik veriatabanı erişimi API’si ni ücretsiz olarak alacaksınız 🙂 İstediğiniz yerde SQL de yazabilirsiniz tabi ki.

Otomatik Yönetim Arayüzü
Bir WEB projesi yönetim paneli olmadan genelde bir işe yaramıyor. Vaktinizi ve bu işe uğraşma maliyetlerinizi azaltın. ekleme, update etme gibi ihtiyaçlarınız için Django bunu otomatik olarak yapıyor. Kalkışa hazır!

Zarif URL tasarımı
URL’lerinizi herhangi bir sınır olmadan, istediğiniz güzellikte tasarlayın. İstediğiniz kadar esnek olabilirsiniz.

Şablon(template) Sistemi
Django’nun güçlü, geliştirilebilir ve tasarımcı dostu şablon dili ile içeriği , python kodlarını ve tasarımı birbirinden ayırın!

Önbellek sistemi
Memcached veya diğer cache frameworklerinden faydalanın! Elbet bir gün ihtiyacınız olacak çünkü…

Internationalization
Django, çoklu dil uygulamaları için tam destek sağlar. Dil’e özel işlevsellik de sağlar.

Okumaya devam etmek için lütfen Djangonun kendi sitesinden devam ediniz.

Google Appengine ile Proxy(vekil) sunucu oluşturma

Aslında Google üzerinde küçük bir arama ile nasıl proxy server kurulacağına dair bir sürü kaynak bulabilirsiniz. Ben bu yazıda google’ın appengine’ini kullanarak bir proxy (vekil) sunucu yapmaktan bahsediyorum. Bu sayede çok fazla teknik bilmeden de bu işi yapabileceksiniz. (sevmem bu deyimi ama neyse.. )

Google ile beleş bir proxy yapmaca

1. Adım: appengine.google.com sayfaınsa git ve Google hesabın ile giriş yap.

2. Adım: Create an Application (Uygulama oluştur) tuşuna bas. İlk defa yapıyorsanız, Google cep telefonunuza bir sms atacaktır, doğrulama yapabilmek için. Sms olarak gelen kodu da yazınca bu adım da tamamdır.

3. Adım: bir tane subdomain (altdomain) belirleyin ki, uygulamanıza erişebilin. Bu sizin aynı zamanda uygulama (Application) ID niz olacaktır.

4. Adım: Şimdi ID mizi ayırttırdık, proxy server uygulamamızı oluşturup Google a upload etmemiz gerekiyor. python.org a gidin ve , download the 2.6.4 , 2.7 gibi bir sürümü indirin. (3 lü bir sürüm olmasın). (İşletim sisteminiz ve bit desteğiniz neyse ona göre setup halinde olanını indirin. Windows için MSIInstall olanı indirin). İndirdikten sonra kurun. Klasik, ileri ileri…

5. Adım: Python yüklendiğinde, code.google.com a gidin ve “Google App Engine SDK for Python” (python uyumlu google app engine) i indirin ve yükleyin. Orada java uyumlu bilmemne uyumlu bir sürü appengine var, python uyumluyu indirip yükleyeceksiniz.

6. AdımBu zip dosyasını indirin ve masaüstünüze felan bir yere dosyaları çıkartın. Zipin içinde html ve python birkaç text dosyası felan var. (virüs taraması yapın yine de istiyorsanız 🙂 )

7. Adım: Google App Engine Launcher programını çalıştırın ve edit-> preferences menüleri altında gerekli bilgileri doğru olarak girin.

8. Adım. “File -> Add Existing Application” menüsü altından masaüstünüzdeki klasörü bulun. (6. adımda oluşturduğunuz) Edit tuşuna basın ve oradan Click File –> Add Existing Application  ı seçin. Edit tuşuna basıp APP_ID yazısını kendi uygulama ID ‘niz ile değiştirin (3. adımda yaptığınız).

9. Adım: Deploy tuşuna basın. Ve artık online proxy serveriniz kullanıma hazır! Buradan benim kendi yaptığım proxy server uygulamasına bakabilirsiniz : dubluve proxy server.

main.html yi kendi istekleriniz ölçüsünde düzenleyebilirsiniz. (bildiğiniz html.) Hatta ve hatta kodunuza analytics ve adsense bile koyabilirsiniz. uygulama şu anki haliyle herkese açık ama dilersniez bir kademe ekleyerek sadece googledan giriş yapmış kullanıcıların kullanmasını sağlayabilirsiniz.

Html dosyanda değişiklik yaptıysan tekrar deploy tuşuna basınız ki, değişiklikleriniz vuku bulusn 🙂

Proxy server , Mirrorr kodlarını kullanır, bu Brett Slatkin‘in bir açık-kaynak web önbellek projesidir.

Python Görüntü İşleme ve Düzgün Resim Küçültme Örneği

from PIL import Image

No module named PIL diye bir hata veriyorsa aşağıdaki şekilde python image kütüphanesini yükleyiniz. Kütüphaneyi yükleme ile değil de, doğrudan dosyaları kopyalarak sisteminize attıysanız alabilirsiniz. Kütüphanenin olduğu (PIL) dizinde çalışırsanız da hata almayaacksınız, çünkü python default olarak pythonu çalıştırdığınız dizini sys.patch e ekliyor. bu yüzden yine de aşağıdaki gibi yüklemenizde yarar var.

Yüklemek için;

sudo apt-get install python-imaging

apt-get yoksa;

yum install python-imaging

ile yükleyebilirsiniz.

Bir resim dosyası açın. tam yol girmeniz her zaman daha sağlıklı olur (.bmp,.jpg,.png,.gif)

imageFile = "/root/emre/snake.jpg"
imageObj = Image.open(imageFile)

Örnek bir resmi şu adresten indirebilirsiniz : snake.jpg

Resmin boyutlarını almak için .size diyoruz. bu bize 2 li bir dizi (array) döndürüyor.

data = imageObj.size
print "width(en) %s , height(boy) %s" %(data[0], data[1])

Bunları ileride kullanacaksak ayrı değişkene verebiliriz

imageWidth=data[0]
imageHeight=data[1]

Yeni en ve boy degerlerinin disaridan girilmesini isteyelim.

width = float(raw_input("En giriniz"))
height = float(raw_input("Boy giriniz"))

Aşağıda 4 farklı yeniden boyutlandırma algoritması var, 4 ü de resmi verilen boyutlarla yeniden boyutlandırıyor. Deneyip görebilirsiniz (algoritmaların türkçeleri biraz saçma oldu 🙂 )

im2 = imageObj.resize((int(width), int(height)), Image.NEAREST) # en yakın komşuluk metodu.
im3 = imageObj.resize((int(width), int(height)), Image.BILINEAR) # 2x2 lik ortamda lineer interpolasyon metodu
im4 = imageObj.resize((int(width), int(height)), Image.BICUBIC) # 4x4 ortamda Kübik interpolasyon metodu
im5 = imageObj.resize((int(width), int(height)), Image.ANTIALIAS) # aşağı ölçeklendirme filtreleme metodu (antialias)

Bu yeniden boyutlandırılmış resimleri çalıştığımız dizine kayıt edebiliriz.

im2.save("NEAREST.jpg")
im3.save("BILINEAR.jpg")
im4.save("BICUBIC.jpg")
im5.save("ANTIALIAS.jpg")

Resmin ilk hali üzerinden doğru ölçeklendirmek için bir resim algoritması aşağıdadır. Bu resmi eğip büzmez mevcut oranları korur, eski resmi girilen en boy oranları şeklindeki bir hayali diktörgenin içine sığdırır. Çarpma bölme ve oran işlemleri için float değerlere ihtiyacımız olduğundan integer olabeilcek verileri float() tan geçirmeyi unutmuyoruz.

if imageWidth>width or imageHeight > height :
	if imageWidth > imageHeight :
		finalWidth = width
		percent = float(width)/float(imageWidth)
		finalHeight = float(percent) * float(imageHeight)
	elif imageHeight >= imageWidth :
		finalHeight = height
		percent = float(height)/float(imageHeight)
		finalWidth = float(percent) * float(imageWidth)
elif imageWidth < = width and imageHeight < = height : 
	finalWidth = imageWidth
	finalHeight = imageHeight

Resim objesi resize işleminde integer değer aldığından oluştururken float olan verileri int() ten geçiriyoruz ve resmi kaydediyoruz.

print "yeni boyutlar %s %s" % (finalWidth,finalHeight)
newImage = imageObj.resize((int(finalWidth),int(finalHeight)), Image.NEAREST)
newImage.save("newImage.jpg")

Python dikkat edilmesi gerekenler

Python güzel ve kullanımı kolay post modern diyebileceğim bir dil. Fakat şu konularda kodunuzu yazarken 5-10 kere daha düşünerek yazın diyor ve maddelemeye başlıyorum.

Ne Açıyorsanız Onu Kapayın!

Programın içinde kullanacağınız bir dosya içeriği var diyelim. Ne yaparız normalde, açarız dosyayı okuruz. Bu noktada kapatmaya özel dikkat. Tutarsız bir şekilde ne olduğunu anlamadan başınıza bişeyler gelebilir, başka bir değişken için ya aynı dosyayı okuyamazsınız, ya aynı değişkene başka bişiler yapamazsınız vb..

fileHandler = open("/usr/deneme.log", "r")
content = sqlFileHandler.read()
fileHandler.close()

MysqlDb ile ilgili

import MySQLdb as sql

diye import ettiğimiz python mysql kütüphanesinde,

db = sql.connect(.....

dedikten sonra,

c = db.cursor();

diyoruz. Burada istediğimz bir query yi

c.execute('select * from biseybisey where a=3')

diye yazabilirken, DELETE ile ilgili bir query yazdığımızda

c.commit();

yazmazsanız, o delete querysi çalışmıyor. Eğer ki bir dosya içindeki bazı queryleri sırayla çalıştırıyorsanız, bu noktada en sondaki queryniz DELETE ise çalışamyacağını berlitmek isterim (Python 2.4) Ama delete den sonra başka bir query var ise, o query sayesinde sanırım kendiliğinden commit ediyor.

C ile işiniz bittikten sonra

db.close();

demeyi de unutmayın. Açık kalmasın, saçmalar yine bişeyler olur. belli mi olur. (biraz gerginim, dün bayağı bi canımız yandı da.)

Try Except (Yani Try Catch) Kullanın!

Pythonda herşeyi try catch bloklarına koyarsanız mantıklı olur.
Kullanımı şöyle :

try:
	f = open("/usr/deneme/dosya.log", "a")
	f.write("yazilacak icerik burada\n")
	f.close()
except OSError, strerror:
	print "LOG HATA: " + strerror

Son Olarak Birkaç Tavsiye.

Python güzel bir dil fakat 2.5 ü , 2.7 si 3 ü, hepsi ayrı telden çalıyor. Bu da kişinin hem kafasını karıştırıyor, hem de yaptığı bir şeyden emin olamamasına sebep oluyor. Canınızı sıkabiliyor bu da. Yapmış olduğunuz programı özellikle python için diyorum, mutlaka object oriented yapın. Herkesin yaptığı iş belil olsun ve net o işi yapsın. Kodları çok refactor etmeyin, testlerden sonra çalışan kod doğruca çalışsın. (Fakat yine de bu neden çalışmıyor sorusuna, e bu çalışıyordu ne oldu??? diye soruyla karşılık verebilirsiniz. Biz yaşadık.)