26 Haziran 2010 Cumartesi

Captcha ve KittenAuth Nedir ?

Captcha ve KittenAuth zaman geçtikçe gelişen teknolojilere bir nebze güvenlik katmak için geliştirilen yapılardır. Hepinizin bildiği ve günlük hayatta sürekli karşısına çıkan (yorum yazarken vs) değişik harf ve sayılardan oluşan resimleri ekrana girmeniz istenir. Buna Captcha denir.

Paragrafın başında dediğim gibi sürekli gelişen bir teknolojiyle bu güvenlik ayarınıda geçmeyi başardılar. (Değişik yazılımlarla grafikleri okuma programları yaygınlaştı.) Buna karşıda Captcha gelişti ve KittenAuth adında bir güvenlik mekanizması ortaya çıktı. Bunun anlamıda karşımıza çeşitli görseller çıkıyor ve aynı olanlarını seçmemizi istiyor.

22 Haziran 2010 Salı

CSS İle Yazıya Takla Attırma

Arkadaşlar HTML yazıyı aşağıdan yukarıya doğru yazdırırken hep "mso-rotate:90;" css kodunu kullanıyordum. Ama yukarıdan aşağıya doğru bu kod işe yaramıyordu . Gel zaman git zaman aşağıdaki css kodunu buldum. Rotation=3 değerini değiştirtikçe istediğiniz yönü verebiliyorsunuz.

"float:left; filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);"

18 Haziran 2010 Cuma

C# NULL Kontrolü

Bazı değişkenleri kontol ederken null olup olmadıklarına göre işlem yaparız. Bunun içinde ben sürekli eğer bu değişken null'sa bunu yap gibi bir kod kullanıyordum. Bunun yerine yeni öğrendiğim bir kodu sizinle paylaşıyorum.

Yalnış:
var i = null;
var k = null;
if (i==null)
{
k=değer;
}

Doğru:
var i = null;
var k = null;
k = i ?? değer;

i değişkeni null'sa k değişkeninin içine değeri atama yapıyor. Değilse i değişkenini atıyor.
Ayrıca aynı javascriptteki gibi değişkenleri tanımlarken var k gibi tanımlama yapabiliyoruz. Bu sayede ileriki aşamalarda bu değikenimizin tipini belirleyebiliyoruz.

Linq To Sql Left Outer Join

İki tabloyu birlikte sorgulamak için inner join kullanırız. Bunu Linq To Sql ile yaparken aşağıdaki gibi bir Linq Query yazarak çözüyoruz
(Kisi, Telefon ve Adres tablolarımız olduğunu, bir kişinin de birden çok adresi ve telefonu olduğunu düşünüyoruz )
Bu sorgu sonucunda bana kişiler tablosundaki isimler ve bunlara ait telefon numaraları gelecektir.

from kisi in Kisis
join tlf in Telefons
on kisi.ID equals tlf.KisiID
select new
{
Ad = kisi.Ad,
Tlf = tlf.Numara
}

T-Sql çıktısı
SELECT [t0].[Ad], [t1].[Numara] AS [Tlf]
FROM [Kisi] AS [t0]
INNER JOIN [Telefon] AS [t1] ON [t0].[ID] = [t1].[KisiID]

Lambda Expression
Kisis.Join ( Telefons, kisi => kisi.ID, tlf => tlf.KisiID, (kisi, tlf) => new { Ad = kisi.Ad, Tlf = tlf.Numara } )



Senaryomuzu değiştirelim ;
Kişiler tablosundaki tüm kayıtlat gelsin, telefon numarası olmayanlar da gelsin telefonu yoksa null değer gelsin. Bunun içinde Left Outer Join ile çözeriz. Linq sorugumuzu şu şekilde değiştirmemiz yeterli olacaktır.

from kisi in Kisis
join tlf in Telefons
on kisi.ID equals tlf.KisiID into data
from x in data.DefaultIfEmpty()
select new
{
Ad = kisi.Ad,
Tlf = x.Numara
}

T-SQL çıktısı

SELECT [t0].[Ad], [t1].[Numara] AS [Tlf]
FROM [Kisi] AS [t0]
LEFT OUTER JOIN [Telefon] AS [t1] ON [t0].[ID] = [t1].[KisiID]

Lambda Expression
Kisis
.GroupJoin (
Telefons,
kisi => kisi.ID,
tlf => tlf.KisiID,
(kisi, data) =>
new
{
kisi = kisi,
data = data
}
)
.SelectMany (
temp0 => temp0.data.DefaultIfEmpty (),
(temp0, x) =>
new
{
Ad = temp0.kisi.Ad,
Tlf = x.Numara
}
)



Kaynak: http://www.oguzyagmur.com/PermaLink,guid,b9fcc750-0e3b-43e4-a9e8-212ee94afa4e.aspx

25 Mayıs 2010 Salı

XHTML Nedir?

XHTML (Extensible Hyper Text Markup Language) tüm browserlar tarafından kabul görmüş standartları belirtir. Diğer bir deyişle HTML yazımında getirilen standartlardır. XHTML kullanmanın en önemli avantajı farklı tarayıcılarda(Opera, Explorer, Crome vs) sorun çıkarmamasıdır. Bir diğer avantajı ise arama motorlarının XHTML standartlarına uygun yazılmış sitelere daha yüksek not vermeleridir.

XHTML Dikkat Edilmesi Gereken Kurallar?

1) Browserin XHTML standartlarına uyulduğunu anlayabilmesi için sayfanın en üstüne aşağıdaki kodların eklenmesi gerekmektedir.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

NOT:Geçerli 3 adet XHTML döküman tipi vardır:

a) XHTML Strict
XHTML Dökümanlarını css dökümanları ile beraber kullanmanız gerektiğinde kullanılır. HTML’nin dizayn unsurlarını içermez.
Tanımı:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

b) XHTML 1.0 Transitional
CSS anlamayan web gezginlerini desteklemek ve HTML’nin dizayn unsurlarını kullanmak istiyorsanız bu döküman tipini kulanın.
Tanımı:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0
Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
transitional.dtd">

c) XHTML 1.0 Frameset
Eğer XHTML dökümanları pencerelere bölünmüş olarak gösterilecekse bu döküman tipini kullanın.
Tanımı:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

2) Türkçe karakterlerin doğru çıkması içinde head tagının arasına aşağıdaki kodun eklenmesi gerekmektedir.

<meta equiv="Content-Type" content="text/html; charset=utf-8">

3) Kodlar açıldıkları sırada kapanmalıdırlar.

Doğru:
<html>
<head>
<title></title>
</head>
<body>
<div>TeknoGezgin</div>
</body>
</html>

Yalnış:
<html>
<head>
<title></title>
<body>
</head>
<div>TeknoGezgin</div>
</html>
</body>

4) Tagları ve değerlerini küçük harfle yazın.

Doğru:
<title></title>
<div style="">TeknoGezgin</div>

Yalnış:
<TITLE></TITLE>
<div STYLE="">TeknoGezgin</div>

5)Açılan her tag kapanmalıdır.

Doğru:
<b></b>
<hr />

Yalnış:
<hr>
<br>

6) HTML tagı içerisinde head ve body tagları kullanılmak zorundadır.

7) Link ve Resim eklerken bir başlık (title) girilmelidir.

Doğru:
<img src="" href="Kastamonu.gif" title="Kastamonu Resimi" />
<a href="http://www.teknogezgin.blogspot.com/" title="Teknolojik Bilgiler :)">

Yalnış:
<img src="" href="kastamonu.gif" />
</a><a href="http://www.teknogezgin.blogspot.com/">

8) Parametreler tırnak içinde olmalıdır.

Doğru:
<div width="100%"></div>
<a href="http://www.teknogezgin.blogspot.com/">teknogezgin</a>

Yalnış:
<div width=100%></div>
<a href=http://www.teknogezgin.blogspot.com/>teknogezgin</a>

9) Parametrelerde kısaltmalar kullanılmamalıdır.

Doğru:
<input type="radio" checked="checked" />
<option selected="selected" />

Yalnış:
<input type="radio" checked />
<option selected />

10) Sadece Id parametresi kullanın. XHTML id parametresini kullanmamızı istiyor.

Doğru:
<p id="parag">
<input id="parag" value="deger" type="submit">

Yalnış:
<p name="parag">
<input name="parag" value="deger" type="submit">

O zaman kısaca XHTML dikkat edilmesi gereken kuralları şu formül ile açıklayabiliriz. XHTML = XML

24 Mayıs 2010 Pazartesi

T-SQL İle Tarihler Üzerinde İşlemler Yapmak

SELECT CURRENT_TIMESTAMP
-- Sonuç : 2009-07-20 10:39:15.097


SELECT DATEADD(day,2,'2009-07-20')
-- Sonuç : 2009-07-22 00:00:00.000

SELECT DATEADD(month,2,'2009-07-20')
-- Sonuç : 2009-09-20 00:00:00.000


SELECT DATEDIFF(day,'2009-07-20','2015-02-09')
-- Sonuç : 2030 (Gün olarak aldık)

SELECT DATENAME(month, '2009-07-20')
-- Sonuç : July


SELECT DATENAME(weekday, '2009-07-20')
-- Sonuç : Monday

SELECT DATEPART(month, '2009-07-20')
-- Sonuç : 7


--Şuanki Zaman ve Tarihi verir
SELECT GETDATE()
-- Sonuç : 2009-07-20 11:52:32.893

-- Londra - Greenwich Saati
SELECT GETUTCDATE()
-- Sonuç : 2009-07-20 08:52:44.693


--Girilen string değerin tarih olup olmadığını belirler. 1 ise tarih 0 ise değil.
SELECT ISDATE('2009-07-20') -- Sonuç : 1
SELECT ISDATE('2014-18-09') -- Sonuç : 0

--girilen Tarihin gün bilgisini verir.
SELECT DAY('2009-07-20')
-- Sonuç : 20


--girilen Tarihin ay bilgisini verir.
SELECT MONTH('2009-07-20')
-- Sonuç : 7

--Girilen Tarihin yıl bilgisini verir.
SELECT YEAR('2009-07-20')
-- Sonuç : 2009


--Sistem Zamanını verir.
SELECT SYSDATETIME()
-- Sonuç : 2009-07-20 11:53:15.7138432

--Sistem Zamanını Greenwiche göre verir.
SELECT SYSUTCDATETIME()
-- Sonuç : 2009-07-20 08:53:25.9958432


-- DATEADD: Şuanki, Tarihe 7 Gün ekleyelim.
-- Bunun için 1 hafta eklemek veya 7 gün eklemek yeterlidir.
SELECT DATEADD(DD, 7, GETDATE())

SELECT DATEADD(WW, 1, GETDATE())

-- Şuanki Tarihe göre Ayın hangi günündeyiz.
SELECT DAY(GETDATE())


-- Şuanki Ayın Ilk günü
SELECT DATEADD(DD,-(DAY(GETDATE())-1),CONVERT(VARCHAR,GETDATE(),112))

-- Şuanki Ayın son günü
SELECT DATEADD(DD,-(DAY(DATEADD(MM,1,GETDATE()))),DATEADD(MM,1, CONVERT(VARCHAR,GETDATE(),112)))


-- DATEDIFF: Ocak 1 2007 den bugune kadar kaç gün geçti
SELECT DATEDIFF(DD,'20070101',GETDATE())

-- DATENAME: Şuanki Ay
SELECT DATENAME(MM, GETDATE())


-- Hangi Aydayız.
SELECT MONTH(GETDATE())

-- Hangi Yıldayız
SELECT YEAR(CURRENT_TIMESTAMP)


--C#'taki gibi Tarih Stilleri
1- 101 (mm/dd/yy)
2- 102 (yy.mm.dd)
3- 103 (dd/mm/yy)
4- 104 (dd.mm.yy)
5- 105 (dd-mm-yy)
6- 106 (dd mon yy)
7- 107 (Mon dd , yy)
8- 108 (hh:mm:ss)
9- 109 (Mon dd yyyy Hh:mi:ss:mmm AM yada PM)
10 – 110 (mm-dd-yy)
11 – 111 (Yy/mm/dd)
12- 112 (Yymmdd)
13- 11 3 (Dd mm yyy hh:mm:ss:mmm)
14- 114 (Hh:mi:ss:mmm)
20- 120 (Yyyy-mm:dd hh:mm:ss)
21- 121 (Yyy-mm:dd hh:mi:ss:mmm)

Microsoft'un sitesinden de farklı stillere bakabilirsiniz.

SELECT CONVERT(CHAR(20), GETDATE(),103) as "şu andaki zaman" 07.07.2010
SELECT CONVERT(CHAR(20), GETDATE(),108) as "şu andaki saat" 14:51:25

Zamanla buraya daha farklı zaman fonksiyonlarıda ekliyecem.

13 Mayıs 2010 Perşembe

Asp.net Dinamik event handler ve Dinamik Kontroller

Merhaba arkadaşlar. kısa olmasına karşın çok pratik bir kod paylaşacağım.
Bu kodda asp.net kontrollerini dinamik oluşturacağız. ama sırf bunu anlatmak için açmadım konuyu. birde

ajax ile de kullanabileceğiniz kullanabileceğiniz dinamik event handler atama işlemine değineceğim.

Sayfamıza bir placeholder ekleyelim ve pageload'a gelelim

for(int i=1;i<10;i++)
{
Button tus = new Button();
tus.Click += new System.EventHandler(this.tikla);
tus.ID = "tus" + i.ToString();
tus.Text = "Tus " + i.ToString();
PlaceHolder1.Controls.Add(tus);


Literal lt = new Literal();
lt.Text = "
";
lt.ID = "lit" + i.ToString();
PlaceHolder1.Controls.Add(lt);
}

kodumuz yukarıda biraz açıklayacak olursak. for döngümüz içinde buton sınıfından bir nesne

oluşturuyoruz. bu nesnenin click özelliğine kendi yazdığımız tıkla fonksiyonunu atıyoruz. id'sini ve

text'ini fordaki i değişkenimizle, sıralı oalcak şekilde atıyoruz (tus1,tus2..) evet butonumuz oluştu.

şimdi bunu sayfamızda görebilmek için placeholder nesnemize atalım.

2. bölümde aynı işlemleri literal için yapıyoruz. alt satıra atmak için literal textine
br atıyoruz.hiç dinamik kontrol kullanmayanlara örnek olması için. bir de literal oluşturdum.

Şimdi fonksiyonumuza geçelim. bu fonksiyon yukarıda butonlara atadığımız kendi yazacağımız fonksiyon.

static butonlarda butona çift tıklayınca çıkan onclick fonksiyonundan pek farklı değil.


protected void tikla(object sender, EventArgs e)
{


System.Web.UI.WebControls.Button dugme = sender as System.Web.UI.WebControls.Button;


if (dugme != null)
{
Response.Write(dugme.Text+" basıldı");


//buton numarasını alabiliriz. veri tabanındaki id'yi atadıysak querystring yerine

kullanabiliriz.
int id = Convert.ToInt32(dugme.ID.Replace("tus",""));

}


}

kısaca açıklayacak olursak.normal click fonksiyonundan farklı olarak biz bu fonksiyonu for döngüsü

içinde 10 tane butona atatık. ve hangi butona tıklandığına ilişkin bir kod yazacağız fonksiyona.

sender objnesnesizim butonumuzu temsil ediyor bu zaten static fonksiyonlarda da var. ama bunu yine

System.Web.UI.WebControls sınıfından butona çevirmeden direkt kullanamıyoruz.(fonksiyon içindeki ilk kod

bunu yapıyor) dugme nesnesine atadık.

2. kodda null olmadığından emin olalım her ihtimale karşı önlemimizi alalım. evet artık hangi butona

tıklandığını bulmuş olduk. bu butonun text'ini yazdıyoruz. buton id'sindeki tus kelimesini replace

ederek de numarasını buluyoruz.

bu numara bulma işlemi eğer for değilde bir db'den çekilen kayıtla oluşturulmuş nesnelerde (veri

tabanındaki kayıt id'si atanmışsa) direkt bize id'yi verir. evet kısa da olsa ajaxla uğraştığım

zamanlarda geliştirdiğim bana çok kolaylık sağlamış bir koddur.

Ajaxla uğraşanlar bilirler request işlemlerini kullanmak istediğimizde başımız belaya girer :) her

sayfaya query string de gönderemeyiz. çünkü yenilenmemesi gerekir.yada link olması gerekir.

işte bu gibi durumlarda bu kod kurtarıcınız olacakatır.
id göndermeden işlem yapmak isterseniz. yine server ve asp.net tabanlı güzel bir çözümdür.

aynı zamanda birden çok butonu tek fonksiyondan kontrol etmek isterseniz yine buradan

faydalanabilirsiniz.

Kaynak: http://www.kodaman.org/yazi/asp-net-dinamik-event-handler