Uzmanına Sor

Archive for the ‘visual studio’ tag

Introduction to Mobile Application Development

without comments

Merhaba arkadaslar, bu makalemde sizlere .NET Compact Framework ve Mobile programlamayı anlatacağım. Örneklerde tahmin edeceğiniz üzere C# kullanacağım. VB’ciler için VB.NET ile de anlatmak isterdim ama VB’ye bir türlü ısınamadım. C# olduğu sürecede ısınabileceğimi pek düşünmüyorum.

Bildiğiniz üzere ülkemizde bilgisayardan çok cep telefonu kullanılmaktadır. Hazır önümüz 3G ve 4G iken mobile programlamada gelişen telefonlarla beraber popüler olacaktır. Bence Türkiye mobile yazılım alanda atılımlar yapmak için güzel bir yer ve şuan sektöründe bu atılımlara ihtiyacı var.

Kısaca şöyle bir mutfağamıza bakacak olursak;

Elimizde bir adet Visual Studio.NET 2008 var. Bunun yanında bolca C# ve .NETCF var. Şimdi bunları kullanarak güzel mobile uygulamalar çıkartacağız.

İlk olarak Yeni bir proje oluştur diyoruz ve açılan menüden Visual C# > Smart Device > Smart Device Project yolu ile yeni bir proje oluşturuyoruz.

image

Ilk basta vazgecilmez ornegimiz olan ”Hello World” yazarak baslamak istiyorum.Resimde de gordugunuz uzere bir adet button koyduk, ve button’un click eventinde ekranda bir messageBox kullanarak “Hello World” yazisini basacagiz.

private void button1_Click_1(object sender, EventArgs e)
        {
            MessageBox.Show("Hello World!");
        }

 

Gordugunuz uzere normal bir Windows Application gelistirmekten pek bir farki yok. Bu windows mobile applicaton development’a giris icin kucuk bir adim oldu :) Asil size bahsetmek istedigim konu ise Windows Mobile 6.5 uzerinde gelistirilebilen Widgetlar.

Bu test süreci birkaç aşamadan oluşmaktadır. Öncelikle widget için hazırladığınız dosyaları *.zip haline getirmeniz gerekmekte. Bir sonraki aşamada bu *.zip uzantısını *.wgt ya da *.widget olarak değiştirmeniz gerekmekte ve bu dosyayı emulatör üzerinde kopyalayıp (bu kopyalama işleminide emulatör ile paylaşımlı bir klasör üzerinden gerçekleştirebilirsiniz) gerekli kurumları yapmanız gerekmekte. Ayrıca bir önce test’ ten kalan kurulumunuzu kaldırmanız ve yeni halini kurmanız test’ i daha stabil kılmaktadır.

Her seferinde bu süreç can sıkıcı olabildiğinden geçen hafta tam ihtiyaç duyulan bir çalışmaya CodePlex üzerinde rastladım ; Windows Mobile Widget Emulator !

CodePlex üzerinde açık kaynaklı olarak gelişimine devam eden çalışma, kullanıcılara geliştirdikleri Windows Mobile Widget’ ları Emülatör’ e kurmaya gerek kalmadan "sanki mobil cihaz üzerinde çalıştırılıyormuş gibi" test imkanı sağlamaktadır.

image

Örneğin CodePlex üzerinden alınan yukarıdaki ekran görüntüsün, geliştirilen bir widget’ ın masaüstü ortamında Windows Mobile Widget Emulator ile çalıştırıldığı görülmektedir.

Peki Nasıl Kullanacağız ?

http://widgetemulator.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=31211 adresinden gerekli paketi indirdiğimizde aşağıdaki islemleri uyguluyoruz: assests klasörü uygulamanın çalıştırılabilmesi için gereken sistemsel dosyaları içermektedir. widgets klasörü "geliştirdiğimiz widget’ ı paketlemeden yerleştireceğimiz" bölgedir. index.htm ise widget’ ımızı test edeceğimiz standart bir HTML dosyasıdır.

Yukarıda da belirttiğimiz üzere geliştirdiğimiz widget’ ı "paketlemeden" widgets klasörü içerisine yerleştirmemiz gerekmektedir. Sadece bu kadar!

Windows Mobile 6.5 üzerinde geliştirilen widget’ larda yararlanılabilecek bir başka nokta ise bir önceki yazımızda ifade ettiğimiz “widget” javascript objesi üzerinden oluşturulabilecek SystemState objesidir. SystemState objesi vasıtasıyla geliştirdiğiniz widget’ lar içerisinden “bazı belirli” sistemsel özelliklerin değerlerine ulaşabilir, bu değerlerin değiştiğini algılayabilir ve istenilen kod bloklarını çalıştırabilmektesiniz. Aşağıdaki listede SystemState objesi üzerinden ulaşılabilecek değerlerin bir listesi listelenmiştir.

CradlePresent – Cihazın “cradle” (cihazın bilgisayarınız ile olan fiziksel bağlantısı) üzerine takılıp takılmadığının değerini döndürür.

DisplayRotation – Ekranın anlık görüntüsünün kaç derecelik bir açıyla gösterildiğinin değerini döndürür. (0 – 360 Derece Arası)

PhoneHomeService – Cihazın anlık network ile kayıtlı olup olmadığının değerini döndürür.

PhoneOperatorName – Cihazın anlık network (operatör) isim değerini döndürür.

PhoneRoaming – Cihazın anlık olarak “Roaming (Yurtdışında farklı bir operatör üzerinden bağlantı)” içerisinde olup olmadığının değerini döndürür.

PhoneSignalStrength – Cihazın operatör ile arasındaki bağlantı kalitesinin değerini yüzdelik olarak döndürür.

PowerBatteryState – Cihazın anlık batarya güç değerini düşük, güçlü, orta şeklinde tanımlı değerlerinin numerik karşılıklarını döndürür.

PowerBatteryStrength – Cihazın anlık batarya güç değerini yüzdelik değer olarak döndürür.

 

Bir sonraki makalemde sizlerle bu yukarida bahsetmis oldugum SystemState objelerini kullanaraktan Mobile Application gelistirecegiz.

Written by Serkan Hekimoğlu

February 15th, 2010 at 9:16 pm

ASP.Net Samples – Part III: System.Net.Mail with ASP.Net

without comments

5 – System.Net.Mail ile Mail Send

Merhaba arkadaslar, bugun sizlere ASP.Net uzerinden Mail gonderme islemi uzerine ornek yapacagiz. Gunumuzde E-Mail yapisi bilmeyen pek az insan vardir sanirim. E-Mail, dunya capinda Bireysel ve Kurumsal olarak kullanilan bir yapidir. Bireysel kullanimlara ornek vermek istersek eger cok yaygin olan mail servislerinden ornek verebiliriz (gmail,hotmail,yahoo gibi). Kurumsal kullanimlarda genelde Microsoft Exchange Server tercih edilir. Exchange serverdan bahsetmek isterdim ama off topic olmamak adina bahsetmesem iyi olur. Gelelim mail gonderme islemini kendi yarattigimiz bir .aspx veya Windows Application uzerinden yapmaya. 2 yapi arasinda pek bir fark oldugu soylenemez acikcasi. Oncelikle bu islemi yapabilmek icin sahip oldugunuz mail adresinizi bir takim bilgilerine ihtiyac duyarsiniz. SMTP, Incoming – Outgoing adresleri gibi. Kendinize ozel bir isim hakki ve domaininiz var ise bu is daha kolay tabi. Ornek vermek gerekirse sahip oldugum www.serkanhekimoglu.com ismi, ve barindirdigim serverimin saglamis oldugu avantajlar dogrultusunda kendi alan adim uzantisinda mail adresi olusturabiliyor. (serkan@serkanhekimoglu.com) gibi. Incoming ve Outgoing bilgilerimde haliyle mail.serkanhekimoglu.com oluyor. Gelelim simdi bunu form uzerinde nasil yapacagimiza.

Isleme baslamak icin bir adet .aspx sayfasi olusturalim, ve .Net’in mail gonderme yapisini kullanabilmek icin gerekli referanslari ekleyelim :

using System.Net.Mail;
using System.Net;

 

Mail gonderim sirasinda ki islemi basitce dusunecek olursak eger, Mesajimiz, gonderen, alici, konu, ve ana mesajdan olusur. Bunlara ek olarakdan CC, BCC, veya Attachment gibi olaylarda mevcuttur. Dolayisiyla bu degerleri cekebilecegimiz textBoxlari .aspx sayfamiza ekleyelim. Ve gelen kod kismina:

MailAddress From = new MailAddress(txtEmailAddress.Text.ToString(), 
                       txtName.Text.ToString() + " " + 
                                   txtSurname.Text.ToString());
        MailAddress To = new MailAddress("serkan@serkanhekimoglu.com");
        MailMessage Email = new MailMessage(From, To);
        Email.IsBodyHtml = true;
        Email.Subject = "Message From Serkanhekimoglu.com";
        Email.Body = txtMessage.Text.ToString();
        SmtpClient MailClient = new SmtpClient();
        MailClient.Host = "mail.serkanhekimoglu.com";
        MailClient.UseDefaultCredentials = false;
        MailClient.Credentials = new 
        NetworkCredential("serkan@serkanhekimoglu.com", "MAILSIFRENIZ");
        MailClient.Port = 26;
        MailClient.Send(Email);

 

MailAddress’i biraz kurcalayacak olursaniz CC ve BCC gibi ozellikleride gorebilirsiniz. Burda sorun yaratabilecek tek sey Mail’in cikis port’u olabilir. Default port kullanilir veya manuel olarak cikis portu belirtilebilir. To kismini ister textbox’tan okursunuz ister kendiniz default bir mail adresi set edersiniz. (sekildeki gibi)

Written by Serkan Hekimoğlu

January 21st, 2010 at 1:22 pm

ASP.Net Samples – Part II: File Upload, and Forms Authentication

without comments

 

3- File Upload

Merhaba arkadaslar, ASP.NET Samples konusu uzerine devam eden makalemizde bugun son derece basit ama kullanisli olan File Upload uzerine ornek yapacagim. File Upload uzerine aciklama yapilmasi pekte gerekli degildir aslinda, cunku adindana anlasilacagi uzeri .aspx sayfasi uzerinden Root’ta bulunan bir Folder’a kendi sistemimizden dosya aktaricaz. Direk isleme baslamak istiyorum. Olusturmus oldugumuz solution’a YuklenenKlasorler adli bir folder ve .aspx sayfasi ekliyoruz. Toolbox’tan FileUpload, ve button kontrollerini .aspx sayfamiza ekliyoruz. Button’un click eventine asagidaki kodlari yaziyoruz.

protected void Button1_Click(object sender, EventArgs e)
    {
        string DosyaUzantisi = FileUpload1.FileName.
            Substring(FileUpload1.FileName.LastIndexOf(".") + 1);

        if (DosyaUzantisi.ToLower() == "jpg"
            || DosyaUzantisi.ToLower() == "gif"
            || DosyaUzantisi.ToLower() == "xml")
        {
                FileUpload1.SaveAs(Server.MapPath("YuklenenDosyalar\\") +
                RastgeleKod + "." + DosyaUzantisi);

        }
        else
        {
            Label1.Text = "Hatali Dosya Secimi";
        }
    }

 

Dosya uzantisini okumak icin. FileUpload.FileName.Substring(FileUpload.FileName.LastIndexOf(“.”) + 1) yani dosya adindaki son nokta karakterinden itibaren okuma islemi gerceklestirdik. IF blogu icerisinde kullanicinin aktarim yapabilecegi dosya turlerini belirtmis oluyoruz. Mesela yukaridaki ornegimizde kullanici sadece .jpg, .gif, ve .xml uzantili dosyalari, olusturmus oldugumuz YuklenenDosyalar isimli klasore aktarabilir. Bukadar basit.

4- Forms Authentication

Asp sadece IIS authentication metodlarını desteklerken asp.net daha geniş güvenlik sistemini destekliyor örneğin IIS/Windows doğrulama sistemlerinden Basic doğrulama, Digest doğrulama, Integrated Windows doğrulama, Form bazlı doğrulama ve Microsoft Passport doğrulama. asp.net içerisinde yeni olarak Windows kullanıcı doğrulama (windows authentication) sistemine ek olarak form bazlı kullanıcı doğrulama (forms-based user authentication) sistemi geliştirilmiştir. bu yeni sistemde çerez yönetimi (cookie management) ve otomatik olarak doğrulanmayan kullanıcıların başka bir web sayfasına gönderilmesi (automatic redirecting of unauthorized logins) gibi güzel özellikler eklenmiştir. İzlemek, Debug, ve Bellekleme Desteği (Tracing, debugging and caching support)asp sisteminde kodu izlemek ve BUG lari bulmak bir derttir. Fakat asp.net içerisinde bu sistem çok daha geliştirilmiş, adım adım debug olayı ve diğer trace ve debug metodlarini desteklemektedir. asp.net bunlara ek olarak mükemmel bellekleme (caching API) sağlamaktadır. Verileri bellekleme sistem output caching, data caching, dependent caching ve fragment caching metodlarını destekler.Alintidir.

Authentication Mode’umuzu belirlerken asp projemizde yer alan web.config dosyamizin icindeki  configuration alanini sekildeki gibi duzenliyoruz.

<configuration><system.web>

<security>

<authentication mode="Forms">

</authentication>

</security>

</system.web>

</configuration>

 

Ve ayni sekilde web.config dosyamiz icerisinde kullanici bilgileride tanimlanabilir.

<configuration>

<system.web>

<authentication mode="Forms">

<forms name=".ASPXUSERDEMO" loginUrl="login.aspx"

protection="All" timeout="60">

<credentials passwordFormat="Clear" >

<user name="serkan" password="serkan"/>

<user name="kadir" password="kadir"/>

<user name="test" password="user"/>

</credentials>

</forms>

</authentication>

<authorization>

<deny users="?" />

</authorization>

<globalization requestEncoding="UTF-8" responseEncoding="UTF-8" />

</system.web>

</configuration>

 

Gibi…Su an vaktim olmadigindan dolayi orneklerimizi 3. bolume sarkitiyorum.

Written by Serkan Hekimoğlu

January 20th, 2010 at 10:27 am

ASP.Net Samples – Part I : Application Cache, and Cookies

without comments

Merhaba arkadaslar, bu makalemde sizlere ASP.NET icinde bulunan bir cok temel konudan bahsedecegim, ve bunlarla ilgili ornekler gostericem. Kisaca uzerinde duracagimiz konulari ve ornekleri listeleyecek olursak;

  1. Application Cache Sample
  2. Cookie Sample
  3. File Upload Sample
  4. Forms Authentication Sample
  5. Mail Send Sample
  6. Membership Sample
  7. Query String Sample
  8. Session State Sample
  9. Session LogIn Sample
  10. Trace Sample
  11. Web Part Sample
  12. ve Global.asax yapisi.

 

1- Application Cache Sample:

Girmis oldugunuz herhangi bir web sitesinde calisan applicationlarin, sizin localinizde calismasini saglayan yapi Cache yapisidir. Yani verilerin bellekte tutulmasidir. Buna ornek olarak; veritabanimizda bulunan bir tablodaki bilgileri alip .aspx sayfasinda bir gride basacagiz.

public DataTable GetCustomerData()
    {
        DataTable retVAL = new DataTable("Customers");
        SqlDataAdapter SqlAdp = new SqlDataAdapter("SELECT * FROM Customers", 
        ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
        try
        {
            SqlAdp.Fill(retVAL);
        }
        catch (Exception ex)
        {
            retVAL = null;
        }
        finally
        {
            SqlAdp.SelectCommand.Connection.Dispose();
        }
        return retVAL;
    }

Bu fonksiyonumuz, efsanevi DB olan Northwind’in :) Customers tablosundan veri aliyor, ve bunu adi Customers olan bir DataTable icerisinde tutuyor. Peki gelelim bu yapiyi Cache kullanarak cagirmaya.

protected void Page_Load(object sender, EventArgs e)
    {
        if (Cache["CustomerData"] == null)
        {
            Cache.Add("CustomerData", GetCustomerData(), null,
DateTime.Now.AddMinutes(3),
 System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default, null);
        }

        GridView1.DataSource = Cache["CustomerData"];
        GridView1.DataBind();
    }

Ustte gormus oldugunuz Kod blogunda ise CustomerData isimli bir Cache olusturuyoruz, ve GetCustomerData() fonksiyonunu kullanarak, datayi Cache’e gomuyoruz. Cache’i silmek isterseniz kullanacaganiz kod adi uzerinde

Cache.Remove("CustomerData");

 

2- Cookie Sample

Cookies kelimesi aslinda hemen hemen her bilgisayar kullanicisinin anlamina ve islevine hakim oldugu bi kavramdir. Gunumuzde girdigimiz web sitelerinde, sitenin bizi tanimasi icin bazi bilgiler gireriz (e-mail, password, kullanici adi gibi). Bu islemi siteye her girisimizde tekrarlamamak adina, site Local diskinizde sizi taniyabilmek adina text dosyasi olusturur. Peki bu islem ne kadar guvenlidir diye soracak olursaniz, bana kalirsa cookie kullanmak pekte guvenli bi olay degildir. Girdiginiz sitelerde “Beni Hatirla” checkboxlari genelde cookie olusturma amaciyla kullanilir. Localinizde olusturulan bu text dosyalari bir komut dosyasi veya virus degildir, sadece size ozel bir tanimlamadir, ve tanimlamayi olusturan web sunucusu tarafindan okunabilir. Cookie ornegimize baslamadan once sekildeki gibi bir .aspx sayfasi olusturalim.

 

image

Button’umuzun Click eventinde su kodlari kullaniyoruz.

 

protected void Button1_Click(object sender, EventArgs e)
    {
        HttpCookie ck = new HttpCookie("SerkanCookie");
        ck.Values.Add("Saat", DateTime.Now.ToLongTimeString());
        ck.Values.Add("Deneme", TextBox1.Text);
        ck.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(ck);
    }

 

Bu islem ile, icerisinde textBox’imizi degerini barindiran bir Cookie yaratiyoruz, ve bu cookie icin bir expire suresi belirtiyoruz.

ck.Expires(DateTime.Now.AddDays(1)); komutu ile Cookie’mizin 1 gun sonra expire olacagi bilgisini belirtiyoruz.

Ve Form Load kisminda, su kodlari uyguluyoruz,

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["SerkanCookie"] != null)
        {
            HttpCookie serkan = Request.Cookies["SerkanCookie"];
            TextBox1.Text = serkan["Saat"] + " " + serkan["Deneme"];
        }
    }

 

Boylece Form’u tekrar Run ettigimiz zaman, sistem kayitli olan Cookie dosyasini bulmaya calisip icindeki bilgileri textBox’a yazar.

2. makalemde File Upload ve Forms Authantication konularina deginecegim.

Written by Serkan Hekimoğlu

January 19th, 2010 at 6:14 pm

VISUAL C# – DELEGATES AND EVENTS – PART II: Event Handler

with one comment

EventHandler aslında bir metod değil bir delegedir. event deklerasyonunda kullanıldığında yeni event artık bir EventHandler delegesi gibi davranır. Bu demektir ki event’e ancak EventHandler’da belirtilen type’da metod bağlanabilir. Bu yeni metodların returnType’ı ve Signature’ı da haliyle <void> <object, EventArgs> olacaktır.
Bu yüzden listeye eklenecek metodların EventHandler delegesiyle uyumlu olması gerekir.

    Bir event objesi yaratıldığında new kullanılmaz,
    event declare class içinde yapılır,
    event’ler çalıştırılabilir bir kod bloğunun içinde declare edilemezler.

     

    Event Handler ile yapmak istedigim ornek, bir insanin bir yiyecek yemesi. Olusturmak istedigim classlar, Insan, Meyve, ve Meyvenin icerisindeki vitamin class’i.

     

    public class Meyve
        {
            private string MeyveAdi_;
            public string MeyveAdi
            {
                get { return MeyveAdi_; }
                set { MeyveAdi_ = value; }
            }
        }
    
    
    public class VitaminDegerleri
        {
    
            public VitaminDegerleri(int C, int D)
            {
                this.CVitamini_ = C;
                this.DVitamini_ = D;
            }
    
            private int CVitamini_;
            public int CVitamini
            {
                get { return CVitamini_; }
                set { CVitamini_ = value; }
            }
    
            private int DVitamini_;
            public int DVitamini
            {
                get { return DVitamini_; }
                set { DVitamini_ = value; }
            }
        }

     

     public class Insan
        {
            public event MeyveYedimEventHandler MeyveYedim;
    
            private Meyve OdamdakiMeyve = null;
    
            public void SerkaninGetirdigiMeyveyiAl(Meyve SerkaninVerdigiMeyve)
            {
                this.OdamdakiMeyve = SerkaninVerdigiMeyve;
            }
    
            public void MeyveyiYe()
            {
                MessageBox.Show(this.OdamdakiMeyve.MeyveAdi + " yedim !");
                if (this.MeyveYedim != null) MeyveYedim(new VitaminDegerleri(34, 57));
            }
        }

     

     

    Ve Eventimiz icin kullanlicak delegate:

    public delegate void MeyveYedimEventHandler(VitaminDegerleri vtm);

     

    Eventimizi tetikleyecek olan method ise su sekildedir:

    void Ins_MeyveYedim(VitaminDegerleri e)
            {
    
            }

     

    Simdi sirada Form_Load’da kullanilacak kodlarimiz var:

     

     private void SerkanHekimogluEvents_Load(object sender, EventArgs e)
            {
                Insan ins = new Insan();
                ins.MeyveYedim += new MeyveYedimEventHandler(Ins_MeyveYedim);
    
                Meyve myv = new Meyve();
                myv.MeyveAdi = "Elma";
    
                ins.SerkaninGetirdigiMeyveyiAl(myv);
                ins.MeyveyiYe();
            }

     

    Event kullanimida, gordugunuz uzere Delegates kadar kolay. Sorulariniz icin bana iletisim bolumunden ulasabilirsiniz.

     

     

     

     

     

     

    Written by Serkan Hekimoğlu

    January 18th, 2010 at 11:47 am

    Posted in .NET, C#

    Tagged with , , ,

    VISUAL C# – DELEGATES AND EVENTS – PART I: Delegates

    without comments

    Bugunku makalemizde sizlerle Temsilciler (Delegates) hakkinda incelemede bulunup, ornek yapacagiz. Temsilciler (Delegates) her ne kadar ileri derece bir kavram olsada her seviyeden C# ile ugrasan kisilerin bilmesi gereken bir yapidir. Tabii ki Delegates kullanmadan bir projeyi yapabilirsiniz. Fakat o zaman yapamayacaginiz isler, yapabilecekleriniz onune gecer.

    Delegates bir projede bir veya birden fazla methodu gosteren bir referans turunden bir nesnedir. Delegates’i kullanamaya baslamadan once tipki bir method tannimlar gibi, delegate’imizin tanimlamasini yapariz. Delegates 2 islem arasinda anahtar gorevi gorur.

    image (C-Sharp Nedir’den alintidir)

     

    Delegates’i size anlatmak icin kullanacagim ornektenten biraz bahsedeyim. Gunluk yasantimizda Delegates’in yaptigi ise verebilecegim en iyi ornek, Lamba ve Lambayi calistiran Dugmedir. Dugme, lambanin yanmasini tetikleyen bir anahtardir(aradaki kablo vasitasi ile). Bunu ornegimizde daha iyi anlayabiliriz. Ornegimize baslarken Ampul ve Dugme’ icin Class yazalim.

    Ampul Class’i :

    public class Ampul
        {
            private string Marka_;
            public string Marka
            {
                get { return this.Marka_; }
                set { this.Marka_ = value; }
            }
    
            public Ampul(string AmpulMarka)
            {
                this.Marka_ = AmpulMarka;
            }
    
            public void BagliBulundugumDugmeyeBasildi(DugmeDurumu Sinyal)
            {
                if (Sinyal == DugmeDurumu.Acik)
                {
                    System.Windows.Forms.MessageBox.Show(this.Marka_ + " ampülü yanıyor !");
                }
                else if (Sinyal == DugmeDurumu.Kapali)
                {
                    System.Windows.Forms.MessageBox.Show(this.Marka_ + " ampülü yanmıyor !");
                }
            }
        }

    Dugme Class’i:

    public class Dugme
        {
    
            public event KabloDelegate SinyalGeldi;
    
            private DugmeDurumu DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
    
            public DugmeDurumu DugmeninAnlikDurumu
            {
                get { return this.DugmeninAnlikDurumu_; }
            }
    
            private KabloDelegate DugmeBaglantiKablosu = null;
    
            public void AcKapat()
            {
                if (this.DugmeninAnlikDurumu_ == DugmeDurumu.Kapali)
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Acik;
                }
                else
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
                }
    
                if (SinyalGeldi != null) SinyalGeldi(this.DugmeninAnlikDurumu_);
            }
        }

    Dugme durumunu belirtmek icin Enum kullanalim:

     public enum DugmeDurumu
        {
            Acik,
            Kapali
        }

     

    public void AcKapat()
            {
                if (this.DugmeninAnlikDurumu_ == DugmeDurumu.Kapali)
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Acik;
                }
                else
                {
                    this.DugmeninAnlikDurumu_ = DugmeDurumu.Kapali;
                }
    
                if (SinyalGeldi != null) SinyalGeldi(this.DugmeninAnlikDurumu_);
            }

    Ve en onemlisi anahtar gorevi gorecek olan Delegate’imizi tanimlayalim:

    public delegate void KabloDelegate(DugmeDurumu dgm);

     

    Simdide sira FormLoad’a yazilacak kodlarda:

    private void SerkanHekimogluDelegates_Load(object sender, EventArgs e)
            {
                Ampul amp = new Ampul("Birinci Ampul");
                Ampul amp2 = new Ampul("Ikinci Ampul");
    
                Dugme dgm = new Dugme();
    
                dgm.SinyalGeldi += new KabloDelegate(amp.BagliBulundugumDugmeyeBasildi);
                dgm.SinyalGeldi += new KabloDelegate(amp2.BagliBulundugumDugmeyeBasildi);
    
                dgm.AcKapat();
            }

     

    Formumuzu Run ettigimizde, Form Load’a koydugumuz Temsilcilerimizin, tanimlamis oldugu Joblari yaptigini goreceksinizdir.

     

    Eventler hakkinda bilgiyi ve ornegi ikinci makalemizde yapacagiz.

     

     

     

    Written by Serkan Hekimoğlu

    January 18th, 2010 at 11:21 am

    Posted in .NET, C#

    Tagged with , , ,

    XML Serialization – How to do XML Serialization?

    without comments

    Merhaba arkadaslar, bu makalede sizlerle daha onceden uzerinde durmus oldugumuz Serialization konusunu kullanaraktan, Serialize edilmis XML dosyasi yaratacagiz.

    Serialization işlemi, son durumlarını korumak istediğimiz nesnelerin, hiçbir veri kaybına uğramadan, geçici olarak hafızada veya kalıcı olarak bir dosyada saklanmasıdır. Bu dosya tipi XML veya binary olabilir. Bunlar her ortamdan kolayca erişilebilen basit dosya tipleridir. Bu yontem ile cok buyuk miktardaki verilere ulasabiliriz, transfer edebiliriz. Ve baska kullanicilarinda kullanimina acabiliriz.

    Uygulamayi yapmak icin oncelikle WindowsApplication Projesi olusturuyoruz. Bu ornekte herhangi UI kullanmayacagiz, ve herseyi FormLoad’da yapacagiz. Oncelikle ornegimizden bahsedelim. Bir adet Insan class’i olusturacagiz, ve insan class’ini kullanaraktan bir kisi olusturup, bilgilerini local diskimizde saklayacagiz (Tabi bu sizin isteginize bagli, isterseniz database’de saklayip baska kullanicilarin kullaniminada acabilirsiniz)

     

    [Serializable()]
        public class Insan
        {
            private int TcKimlikNo_;
            public int TcKimlikNo
            {
                get { return TcKimlikNo_; }
                set { TcKimlikNo_ = value; }
            }
    
            private string AdSoyad_;
            public string AdSoyad
            {
                get { return AdSoyad_; }
                set { AdSoyad_ = value; }
            }
    
            [NonSerialized(),System.Xml.Serialization.XmlIgnore()]
            private int SosyalGuvenlikNo_;
    
            public int SosyalGuvenlikNo
            {
                get { return SosyalGuvenlikNo_; }
                set { SosyalGuvenlikNo_ = value; }
            }
    
            public override string ToString()
            {
                return this.TcKimlikNo_ + " - " + this.AdSoyad_;
            }
    
            [System.Runtime.Serialization.OnDeserialized()]
            protected void DeserializeLog(System.Runtime.Serialization.StreamingContext sc)
            {
                // Loglama Kodlari.
                MessageBox.Show("Deserialize Edildi !");
            }
    
            [System.Runtime.Serialization.OnSerialized()]
            protected void SerializeLog(System.Runtime.Serialization.StreamingContext sc)
            {
                // Loglama Kodlari.
                MessageBox.Show("Serialize Edildi !");
            }
    
        }

    Bu noktada en onemli olan sey, classinizi tanimlarken bu classin Serialize edilebilmesi icin uste ekledigimiz [Serializable()] textidir.

    Simdi gecelim FormLoad kodlarimizia.

     

     private void FormXmlSerialization_Load(object sender, EventArgs e)
            {
                System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.
                    XmlSerializer(typeof(Insan));
                Insan ins = new Insan();
                ins.AdSoyad = "Serkan Hekimoglu";
                ins.SosyalGuvenlikNo = 1234567;
                ins.TcKimlikNo = 2938475;
    
                System.IO.FileStream fs = new System.IO.
                    FileStream("G:\\Insan.xml", System.IO.FileMode.OpenOrCreate);
    
                xs.Serialize(fs, ins);
    
                fs.Close();
    
            }

    Written by Serkan Hekimoğlu

    January 6th, 2010 at 1:05 pm

    How To Use File Stream in .Net? Deflate Stream. File Stream kullanimi.

    without comments

    Merhaba arkadaslar, bu makalemizde size File Streaming hakkinda biraz bilgi verecegim. Kullanim sekli, amaci gibi, ve File Stream kullanarak sizinle dosya sikistirma programi hazirlayacagim ( Zip – Unzip Programi).

    Yapmak istedigimiz islem .Net 2.0 ile gelmis olan GZip Streaming islemidir. Bu sınıf streamleri sıkıştırmak ve sıkıştırılmış streamleri geri açmak için metotlar ve özellikler sağlıyor. DeflateStream sınıfıyla beraber System.IO.Compression isim alanında bulunuyor. GZip stream Stream sinifindan turemektedir. Gzip veri formatimizi Deflatestream ile ayni algoritmayi kullanmaktadir. Fakat Gzip algoritmasi, boyutu 4 GB den buyuk dosyalarda islevini yitirmektedir.  DeflateStream ve Gzip Stream fonksiyonlarinin sikistirma ozelligi aciga stream cikartir. MSDN’den belirtildigi uzere bu algoritmalar sikistirilmamis dosyalar icin en iyisidir. Aksi takdirde sikistirilmis bir dosyayi bu algoritmalari kullanaraktan sikistirmaya calisirsaniz, dosya boyutunda artisa sebep olabilirsiniz. Yapmak istedigimiz Compression ve Decompression ornegimizde System.IO.Compression adi altinda bulunun DeflateStream algoritmasini kullanacagiz.

    Oncelikle uygulamamiza baslarken, bir adet DeflateStreamSamples isimli Windows Application Projesi olusturuyoruz. Ilk olarak sikistirma islemi yapacagiz. Bunun icin asagidaki gibi bir UI olusturalim, ve ekranimiza Open File Dialog ekleyelim.

    image

    Text Box = txtFileName

    Dosya Sec Button = selectFileButton

    Check Box = chkDelete

    Sikistir Button = zipButton

    Dosya Sec Buttonumuzun Click eventinde, eklemis oldugumuz Open File Dialog’u kullaniyoruz.

    private void selectFileButton_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    txtFileName.Text = openFileDialog1.FileName;
                }
            }

    Sikistir Button’umuzun click eventinde asagidaki kodlari uyguluyoruz.

    private void zipButton_Click(object sender, EventArgs e)
            {
                if (txtFileName.Text.EndsWith(".srk"))
                {
                    MessageBox.Show("Bu Dosya Zaten Sıkıştırılmış", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }
    
                if (txtFileName.Text != string.Empty)
                {
                    System.IO.FileStream fsSonuc = new System.IO.
                        FileStream(txtFileName.Text + ".srk", System.IO.FileMode.OpenOrCreate);
    
                    System.IO.Compression.DeflateStream ds = new System.IO.Compression.
                        DeflateStream(fsSonuc, System.IO.Compression.CompressionMode.Compress);
    
                    System.IO.FileStream fsHedef = new System.IO.
                        FileStream(txtFileName.Text, System.IO.FileMode.OpenOrCreate);
    
                    byte[] OkunanData = new byte[fsHedef.Length];
                    byte[] YazilacakData = new byte[fsHedef.Length];
    
                    fsHedef.Read(YazilacakData, 0, YazilacakData.Length);
                    ds.Write(YazilacakData, 0, YazilacakData.Length);
    
                    // Boyutunu Kaydediyoruz :
    
                    System.IO.File.WriteAllText(txtFileName.Text + ".srk.info", fsHedef.Length.ToString());
    
                    ds.Close();
                    fsHedef.Close();
                    fsSonuc.Close();
    
                    if (chkDelete.Checked)
                    {
                        System.IO.File.Delete(txtFileName.Text);
                        System.IO.File.Delete(txtFileName.Text + ".info");
                    }
    
                    MessageBox.Show("Zip process has been completed.", "",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Please Select File for Zip", "",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
    
            }

     

    Buradaki olay akisini ozetlemek gerekirse. Secilen bir dosyayi sikistiriyoruz, ve .srk uzantili olarak kaydediyoruz.Dosyamizin

    boyutunuda .srk.info olarak sisteme kaydediyoruz. Ilk basta kullanmis oldugumuz if kontrolu icinde yer alan kod, messagebox’tanda anlayacaginiz uzere sikistirilmis

    olan bir dosyanin, tekrar sikistirilmasini onlemek amacli yazilmistir. Yukarida da bahsettigim gibi, sikistirilmis bir dosyayi tekrar sikistirmak,

    dosya boyutunda artisa yol acabilir. UI’da kullandigimiz checkBox’un islevini aciklamak gerekirse: Sikistirma isleminde eger checkBox’i secerseniz, sikistirdiginiz dosyanin orjinali silinir, ve sikistirilmis hali sistemde tutulur. Secmediginiz takdirde, hem orjinal dosya, hemde sikistirilmis dosya sistemde tutulur. Burda sikistirlan dosya, orjinal dosya ile ayni Path’de tutulur. Sikistirma sonucu 2 dosya olusur. Bunlar .srk ve .srk.info uzantili dosyalardir. 2. dosyada orjinal dosyamizin boyutu saklanmaktadir.

    Sirada yukarida yaptigimiz islemin tam tersi var (DeCompression). DeCompression islemi icinde asagidaki benzer UI tasarimini yapalim, ve Open File Dialog ekleyelim.

    image

     

    Text Box = txtFileName

    Dosya Sec Button = selectFileButton

    Check Box = chkDelete

    UnZip Button = unzipButton

     

    Dosya Sec Buttonumuzun click eventinde asagidaki kodlari uygulayalim.

    private void selectFileButton_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    txtFileName.Text = openFileDialog1.FileName;
                }
            }

    Unzip Buttonumuzun click eventinde asagidaki kodlari uyguluyoruz.

     

    private void unZipButton_Click(object sender, EventArgs e)
            {
                if (txtFileName.Text != string.Empty && txtFileName.Text.EndsWith(".srk"))
                {
    
                    System.IO.FileStream fsAcilacak = new System.IO.
                        FileStream(txtFileName.Text, System.IO.FileMode.OpenOrCreate);
    
                    System.IO.Compression.DeflateStream ds = new System.IO.Compression.
                        DeflateStream(fsAcilacak, System.IO.Compression.CompressionMode.Decompress);
    
                    System.IO.FileStream fsSOnuc = new System.IO.
                                        FileStream(txtFileName.Text.Remove(txtFileName.TextLength - 4),
                                        System.IO.FileMode.OpenOrCreate);
    
                    byte[] AcilmisData = new byte[Convert.ToInt64(System.IO.File.ReadAllText(txtFileName.Text + ".info"))];
    
                    ds.Read(AcilmisData, 0, AcilmisData.Length);
    
                    fsSOnuc.Write(AcilmisData, 0, AcilmisData.Length);
    
                    fsAcilacak.Close();
                    ds.Close();
    
                    if (chkDelete.Checked)
                    {
                        System.IO.File.Delete(txtFileName.Text);
                        System.IO.File.Delete(txtFileName.Text + ".info");
                    }
    
                    MessageBox.Show("UnZip process has been completed. Check your file at same path !", "",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    MessageBox.Show("Please Select File for UnZip", "",
                        MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }

    Yukarida islemi ozetlemek gerekirse, sikistirilmis dosyamiz olan .srk uzantili dosyayi sisteme okutuyoruz, burdaki checkBox’imizin islevi, sikistirilmis dosyayi orjinal haline cevirdikten sonra, kalan .srk ve .srk.info uzantili dosyalari silmek icindir. Isaretlemediginiz takdirde, islem sonunda sistemde 3 dosya olur. Orjinal dosya, .srk ve .srk.info uzantili dosya.

    Written by Serkan Hekimoğlu

    January 6th, 2010 at 10:35 am

    How To Use Ternery Operator – Ternery Operator nasil kullanilir?

    without comments

    Ternery Operatoru’nun kullanim amaci .Net’te tek satirlik if-else kosulunu ve sonuclarini gostermektir.

    Ornegin, MessageBox’da bir text’in value’sini gosterecegiz. Eger textBox’a bir deger girilmemisse, yani string.Empty ise “Bir Deger Girin.”, degilse textBox.Text’i ekrana bastiracagiz. Bunun icin ornek kod blogu asagidaki gibidir.

    private void button1_Click(object sender, EventArgs e)
            {
                string message = textBox1.Text == string.Empty
                    ? "Bos"
                    : textBox1.Text;
    
                MessageBox.Show(message);
            }

    Buraki olayi ozetlemek gerekirse; message degiskenini bir baska degiskene esitliyoruz. Bu esitledigimiz degiskende, bir kosulumuz var. Kullanacagimiz arac textbox oldugundave if-else kosullarimizda Eger textbox.text bos ise X islemini yap, degil ise Y islemini yap. Esitlikten sonraki textBox1.Text == string.Empty, ifadesi bize Boolean sonuc dondurecektir. Hemen ardindan kullanilan ? simgesi Boolean sonucun True donmesi durumunda uygulanacak islemdir. Sonucun False donmesi sonucunda : sembolunden sonra gelen kod isleme alinir. Yani Eger True ise ? durumu, degil ise : sonrasindaki durum uygulanir.

    Written by Serkan Hekimoğlu

    January 5th, 2010 at 10:50 am

    Posted in .NET, C#

    Tagged with , , ,

    What is SSIS? Ease of Use. Sql Server Integration Services nedir? Bolum / Part 1

    without comments

    Merhaba arkadaslar, bu makalede size SSIS (Sql Server Integration Services) hakkinda bilgiler vericem. Gunumuz sistemlerinde Veri / Data kelimesi gerek kurumsal gerek bireysel cok buyuk bir onem tasimaktadir. Peki biz bu verileri datalari ne sekillerde tutariz? sorusuna ornek olarak bircok sey soyleyebiliriz. Bana gore gelmis gecmis en basarili program Windows icindeki NOTEPAD’dir. Notepad bir veri saklama aracidir. Hicbor komplike yapi kullanmadan verilerinizi hic bir kayiba ugramadan saklayabilirsiniz. Bahsettigim bu komplike yapilarda son derece basarili yine Notepad’in yaptigi isi yapan araclardir. Bunlara ornek verecek olursak, Microsoft urunlerinden Excel, Access, ve gunumuzde en yaygin veri saklama araci olan SQL Server, ve bunlar gibi bir cok arac. Simdi soyle birsey dusunun, sisteminizde bu araclarin bircogunu kullanaraktan veriler sakliyorsunuz. Excelde, kisi bilgileri tutuyorsunuz. Ayni yapiya sahip olan bilgiler SQL Server’da da tutabiliyorsunuz. Peki sizden soyle birsey istense, exceldeki ayni bilgileri almaniz ve SQL server’a yazmaniz, veya Access veri tabanindan bilgileri alip SQL Server veya Excel’e yazmaniz. Iste bu noktada isi kolaylastirmak adina SSIS devreye giriyor. SSIS kullanarak Access’den SQL’e, Access’den Excel’e, herhangi bir text dosyasindan SQL veya Access’e… Kisaca ozetlemek gerekirse herhangi bir veritabanindan bir baska veri tabanina istediginiz sartlarda veri almak yada vermek islemini kolaylikla gerceklestirebilirsiniz. Isi abartmak gerekirse, SSIS toollari sayesinde yarattiginiz bir veri dosyasini, ornegin bir excel’i sikistirabilir, e-mail ile yollayabilir, veya ftp sunusuna bile gonderebilirsiniz. Ikinci kisimda bu yukarida anlattiklarim hakkinda hemen ornek yapmaya baslayacagiz.

    Written by Serkan Hekimoğlu

    December 30th, 2009 at 11:37 pm

    Posted in Microsoft SQL Server

    Tagged with , ,