Monday, September 9, 2013

Azure da neyin nesi? En iyi azure nerede yenir?

Windows Azure Nedir?

Öncelikle kısa bir tanıtım videosu izleyip azure hakkında genel bilgi sahibi olalım.




 Windows Azure Pdc 2008 konferansında açıklanmış olan  cloud computing platformudur. Kısacası Microsoft'un kendisinin sahip oldugu parallel computing, location based resources ve güçlü bir file server ağını isteyen ve parasını ödeyen herkesle paylasma projesidir. Bu platform ile facebook, youtube gibi dünya çapında site geliştirmek çok daha kolay bir hale geldi. Azure ile .net ile Visual Studio'da yazılan, Microsoft serverlarında calışan programlar Microsoft serverlarında data barındırıyor ve bunları yaparken kullanıcının hangi cografyada olduguna gore ona en yakın serverdan hizmet veriyor. Ayrica arzu edilen sayıda işlemci üzerinde calışan program, microsoftun sitelerinin ve online yazılımlarının  halihazırda kullandığı bütün imkanlara ilk andan itibaren sahip oluyor.  Sistem su an için herkese acik ve kullandığın kadar öde politikasıyla makul bir fiyatlandırma kapsamında. Türkiye gibi teknoloji yatırımlarının, donanımın ve gerekli teknik bilgi eksikliginin oldugu bir ülkede, bu tip platformların varlığı global çapta yazılım ve site geliştirlebilmesini daha olanaklı kılıyor.


   Windows Azure storage konusunda tüm cloud provider'ları açık ara geride bırakmıştır.

http://nasunicdn.s3.amazonaws.com/images/nasuni_infographic_the_state_of_cloud_storage_2013.jpg

 Windows Azure'nin zamanla bazı benchmarklarda Amazon'dan daha iyi olduğunu görebilirsiniz.

http://slashdot.org/story/13/02/21/2216221/microsoft-azure-overtakes-amazons-cloud-in-performance-test


 Şimdi Azure kimdir, bununla neler yapılır hakkında fikir sahibi olduğumuza göre hızlıca Azure'nin güncel uygulamalarda nasıl kullanıldığını yeni yazılarımda inceleyebiliriz. Kolay gelsin.

Saturday, March 9, 2013

Setup Oluşturma (c#)

1. adım:  Solution explorer kısmındaki solution dosyamıza sağ tıklıyoruz.














2. adım:  Add new project  diyoruz.

3. adım:  Other other project types'i seçiyoruz.

4. adım:  Setup and deployment proje tipini seçiyoruz.

5. adım: Visual studio installer'i seçiyoruz.

6. adım: Açılan pencereden setup project'i seçip oluşturuyoruz.



7. adım:  Solution explorer kısmında oluşturduğumuz setup dosyamıza sağ tıklayıp build ediyoruz.














Setup dosyamız projemizin bulunduğu dizindeki debug klasöründe oluşturuldu.

Thursday, March 7, 2013

Video Player Programı (C#)


Program.Cs  :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new frmMain());
        }
    }
}


MainForm.CS :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication2
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
         
        }

       
        private void btnRecor_Click(object sender, EventArgs e)
        {
         
            RecorderForm frm = new RecorderForm();
            frm.ShowDialog();
        }

        private void btnPLayer_Click(object sender, EventArgs e)
        {
         
            FrmPlayer frm = new FrmPlayer();
            frm.ShowDialog();
         
        }

        private void frmMain_Load(object sender, EventArgs e)
        {

        }
    }
}




PlayerForm.Cs :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
using ResimİslemLib;


namespace WindowsFormsApplication2
{
    public partial class FrmPlayer : Form
    {
        public FrmPlayer()
        {
            InitializeComponent();
        }

        private void BtnAc_Click(object sender, EventArgs e)
        {
            /*click olayının baslaması ile birlikte gereken kontolleri başlatmak için  kullanıcının bir dosyayı açmak
 için dosyayı seçip aç butonun basıp basmadığını kontrol ettirmemiz gerekiyor.*/
            DialogResult Cevap= opfDosyaAc.ShowDialog();
            if (Cevap != DialogResult.OK)
                return; //okey dışında herhangi bir şeye bastıysa hiç bir işlem yapmadan çıkıyor.

            if (opfDosyaAc.FileName != "" && File.Exists(opfDosyaAc.FileName) && opfDosyaAc.FileName.EndsWith("mrd"))
            { /*(1-dosya adı boş değil ise, 2- dosya adı mevcut ise, 3- seçilen dosyanın uzantısı mrd ile bitiyor
 ise)*/
                txtPath.Text = opfDosyaAc.FileName;
                btnStart.Enabled = true;
                btnStop.Enabled = true;

            }
        }

        private void txtPath_TextChanged(object sender, EventArgs e)
        {

        }

        List<Bitmap> liste;/*sınıf bazında erişilebilir olsun diye tanımını burada yaptık*/

        private void btnStart_Click(object sender, EventArgs e)
        {

            FileStream fs = new FileStream(txtPath.Text, FileMode.Open);/*file open ile seçtiğimiz yolu 
filemode modunda ile ac*/
            BinaryFormatter bf = new BinaryFormatter();
            SaveCapture dosya  =(SaveCapture)bf.Deserialize(fs); /*tekrar class dosyasına çevirdi. deserialize 
dediğimiz an bize döndürdüğü tip objecttir.  tüm class lar deserialize edildiğinde tipleri karşılaya bilmek için 
objecttir. savecapture' e cast etmeliyiz ki  içindeki resimlere ulaşabilelim*/
            liste = dosya.GetList();
            /*player bastığımızda save ile kaydedilenmrd uzantılı dosyayı alıyor BinaryFormatter ile Serializable
 ediyor tekrar ilk bastaki formata  doldurulan formata çevriliyor. o sınıfı elde ettikten sonra da sc. GetList 
dediğimizde o sınıfıa eklenmis olan tüm sınıflar gelmiş oluo.*/

            tmrPlay.Interval = dosya.Interval; /*play tusuna bastığımız anda ki timerin zamanını dosyadan çekme 
zamanına eşitledik.*/
            tmrPlay.Enabled = true; /*tick eventinin timer'ini start clickine basıldığı an başlatmak için*/
        }

        int sira = 0;

        private void tmrPlay_Tick(object sender, EventArgs e)
        {
            pctVideo.Image = liste[sira];
            sira++;
        }

        private void btnStop_Click(object sender, EventArgs e)
        {
            tmrPlay.Enabled = false;
        }
    }
}


SaveCapture.Cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;

namespace ResimİslemLib
{
    [Serializable] /* kodların gömülü olarak byte türünden saklanması için serializable kodunu kullandık, bu 
sayede görüntüler programın cdi kodları arasında saklanabilecek. */
    public class SaveCapture
    {
        private int interval; /*dosyaya yazdırma frekansını ayarlamak için kullanacağız. */

        public int Interval
        {
            get { return interval; }
            set { interval = value; }
        }

        public SaveCapture()
        {
            this.interval = 300;
        }

        public SaveCapture(int interval)
        {
            this.interval = interval;
        }

        List<Bitmap> dosya = new List<Bitmap>(); /* bitmap türünden veriler saklayan generic yapısında 
dosya adında liste tanımladık. */

        public void AddList(Bitmap resim) /*listemize resim eklemek için bu metodu hazırladık*/
        {
            dosya.Add(resim);
        }

        /* dosyayı dışarıya göndermek için; */
        public List<Bitmap> GetList()
        {
            return dosya;
        }


        public void SaveFile(string path)/* path dosyanın yolunu belirticek*/
        {
            FileStream fs = new FileStream(path, FileMode.CreateNew); /* filestream sınıfı ile yeni bir dosya 
oluşturduk.*/

            BinaryFormatter bf = new BinaryFormatter(); /* binaryformatter serilaze veya deserilaze yapmamızı 
sağlar. */
            /*serilaze:classı içerisindeki veri ile diske yazmak,    deserilaze: diske yazılmış halini alıp classa 
çevirmek. */
            bf.Serialize(fs, this); /*diske yazmak için serilaze bizden işlemden sonra nereye 
kaydedileceğini(filestream) ve kaydedilecek nesneyi istiyor(class). */
            fs.Flush(); /*dosyayı yazdırıyor*/
            fs.Close(); /*kapatmaz isek stream mesgul olarak kalır program hata verir*/
        }
    }
}


ScreenCapture.Cs :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Windows.Forms; /*screen sınıfı forma has bir yapı olduğundan dolayı refaranslara windows formu eklememiz gerekiyor.*/


namespace ResimİslemLib
{
    public class ScreenCapture
    {
        public Bitmap CaptureScreen() {

           /*(beyaz kagıt)*/Bitmap bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height );/*öncelikle width ve heigth değerlerini verip bir bitmap  ekran görüntüsü olışturmamız lazım.*/
            /*bitmapler ile çalışırken asıl işi yapan graphics sınıfıdır. ve yaptığınız değişikler bitmape yansır. o zaman bizim bir grafik nesnesi olusturup bitmapi ona dahil etmemiz gerekir.  new grafik ile grafik nesnesi olusturamiyoruz. graphics sınıfının altında statik metotlar vardır. fromlardan biri ile graphics metodu oluşturulur. bizim burda kullanacığımız image metodur. */

            /*(ressam)*/Graphics gr = Graphics.FromImage(bmp);
            /*Graphics sınıfı ekranın görüntüsünü çekebilir.*/
            gr.CopyFromScreen/*(ekran görüntüsü yakalıyor)*/(0, 0, 0, 0, new  Size(bmp.Width, bmp.Height)); /* bu metodunda 4 aşırı yüklenmiş metodu  vardır. koordinatları belirlemek için kullanılır. copyscreen ile ekranın belirli bir kısmının görüntüsü alınabilir.*/
            /* şuanda bmp de ekranın görüntüsü var. */

            return bmp;
        }
    }
}

Programı indirmek için ; 



Link:   https://hotfile.com/dl/197357241/f61aa1f/Video_Player.rar.html

Saturday, February 9, 2013

Collections ve Generic


Koleksiyonlar:

System.Collections isim uzayında yer alırlar.

Generic:

System.Collections.Generic isim uzayında yer alırlar.













Array:

Tüm genel diziler Array sınıfından türemiştir. Bu sınıfın dezantajı dizi boyutunun başlangıçta bilinmesinin gerekli olmasıdır. Önceden boyutu belli olan ve tek bir veri tipinin saklanacağı yapılar için uygundur.

int [] array = new int[10];
string []  array2 = new string[10];

ArrayList:

Dizilerin benzeridir. Tek farkı sadece object tipinden verileri saklanabilmesidir. Dolayısıyla ArrayList'e atılan veriler object tipinde değilse boxing uygulanır ve performans düşer. Boyutunun başlangıçta bilinmesi gerekmemektedir.

Add metodu ile eleman eklenir. Sort metodu ile elemanları sıralayabiliriz.

ArrayList liste = new ArrayListe();
liste.add("merhaba");
liste.add(2);

HashTable ve SortedList:

HashTable verileri Key alanın Hash kodlarına göre, SortedList ise alfabetik sıraya göre yapar. HashTable daha hızlı çalışır. Boyutun önceden bilinmesi gerekmez.

HashTable tbl=new HashTable();
tbl.Add("1", "metin");
tbl.Add("a",3)

Stack:

Son elemana ulaşmak en kolaydır. ilk elemana ulaşmak için diğer bütün elemanları çıkarmak gerekir.

Push() metodu koleksiyona eleman eklemek için kullanılır.

Pop() metodu son giren elemanı verirken bu elamanı koleksiyondan siler.

Bunun önüne geçen metod Peek() metodudur.

Stack stc=new Stack();
Stc.Push("deneme");

Stack stc = new Stack();
stc.Push("deneme");
stc.Push(120);
stc.Push(true);
stc.Pop();

Queue:

Enqueue() metodu koleksiyona eleman eklemek için kullanılır.

Dequeue() metodu koleksiyona giren eleman verirken bu elemanı koleksiyondan siler.

Bunun önüne geçen metod Peek() metodudur.

Queue sira=new Queue();

stc.Enqueue("deneme");
stc.Enqueue(120);
stc.Enqueue(true);

Generic:


List<T>:

En verimli çalışan ve en çok kullanılan Generic sınıfımızdır. ArrayList sınıfının Generic versiyonudur.

List<int> lst = new List<int>();

Lst.Add(2);
Lst.Add(192);


Dictionary<>  ve SortedList<>:


HashTable ve SortedList yapısını kullanmaktadırlar. Tek fark Key ve Value değerlerinin generic olmasıdır. Bu da her veri için iki adet boxing işleminden kurtulmak demektir. Bu da bize çok fazla performans artışı sağlar.

Dictionary<int, string> d = new Dictionary<int, string>();
d.Add(1,"metin1");
d.Add(2,"metin2");
d.Values----- Verileri dizi şeklinde getirir.


Stack<T>  ve Queue<T>:


Stack<int> stc = new Stack <int>();
stc.Push(5);
stc.Push(10);
stc.Pop();
stc.Peek();


Queue<int> q = new Queue<int>();
stc.Enqueue(5);
stc.Enqueue(10);
stc.Dequeue();
stc.Peek();






Friday, December 14, 2012

Arayüzlerin (Interface) Kullanılması (c#)


 .NET sınıfı kütüphanesinde de birçok arayüz bulunmaktadır. Her arayüz çeşitli amaçlar için yazılmıştır. Örneğin System isim alanında bulunan IDisposable arayüzü gereksiz nesne toplayıcısı (garbage collector) için gerekli olabilecek Dispose() metodunun uygulanmasını zorlar. Aynı şekilde System.Collections isim alanında bulunan IEnumarable arayüzü tanımladığımız sınıfların foreach döngü yapısı ile kullanabilmesini sağlar. IEnumarable arayüzü içindeki metotlar ilgili sınıf tarafından uygulanırsa tanımlanan bu sınıf foreach döngüsü ile kullanılabilir. Çünkü foreach döngüsü çalıştırılmaya başlanınca foreach bloğunda kullanılan sınıfn IEnurable arayüzünü uygulayıp uygulamadığını kontol edilir. Eğer bu arayüz uygulanmış ise IEnumarable arayüzündeki metotlar kullanılarak foreach döngüsü işletilir.Bu konumuzda IEnumarable arayüzünün kullanımına bir örnek vereceğiz.

IEnumarable arayüzünü uygulayan bir sınıf foreach döngü yapısı ile kullanılabildiğini söylemiştik. Tabi foreach döngü yapısı ile kullanabileceğimiz bir sınıfın yapısında dizi ya da daha sonra göreceğimiz koleksiyon tabanlı bir yapının bulunması mantıklı olur.


using System;
using System.Collections;

class Koleksiyon : IEnumerable
{
    int[] Dizi;
    public Koleksiyon(int[] dizi)
    {
        this.Dizi = dizi;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return new ENumaralandirma(this);
    }

    class ENumaralandirma : IEnumerator
    {
        int indeks;
        Koleksiyon koleksiyon;

        public ENumaralandirma(Koleksiyon koleksiyon)
        {
            this.koleksiyon = koleksiyon;
            indeks = -1;
        }

        public void Reset()
        {
            indeks = -1;
        }
        public bool MoveNext()
        {
            indeks++;

            if (indeks < koleksiyon.Dizi.Length)
                return true;
            else
                return false;
        }

        object IEnumerator.Current
        {
            get
            {
                return (koleksiyon.Dizi[indeks]);
            }
        }
    }
}

public class MainMetodu
{
    public static void Main()
    {
        int[] dizi = {1,2,3,8,6,9,7};

        Koleksiyon k= new Koleksiyon(dizi);

        foreach(int i in k)
            Console.Write(i + " ");

        Console.ReadLine();
    }
}





Bu programı derlediğimizde ekrana

1 2 3 8 6 9 7

yazıldığını göreceğiz.

Programda neler olup bittiğine göz atmak gerekirse, Koleksiyon isimli bir sınıfın yapısındaki Dizinin eleman değerlerini foreach döngüsü ile elde etmek için Koleksiyon sınıfı System.Collections isim alanında bulunan IEnumarable arayüzünü uyguluyor. Dolayısıyla IEnumarable arayüzündeki bütün metotları uygulamalıdır. IEnumerable arayüzünde sadece

IEnumerator GetEnumerator();

metodu ile bildirilmiştir. Bu metot dizinin içerisinde dolaşmak için gerekli olan IEnumerator referansına geri dönmektedir. Bu yüzden bu metot aşağıdaki gibi yazılmıştır.

IEnumerator IEnumerable.GetEnumerator()
{
  return new Enumaralandırma(this);
}

GetEnumerator() metodunun geri dönüş değeri için IEnumerator arayüzünden türetilmiş IEnumaralandırma sınıfı bildirilmiştir. IEnumerator arayüzündeki metot ve özellikler Koleksiyon nesnesi içindeki dizinin elemanlarına erişmek için kullanılacaktır. IEnumerator arayüzünde bulunan üye elemanlar aşağıdaki gibidir.

object Current{
get;
}

bool MoveNext();

Void Reset();

Bu iç elemanında IENumaralandırma sınıfında bildirilmesi gerekir. Current özelliği koleksiyon nesnesinin herhangi bir andaki değerini gösterir. Sade get bloğunu bildirmek yeterlidir. MoveNext() metodu dizi koleksiyon dizisi içinde bir sonraki elemana geçmek için kullanılır. Eğer bir sonraki elemana geçilemiyorsa false deperini geri döner. Reset() metodu ise koleksiyon dizisini herhangi bir andaki değerini ilk elemandan önceki elemana çeker. Yani dizinin indeksi -1 olur.

IEnumaralandırma sınıfının bir tane yapıcı metodu vardır. Bu yapıcı metot ile üzerinde işlem yapılacak Koleksiyon nesnesi alınmaktadır. Yapıcı metot ile aynı zamanda ENumarandırma sınıfındaki indeks değişkenide -1 değerine çekiliyor. Reset() metodunda ise indeks değişkeni bir artırılıyor. Eğer indeks değişkeninin  yeni değeri dizinin boyutundan büyükse false değerini geri dönmektedir. Current özelliğinin object olduğuna dikkat edin. Eper bu özellik object türünden olmasaydı mğmkğn olabilecek tür dönüşümlerini hesaba katmazsak bütün işlemleri sadece Current özelliği ile aynı türden olan diziler üzerinde yapabilirdik.