Windows Form User Authentication

Merhaba arkadaşlar bu yazımda size windows form kullanarak user authentication nasıl yapılır ondan bahsedeceğim. Yazacağımız modülün içerisinde

  • Kullanıcı kaydı
  • Kullanıcı girişi
  • Şifre değiştirme
  • Şifreleri hashli şekilde tutma
  • Kullanıcı silme

gibi ana özellikler olacak. Öncelikle veritabanımızın tasarımını yapalım.

untitled

Şimdi user classımızı yazalım.

Veritabanı bağlantısı ve sorguları çalıştıracak classlarımızı da yazalım.

Şimdi ise yukarıda bahsettiğim özellikleri kodlamaya başlayalım.

UserRepository adında bir class oluşturalım ve kodlamaya başlayalım.

Kullanıcı ekleme işlemi için daha önceden bu kullanıcının olup olmadığını kontrol etmemiz gerekiyor ContainsUser metodumuz aşağıdaki gibi olacak.

Kullanıcı ekleme metodumuz;

Gördüğünüz gibi kullanıcı ekleme metodunda şifreyi MD5 kullanarak hashledik. Bu metodumuzu da yazalım.

Kullanıcı silme metodu. Aslında burada veritabanından tamamen silme yapmıyoruz. Kullanıcı bilgisinin state bilgisini false yapıyoruz.

Şifre güncelleme işleminde ise kullanıcının son şifresini doğru girmesi gerekiyor. Bunun kontrolünü yapan LastPasswordIsTrue ve UpdatePassword metotlarımız.

Şimdi ise giriş kontrolü, kullanıcı bilgilerinin getirilmesi ve lastlogindate yani son giriş tarih bilgisini güncellemek için gerekli metotlarımızı yazalım.

Classımızın son hali aşağıdadır.

 

C# Multi Thread Programlama

C#’ın multi thread sistemi Thread sınıfı üzerine kurulmuştur. Thread sınıfı sealedtır. Yani kalıtım yoluyla aktarılamaz.

 

Bir thread oluşturma

Çıktı:

thread 1başladı
sayac:0
sayac:1
sayac:2
sayac:3
sayac:4
thread 1 bitti

Birden fazla thread oluşturma

Aşağıdaki şekilde değiştirip çalıştırdığımızda iki çocuk kanal aynı CPU’yu paylaşmaktadır. İşletim sistemine ve bazı çevresel etmenlere bağlı olarak çıktılarımız farklılık gösterebilir.

Çıktı:

thread 1başladı
thread 2başladı
thread 2sayac:0
thread 1sayac:0
thread 2sayac:1
thread 1sayac:1
thread 2sayac:2
thread 1sayac:2
thread 2sayac:3
thread 1sayac:3
thread 2sayac:4
thread 2 bitti
thread 1sayac:4
thread 1 bitti

 

Bir threadın ne zaman sona ereceğini belirlemek

Bir threadın ne zaman sona ereceğini bilmek önemlidir. C# ta “Join()” kullanarak çağrıldığı kanalın sona erip ermediğini öğrenebiliriz. Örnek kod ve çıktısı aşağıdadır.

Çıktı:

thread 1başladı
thread 2başladı
thread 3başladı
thread 3sayac:0
thread 1sayac:0
thread 2sayac:0
thread 3sayac:1
thread 1sayac:1
thread 2sayac:1
thread 3sayac:2
thread 1sayac:2
thread 2sayac:2
thread 3sayac:3
thread 1sayac:3
thread 2sayac:3
thread 3sayac:4
thread 3 bitti
thread 1sayac:4
thread 1 bitti
thread1 join
thread 2sayac:4
thread 2 bitti
thread2 join
thread3 join

Thread öncelikleri

Her thread bir önceliğe sahiptir. Bir threadın önceliği CPU’da ne kadar çalışacağını belirler. Düşük öncelikli threadler daha az CPU zamanı harcarlar. Burada dikkat etmemiz gereken şey ise bir threadın CPU’da harcayacağı zaman sadece thread önceliğine bağlı değildir. Örnek vermek gerekirse CPU’da çalışan yüksek öncelikli bir thread bir kaynağı bekliyorsa(klavye girişi,IO işlemleri) o thread bloke edilecek daha düşük öncelikli başka bir thread çalışacaktır. Böylece düşük öncelikli bir thread daha yüksek öncelikli bir threade göre daha fazla CPU zamanı kullanmış olacaktır. C# dilinde bir thredin önceliği ThreadPriority özelliği ile ayarlanabilir.

adsiz

Örnek üzerinde inceleyelim

Çıktı:

Yuksek öncelikbaşladı
Düşük öncelikbaşladı
Yuksek öncelik bitti
Düşük öncelik bitti
Yuksek önceliksayacı 1000000
Düşük önceliksayacı 980470

 

Gördüğümüz gibi yüksek öncelikli thread CPU’da daha fazla zaman kullandı.

Threadleri askıya almak ve sürdürmek

Kanalı askıya almak için Thread.Suspend() sürdürmek için ise Thread.Resume() kullanılır.

Çıktı:

thread1başladı
sayac:0
sayac:1
sayac:2
thread1 durduruldu.
thread1 devam ettirildi.
sayac:3
sayac:4
sayac:5
sayac:6
sayac:7
sayac:8
sayac:9
thread1 bitti

İkili Ağaçlar(Binary Tree)

Öncelikle bazı terimlerden bahsetmek istiyorum.

bmn9m

Kök- Yukarıdaki resimde görüldüğü gibi ağaç yapımızda tüm elemanlar aslında tek bir yere bağlı. Buna kök diyoruz.

Çocuk ve ebeveyn- Kök hariç her düğümün bir ebeveyni vardır.

Yaprak-Çocuğu olmaya düğümlere denir. 3-7-10 gibi

Kardeş-Ebeveyni aynı olan düğümlerdir.

İkili Ağaçların özellikleri

  • Hiçbir düğümün ikiden fazla çocuğu olamaz.
  • Ortalama bir ağacın derinliği(kökten düğüme olan yolun uzunluğu) N’den küçüktür. En kötü durumda N-1 olur.

 

Ağaç Gezme

Önce kök gezme(pre-order traversar)

  • Kökteki veriyi yaz
  • Sol altağaçtaki veriyi iteratif olarak yaz
  • Sağ altağaçtaki veriyi iteratif olarak yaz

preorder

 Çıktı: ++a*bc*+*defg

Sonra kök gezme(post-order traversar)

  • Sol altağaçtaki veriyi iteratif olarak yaz
  • Sağ altağaçtaki veriyi iteratif olarak yaz
  • Kökteki veriyi yaz

Çıktı: abc*+de*f+g*+

İç kök gezme(in-order traversar)

  • Sol altağaçtaki veriyi iteratif olarak yaz
  • Kökteki veriyi yaz
  • Sağ altağaçtaki veriyi iteratif olarak yaz

Çıktı: a+b*c+d*e+f*g

Ayrıca iç kök gezme işlemi ile sayıları da sıralamış oluruz.

 

 

Çıktı:

screenshot