« Posts tagged Python

Python ile loglama…

Yazmış olduğunuz python uygulamanızın çeşitli log mesajları üretmesine ve bunun bir dosya içerisinde tutulmasına ihtiyaç duyabilirsiniz.

Bu işlem için syslog veya logging modüllerinden birini kullanabilirsiniz. Ben logging modülünü kullanarak bir örnek göstereceğim.

Python uygulamanızda “logging” modülünü kullanmanız için bu modülü import etmeniz gerekiyor.

Basitçe bir örnek ile logging modülünün kullanımı şu şekilde:

Python
# Logging modülünü import ediyoruz
import logging 
 
# logger adında bir log değişkeni oluşturuyoruz
logger = loogging.getLogger() 
 
# loglayıcımız için minimum log seviyesini belirtiyoruz.
logger.setLevel(logging.INFO) 
 
# handler adında /home/ozgur/deneme.log dosyasını kullanıcak bir handler oluşturuyoruz
handler = logging.FileHandler('/home/ozgur/deneme.log') 
 
#logger'a handlerımızı ekliyoruz
logger.addHandler(handler)
 
#ornek error mesajı
logger.error("error message")
 
#ornek info mesajı
logger.info("info message")
 
#ornek info mesajı
logger.warning("warning message")

Bu şekilde basitçe loglama yapmış olduk. Scripti çalıştırıp belirtmiş olduğunuz log dosyasının içeriğine baktığınızda:

error message
info message
warning message

yazdığını göreceksiniz.

Bu şekilde basitçe bir loglama işlevi oluşturmuş olduk…

Django ile proje oluşturmak…

Yeni yeni django ile ilgilenmeye başladım. İlk bir kaç adımı yapıp, bu adımları iyice anladıktan sonra sıcağı sıcağına yazmak istedim.

İlk olarak sistemimizde python ve django kurulu olduğunu kontrol edelim; yapmamız gereken komut satırına python yazıp enter ile giriş yapmak. Daha sonra sırasıyla:

import django
django.VERSION

komutlarını vererek django kurulumunu kontrol ediyoruz. Ekrana sistemimizde kurulu olan Django versiyonu çıkacaktır.

Gelelim django ile ilk projemizi oluşturmaya. Bu noktada bir şey söylemek istiyorum, django ile sayfalarınızı localhost, htdocs ve benzeri gibi bilinen yerlerde tutmanıza gerek yok :) . Bu yapısı ile güvenlik bir nebze daha artmış oluyor. Dış dünyadakiler dosyalarımızın nerede saklandığını bilemeyecekler :)

Şimdi istediğiniz bir yere bir dizin oluşturup o dizinin içerisinde konsole girişi yapıyoruz. Ben örnek olarak /home/kadim/djangoprojem şeklinde bir dizin oluşturdum. Bu dizinin içerisinde;

python /usr/lib/python2.5/site-packages/dajngo/bin/django-admin.py startproject projeadimiz

şeklinde kodumuzu giriyoruz. Burada “django-admin.py” yolunu kendi sistemimize göre veriyoruz (benim verdiğim yol Pardus 2008.2 için geçerlidir). “Projeadimiz” yerinede kendi projemiz için seçtiğimiz ismi giriyoruz. Ben “yeni” isimli bir proje oluşturdum.

Bu komudu verdiğimiz zaman şu şekilde bir yapı olşması gerekiyor:

`– yeni
|– __init__.py
|– manage.py
|– settings.py
`– urls.py

Bu görüntüyü “sudo pisi it tree” komutu ile yüklediğim “tree” uygulaması ile aldım. Bu yapıdaki dosyalardan kısaca bahsedelim.

__init__.py => Bu dosya python tarafından kullanılır ve python’un “yeni” projesini paket olarak görmesini sağlar. Boş bir dosyadır ve değiştirmeniz gerekmez.

manage.py => Bu dosya python ile kullanabileceğimiz bir araçtır. Örneğin geliştirme sunucusunu çalıştırmak için “python manage.py runserver” komutunu kullanırız. “python manage.py –help” komutu ile bu dosya aracılığıyla yapabileceğiniz opsiyonlar listelenir.

settings.py => Projemiz ile ilgili ayarları yaptığımız dosya. Bu dosya içerisinde veri tabanı, yönetim paneli adresi gibi ayarları yapıyoruz.

urls.py => Bu dosya içerisinde projemizin URL adreslerini belirliyoruz.

Şimdi otomatik olarak oluşmayan ve bizim oluşturmamız gereken bir dosya daha var “views.py”. Bu dosya içerisinde fonksiyonlarımızı yazacağız.

Ekrana “Merhaba Dünya” yazarak bu anlattıklarımızı uygulamaya koyalım. (Merhaba dünya örneğini sevmeyen arkadaşlarımızdan özür diliyorum :) ).

views.py içeriğimiz:

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

from django.http import HttpResponse
def merhaba(request):
return HttpResponse(“Merhaba Dünya”)

İlk iki satır eğer konsolda “vi views.py” komutu ile vi editörü aracılığıyla oluşturursanız otomatik gelecektir. “from django.http import HttpResponse” satırı ile django’dan “HttpResponse” kütüphanesini çağırıyoruz. “def merhaba(request):” satırı ile “merhaba” adında bir fonksiyon oluşturuyoruz. Bu fonksiyonumuzun içerisinde “return HttpResponse(“Merhaba Dünya”)” satırı ile ekrana “Merhaba Dünya” yazdırıyoruz. “views.py” dosyamızı bu şekilde oluşturduktan sonra kaydediyoruz.

Ama henüz işlem bitmedi. Şimdi kullandığımız editör aracılığı ile “urls.py” dosyamızı açıyoruz.

from django.conf.urls.defaults import *
from yeni.views import merhaba

urlpatterns = patterns(”,
(‘^merhaba/$’, merhaba),
)

Sizin “urls.py” içeriğiniz bu şekilde olmayabilir. Fakat başında # işareti olan satırlar yorum olarak algılanır ve işleme girmez ben bu satırları buraya yazmadım. Dosyamızı yukarıda ki gibi düzenliyoruz. (Yorum satırlarını silmenize gerek yok). “from yeni.views import merhaba” satırı ile “views.py” dosyamızda hazırladığımız “merhaba” fonksiyonunu çağırıyoruz. “(‘^merhaba/$’, merhaba)” kodu ile “localhost:8000/merhaba” sayfası ile bu fonksiyonumuzu çalıştıracağımızı belirtiyoruz. Bu komutu biraz açacak olursak.

‘^merhaba/$’ => Bu girdi ile site adresimizden sonra hangi isim ile çağıracağımızı belirtiyoruz. Bu girdi için; localhost:8000/merhaba şeklinde bir url olacak.

Daha sonra virgül koyup hemen ardına çağıracağımız fonksiyonun ismini yazıyoruz -”merhaba”-. Bu işlemi yaptıktan sonra dosyamızı kaydediyoruz.

Yaptığımız uygulamayı çalıştırmak için yine proje dizinimize giriyoruz ve:

python manage.py runserver

komutu ile geliştirme sunucusunu çalıştırıyoruz. Hemen ardından tarayıcımız ile “localhost:8000/merhaba” adresine girerek sonucu görebiliriz.

Pardus üzerinde django çalışmak….

Sevgili Gökmen Görgen’in katkıları ile artık bilgisayarımda django ile çalışmaya başladım. Oldukça kolay bir yapısı varmış. Sanrım bir süre sonra yaptığım uygulamaların bir kısmını django çatısı altında yapmaya başlayacağım. Meraklısı için paket yöneticisinden django kurmanız yeterli. Geri kalan internette araştırma yapmaya kalıyor…

Konsol ekranında python yazıp pythonu başlattığınızda import django komutunu verip ardından django.VERSION komutunu vermeniz durumunda django sürüm bilgisine ulaşabilir, böylece sistemde kurulu olduğunu görebilirsiniz….

Şimdilik bu kadar. Şuan yaptığım her adımı defterime not alıyorum, düzenleyip yine buradan yayınlayacağım.

Bir karar anı…

Yaklaşık 2005 yılından beri PHP ile uğraşmaktayım. Son dönemlerde özellikle Ekip projesi ile birlikte PHP dilinde büyük adımlar attım. Fakat Ekip projesi sürecinde şu soru hep beynimi kemirdi durdu. Acaba PHP bu ve benzeri projeler için yeterli bir güç müydü? Aslında bu soru daha öncesinde kafamın içerisinde yer edinmiş olacak ki (ben hatırlayamıyorum şuan için) zamanında perl, python, cgi ile ilgili ve hiç açmamış olduğum kitaplar satın almışım. Gerçi python kitabında for döngüsü için “başınızın dönmesi gibi bir şey” ifadesini gördüğümde kitabı kaldırıp rafa koydum. Neyse bir kaç Perl denemem ve araştırmam sonucunda Perl’ün benim isteklerimi karşılayamayacağı kanısına vardım. Ve hep korkulu rüyam olmuş olan Java seçenekler arasına dahil oldu bir şekilde. Aslında lise dönemimden beri Javayı öğrenmek istiyorum fakat hep kaçıyordum. Son üç, dört aydır Python ve Java arasında değim yerindeyse gittim, gittim geldim. En sonunda şöyle bir yol izlemeye karar verdim. Python ile Java dillerini hangi amaçlarda kullanabilirdim sorusuna cevap aradım ve bu cevapları listeledim. Sonuçta ortaya şöyle bir manzara çıktı. Java ile ticari anlamda yazılım geliştirmeleri yapabilirdim (ee herkesin para kazanmaya ihtiyacı vardır değil mi?). Bunları Python ilede yapabilirdim ama Python’un kullanım alanı sektör açısından kısıtlı gibi duruyor. Madalyonun öbür yüzü olan Python tarafından bakınca, Pardus üzerinde geliştirme yapabilecektim. Çünkü Pardus’un bir çok aracı Python ile geliştirilmekte. Sonuç olarak şöyle bir yol çizdim. Java ile geliştirmelerimi yapacak, boş vakitlerimde Python ile vakit geçirerek bu dilide öğrenmeye çabalayacağım. Böylece hem hayatımı idame etme şansım daha yüksek olacak hem de Pardus’a ileride programlama anlamında katkı sağlayabileceğim. Yoğun bir süreç olacak bir tarafta zorlu Java bir tarafta Python… Sanırım bir süre sonra güzel şeyler çıkacak ortaya.

Ekip yol haritası.

Bu gün itibari ile Ekip sürüm 1, IG Group sunucularında koşmaya başladı. Yapılan son denemeler ve düzenlemelerin ardından, işleyiş olarak tüm eksiklikler giderilmiş oldu. Tabi geliştirmelere tüm hızımızla devam edeceğiz. Yatmadan önce birazcık daha çalışıp, Ekip projesi eksikliklerini ve olması gereken işlevleri bir kağıda döktüm. Ve bu bilgiler doğrultusunda tarihsel olmasada sürüm olarak bir yol haritası oluşturdum. Bu proje benim aynı zamanda staj ödevim olarakta olduğu için ayır bir önemi var benim için. Sanırım bu yüzden üzerine bu kadar çok düşüyorum. Gerçi staj ödevi olarak verdiğim hali ile şuan ki hali arasında dağlar kadar fark var. Neyse çok uzatmadan proje ile ilgili planlarımdan bahsedeyim biraz.

Ekip projesi, basit anlamda bir stok takip sistemi olarak görünebilir. Fakat stok takipten çok daha fazlasını gerektiren bir çalışma. Temel olarak çeştili iletişim santrallerinde kullanılan kartlara ilişkin işlem bilgilerini tutan bir uygulama. Karşılıklı kart borçları, laboratuvar durumları, yurt dışı arıza durmları gibi bir çok işlemi gerçekleştirdiğiniz uygulama büyük bir iş yükünü ortadan kaldırmayı amaçlıyor. Åžuan için genel anlamda gereken herşeyi yapıyor fakat tabiki eksiklikler ve olması gereken bir çok şey var.

Sürüm 1.5 ile çeşitli çıktıların renklendirilmesi, yapının daha modüler bir hal alması, depolara daha fazla işlevsellik katılması gibi ufak eklenti ve değişiklikler olacak. Bir nevi sürüm 2 için ön hazırlıkta diyebiliriz. Tabi buda şu anlama geliyor 1.5 yakın zamanda çalışmaya başlayacak.

Sürüm 2 ile birlikte bir çok yenilik olacak. Öncelikle mevcut ara yüz tamamı ile yeniden tasarlanacak. Ekranın daha etkin kullanımı sağlanacak. Son yapılan denemelerde bilgi girildikçe uzayan sayfalar oldukça can sıkıcı bir görüntüye sahip oluyor. Bunun ardından şuanda ekrana yansımayan istatistikler ana ekranda gözükecek. Åžirket deposunda kaç adet kart var, sahalarda kaç adet kart var gibisinden sayısal bilgi amaçlı ekranlar olacak. Ayrıca şuan tutulmayan, kullanıcı kayıtları tutulacak. Böylece hangi kullanıcının hangi işlemi yaptığı görülebilecek. Raporlar hesap tablosu olarak bilgisayara kaydedilebilecek. Åžuan için sadece tarayıcı aracılığı ile çıktı alınması sağlanıyor. Alarm seviyeleri gibi ince ayarların yapılması mümkün olacak (bu çok gerekli bir işlev değil fakat olmasında yarar var:)). En önemli değişiklikler ise, Yedekleme ve Güncelleme sistemlerinin dahil edilmesi olacak. Åžuan yedeklemeler cron işlemi ile yapılmakta. Güncellemeleri ise her dosyanın md5 toplamlarının karşılaştırılması ile gerçekleşecek(şuan için üzerinde çalıştığım düşünce bu). Åžuan ki sistemde aşırı derecede include edilmiş sayfalar çalışmakta. Zaman içerisinde bunların ne kadar can sıkıcı olduğunu gördüm. Sürüm 2 de ise sık kullanılan işlevler fonksiyon olarak bir dosyada tanımlanacak ve sadece o dosya include edilip fonksiyonların çağrılması sağlanacak. Bu şekilde daha modüler bir yapı oluşturabileceğimi düşünüyorum. Genel olarak sürüm 2 için planlarım bunlar.

Bunların dışında sürüm 2 çalışmaya başladıktan sonra ufak tefek güncellemeler yapmayı planlıyorum. İlk etapta raporların hem hesap tablosu hem de PDF olarak alınmasını sağlamaya çalışacağım. Ayrıca bu raporların sunucu tarafında tutulmasını isteğe bağlı olarak yapacak ve böylece eski raporlara erişimin sağlanmasını kolaylaştıracağım. Tabi birde yardım sayfalarını artık hazırlamam gerekecek sanırım:). Åžuan yarı otomatik olarak çalışan borç sistemini tam anlamıyla otomatikleştirmek için çabalayacağım, umarım başarılı olabilirim. Ve bunun gibi bir çok iyileştirme çalışmaları yapılacak. Bu süre zarfında çalışan Ekip uygulamasınında eksikliklerini görüp o eksikliklere uygun güncellemelerde olacaktır tabi.

Ama esas beni heyecanlandıran sürüm 3 olacak. Çünkü sürüm 3 ile birlikte artık PHP yerine Python kullanmayı, bir kurucu tasarlamayı ve django çatısı kullanmayı planlıyorum. Tabi tek değişiklik programlama dilinde olmayacak. Veri tabanı desteği arasına PostgreSQL’i de eklemeyi düşünüyorum. Tabi sürüm 3ün Python ile hazırlayacağım kurucu vasıtasıyla kurulması söz konusu olacak. Kurulum esnasında kullanıcıya kullanmak istediği veri tabanı sunucusu tercihi yapılacak. Birde kullanmak istediği alt yapı. Yani kurulum ile birlikte, kullanıcı PHP, Python veya her ikisiyle birlikte çalışabilecek şekilde kurulum yapabilecek.

Tabi bunların hepsini Pardus kullanarak yapacağım. Özgür yazılım felsefesine uygun bir geliştirme yapmaya çalışacağım. Sanırım Ekip uygulamasını daha elle tutulur bir hale getirinde bir özgür yazılım olma yolunda en büyük adımı atmış olacak.

Åžimdi bu kadar yazdım da hayaller ne kadar güzel diye bir düşünce belirdi kafamda. Gelecek ile ilgili planlarımın biraz zorlayıcı ve yorucu olduğunun farkındayım. Fakat ter akıtmadan başarı olur mu? Orası ayrı bir soru işareti. Çalışarak ve sabrederek herşeyin olabileceğine inanarak yazımı bitirmek istiyorum. Bu kadar uzun bir yazıyı sabredip okuyan herkese teşekkür ederim:)

Bir PHP projesi serüveni…

2005 yılından beri PHP ile ilgileniyorum. Fakat bu proje için ilk “<?php” tagini ne zaman yazdım tam olarak hatırlayamıyorum. Fakat sanırım 2008 Ağustos başıydı. Merkezi Ostimde bulunan IG Group firması için bir işlem takip veri tabanı uygulaması yapılacaktı. Tabi projeye ilk adım olarak PHP ve MySQL tercihlerini yaptım. İlk arayüz, tabloların oluşturulması, kodlar, formlar, çerezler derken koskoca beş ay bitmiş ve altıncı aya girmişiz. Son gelinen nokta aslında oldukça iyi ve gayet başarılı. Elektronik Kart İşlem Takip Programı (EKİP) adı verdiğimiz bu uygulama şuan gerçekten istenilen işleri sağlam bir şekilde yerine getirmekte. Tabi henüz aktif olarak kullanılmaya başlanmadı. Planımız 1 Ocak itibari ile aktif olarak kullanmaya yönelikti fakat sistemde çıkan bir kaç eksiklik, yılbaşı telaşı gibi sebeplerden uzadı. Sanırım artık 9 Ocak tarihine kadar aktif olarak kullanılmaya başlanacağı gözüyle bakıyoruz. Son gelinen durumla birlikte, bir kaç iyileştirme çalışması kaldı diyebilirim. Uygulamanın iyileştirmeleri ve güncelleştirmeleri tabiki devam edecek zaman içerisinde. Fakat artık ortada somut olarak çalışan, raporlar veren, depo kontrolü yapabilen bir veri tabanı uygulaması var.Sürüm olaraksa EKİP 1.0 diyebiliriz.

»Read More

Özgür Kuru is Stephen Fry proof thanks to caching by WP Super Cache