Etiket Arşivi: ödül

Rapidshare’den Loto

Bugün Rapidshare hesabıma girip baktığımda, 50.000 avroluk ödülü ile Rapidshare Loto çekilişini gördüm. Loto bileti alabilmek için, hesabınızda bulunan 50 rapid puanını heba etmeniz gerekiyor. Kazananlar 1 Haziran 2009 tarihinde açıklanacak. Ayrıca kazananlar e-posta yoluyla da haberdar edilecek. Bütün şans oyunlarında yaptığım gibi, bunda da tek şans kullanmayı tercih ettim. Daha 11 tane bilet alabilirim, ama buna gerek yok. Her ne kadar matematiksel olasılık hesaplarıyla daha çok bilet daha çok şans demekse de, ben gerçek hayatta şansın matematiksel olarak hesaplanacağına inanmıyorum. Buna matematikçi arkadaşlarım çok kızıyorlar, ama benim görüşüm böyle :) Hey durun bir dakika, ben de 6 farklı matematik gördüm (istatistik ve olasılık dahil), bırakın da biraz söz söyleme hakkım olsun :) Benim için tek kolon oynanmış sayısal lotonun çıkma şansı ile 10 kağıt tam oynanmış sayısal loto şansı eşit. Dolayısıyla ne bütçemi zorlarım ne de haftalık tek atımlık şansımdan vazgeçerim :)

1 Haziran Pazar – Ulusal Regex Günü

Başlığı uzun tutmamak için kısaca Regex yazdım. Aslında uzun hali “Regular Expression”. Bunun tam olarak Türkçe karşılığını bilmiyorum, ama doğrudan İngilizce’den çevirirsek “Düzgün İfade” olabilir. Bilmeyenler halen neden bahsettiğimi anlamamış olabilir. Kısaca anlatayım:

Regular Expression, özellikle web sayfalarında (Windows ve Linux uygulamalarında da kullanılır) bazı alanları kontrol etmek için kullanılır. Örneğin kayıt formunda e-posta adresinin düzgün yazılmadığını kontrol edebilirsiniz. Böylece kullanıcı kayıdını gerçekleştiremez.

Regular Expression gerçekten programcının hayatını kolaylaştıran en önemli detaylardan bir tanesidir. Örneğin yukarıda bahsettiğim e-posta onaylama işlemi için string’teki herbir harfi teker teker kontrol edip, doğruysa devam etmesini ya da yanlışsa hata vermesini sağlayabilirsiniz. Ancak Regular Expression ile bu kadar uzun kod yazmaya gerek yoktur; e-postanın tipini belirlersiniz ve her şey kolaylaşır. Regular Expression’ı tek cümleyle anlatacak olursak, kontrol etmek istediğiniz alanlara sabit bir tanımlama (kalıp) yapar.

Regular Expression ile ilk tanıştığımda üniversitede SQL Parser programı yazıyordum. SELECT, INSERT, DELETE vb. SQL komutlarının çalıştırılabildiği kendi veritabanı projemizi yaratıyorduk. Olay neredeyse tamamen stringler üstünden dönüyordu (SELECT * FROM table WHERE username=’Can’ gibi) ve bu stringleri teker teker kontrol etmek ve yanlış yazıldıysa hata vermek tam bir kabusum olmuştu. 1 gün boyunca nasıl yapacağımı düşündüm. Acaba teker teker kontrol etsem çok mu uzun bir kod olurdu. Örnek olarak SELECT komutu için string kontrolü yaptım. Ama sonuç hüsran, yaklaşık 200 satır kod oldu. Daha bir yığın komut vardı. İşte bu durumda Regex ile tanıştım.

Regex’in yazımı ilk başta şifreli gibi görünebilir, ancak bir kere öğrendikten sonra gerçekten unutabileceğiniz bir şey değil. Örneğin benim programımdaki regex’ler şöyledi:

INSERT komutu: (INSERT)\s(INTO)\s(\w+)\s(VALUES)\s\((\w+|d+)(\,\s)?

(\w+|d+)?(\,\s)?(\w+|d+)?(\,\s)?(\w+|d+)?(\,\s)?(\w+|d+)(\,\s)?(\w+|d+)?\)

DROP komutu: (DROP)\s(\w+|\W+)\s(\w+)

CREATE (Index) komutu: (CREATE)\s(INDEX)\s(\w+)\s(ON)\s(\w+)(\,\s)?(\w+)?(\,\s)?(\w+)?(\,\s)?

(\w+)?(\,\s)?(\w+)?(\,\s)?(\w+)?

DELETE Komutu: (DELETE)\s(FROM)\s(\w+)(\s)?(WHERE)?(\s)?(\w+)?

(<(=)?|>(=)?|=|!=)?(\w+|d+)?

CREATE (Table) komutu: (CREATE)\s(\w+)\s\((\w+\s(CHAR|INT)\s\d+)(\,\s)?

(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\w+\s(CHAR|INT)\s\d+)?(\,\s)?

(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\w+\s(CHAR|INT)\s\d+)?

(\,\s)?(\w+\s(CHAR|INT)\s\d+)?(\,\s)?(\*\w+)(\,\s)?(\s)?

(\@\w+)?(\,\s)?(\s)?(\-\w+)?

Burada “w” (word – kelime), “s” (space – boşluk), “d” (digit – sayı) anlamındadır. Yanına koyulan “+” işareti de birden çok olduğunu gösterir. “?” işaretinden sonraki kısımlar “opsiyonel” kısımlardır.

Regular Expression hakkında daha detaylı bilgi için Regular Expression Library sitesini ziyaret edebilirsiniz.

Bir program geliştiriciyseniz (web geliştiricileri de dahil) ve Regular Expression kullanımını bilmiyorsanız, bu gerçekten sizin için çok büyük bir zaman kaybıdır.

Benim Regex ile tanışma hikayem böyleydi ve o gün bu gündür kendisiyle çok iyi anlaşırız =:-) Böyle anlamlı bir günde hediye olmazsa olmaz tabii. http://www.bennadel.com/index.cfm?dax=blog:1243.view ve http://blog.stevenlevithan.com/archives/regexday-2008 sitelerinde sizleri hediyeler de bekliyor.