Firefox'a Jabber, MSN, ICQ ve GTalk istemcisi eklemek için güzel bir yol SamePlace eklentisi, ayrıca SamePlace'in kendi sunucusu aynı zamanda bir MSN ağgeçidi.
http://www.sameplace.cc/
26 Eylül 2008 Cuma
25 Eylül 2008 Perşembe
Django'da url ile dans
Önceki yazıda Django ile veritabanı kullanımı örneği yapacağımı yazmıştım ama url adresleri ile oynarken çok eğlenceli şeyler çıktı ortaya yazmadan edemedim.
Önceki örnekteki urlpatterns listemiz aşağıdaki gibiydi;
Buradaki ilk değerin boş olduğunu görüyorsunuz, bu değeri ihtiyaç halinde ön-ek (prefix) olarak kullanabilirsiniz. Şöyle;
Peki şöyle bir import yazdıysak?
Bu r'^$' ifadesinde önceki örnekten farklı olarak bir "r" ekledim, bu zorunlu olmasada Python'a bu ifadenin string değil raw olduğunu anlatıyor ve kullanılması iyi olur.
Ayrıca Python'un 255 karakterlik bir fonksiyon arguman limiti var, yani büyük bir sitenin patterns() listesi büyük boyutlara ulaştığında yukarıdaki yöntem kullanılabilir.
Şimdi "/pardus/2008/1" adresini yazacağım pardussurumleri() fonksiyonu ile oluşturmak istiyorum. Bunun için yeni bir pardus.py dosyası açıp şu şekilde yazdım;
Düzenli ifadede olarak kısaca "pardus/", 4 haneli sayı, "/" ve bir haneli sayı tanımı yapıyoruz.
Peki fonksiyon tanımını şu şekilde yaptığımızı farz edelim;
Bu durumda "/pardus/2008/1" url adresi sonucunda Pardus 1.2008 gibi bir çıktı alırız, ancak aşağıdaki gibi bir pattern tanımı yaparsak fonksiyonumuz pardussurumleri(request, version="2008", subversion="1") olarak çağırılacak.
Bunun ışığında /pardus20081 url adresi için şöyle bir ifade kullanılabilir.
Eğer henüz test aşamasındaki bir sürüm için kullanılacak bir url için "/pardus2009test" yerine "/pardus2009" kullanmak istersek pattern ile fonksiyona sabit bir değer geçirebiliriz.
Önceki örnekteki urlpatterns listemiz aşağıdaki gibiydi;
from deneme.dersler import dersindex, ders1, ders2
urlpatterns = patterns('',
('^$', dersindex),
('bolum1', ders1),
('bolum2', ders2),
)
Buradaki ilk değerin boş olduğunu görüyorsunuz, bu değeri ihtiyaç halinde ön-ek (prefix) olarak kullanabilirsiniz. Şöyle;
from deneme.dersler import *
urlpatterns = patterns('deneme.dersler',
('^$', dersindex),
('bolum1', ders1),
('bolum2', ders2),
)
Peki şöyle bir import yazdıysak?
from deneme.dersler import *
from deneme.makale import *
#Şöyle
urlpatterns = patterns('deneme.dersler',
(r'^$', dersindex),
)
urlpatterns += patterns('deneme.makale',
(r'^$', makaleindex),
)
Bu r'^$' ifadesinde önceki örnekten farklı olarak bir "r" ekledim, bu zorunlu olmasada Python'a bu ifadenin string değil raw olduğunu anlatıyor ve kullanılması iyi olur.
Ayrıca Python'un 255 karakterlik bir fonksiyon arguman limiti var, yani büyük bir sitenin patterns() listesi büyük boyutlara ulaştığında yukarıdaki yöntem kullanılabilir.
Şimdi "/pardus/2008/1" adresini yazacağım pardussurumleri() fonksiyonu ile oluşturmak istiyorum. Bunun için yeni bir pardus.py dosyası açıp şu şekilde yazdım;
# -*- coding: utf-8 -*-
from django.http import HttpResponse
def pardussurumleri(request, version, subversion):
html = "Pardus "+version+"."+subversion
return HttpResponse(html)
Düzenli ifadede olarak kısaca "pardus/", 4 haneli sayı, "/" ve bir haneli sayı tanımı yapıyoruz.
urlpatterns += patterns('deneme.pardus',
(r'^pardus/(\d{4})/(\d{1})/$', pardussurumleri),
)
Peki fonksiyon tanımını şu şekilde yaptığımızı farz edelim;
def pardussurumleri(request, subversion, version):
Bu durumda "/pardus/2008/1" url adresi sonucunda Pardus 1.2008 gibi bir çıktı alırız, ancak aşağıdaki gibi bir pattern tanımı yaparsak fonksiyonumuz pardussurumleri(request, version="2008", subversion="1") olarak çağırılacak.
urlpatterns += patterns('deneme.pardus',
(r'^pardus/(?P<version>\d{4})/(?P<subversion>\d{1})/$', pardussurumleri),
)
Bunun ışığında /pardus20081 url adresi için şöyle bir ifade kullanılabilir.
r'^pardus(?P<version>\d{4})(?P<subversion>\d{1})/$'
Eğer henüz test aşamasındaki bir sürüm için kullanılacak bir url için "/pardus2009test" yerine "/pardus2009" kullanmak istersek pattern ile fonksiyona sabit bir değer geçirebiliriz.
(r'^pardus(?P<version>\d{4})/$', pardussurumleri, {'subversion' : 'test'})
23 Eylül 2008 Salı
Django için paçaları sıvadım
Bende sonunda eğlenceyi doruklarda yaşamak için Django ile "Selam cümlet-ül alemin" (Hello world) dedim. Linus'un Linux 1.0 duyurusunu yaptığı sıralarda (tabii 2 yıl öncesine kadar bundan haberim yoktu) ben bir Apple makinasındaki GWBasic ile "hello world" yazmanın heyecanını yaşayan bir gençtim. O gün bu gündür ne zaman yeni bir "hello world" yapsam hep aynı heyecanı duyuyorum. Bu arada "hello world yapmak" diye bir deyimi ilk kullanan kişiyim herhalde.
Her neyse, bu yazı öyle geyik bir yazı olmasın bir işe yarasın, diye neler yaptığımı anlatayım.
Django 1.0'ı Pardus'da kurmak için "sudo pisi it Django" komutu veya Paket Yöneticisinden tıklamanız yeterli.
Daha sonra projeler için bir klasör açmanız iyi olur, ben ev dizininde django adında bir klasör açtım, konqueror ile bu dizine girip F4 tuşuna basarak konsolu açın ve ilk projenizi aşağıdaki komut ile oluşturun.
django-admin.py startproject deneme
Django bu komutla deneme adında bir dizin oluşturacak ve proje için gerekli temel dosyaları buraya yazacaktır. Proje henüz boş ancak çalışıp çalışmadığını aşağıdaki komutla hemen test edebilirsiniz.
python manage.py runserver
Bu komutu deneme dizininde vermelisiniz, çünkü manage.py orada. Komut çıktısından anlayacağınız gibi tarayıcınızın http://127.0.0.1:8000 adresinden projenizi görüntüleyebilirsiniz. Kocaman bir "It worked" yazısı görmüş olmalısınız. Evet şimdi kendi kodlarımızı yazalım;
deneme Dizini altında "dersler.py" adında bir dosya oluşturun, içeriği şöyle;
Bu üç fonksiyonun ortak özelliklerine dikkat edin, parametre olarak "request" alıyorlar ve HttpResponse ile değer döndürüyorlar. Buradaki her bir forksiyonun yaptığı sadece sayfanın içeriğni oluşturmak. dersindex Fonksiyonunudaki HTML kodlarına bakarsanız /bolum1 ve /bolum2 dizinlerine bağlantı verildiğini görüyorsunuz, ancak projemizde böyle bir dizin açmadık, şimdi anladığınız üzere ders1 ve ders2 diye iki fonksiyonumuz var ve bu url adreslerini bu fonksiyonlara bağlamamız gerekiyor. Bunu da Django'nun oluşturduğu urls.py dosyasından yapıyoruz. Bu dosyayı şöyle düzenledim;
Böylece patterns fonksiyonundaki parametreler ile sitemizin /bolum1 adresi çağırıldığında ders1 forksiyonunun çalışmasını sağlamış oluyoruz. Bu url adreslerinde '^$' gibi düzenli ifadeler kullanılabiliyor, bunula ilgili http://pythontr.blogspot.com/2008/09/dzenli-ifadelelerde-kullanlan.html adresinden bilgi alabilirsiniz.
Merak etmeyin Django ile veritabanı kullanmak en az bu örnek kadar basit :) Bir sonraki örnekte ona bakarız.
Her neyse, bu yazı öyle geyik bir yazı olmasın bir işe yarasın, diye neler yaptığımı anlatayım.
Django 1.0'ı Pardus'da kurmak için "sudo pisi it Django" komutu veya Paket Yöneticisinden tıklamanız yeterli.
Daha sonra projeler için bir klasör açmanız iyi olur, ben ev dizininde django adında bir klasör açtım, konqueror ile bu dizine girip F4 tuşuna basarak konsolu açın ve ilk projenizi aşağıdaki komut ile oluşturun.
django-admin.py startproject deneme
Django bu komutla deneme adında bir dizin oluşturacak ve proje için gerekli temel dosyaları buraya yazacaktır. Proje henüz boş ancak çalışıp çalışmadığını aşağıdaki komutla hemen test edebilirsiniz.
python manage.py runserver
Bu komutu deneme dizininde vermelisiniz, çünkü manage.py orada. Komut çıktısından anlayacağınız gibi tarayıcınızın http://127.0.0.1:8000 adresinden projenizi görüntüleyebilirsiniz. Kocaman bir "It worked" yazısı görmüş olmalısınız. Evet şimdi kendi kodlarımızı yazalım;
deneme Dizini altında "dersler.py" adında bir dosya oluşturun, içeriği şöyle;
# -*- coding: utf-8 -*-
#Üst satır Türkçe karakterler için
#Django kütüphanesinden bir işlev ekliyoruz
from django.http import HttpResponse
#Bu fonksiyon sitemizin indeks sayfasını oluşturacak
def dersindex(request):
html = "<a href='bolum1'>Bölüm 1</a><br>"
html += "<a href='bolum2'>Bölüm 2</a><br>"
return HttpResponse(html)
#Bu fonksiyon da başka bir sayfa
def ders1(request):
msg = "Django mu? o da ne?"
return HttpResponse(msg)
#Bir başkası
def ders2(request):
msg = "Django Reinhardt ünlü bir gitaristtir."
return HttpResponse(msg)
Bu üç fonksiyonun ortak özelliklerine dikkat edin, parametre olarak "request" alıyorlar ve HttpResponse ile değer döndürüyorlar. Buradaki her bir forksiyonun yaptığı sadece sayfanın içeriğni oluşturmak. dersindex Fonksiyonunudaki HTML kodlarına bakarsanız /bolum1 ve /bolum2 dizinlerine bağlantı verildiğini görüyorsunuz, ancak projemizde böyle bir dizin açmadık, şimdi anladığınız üzere ders1 ve ders2 diye iki fonksiyonumuz var ve bu url adreslerini bu fonksiyonlara bağlamamız gerekiyor. Bunu da Django'nun oluşturduğu urls.py dosyasından yapıyoruz. Bu dosyayı şöyle düzenledim;
# -*- coding: utf-8 -*-
#Bunu ben ekledim
from django.conf.urls.defaults import *
#Bunu da ben ekledim, yazdığımız fonksiyonları projeye ekliyoruz
from deneme.dersler import dersindex, ders1, ders2
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns( '',
('^$', dersindex),
('bolum1', ders1),
('bolum2', ders2),
)
Böylece patterns fonksiyonundaki parametreler ile sitemizin /bolum1 adresi çağırıldığında ders1 forksiyonunun çalışmasını sağlamış oluyoruz. Bu url adreslerinde '^$' gibi düzenli ifadeler kullanılabiliyor, bunula ilgili http://pythontr.blogspot.com/2008/09/dzenli-ifadelelerde-kullanlan.html adresinden bilgi alabilirsiniz.
Merak etmeyin Django ile veritabanı kullanmak en az bu örnek kadar basit :) Bir sonraki örnekte ona bakarız.
20 Eylül 2008 Cumartesi
Pardus sipariş hattı
Bugün şöyle bir e-posta aldım;
"Acaba bana ücretsiz pardus cdsi bıraka bilirmisiniz adres:..... lütfen posta kutuma atın"
Sonra aklımdan şunları yazmak geçti;
-Olmaz, imza karşılığı teslim ediyoruz, evde yoksanız ihbar mektubu bırakırım, gelir benden alırsınız.
-Ücretsiz dediysek ortalık malı değil öyle posta kutusuna at git, teslimatı ikimiz yalnızken yapmalıyım, gece yarısı havaalanı köprüsünün altına gelin, kimsenin sizi takip etmediğinden emin olun, sizi uzaktan izliyor olacağım...
-Biz öle her isteyene CD vermeyiz deliganlı, önce kimsin kimledensin, ne iş yapasın, ailen nasıl tanınır bi öğrenelim, yeni işletim sistemi gurmak sorumluluk ister özveri ister, biz gül gibi yetiştirdik onu, Pardusumuza eyi bakabilcenmi bakem, haa?!...
-Hay hay beyefendi, isterseniz hediye paketi de yapıyoruz, ayrıca Ramazan boyunca kurulan CD yanında KDE4 çalışan CD hediye!!, üstelik 5 CD ve üzerindeki siparişlerinizde %5 ttnet kotası kazanma şansı, daha bitmedi yapılacak çekilişle....
16 Eylül 2008 Salı
4. Antalya Linux Kullanıcıları Toplantısı
Güzel ve önceki toplantılara nazaran kalabalık bir toplantı oldu, ben 10 kişi saydım. Deniz, Üniversitenin kablosuz internetinden Pardus güncellemesini yapıp 2008.1 indirmeye çalıştı. Akdeniz Üniversitesinin akademik ve idari olarak özgür yazılımlara hiçbir yakınlığının olmadığını öğrenci arkadaşlardan bir kez daha öğrendik, bu nedenle olsa gerek özgür yazılımlara ilgi duyan öğrenci sayısı da pek fazla değil, ancak Ziraat Mühendisliğinden katılan arkadaşlar oldu. Ben her yerde üniversitenin desteği olmadan özgür yazılımlara olan ilginin ve desteğin artmasının zor olduğunu düşünüyorum.
Ancak Sağlık İl Müdürlüğünün polikliniklerde Pardus kullanmaya devam ettiğini ve ismini unuttuğum (afedersiniz hatırlatın) bir turizm firmasında pek çok sunucu işlemleri için Linux dağıtımları kullanıldığını öğrendik.
http://groups.google.com.tr/group/antalya_linux
Ancak Sağlık İl Müdürlüğünün polikliniklerde Pardus kullanmaya devam ettiğini ve ismini unuttuğum (afedersiniz hatırlatın) bir turizm firmasında pek çok sunucu işlemleri için Linux dağıtımları kullanıldığını öğrendik.
http://groups.google.com.tr/group/antalya_linux
9 Eylül 2008 Salı
OOXML'de Uzaylı Parmağı mı var?
Son günlerde basının "süper malzeme" muamelesi yaptığı Hadron Çarpıştırıcısını herhalde duymayan kalmamıştır. Hadron herhalde Dünya'daki en büyük partikül hızlandırıcısı olması ve yapılacak deneyin sonuçları açısından yüzyılın mühendislik ve fizik projelerinden birisi olarak tarihe geçecek.
Eğer bu konuya meraklıysanız yaklaşık 8000 bilim insanının katkısıyla hazırlanan ve Hadron'un tüm tasarım, inşa ve teknik detaylarını içeren dokümanlara aşağıdaki [1] adresten ulaşabilirsiniz. Ancak gözünüz korkmasın insanlığın bu dev projesinin raporları sadece 1600 sayfa tutmuş.[2]
Yani OOXML'nin 6000 sayfalık inanılmaz rekoruna yaklaşamamış bile. Şimdi insan düşünmeden edemiyor, bu OOXML nasıl üstün bir teknolojidir? Yoksa MS labaratuvarlarında kocaman siyah gözlü birileri mi çalışıyor nedir?
Sonra aklıma şu güzel hikaye geldi;
Adamın biri 5 adım öteden attığı ipi bir iğnenin deliğinden geçirmesiyle ünlüymüş.
Bu adam halkın diline düşünce Padişah gerçek olup olmadığını anlamak için adamı saraya çağırtmış.
Huzura çıkan adama eğer gerçekten ipi 5 adım öteden atıp iğne deliğinden geçirirsen sana 10 kese altın veririm demiş, yoksa kellen gider...
Adam gayet kendinden emin bir şekilde ipi atıp delikten geçirince Padişah şaşkınlıktan ayağa kalkmış.Hemen vezire dönüp bu adama 10 kese altın verin sonra da 50 kırbaç vurun demiş.
Adam altınlara sevinemeden diz çöküp af dilemiş neden Padişahım diye sormuş.
Padişah adama dönüp bu altınlar bu kadar yetenekli olduğun için, kırbaçlarda bu yeteneğini böyle absürd bir şeye harcadığın için demiş. :DD
[1] http://www.iop.org/EJ/journal/-page=extra.lhc/jinst
[2] http://www.symmetrymagazine.org/breaking/2008/08/25/free-online-full-documentation-for-the-large-hadron-collider/
[3] http://en.wikipedia.org/wiki/Office_Open_XML
3 Eylül 2008 Çarşamba
Türkiye kara listeye doğru...
ITU (International Telecommunication Union) Başkanı Türkiye'nin "Spam Posta Dağıtma Şampiyonu" olduğunu ve böyle devam ederse kara listeye alınacağını söylemiş. Bu gerçekleşirse Türkiye'deki sunuculardan gönderilen postalar yerine ulaşamayacak. [1]
Bu spam postalar büyük oranda "zombie" denilen ve uzaktan gizlice yönetilen bilgisayarlardan kaynaklanıyor, yani evinizde veya ofisinizde Microsoft ürünleri kullanan zavallı bir PC'nin dünyanın herhangi bir yerindeki bir kırıcı tarafından ele geçirilmiş olması yüksek ihtimal.
[1] http://turk.internet.com/haber/yazigoster.php3?yaziid=21840
Bu spam postalar büyük oranda "zombie" denilen ve uzaktan gizlice yönetilen bilgisayarlardan kaynaklanıyor, yani evinizde veya ofisinizde Microsoft ürünleri kullanan zavallı bir PC'nin dünyanın herhangi bir yerindeki bir kırıcı tarafından ele geçirilmiş olması yüksek ihtimal.
[1] http://turk.internet.com/haber/yazigoster.php3?yaziid=21840
Kaydol:
Kayıtlar (Atom)