<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tamer Öz</title>
	<atom:link href="http://www.tameroz.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.tameroz.com</link>
	<description>www.tameroz.com</description>
	<lastBuildDate>Fri, 17 Feb 2012 12:52:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>New Site! Snippet Directory &#8211; Free code Snippet source for developers</title>
		<link>http://www.tameroz.com/2012/02/17/new-site-snippet-directory-free-code-snippet-source-for-developers/</link>
		<comments>http://www.tameroz.com/2012/02/17/new-site-snippet-directory-free-code-snippet-source-for-developers/#comments</comments>
		<pubDate>Fri, 17 Feb 2012 11:52:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Açık Kaynak Kod]]></category>
		<category><![CDATA[Haberler]]></category>
		<category><![CDATA[İpucları]]></category>
		<category><![CDATA[Kodlar]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=898</guid>
		<description><![CDATA[Hi, I&#8217;d like to inform about a site which Işıl and I just opened. Snippet Directory aims to be an environment where developers from all over the world share their code with other developers. One of the things that a &#8230; <a href="http://www.tameroz.com/2012/02/17/new-site-snippet-directory-free-code-snippet-source-for-developers/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>I&#8217;d like to inform about a site which <a href="http://www.isilorhanel.net">Işıl </a>and I just opened.</p>
<p>Snippet Directory aims to be an environment where developers from all over the world share their code with other developers.</p>
<p>One of the things that a developer spends his or her significant amount of time is finding sample code that does one specific thing. We provide a platform that developers reach these kinds of code easily and conveniently. In addition to this, we believe that everyone has something to learn from one another since every sample code reflects one’s different and peculiar way of thinking. We also believe that studying sample code is one of the best ways to improve one’s ability to code. That’s why our site is a useful source for amateur software developers or developers who want to improve themselves.</p>
<p>Your feedback is important to us, so please feel free to share your opinions with us via the contact us page.</p>
<p>You can also submit your code snippets if you think that it will help or be useful to others because this site is not only for providing code samples but also a platform for sharing them.</p>
<p>To visit : <a href="http://www.snippetdirectory.com">http://www.snippetdirectory.com</a><br />
To follow on Facebook : <a href="http://www.facebook.com/snippetdirectory">http://www.facebook.com/snippetdirectory</a><br />
To follow on Twitter : <a href="http://twitter.com/snippetd">http://twitter.com/snippetd</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2012/02/17/new-site-snippet-directory-free-code-snippet-source-for-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Real World Agile Roadshow</title>
		<link>http://www.tameroz.com/2012/01/06/the-real-world-agile-roadshow/</link>
		<comments>http://www.tameroz.com/2012/01/06/the-real-world-agile-roadshow/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 18:13:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=894</guid>
		<description><![CDATA[Çevikliği İş Üstünde Görün! İşleriniz yazılıma mı bağlı? Uygulamalarınız kritik işletme süreçleri ve fonksiyonlarını destekliyor mu? Yazılım geliştirme süreçlerinizi kaliteden ödün vermeden nasıl daha iyi ve hızlı bir hale getirebileceğinizi biliyor musunuz? Nasıl daha çevik olabileceğinizi, işletmenizi nasıl daha iyi &#8230; <a href="http://www.tameroz.com/2012/01/06/the-real-world-agile-roadshow/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-895" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/cevik.jpg" alt="" width="748" height="404" /></p>
<p>Çevikliği İş Üstünde Görün!</p>
<p>İşleriniz yazılıma mı bağlı? Uygulamalarınız kritik işletme süreçleri ve fonksiyonlarını destekliyor mu? Yazılım geliştirme süreçlerinizi kaliteden ödün vermeden nasıl daha iyi ve hızlı bir hale getirebileceğinizi biliyor musunuz? Nasıl daha çevik olabileceğinizi, işletmenizi nasıl daha iyi destekleyebileceğinizi ve değişimlere nasıl daha hızlı yanıt verebileceğinizi öğrenmek ister misiniz?</p>
<p>Microsoft tarafından sağlanan bu ücretsiz tek günlük seminerde, Team Foundation Server ve Visual Studio 2010 ile çevik bir yazılım geliştirme sürecini nasıl planlayabileceğinizi, yapılandırabileceğinizi ve çalıştırabileceğinizi öğreneceksiniz. Çok katmanlı bir iş hattı uygulama projesini kullanarak geliştirme ekibinizdeki her bir rol için Uygulama Yaşam Döngüsü Yönetimi ve Microsoft ALM çözümünün yararlarını göstereceğiz. Çarpıcı teknolojileri iş başındayken göreceksiniz: Windows Azure ölçeklendirilebilir bulut platform altyapısı, zengin kullanıcı deneyimi için HTML 5 ve çarpıcı mobil deneyim için Silverlight for Windows Phone. Daha fazla inceleyebilmeniz için etkinliğin sonrasında kaynak kodunun tamamını ve adım adım talimatları da alacaksınız!</p>
<p>Gündem</p>
<ol start="1">
<li>Sunum: Çevikleşmek ve Bunu Sürdürmek Ne Anlama Geliyor?<br />
Uzunluk: 45 Dakika | Seviye: 100</li>
<li>Çeviklik İş Başında – 1. Oturum: Planlama, Yapılandırma, İhtiyaçlar ve Mimari<br />
Uzunluk: 60 Dakika | Seviye: 200</li>
<li>Çeviklik İş Başında – 2. Oturum: Arka Plan – Windows Azure Platformu<br />
Uzunluk: 60 Dakika | Seviye: 200</li>
<li>Çeviklik İş Başında – 3. Oturum: Ön Uç &#8211; HTML5 ve Windows Phone 7<br />
Uzunluk: 60 Dakika | Seviye: 200</li>
<li>Çeviklik İş Başında – Kapanış Sahnesi: Oluşturma, Dağıtma ve Testler<br />
Uzunluk: 60 Dakika | Seviye: 200</li>
<li>Başlangıç: Çevik olmak bugün size nasıl değer katar?<br />
Uzunluk: 45 Dakika | Seviye: 100</li>
</ol>
<p>Nerede ve Ne Zaman?</p>
<p>Yer: Microsoft İstanbul Ofisi<br />
Tarih ve Saat: 10.01.2012 | Başlangıç saati: 09:00 | Bitiş saati: 18:00<br />
Bu ücretsiz etkinliğe kaydolmak için <a href="http://click.email.microsoftemail.com/?qs=3996958171be9ee56e80164d09e6ef30569c7c84128e053393a4d166e154761a40fa508b1f717d83" target="_blank">BURAYA</a> tıklayın</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2012/01/06/the-real-world-agile-roadshow/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# da Implicit ve Explicit Operatörler ve Kullanımları</title>
		<link>http://www.tameroz.com/2011/12/25/c-da-implicit-ve-explicit-operatorler-ve-kullanimlari/</link>
		<comments>http://www.tameroz.com/2011/12/25/c-da-implicit-ve-explicit-operatorler-ve-kullanimlari/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 13:24:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=861</guid>
		<description><![CDATA[Merhabalar, Daha önce http://www.yazgelistir.com/Makaleler/1000000514.ygpx adresinde yayınlanmış oldığum makalede operator overloading konusunu incelemiştik. Bu makalemde ise implicit ve explicit operator&#8217;ler üzerinde duracağız. Bu 3 operatör temel olarak tipler üzerinde işlem yapmamıza yaramaktadır. Hatırlayacak olursak operator overloading ile tipler arasında bölme, çarpma, &#8230; <a href="http://www.tameroz.com/2011/12/25/c-da-implicit-ve-explicit-operatorler-ve-kullanimlari/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Daha önce http://www.yazgelistir.com/Makaleler/1000000514.ygpx adresinde yayınlanmış oldığum makalede operator overloading konusunu incelemiştik. Bu makalemde ise implicit ve explicit operator&#8217;ler üzerinde duracağız. Bu 3 operatör temel olarak tipler üzerinde işlem yapmamıza yaramaktadır.</p>
<p>Hatırlayacak olursak operator overloading ile tipler arasında bölme, çarpma, çıkarma, toplama gibi işlemleri yapmamız mümkün olmaktaydı. Tabii ki bu işlemlerin nasıl yapılacağına dair kodları kendimizin yazması gerekiyor.</p>
<p>Implicit ve Explicit operator ile bir tipin başka bir tipe çevrilebilirliğini tanımlıyor olacağız tabii ki bir base classdan türeyen tiplerin base class a çevrilmesi mümkündür. Örnek vermek gerekirse Control class&#8217;ının bir örneğine bir Textbox class&#8217;ını atayabiliriz. Çünkü TextBox kontrolden türemiştir. Ama bir elma class&#8217;ına bir armut class&#8217;ını her ikisi de meyve class&#8217;ından türemiş olsa bile atayamayız. Ayrıca bir birine cast edemeyiz de.</p>
<p>Implicit operator ile bu class&#8217;ları birbirlerine hiçbir casting veya convert işlemi yapmadan atanabilir hale getirebiliriz. Bunun için bu class&#8217;ların aynı class&#8217;dan türemiş olmalarına gerek yok. İmplicit operator ile ilgili bir örneği de makalemin ilerleyen kısımlarında beraber yapacağız.</p>
<p>Explicit bir operator tanımlayarak biz bu class&#8217;ları birbirine explicit olarak cast edilebilir hale getirebiliriz. Bunun için aynı class&#8217;dan türemiş olmalarına da gerek yok. Bunu makalemizin ilerleyen kısımlarında bir örnekle daha net açıklamaya çalışacağım.</p>
<p>İmplicit operator tanımlanmış bir class&#8217;ı diğerine çevirirken compiler hiçbir hata vermez dolayısıyla bu iki class&#8217;ı birbirine çevirirken bir veri kaybı veya bir class şemalarında bir olumsuzluk oluyorsa developer bunu hiçbir zmaan anlayamaz. Böyle durumlarda explicit operator kullanılması tercih edilmelidir. Explicit operator tanımlanmış bir class diğerine direkt atanamadığından ve compiler illa ki cast edilmesini istediğinden developer bu işlemin bazı olumsuzlukları olabileceğini düşünecek ve her iki class&#8217;ın yapılarını karşılaştıracaktır.</p>
<p>Şimdi isterseniz implicit operator ile ilgili örnek yapalım.</p>
<p>Aşağıdaki gibi bir class&#8217;ımız olduğunu düşünelim.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class Currency
    {
        public decimal Value { get; set; }
        public string Sign { get; set; }
    }
</pre>
<p>Bu class&#8217;ımızı şu şekilde kullanmaya çalışalım.</p>
<pre class="brush: csharp; title: ; notranslate">
            //class imizin bir instance ini aliyoruz
            Currency c = new Currency();
            c.Value = 12;
            c.Sign = &quot;$&quot;;
            //simdi bu class'imizi bir decimal degere atamaya calisalim.
            decimal d = c; //&lt;-- Bu satirda Connot implicitly convert type Currency to decimal hatasi verecektir.
</pre>
<p>Şimdi bu işlemi implicit operator ile nasıl yapılabilir kılacağımızı inceleyelim. Bu işlem için class&#8217;ımıza bir implicit operator yazıyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class Currency
    {
        public decimal Value { get; set; }
        public string Sign { get; set; }
        public static implicit operator decimal(Currency c)
        {
            return c.Value;
        }
    }
</pre>
<p>Bunu operatoru yazdıktan sonra kodumuz hata vermeyecektir ve yukarıdaki cast işlemi implicit olarak yapılacaktır.</p>
<p>Implicit operator syntax&#8217;ına baktığınızda publIs static implicit operator CevrilecekTip(MevcutTip) olarak bir syntax görüyorsunuz. Kullanımı oldukça basit.</p>
<p>Ancak burada dikkat edilmesi gereken bir nokta bu işlem sorunsuz bir şekilde yapılmakta ve Currency&#8217;nin sign property&#8217;sinde ki değer bu adımdan sonra kullanılamamaktadır. Aşağıda bir tane daha implicit operator örneği paylaşıyorum.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class Inch
    {
        public decimal Length { get; set; }
        public static implicit operator Cm(Inch i)
        {
            Cm c = new Cm();
            c.Length = i.Length * 2.54M;
            return c;
        }
    }
    public class Cm
    {
        public decimal Length { get; set; }
        public static implicit operator Inch(Cm c)
        {
            Inch i = new Inch();
            i.Length = c.Length / 2.54M;
            return i;
        }
    }
</pre>
<p>Bu sayede aşağıdaki kodu hatasız bir şekilde çalıştırabiliriz oluyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
            Inch i = new Inch();
            i.Length = 5;
            Cm cm = i;
            Console.WriteLine(cm.Length);
</pre>
<p>Implicit operator kullanımına ait güzel ve daha karmaşık bir örnek incelemek isterseniz. http://www.yazgelistir.com/Makaleler/1000002697.ygpx adresindeki makaleyi incelemenizi öneriyorum.</p>
<p>Şimdi isterseniz benzer örnekleri explicit operator ile ilgili örnekler yapalım. Class&#8217;larımızın aynı olduğunu düşünelim.</p>
<p>Yine aynı nesneleri kullandığımızı sadece karışmaması adına isimlerini değiştirdiğimizi düşünelim.</p>
<pre class="brush: csharp; title: ; notranslate">
   public class CurrencyExplicit
    {
        public decimal Value { get; set; }
        public string Sign { get; set; }

    }
</pre>
<p>Yine aynı atama örneğini deneyelim.</p>
<pre class="brush: csharp; title: ; notranslate">
            CurrencyExplicit insCurrencyExplicit = new CurrencyExplicit();
            insCurrencyExplicit.Value = 12;
            insCurrencyExplicit.Sign = &quot;$&quot;;
            decimal d = insCurrencyExplicit;//bu atama islemini yapamiyoruz.
</pre>
<p>Şimdi class&#8217;ımıza explicit bir operator ekleyelim.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class CurrencyExplicit
    {
        public decimal Value { get; set; }
        public string Sign { get; set; }
        public static explicit operator decimal(CurrencyExplicit c)
        {
            return c.Value;
        }
    }
</pre>
<p> Ve atama işlemini tekrar yapmayı deneyelim ve bu satırda compiler&#8217;ın hala hata verdiğini görelim. Verdiği hata Cannot implicitly convert type &#8216;CurrencyExplicit&#8217; to &#8216;decimal&#8217;. An explicit conversion exists (are you missing a cast?). Burda zaten bize gerekli ipucunu söylüyor. Ben bu tipleri birbirine çeviremiyorum ama explicit bir çevrim mevcut cast etmeyi atlıyor olabilir misin şeklinde çok anlaşılır bir mesaj veriyor. O zaman biz casting&#8217;imizi yapalım.</p>
<pre class="brush: csharp; title: ; notranslate">
            CurrencyExplicit insCurrencyExplicit = new CurrencyExplicit();
            insCurrencyExplicit.Value = 12;
            insCurrencyExplicit.Sign = &quot;$&quot;;
            //decimal d1 = insCurrencyExplicit;//bu atama islemini yapamiyoruz.
            decimal d1 = (decimal)insCurrencyExplicit;
 </pre>
<p>Gördüğünüz gibi çevrim işlemini biz tanımladık ama direkt çevrime compiler izin vermedi ve bizim cast etmemizi istedi. işte bu noktada veri kayıpları olacaksa, örneğin sign değeri kaybolacaksa developer bunun farkına varabilir.</p>
<p>Explicit operator syntax&#8217;ına baktığınızda publIs static explicit  operator CevrilecekTip(MevcutTip) olarak bir syntax görüyorsunuz. Kullanımı oldukça basit.</p>
<p>Aşağıda bir tane daha explicit operator örneği paylaşıyorum. Biraz önceki örneğin aynısını yapalım.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class InchExplicit
    {
        public decimal Length { get; set; }
        public static explicit operator CmExplicit(InchExplicit i)
        {
            CmExplicit c = new CmExplicit();
            c.Length = i.Length * 2.54M;
            return c;
        }
    }
    public class CmExplicit
    {
        public decimal Length { get; set; }
        public static explicit operator InchExplicit(CmExplicit c)
        {
            InchExplicit i = new InchExplicit();
            i.Length = c.Length / 2.54M;
            return i;
        }
    }
</pre>
<p>Şimdi ise nasıl kullanacağımızı inceleyelim.</p>
<pre class="brush: csharp; title: ; notranslate">
            InchExplicit ie = new InchExplicit();
            i.Length = 5;
            CmExplicit cme = (CmExplicit)ie;
</pre>
<p>Gördüğünüz gibi yine cast etmek gerekti.</p>
<p>Bu makaledeimplicit ve explicit operator&#8217;leri örneklerle incelemeye çalıştık. Umarım faydalı olmuştur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/25/c-da-implicit-ve-explicit-operatorler-ve-kullanimlari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>INotifyPropertyChanged Kullanımı</title>
		<link>http://www.tameroz.com/2011/12/24/inotifypropertychanged-kullanimi/</link>
		<comments>http://www.tameroz.com/2011/12/24/inotifypropertychanged-kullanimi/#comments</comments>
		<pubDate>Sat, 24 Dec 2011 16:25:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=857</guid>
		<description><![CDATA[Merhabalar, Bu makalemde sizlerle INotifyPropertyChanged interface&#8217;ini temel olarak, nerelerde kullanılabileceğini inceleyeceğiz ve küçük bir örnek yapacağız. Adından da anlaşılabileceği gibi INotifyPropertyChanged değişen property&#8217;lere ait değerleri yakalamak için kullanılır. Bu interface&#8217;e baktığımızda içerisinde PropertyChanged isminde bir event olduğunu görüyoruz. Bu event &#8230; <a href="http://www.tameroz.com/2011/12/24/inotifypropertychanged-kullanimi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Bu makalemde sizlerle INotifyPropertyChanged interface&#8217;ini temel olarak, nerelerde kullanılabileceğini inceleyeceğiz ve küçük bir örnek yapacağız.</p>
<p>Adından da anlaşılabileceği gibi INotifyPropertyChanged değişen property&#8217;lere ait değerleri yakalamak için kullanılır. Bu interface&#8217;e baktığımızda içerisinde PropertyChanged isminde bir event olduğunu görüyoruz. Bu event herhangi bir property&#8217;nin değeri değiştiğinde fırlayacak olan event&#8217;tir.</p>
<p>Ek bir bilgi olarak vermek gerekirse INotifyCollectionChanged ise Collection&#8217;a ait herhangi bir üye değiştiğinde kullanılır. Bu interface&#8217;in içeriğine baktığımızda CollectionChanged isminde bir evenet olduğunu göryoruz. Bu evet collection üzerinde herhangi bir değişiklik olduğunda fırlayacak event&#8217;tir.</p>
<p>Özellikle MVVM pattern&#8217;i kullandığınız uygulamaların temeli DataBinging olduğundan bu interface&#8217;i kullanmanız kaçılmazdır. Collection kullanmak gereken durumlarda ise ObservableCollecion generic tipini kullanmak bu tip INotifyCollectionChanged ve INotifyPropertyChanged interfacelerini barındırdığından çok daha uygun olacaktır ve implemantasyonu çok daha kolaydır.</p>
<p>İsterseniz bu özelliklerin nasıl kullanıldığını örnek uygulamamız üzerinde inceleyelim.</p>
<p>Yapacağımız örneği arabalarının anlık hızlarını takip etmek için kullanan bir şirket senaryosunu canlandıralım. Örneğimizde herhangi bir dış kaynaktan veri okumadığımız için araçların hızlarını güncellemeyi bir timer nesnesi üzerinden yapacağız. Tüm örneklerimizde aynı ekranı kullanacağız bu sayede metodlar arasındaki avantaj ve dezavantajları karşılaştırabileceğiz.</p>
<p>İlk örneğimizde bir çoğumuzun uygulamalarda kullandığı basit bir araba nesnesi üzerinden çalışalım ve şirketimize ait arabaları ve hızlarını gridimizde gösterelim. Formumuzu aşağıdaki gibi tasarlıyoruz. Tasarımda gözükmeyen bir de timer kontrolümüz var unutmamamız gerek. Yaptığımız 2 örnekte de aynı formu kullanacağız.</p>
<p><img class="alignnone size-full wp-image-858" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1.jpg" alt="" width="576" height="246" /></p>
<p>Ekran görüntüsünde gördüğünüz gibi 1 button ve 1 gridden oluan bir form. Initiate Cars ile sahadaki arabalarımızın listesini gride yükleyeceğiz. Saniyede bir çalışması için kurduğumuz timer ise arabalarımızın hızını güncellemeyi simule edecek.</p>
<p>Öncelikle araba class&#8217;ımızı oluşturalım.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class SimpleCar
    {
        public string Plate { get; set; }
        public string Driver { get; set; }
        public int CurrentSpeed { get; set; }
    }
</pre>
<p>Şimdi ise formumuzun kodunu yazalım.</p>
<pre class="brush: csharp; title: ; notranslate">
    public partial class SimpleCarForm : Form
    {
        public SimpleCarForm()
        {
            InitializeComponent();
        }
        BindingList&lt;SimpleCar&gt; cars = new BindingList&lt;SimpleCar&gt;();
        BindingSource bs = new BindingSource();
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void timerUpdateCurrentSpeeds_Tick(object sender, EventArgs e)
        {
            Random r = new Random();
            foreach (SimpleCar sc in cars)
            {
                sc.CurrentSpeed = r.Next(30, 120);
            }
        }

        private void btnInitiateCars_Click(object sender, EventArgs e)
        {
            SimpleCar sc1 = new SimpleCar { Plate = &quot;34 AAA 34&quot;, Driver = &quot;Mustafa&quot;, CurrentSpeed = 0 };
            SimpleCar sc2 = new SimpleCar { Plate = &quot;34 BBB 34&quot;, Driver = &quot;Ahmet&quot;, CurrentSpeed = 0 };
            SimpleCar sc3 = new SimpleCar { Plate = &quot;34 CCC 34&quot;, Driver = &quot;Mehmet&quot;, CurrentSpeed = 0 };
            cars.Add(sc1);
            cars.Add(sc2);
            cars.Add(sc3);

            bs.DataSource = cars;
            grvCars.DataSource = bs;
        }
    }
</pre>
<p>Gördüğünüz gibi Initiate Cars metodunda araba listesini yüklüyoruz. Burdaki yükleme işlemlerini direkt olarak datasource&#8217;a list vererek değilde bu şekilde yaptım ki her iki örneğimizde de aynı kodu kullanalım. Formu çalıştırıp InitiateCars buton&#8217;una tıkladığımızda timer çalışmasına rağmen griddeki hiçbir hız bilgisinin güncellenmediğini görüyoruz. Gridi güncellemek için gride veriyi tekrar bind etmemiz gerekiyor.</p>
<p>Şimdi ise Car INotifyPropertyChanged&#8217;ın kullanım alanını inceleyelim. İkinci örneğimizde yine bir araba nesnesi oluşturalım. Ancak bu sefer INotifyPropertyChanged İnterface&#8217;inin implement edelim.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class Car : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(string property)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(property));
            }
        }

        public Car(string plate, string driver)
        {
            _Plate = plate;
            _Driver = driver;
        }
        private string _Plate = string.Empty;
        public string Plate
        {
            get
            {
                return _Plate;
            }
            set
            {
                if (_Plate != value)
                {
                    _Plate = value;
                    NotifyPropertyChanged(&quot;Plate&quot;);
                }
            }
        }
        private string _Driver = string.Empty;
        public string Driver
        {
            get
            {
                return _Driver;
            }
            set
            {
                if (_Driver != value)
                {
                    _Driver = value;
                    NotifyPropertyChanged(&quot;Driver&quot;);
                }
            }
        }
        private int _CurrentSpeed = 0;
        public int CurrentSpeed
        {
            get
            {
                return _CurrentSpeed;
            }
            set
            {
                if (_CurrentSpeed != value)
                {
                    _CurrentSpeed = value;
                    NotifyPropertyChanged(&quot;CurrentSpeed&quot;);
                }
            }
        }
</pre>
<p>Gördüğünüz gibi interface&#8217;i implement ettiğimizde bir event geliyor ve biz property&#8217;lerin değeri değiştiğinde bu event&#8217;ı fırlatıyoruz. Formumuzun koduna tekrar göz atalım</p>
<pre class="brush: csharp; title: ; notranslate">
public partial class CarForm : Form
    {
        public CarForm()
        {
            InitializeComponent();
        }
        BindingList&lt;Car&gt; cars = new BindingList&lt;Car&gt;();
        BindingSource bs = new BindingSource();
        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void timerUpdateCurrentSpeeds_Tick(object sender, EventArgs e)
        {
            Random r = new Random();
            foreach (Car sc in cars)
            {
                sc.CurrentSpeed = r.Next(30, 120);
            }
        }

        private void btnInitiateCars_Click(object sender, EventArgs e)
        {
            Car sc1 = new Car(&quot;34 AAA 34&quot;, &quot;Mustafa&quot;);
            Car sc2 = new Car(&quot;34 BBB 34&quot;, &quot;Ahmet&quot;);
            Car sc3 = new Car(&quot;34 CCC 34&quot;, &quot;Mehmet&quot;);
            cars.Add(sc1);
            cars.Add(sc2);
            cars.Add(sc3);

            bs.DataSource = cars;
            grvCars.DataSource = bs;
        }
    }
</pre>
<p>Şimdi isterseniz Program.cs&#8217;den başlangıç formumuzu değiştirerek yeni formumuzu çalıştıralım. Gördüğünüz gibi hız değerleri kendi kendine değişiyor.  Bizim UI tarafında herhangi bir kod değişikliği yapmamıza gerek kalmadı.</p>
<p>Ayrıca bu interfce&#8217;i implement eden class&#8217;lar üzerinden PropertyChanged event&#8217;ine subscribe olarak bir değer değiştiği gibi kendi işlerimizin yapılmasını da sağlamamız mümkün. Her ne kadar Domain prensiplerine uymasa da değişen nesnenin mail atılması, nesnelerin statelerinin tutulması gibi işlemler buna örnek olarak gösterilebilir. Umarım faydalı bir makale olmuştur.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/24/inotifypropertychanged-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity Application Block &#8211; Interception</title>
		<link>http://www.tameroz.com/2011/12/21/unity-application-block-interception/</link>
		<comments>http://www.tameroz.com/2011/12/21/unity-application-block-interception/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 13:18:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=848</guid>
		<description><![CDATA[Merhabalar, Önceki makalelerimde unity&#8217;nin genel kullanımı, dependency injection kavramı ve singleton pattern&#8217;inin unity de nasıl uygulanabileceğinden bahsetmiştik. Şimdi ise unity ile bir interceptor&#8217;u nasıl yazabileceğimize bakalım. Birçok IOC Container&#8217;da bulunan interception özelliği sayesinde uygulama geliştiricile ristedikleri bir metod çağrılmadan önce &#8230; <a href="http://www.tameroz.com/2011/12/21/unity-application-block-interception/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Önceki makalelerimde unity&#8217;nin genel kullanımı, dependency injection kavramı ve singleton pattern&#8217;inin unity de nasıl uygulanabileceğinden bahsetmiştik. Şimdi ise unity ile bir interceptor&#8217;u nasıl yazabileceğimize bakalım.</p>
<p>Birçok IOC Container&#8217;da bulunan interception özelliği sayesinde uygulama geliştiricile ristedikleri bir metod çağrılmadan önce veya sonrasında gerekli işlemleri kolaylıkla yapabilmektedirler. Seperation of Concerns prensibine çok uygun olan bu yapı sayesinde iş metodlarınızın içinde hata yakalama fonksiyonlarını tek tek yazmanıza gerek yoktur. Genellikle loglama, security checki policy injection gibi fonksiyonaliteler her sınıfta her metodda tek tek implement etmek yerine interceptor&#8217;lar ile yapılmaktadır.</p>
<p>Şimdi isterseniz bunu nasıl yapabileceğimizi inceleyelim. Öncelikle uygulamamıza interceptor ile ilgili referansları ui projemize eklememiz gerekmektedir.</p>
<p><img class="alignnone size-full wp-image-849" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/Referans2.jpg" alt="" width="441" height="278" /></p>
<p>Sonrasınsa ise InterceptorBehavior&#8217;u yani interceptor&#8217;umuzun nasıl bir davranış sergileyeceğini kodlamamız gerekiyor. Örnek uygulamamızda Servis katmanına yapılan çağrılar üzerinde işlem yapacağımız için Service projesine yeni bir class oluşturuyoruz ve adını InterceptorBehavior koyuyoruz. Bu sınıfımızı ise IInterceptionBehavior&#8217;dan implement ediyoruz. Burada implement etmemiz gereken 2 metod ve 1 property var. Bunlar</p>
<p>GetRequiredInterfaces() : Bu metod bize bu behavior&#8217;un intercept edeceği tipleri döndürecektir.</p>
<p>Invoke() : Bu metodda esas çağrılmak istenen fonksiyonu çağıracak ve dönüş parametrelerini alacağız.</p>
<p>WillExecute : Bu interceptor&#8217;un çalışıp çalışmayacağının belirlendiği property olacak.</p>
<p>En basit şekilde interceptor&#8217;umuzu aşağıdaki gibi oluşturalım. Metodların içerilerini sonradan daha detalı dolduracağız.</p>
<pre class="brush: csharp; title: ; notranslate">
namespace UI
{
    public class InterceptorBehavior : IInterceptionBehavior
    {
        public IEnumerable&lt;Type&gt; GetRequiredInterfaces()
        {
            return Type.EmptyTypes;
        }

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            IMethodReturn methodReturn = getNext().Invoke(input, getNext);

            if (methodReturn.Exception == null)
            {
                //metod basariyla calistirildi
            }
            else
            {
             //metodun calismasi sirasinda hata oldu.
            }
            return methodReturn;
        }

        public bool WillExecute
        {
            get { return true; }
        }
    }
}
</pre>
<p>Kodu inceleyecek olarak GetRequiredInterface metodunda EmptyTypes döndüğü için interceptor&#8217;umuz tüm tipler için çalışacak, WillExecute true döndürdüğü için interceptor devreye girecektir. Invoke metodunu inceleyecek olursak ilk satırda esas çağrılan metodu invoke ediyoruz. Sonrasında ise bu metodun çalışması sırasında herhangi bir hata olduysa bu hatayı görüntülüyoruz.</p>
<p>Peki bu interceptor&#8217;u çalıştırmak için servis metodunu çağırdığımız yerde ne yapmamız gerek. Cevap hiçbirşey yapmamız gerekmiyor. Sadece config&#8217;de bazı yeni tanımlamalar yapacağız. Config dosyamızın nasıl olacağını aşağıda inceleyelim</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;configuration&gt;
  &lt;configSections&gt;
    &lt;section name=&quot;unity&quot; type=&quot;Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration&quot;/&gt;
  &lt;/configSections&gt;
  &lt;unity&gt;
    &lt;typeAliases&gt;
      &lt;typeAlias alias=&quot;INotificationService&quot; type=&quot;ContractService.INotificationService,ContractService&quot;/&gt;
      &lt;typeAlias alias=&quot;NotificationService&quot; type=&quot;Service.NotificationService,Service&quot;/&gt;
      &lt;typeAlias alias=&quot;singleton&quot; type=&quot;Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity&quot; /&gt;
      &lt;typeAlias alias=&quot;transient&quot; type=&quot;Microsoft.Practices.Unity.TransientLifetimeManager, Microsoft.Practices.Unity&quot;/&gt;

    &lt;/typeAliases&gt;
    &lt;!-- Interception extension ile unity mizi extend ediyoruz--&gt;
    &lt;sectionExtension type=&quot;Microsoft.Practices.Unity.InterceptionExtension. Configuration.InterceptionConfigurationExtension,  Microsoft.Practices.Unity.Interception.Configuration&quot;/&gt;
    &lt;containers&gt;

      &lt;container&gt;
        &lt;!--kullanacagimiz extension in tipini belirliyoruz.--&gt;
        &lt;extension type=&quot;Interception&quot;/&gt;
        &lt;register type=&quot;UI.InterceptorBehavior,UI&quot;&gt;
        &lt;/register&gt;
        &lt;types&gt;
          &lt;type type=&quot;INotificationService&quot; mapTo=&quot;NotificationService&quot;&gt;
            &lt;!-- Bu tip icin interceptor ayarlari--&gt;
            &lt;!-- interceptor'umuzun tipi interface interceptor yani interface e yapilan cagrilari intercept edecek--&gt;
            &lt;interceptor type=&quot;InterfaceInterceptor&quot;/&gt;
            &lt;!--Interceptorumuzun intercept ettigi cagrilar icin bu behavior kullanilacak --&gt;
            &lt;interceptionBehavior type=&quot;UI.InterceptorBehavior,UI&quot;/&gt;
            &lt;!--lifetime i transient olarak tanimliyoruz--&gt;
            &lt;lifetime type=&quot;singleton&quot;&gt;&lt;/lifetime&gt;
            &lt;property name=&quot;UserData&quot; &gt;
              &lt;dependency /&gt;
            &lt;/property&gt;
          &lt;/type&gt;
          &lt;type type=&quot;ContractData.IUserData,ContractData&quot; mapTo=&quot;Data.UserData,Data&quot;&gt;
            &lt;lifetime type=&quot;singleton&quot;&gt;&lt;/lifetime&gt;
          &lt;/type&gt;
        &lt;/types&gt;
      &lt;/container&gt;
    &lt;/containers&gt;
  &lt;/unity&gt;
  &lt;startup&gt;
    &lt;supportedRuntime version=&quot;v4.0&quot; sku=&quot;.NETFramework,Version=v4.0&quot;/&gt;
  &lt;/startup&gt;
&lt;/configuration&gt;
</pre>
<p>Tüm yapmamız gereken bu config tanımlamasını yapmak. Artık servis üzerine yaptığımız çağrılar Behavior class&#8217;ımızın invoke metoduna girecektir. Bunu bir breakpoint koyarak test edebiliriz. Şimdi isterseniz bu kısımda yapılabilecekler hakkında ufak bir demo ile bu makalemizi bitirelim.</p>
<pre class="brush: csharp; title: ; notranslate">
namespace UI
{
    public class InterceptorBehavior : IInterceptionBehavior
    {
        public IEnumerable&lt;Type&gt; GetRequiredInterfaces()
        {
            return Type.EmptyTypes;
        }

        public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
        {
            Console.WriteLine(input.MethodBase.ToString() + &quot; cagrildi&quot;);

            IMethodReturn methodReturn = getNext().Invoke(input, getNext);
            int parameterCount = input.Inputs.Count;
            for (int i = 0; i &lt; parameterCount; i++)
            {
                Console.WriteLine(&quot;Parametre :&quot; + input.Arguments.GetParameterInfo(i).Name + &quot;, Deger:&quot; + input.Inputs[i].ToString());
            }
            if (methodReturn.Exception == null)
            {
                string retval = &quot;&quot;;
                if (methodReturn.ReturnValue != null)
                {
                    retval = methodReturn.ReturnValue.ToString();
                }
                Console.WriteLine(input.MethodBase.ToString() + &quot; basariyla calisti,Donus degeri:&quot; +  retval);
            }
            else
            {
                Console.WriteLine(input.MethodBase.ToString() + &quot; hata verdi Hata:&quot; + methodReturn.Exception.ToString());
            }
            return methodReturn;
        }

        public bool WillExecute
        {
            get { return true; }
        }
    }
}
</pre>
<p>Şimdi servis metodlarına çağrı yaptığımızda konsol çıktımız aşağıdaki gibi olacaktır.</p>
<p><img class="alignnone size-full wp-image-851" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/interceptor.jpg" alt="" width="641" height="251" /></p>
<p>Örneğini de yaptığımız gibi bazı işlemleri interceptor ile yapmak çok kolay olacaktır ve kodlama maliyetlerini ciddi azaltacaktır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/21/unity-application-block-interception/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unity Application Block &#8211; Singleton ve Transient Kavramları</title>
		<link>http://www.tameroz.com/2011/12/21/unity-application-block-singleton-ve-transient-kavramlari/</link>
		<comments>http://www.tameroz.com/2011/12/21/unity-application-block-singleton-ve-transient-kavramlari/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 13:11:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=839</guid>
		<description><![CDATA[Merhabalar, Makalemin bir önceki kısmında unity ile bir uygulamayı nasıl loose coupled hale getirebileceğimizi inceledik. Şimdi ise bu işlemi yaparken transient veya singleton ayarlarını nasıl yapabileceğimizi transient ve singleton kavramlarını açıklayarak anlatmaya çalışacağım. Singleton çok basit olmasına karşın belki de &#8230; <a href="http://www.tameroz.com/2011/12/21/unity-application-block-singleton-ve-transient-kavramlari/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Makalemin bir önceki kısmında unity ile bir uygulamayı nasıl loose coupled hale getirebileceğimizi inceledik. Şimdi ise bu işlemi yaparken transient veya singleton ayarlarını nasıl yapabileceğimizi transient ve singleton kavramlarını açıklayarak anlatmaya çalışacağım.</p>
<p>Singleton çok basit olmasına karşın belki de farkında olmadan en çok kullandığımız tasarım desenidir. Adından da anlaşıldığı üzere singleton bir sınıfa ait tek bir instance yaratma ve bunu global olarak uygulamanın heryerinden kullanmaktır. Örneğin bir class&#8217;dan sadece bir tane oluşturma gereksinim olarak uygulamamızda yer alıyorsa singleton tasarım desenini kullanmamız gerekmektedir.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class SingletonOrnek
    {
        protected SingletonOrnek()
        {
        }
        private static SingletonOrnek singletonOrnek = null;
        public static SingletonOrnek SingletonNesne
        {
            get
            {
                if (singletonOrnek == null)
                {
                    singletonOrnek = new SingletonOrnek();
                }
                return singletonOrnek;
            }
        }
    }
</pre>
<p>Transient ise singleton&#8217;un tam tersidir. Yani bir sınıfa her ulaşmak gerektiğinde yeni bir instance alınır. Yeni bir örnek üzerinden işlem yapılır.</p>
<p>Şimdi isterseniz bunu unity ile nasıl uygulayabileceğimizi inceleyelim.</p>
<p>Bunun için unity de hali hazırda 2 tip vardır. Bu tipleri unity&#8217;nin config dosyasına dahil etmemiz gerekmektedir. Bu tiplerin tanımlamasını typeAliases içinde yapıp bir alias kullanabileceğimizi gibi direkt tiplerini de yazabiliriz. Ancak ben daha derli toplu olması bakımından alias kullanılmasını tercih ediyorum. Bunun için config&#8217;de gerekli tanımlamayı aşağıdaki gibi yapabilirsiniz.</p>
<pre class="brush: xml; title: ; notranslate">
 &lt;typeAliases&gt; 

    &lt;typeAlias alias=&quot;singleton&quot; type=&quot;Microsoft.Practices.Unity.ContainerControlledLifetimeManager, Microsoft.Practices.Unity&quot; /&gt;
    &lt;typeAlias alias=&quot;transient&quot; type=&quot;Microsoft.Practices.Unity.TransientLifetimeManager, Microsoft.Practices.Unity&quot;/&gt; 

  &lt;/typeAliases&gt; 
</pre>
<p>Şimdi ise nesnelerimizi ayağa kaldırırken transient mi yoksa singleton mu kullanacağımızı tanımlamalıyız. Bunun için mappingleri tanımladığımız type nodu altında bu seçimi lifetime nodu ile yapabiliriz. Örnekler aşağıdaki gibidir.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!--?xml version=&quot;1.0&quot;?--&gt;

&lt;section name=&quot;unity&quot; type=&quot;Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration&quot;&gt;&lt;/section&gt;

      &lt;!-- alias tanımlaması bu şekilde yapılıyor. Config dosyamızda bu tanımlamadan sonra alias tanımlamasını kullanarak bu tiplere erişebileceğiz.--&gt;

      &lt;!--transient ve singleton tanımlaması--&gt;

          &lt;!-- Alias tanımlaması ile mapping örneği --&gt;
          &lt;!-- INotificationService kullanılan yerlerde NotificationService tipinin ayağa kaldırılması için --&gt;

            &lt;!--lifetime i transient olarak tanimliyoruz--&gt;

            &lt;!--lifetime i singleton olarak tanimliyoruz--&gt;
            &lt;!--	&lt;lifetime type=&quot;singleton&quot;&gt;&lt;/lifetime&gt;--&gt;
            &lt;!-- NotificationService içindeki UserData isimli property'nin NotificationService ayağa kalktığında tanımlı mappingle ayağa kaldırılması için --&gt;

          &lt;!-- Alias tanımlaması olmadan yapılmış mapping örneği --&gt;

            &lt;!--lifetime i singleton olarak tanimliyoruz--&gt;

            &lt;!-- UserData ayağa kalktığında herhangi bir propertynin ayağa kalkmasını istemiyoruz.--&gt;
</pre>
<p>Şimdi isterseniz singleton ve transient tanımlamalarının kodumuza nasıl etki ettiğine bakalım. Aşağıdaki kodu çalıştıralım.</p>
<pre class="brush: csharp; title: ; notranslate">
        static void Main(string[] args)
        {
            Console.WriteLine(&quot;Basit bir unity ornegi&quot;);
            UI.UIComponent insUIComponent = new UI.UIComponent();
            insUIComponent.Notify(&quot;oztamer@hotmail.com&quot;);
            Console.WriteLine(&quot;Devam etmek icin bir tusa basin.&quot;);
            Console.ReadLine();

            Console.WriteLine(&quot;Transient Ornek, config dosyasinda once transient sonra singleton tanimlamasini kullanin&quot;);
            UIComponent ui1 = new UIComponent();
            ui1.SetDefaultEmailAddress(&quot;oztamer@hotmail.com&quot;);
            string s1 = ui1.GetDefaultEmailAddress();
            Console.WriteLine(&quot;1: &quot; + s1);

            UIComponent ui2 = new UIComponent();
            string s2 = ui2.GetDefaultEmailAddress();
            Console.WriteLine(&quot;2: &quot; + s2);
            Console.ReadLine();
        }
</pre>
<p>Gördüğünüz gibi UIComponent nesnesinin bir örneğini alıyoruz, Örneği aldığımız anda Service ve Data nesneleri ayağa kalkıyor ve service nesnesinin SetDefaultEmailAddress metodu çağıralarak service nesnesi içerisindeki bir değişkene değer atanıyor. Sonrasında ise bir metodla bu değer okunuyor. Daha sonra yeni bir UIComponent nesnesi oluşturuluyor ve bu nesnenin GetDefaultEmailAddress metodu çağrılıyor.</p>
<p>Transient örneği inceleyelim</p>
<p><img class="alignnone size-full wp-image-843" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/transient.jpg" alt="" width="642" height="113" /></p>
<p>Transient çağrıda her iki UIComponent nesnesi içinde farklı service classları oluşturulduğundan 2. sinde geriye bir değer dönmüyor. Çünkü 2. nesneden çağrılan servis nesnesinin içerisinde bulunan değişkene henüz değer atanmamış yani ilkindne çağrılan ile ikinciden çağrılan nesneler tipleri aynı olsa bile farklı referanslarda nesneler.</p>
<p>Singleton örneği inceleyelim.</p>
<p><img class="alignnone size-full wp-image-844" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/singleton.jpg" alt="" width="642" height="107" /></p>
<p>Singleton çağrıda ise baktığımızda unity her iki UIComponent nesnesine de aynı service instance&#8217;ını verdiğini görüyoruz. Yani servis nesnesini isteyen tüm yerlerde aynı nesne referansı dönecektir.</p>
<p>Unity ile singleton ve transient tanımlamaları nasıl yapabileceğimizi gördük bir sonraki makalemde ise interceptor&#8217;ları inceleyeceğiz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/21/unity-application-block-singleton-ve-transient-kavramlari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dependency Injection ve Unity Application Block</title>
		<link>http://www.tameroz.com/2011/12/21/dependency-injection-ve-unity-application-block/</link>
		<comments>http://www.tameroz.com/2011/12/21/dependency-injection-ve-unity-application-block/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 13:01:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=827</guid>
		<description><![CDATA[Merhabalar, Bu makalemde sizlerle Dependency Injection ve Unity Application Block hakkında bilgiler paylaşmaya çalışacağım. Geliştirdiğimiz uygulamaların kurumsal bir mimariye uygun ve plug and play olmasını istiyorsak uygulamamız gereken prensiplerin başında &#8220;Single Responsibility&#8221; ve &#8220;Loose Coupling&#8221; gelmelidir. Biraz daha açıklayacak olursak &#8230; <a href="http://www.tameroz.com/2011/12/21/dependency-injection-ve-unity-application-block/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Bu makalemde sizlerle Dependency Injection ve Unity Application Block hakkında bilgiler paylaşmaya çalışacağım.</p>
<p>Geliştirdiğimiz uygulamaların kurumsal bir mimariye uygun ve plug and play olmasını istiyorsak uygulamamız gereken prensiplerin başında &#8220;Single Responsibility&#8221; ve &#8220;Loose Coupling&#8221; gelmelidir. Biraz daha açıklayacak olursak uygulamamız içindeki her bir bileşen tek bir amaca hizmet etmelidir ve bileşenler arasındaki bağlantı sıkı sıkıya değil de biraz daha hafif bir tarzda bağlantı olmalıdır. Bu ne demektir biraz açıklamak gerekirse bir sınıf başka bir sınıfın içerisindeki metodları direkt çağırıyorsa o sınıfa bağlı demektir. İleride çağrılan sınıftaki metodun yapısında bir değişiklik yapılması uygulama geliştirici için ciddi kodlama maliyeti doğuracaktır. Bilhassa bir paket uygulama geliştirdiğinizi düşünürseniz her müşterinin aynı fonksiyona ihtiyacı olduğu ancak hepsinin bu metodun içindeki hesaplamayı farklı şekilde yaptığı durumlar güzel bir örnek teşkil etmektedir. Bu tarz örneklerde her müşteri için kodu değiştirmeniz hepsi için farklı bir proje oluşturmanız, hepsi için kodu farklı derlemeniz gerekecektir ki bu hiç tavsiye edilen birşey değildir. Zaten durum bir süre sonra içinden çıkılamaz bir hal alacaktır.</p>
<p>Dependency Injection ise uygulama arasındaki bu tarz bağımlılıkları azaltmayı hedeflemekte ve gerekli yerlerde bağımlılığı kendisi bir config üzerinden gerekli tipe karar vererek enjekte etmeyi hedeflemektedir. İşte bu makalemde Microsoft Enterprise Library ile gelen Unity Application Block&#8217;un nasıl kullanılabileceğinden bahsedeceğim.</p>
<p>Şu anda Enterprise Library&#8217;nin en güncel versiyonu 5.0&#8242;dır ve http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=15104 adresinden indirilebilir.</p>
<p>Öncelikle bir konsol uygulaması oluşturarak başlayalım. EnterpriseLibrary&#8217;i kurduktan sonra gerekli referansları projemize eklememiz gerekecek.</p>
<p><img class="alignnone size-full wp-image-829" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/Referans.jpg" alt="" width="351" height="288" /></p>
<p>Bu referansları projemize ekledikten sonra artık uygulamamızı oluşturmaya başlayalım. Yapacağımız örnekte bir UI, bir servis (iş) ve de bir Veri katmanı projesi olsun. Bu 3 proje arasındaki bağımlılığı nasıl azaltacağımızı ve unity&#8217;i nasıl kullanacağımızı inceleyeceğiz.</p>
<p>UI katmanımız Servis katmanımız ile direkt olarak bir bağlantı kurmayacak ve bu bağlantı Contract adı verilen başka bir aracı class library ile gerçekleşecek. Buralardaki bağlantı kurma görevlerini sağlamak için kod yazmayacağız ancak interface tanımlamaları yapacağız. UI katmanımızda ise servis katmanının referansı yerine Contract&#8217;ın referansı bulunacak. Dolayısıyla UI katmanımız servisin kendisine sağladığı fonksiyonları, özellikleri bilecek ancak bu işlemlerin nasıl yapıldığı konusunda bilgi sahibi olmayacak. Aynı şekilde Servis ve Data katmanı arasındaki bağlantı da bu şekilde olacak.Şimdi projelerimizi oluşturup hiyerarşimize bir bakalım.</p>
<p><img class="alignnone size-full wp-image-830" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/Dependency.jpg" alt="" width="524" height="220" /></p>
<p>Gördüğünüz gibi UI, Service ve Data katmanlarımız birbirlerine sıkı sıkıya bağlı değil ve interfaceler aracılığıyla birbirlerinin hangi işleri yapabileceklerini biliyorlar ancak nasıl yaptıkları ile ilgilenmiyorlar. Şimdi esas soru benim elimde class yok sadece interface var ben bu interface&#8217;den implement olmuş class&#8217;ın yapısını biliyorum. Burada class&#8217;ı nasıl çağıracağım konusu çözülmesi gereken esas konu. İşte dependency injection bu noktada devreye giriyor. Temel olarak bir interface&#8217;in tip olarak gösterildiği property&#8217;e eriştiğimizde o interface&#8217;den implement olmuş herhangi bir class&#8217;ı kullanmalıyız. İşte bu class&#8217;ı bu property üzerine unity enjekte edecek. Yani bu class&#8217;a olan bağımlılık esasında yok ama çalışma zamanında enjekte edilerek oluşturulacak.</p>
<p>İsterseniz bunu unity ile nasıl yapabileceğimizi inceleyelim.</p>
<p>Öncelikle unity için app.config veya web.config veya benzer bir config dosyamızda bazı konfigurasyon tanımlamaları yapmalıyız. Şimdi bu config yapısını inceleyelim.</p>
<p>Config yapımızda root element Unity, bunun altında typeAliases, sectionExtensions ve containers bulunuyor. typeAliases config dosyamıza bundan sonra kullanacağımız tipleri uzun uzun yazmak yerine bir alias tanımlamamıza yarıyor. sectionExtensions ise unity içerisinde bir extension kullanacaksak bunu tanımlamamıza yarıyor (Örneğin interception). Interception&#8217;a bu makalemizin ikinci kısmında değineceğiz. containers içerisinde ise IOC container&#8217;da kullanacağımız tipleri ve bu tiplerin hangi tiplerle denk geleceğini tanımlıyoruz. Yani Dependency injection&#8217;ın yapılabilmesi için gerekli tanımlamalar burada yapılıyor. Uygulamamızda kullanacağımız config dosyasını oluşturmaya başlayalım.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;configuration&gt;
  &lt;configSections&gt;
    &lt;section name=&quot;unity&quot; type=&quot;Microsoft.Practices.Unity.Configuration.UnityConfigurationSection, Microsoft.Practices.Unity.Configuration&quot;/&gt;
  &lt;/configSections&gt;
  &lt;unity&gt;
    &lt;typeAliases&gt;
      &lt;!-- alias tanımlaması bu şekilde yapılıyor. Config dosyamızda bu tanımlamadan sonra alias tanımlamasını kullanarak bu tiplere erişebileceğiz.--&gt;
      &lt;typeAlias alias=&quot;INotificationService&quot; type=&quot;ContractsService.INotificationService,ContractsService&quot;/&gt;
      &lt;typeAlias alias=&quot;NotificationService&quot; type=&quot;Service.NotificationService,Service&quot;/&gt;
    &lt;/typeAliases&gt;
    &lt;containers&gt;
      &lt;container&gt;
        &lt;types&gt;
          &lt;!-- Alias tanımlaması ile mapping örneği --&gt;
          &lt;!-- INotificationService kullanılan yerlerde NotificationService tipinin ayağa kaldırılması için --&gt;
          &lt;type type=&quot;INotificationService&quot; mapTo=&quot;NotificationService&quot;&gt;
            &lt;!-- NotificationService içindeki UserData isimli property'nin NotificationService ayağa kalktığında tanımlı mappingle ayağa kaldırılması için --&gt;
            &lt;property name=&quot;UserData&quot; &gt;
              &lt;dependency /&gt;
            &lt;/property&gt;
          &lt;/type&gt;
          &lt;!-- Alias tanımlaması olmadan yapılmış mapping örneği --&gt;
          &lt;type type=&quot;ContractsData.IUserData,ContractsData&quot; mapTo=&quot;Data.UserData,Data&quot;&gt;
            &lt;!-- UserData ayağa kalktığında herhangi bir propertynin ayağa kalkmasını istemiyoruz.--&gt;
          &lt;/type&gt;
        &lt;/types&gt;
      &lt;/container&gt;
    &lt;/containers&gt;
  &lt;/unity&gt;
  &lt;startup&gt;
    &lt;supportedRuntime version=&quot;v4.0&quot; sku=&quot;.NETFramework,Version=v4.0&quot;/&gt;
  &lt;/startup&gt;
&lt;/configuration&gt;
</pre>
<p>Gördüğünüz gibi config tanımlaması çok zor değil. İsterseniz şimdi Unity&#8217;i nasıl kullanacağımızı görelim.</p>
<p>Öncelikle uygulamamızın içinden kullanabileceğimiz UnityHelper adında bir class yazalım.</p>
<pre class="brush: csharp; title: ; notranslate">
    public static class UnityHelper
    {
        static UnityContainer container = new UnityContainer();
        static UnityHelper()
        {
            UnityConfigurationSection section = (UnityConfigurationSection)ConfigurationManager.GetSection(&quot;unity&quot;);
            section.Configure(container);
        }
        public static object Resolve(Type key)
        {
            return container.Resolve(key);
        }
        public static T Resolve&lt;T&gt;()
        {
            return container.Resolve&lt;T&gt;();
        }
        public static T Resolve&lt;T&gt;(IDictionary args)
        {
            ResolverOverride[] ov = new ResolverOverride[args.Count];
            int i = 0;
            foreach (DictionaryEntry de in args)
            {
                ResolverOverride r = new ParameterOverride(de.Key.ToString(), de.Value);
                ov[i] = r;
                i++;
            }
            return container.Resolve&lt;T&gt;(ov);
        }
    }
</pre>
<p>Gördüğünüz gibi tüm işlemi UnityContainer yapıyor. Bu class&#8217;ın bir instance&#8217;ını aldıktan sonra static metodumuzun constructor&#8217;unda config dosyasından container&#8217;ımızın ayarlarını yapmasını sağlıyoruz. Sonrasında ise Resolve metodunu kullanarak istediğimiz tipe karşılık gelen tipi ayağa kaldırabiliyoruz. Burada resolve değeri parametre olarak bir tip alabilir, bir generic üzerinden çalışabilir veya ayağa kaldırmak istediğimiz nesnenin constructor&#8217;una geçireceğimiz parametreleri alabilir.</p>
<p>Şimdi ise class&#8217;larımızı aşağıdaki gibi yazalım.</p>
<pre class="brush: csharp; title: ; notranslate">
namespace ContractData
{
    public interface IUserData
    {
        string[] GetUsers();
        string GetUserByEmail(string s);
    }
}
namespace ContractService
{
    public interface INotificationService
    {
        void NotifyAllUsers();
        void NotifyUserByEmail(string email);
        void SetDefaultEmailAddress(string email);
        string GetDefaultEmailAddress();
    }
}
namespace Data
{
    public class UserData : IUserData
    {
        public string[] GetUsers()
        {
            return new string[] { &quot;User1&quot;, &quot;User2&quot; };
        }

        public string GetUserByEmail(string s)
        {
            return &quot;User1&quot;;
        }
    }
}
namespace Service
{
    public class NotificationService : INotificationService
    {
        public IUserData UserData { get; set; }
        private string defaultEmailAddress = string.Empty;
        public NotificationService()
        {

        }
        public void NotifyAllUsers()
        {
            foreach (string s in this.UserData.GetUsers())
            {
                Console.WriteLine(s + &quot; notified&quot;);
            }
        }

        public void NotifyUserByEmail(string email)
        {
            string s = this.UserData.GetUserByEmail(email);
            Console.WriteLine(s + &quot; notified&quot;);
        }

        public void SetDefaultEmailAddress(string email)
        {
            defaultEmailAddress = email;
        }

        public string GetDefaultEmailAddress()
        {
            return defaultEmailAddress;
        }
    }
}
    public class UIComponent
    {
        public INotificationService NotificationService { get; set; }
        public UIComponent()
        {
            NotificationService = UI.UnityHelper.Resolve&lt;INotificationService&gt;();
        }
        public void NotifyAll()
        {
            this.NotificationService.NotifyAllUsers();
        }
        public void Notify(string email)
        {
            this.NotificationService.NotifyUserByEmail(email);
        }
    }
</pre>
<p>Bu class&#8217;lar yukarıda göreceğiniz proje hiyerarşisinde uygun projeler içinde yer almaktadır. Gördüğünüz gibi class&#8217;lar arasında direkt bir ilişki yok ve ilişki tamamen interface&#8217;ler üzerinden kurulmuştur. IOC ile nesnelerimizi ayağa kaldırmak için uygulamada bir yerden yazdığımız UnityHelper class&#8217;ının Resolve metodunu çağırmalıyız. Ben burda UI bileşeninin constructor&#8217;unu uygun gördüm. Gördüğünüz gibi tipi interface olan property&#8217;e hiç bir class referansı atanmıyor ancak resolve dedikten sonra mapping olarak tanımladığımız sınıfın instance&#8217;ını kullanabiliyoruz. Örnek kodları download kısmından indirebilirsiniz.</p>
<p>Şimdi bu sınıfı çağıralım</p>
<pre class="brush: csharp; title: ; notranslate">
        static void Main(string[] args)
        {
            UI.UIComponent insUIComponent = new UI.UIComponent();
            insUIComponent.Notify(&quot;oztamer@hotmail.com&quot;);
            Console.Read();
        }
</pre>
<p>Şimdi uygulamamızı çalıştıralım. Aşağıdaki gibi bir hata alacağız.</p>
<p><img class="alignnone size-full wp-image-832" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/exception.jpg" alt="" width="654" height="264" /><br />
Bunun sebebi UI projemizde Service, Data ve ContractData projelerinin referansının bulunmamasıdır. Bu projeleri projemize referans eklersek yine bir bağımlılık yaratmış olacağız işte dependency injection&#8217;ın güzelliği biraz da burada ortaya çıkıyor. Bu projelerin dll&#8217;lerini uygulamamızın exe&#8217;sinin olduğu klasöre veya web uygulaması ise bin klasörüne taşıyoruz ve uygulamamızı tekrar çalıştırıyoruz.</p>
<p><img class="alignnone size-full wp-image-833" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/uygulama.jpg" alt="" width="451" height="115" /></p>
<p>Uygulamamız sorunsuz çalıştı. Gördüğünüz gibi UI projemiz Service ve Data projemize runtime&#8217;da dependent olmaya başlıyor ve dependency enjekte ediliyor. Buradaki güzel avantajlardan bir tanesi ise tip tanımlamasını versiyon ve publickeytoken kullanarak yapmanız durumunda uygulamanızı tekrar build etmeden dll&#8217;leri değiştirebilmenizdir. Veya gördüğünüz gibi Service.dll&#8217;in yeni bir versiyonunu sadece kopyalamanız yetecektir.</p>
<p>Makalemin bundan sonraki kısımlarında singleton ve transient yapılar ile interceptor&#8217;u nasıl kullanabileceğimize bu örnek üzerinden değineceğim.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/21/dependency-injection-ve-unity-application-block/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kendi SessionManager&#8217;ımızı yazalım</title>
		<link>http://www.tameroz.com/2011/12/18/kendi-sessionmanagerimizi-yazalim/</link>
		<comments>http://www.tameroz.com/2011/12/18/kendi-sessionmanagerimizi-yazalim/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 11:15:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=841</guid>
		<description><![CDATA[Bu makalemizde hem web uygulamalarında hem de windows uygulamalarında ortak kullanabileceğimiz bir session manager yazacağız. İsterseniz öncelikle oluşturacağımız yapıyı inceleyelim. &#160; Artık kodumuzu yazmaya başlayabiliriz. Öncelikle session manager için kullanacağımız interface&#8217;lerimizi oluşturalım. ISession interface&#8217;imizde kodumuzdan session üzerinde işlem yapmamıza yarayacak &#8230; <a href="http://www.tameroz.com/2011/12/18/kendi-sessionmanagerimizi-yazalim/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bu makalemizde hem web uygulamalarında hem de windows uygulamalarında ortak kullanabileceğimiz bir session manager yazacağız. İsterseniz öncelikle oluşturacağımız yapıyı inceleyelim.</p>
<p><img class="alignnone size-full wp-image-842" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002696_session1.jpg" alt="" width="650" height="383" /></p>
<p>&nbsp;</p>
<p>Artık kodumuzu yazmaya başlayabiliriz. Öncelikle session manager için kullanacağımız interface&#8217;lerimizi oluşturalım.     </p>
<pre class="brush: csharp; title: ; notranslate">
public interface ISession&lt;T&gt;
    {
        T GetValue(string session);
        void SetValue(string session, T value);
        void Clear(string session);
        void Flush();
    }
    public interface ISessionKeyEnum&lt;T&gt;
    {
        T GetValue(Enum session);
        void SetValue(Enum session, T value);
        void Clear(Enum session);
    }
  </pre>
<p>ISession interface&#8217;imizde kodumuzdan session üzerinde işlem yapmamıza yarayacak olan metodları oluşturuyoruz. Burada; </p>
<p>GetValue : Verdiğimiz key&#8217;e karşılık gelen T generic tipindeki session nesnesini döndüren metoddur.<br />
SetValue : Verdiğimiz key&#8217;e T generic tipindeki value nesnesini atayan metoddur.<br />
Clear : Verdiğimiz key&#8217;in değerini sıfırlayan metoddur.<br />
Flush : Session&#8217;da bulunan tüm değerleri sıfırlayan metoddur.</p>
<p>ISessionKeyEnum interface&#8217;imiz kodumuzda session nesnelerine ulaşmak için gerekli key&#8217;lerin string olarak hatalı yazmamızı engellemek üzere ISesion&#8217;da bulunan tüm metodların bir örneğinin bir enum ile çalışması için tasarlanmıştır. Bu interface&#8217;i implement eden Session nesneleri enum ile çalışabilecektir.  </p>
<p>Şimdi session nesnemizi oluşturalım. </p>
<pre class="brush: csharp; title: ; notranslate">
    public abstract class Session&lt;T&gt; : ISession&lt;T&gt;, ISessionKeyEnum&lt;T&gt;
    {
        #region ISession&lt;T&gt; Members
        public abstract T GetValue(string session);
        public abstract void SetValue(string session, T value);
        public abstract void Clear(string session);
        public abstract void Flush();
        #endregion 

        #region ISessionKeyEnumable&lt;T&gt; Members
        public T GetValue(Enum session)
        {
            return GetValue(session.ToString());
        }
        public void SetValue(Enum session, T value)
        {
            SetValue(session.ToString(), value);
        }
        public void Clear(Enum session)
        {
            Clear(session.ToString());
        }
        #endregion
    }
  </pre>
<p>Öncelikle bir abstract session nesnesi oluşturuyoruz. Abstract class oluşturma sebebimiz ISessionKeyEnum interface&#8217;inde bulunan metodların her session sınıfı için ortak işlem yapacak olmasıdır. Dolayısıyla bu interface&#8217;de bulunan metodları oluşturduğumuz her session nesnesi için tekrar tekrar yazmak zorunda kalmayacağız. ISession interface&#8217;inde bulunan metodlar her session nesnesi için farklı şekilde çalışacağından bu metodları da abstract olarak tanımlıyoruz.</p>
<p>Şimdi Session nesnelerimizi bu abstract class&#8217;dan inherit ederek oluşturalım. </p>
<pre class="brush: csharp; title: ; notranslate">
    internal class WebSession&lt;T&gt; : Session&lt;T&gt;
    {
        #region ISessionManager&lt;T&gt; Members
        public override T GetValue(string session)
        {
            object o = System.Web.HttpContext.Current.Session[session];
            if (o == null)
            {
                return default(T);
            }
            return (T)o;
        }
        public override void SetValue(string session, T value)
        {
            System.Web.HttpContext.Current.Session[session] = value;
        }
        public override void Clear(string session)
        {
            System.Web.HttpContext.Current.Session[session] = null;
        }
        public override void Flush()
        {
            System.Web.HttpContext.Current.Session.Abandon();
        }
        #endregion
    }
    internal class WindowsSession&lt;T&gt; : Session&lt;T&gt;
    {
        #region ISession&lt;T&gt; Members
        public override T GetValue(string session)
        {
            return (T)AppDomain.CurrentDomain.GetData(session);
        }
        public override void SetValue(string session, T value)
        {
            AppDomain.CurrentDomain.SetData(session, value);
        }
        public override void Clear(string session)
        {
            AppDomain.CurrentDomain.SetData(session, null);
        }
        public override void Flush()
        {
            throw new NotImplementedException();
        }
        #endregion
    }
  </pre>
<p>Gördüğünüz gibi iki tane session nesnesi oluşturduk. Bunlardan biri WindowsSession diğeri ise WebSession isminde ve her ikisi de abstract Session nesnesini iherit ediyor. Her iki nesnenin de içerisinde farklı şekilde yazılmış kodları görüyoruz. WebSession nesnesi tüm işlemleri System.Web.HttpContext.Current.Session nesnesi üzerinden yaparken WindowsSession nesnesi AppDomain.CurrentDomain&#8217;i kullanıyor. Bu nesnelerin internal olamalarının sebepleri kendi assembly&#8217;leri dışında kullanılmasını istemediğimizden. Yani bu assembly&#8217;mizi dll olarak verdiğimiz kullanıcılar hiçbir zaman bu nesneleri inherit edemeyecek ve yeni instance alamayacak.</p>
<p>Şimdi isterseniz SessionManager classımızı yazalım.  </p>
<pre class="brush: csharp; title: ; notranslate">
    public static class SessionManager&lt;T&gt;
    {
        private static bool IsWebApplication()
        {
            return (System.Web.HttpContext.Current != null);
        }
        public static Session&lt;T&gt; Session
        {
            get
            {
                if (IsWebApplication())
                {
                    return new WebSession&lt;T&gt;();
                }
                else
                {
                    return new WindowsSession&lt;T&gt;();
                }
            }
        }
    }
  </pre>
<p>SessionManager nesnemiz esasında çok basit bir çalışma prensibine mevcut. Statik bir nesne ve kullanıcı Session property&#8217;sine eriştiği zaman kullanıcının HttpContext&#8217;i olup olmadığına bakılarak bir WebSession nesnesi veya bir WindowsSession nesnesi kullanıcıya döndürülüyor. Bu iki nesne Session abstract class&#8217;ından inherit olduğundan property&#8217;nin dönüş tipi Session<T> olabiliyor ve kullanıcılar bu abstract sınıf içerisinde bulunan metodları çağırabiliyorlar ancak geri döndürdüğümüz nesne tipine göre çalışma mantığı farklı oluyor. </p>
<p>Şimdi isterseniz bir örnek yapalım. Aşağıdaki kodları hem windows hem web uygulamanızda hiçbir değişiklik yapmadan kullanabilirsiniz. </p>
<pre class="brush: csharp; title: ; notranslate">
        public enum SessionKeys
        {
            UserName,
            DateOfBirth,
            Company,
        }
        public class Company
        {
            public int Id { get; set; }
            public string Name { get; set; }
        }
        static void Main(string[] args)
        {
            //session'a bir deger atiyoruz. Atayacagimiz degerin string tipinden oldugunu generic tipte belirtiyoruz ve SetValue metodunu kullanarak deger atiyoruz.
            SessionManager&lt;string&gt;.Session.SetValue(SessionKeys.UserName, &quot;Yazgeliştir&quot;); 

            //degeri session'dan okumak icin GetValue metodunu kullaniyoruz.
            string s = SessionManager&lt;string&gt;.Session.GetValue(SessionKeys.UserName); 

            //Ayni sekilde nesneleri de session'a atamak ve sessiondan okumak mumkun
            Company c = new Company { Id = 1, Name = &quot;Yazgeliştir A.Ş.&quot; };
            SessionManager&lt;Company&gt;.Session.SetValue(SessionKeys.Company, c);
            Company c1 = SessionManager&lt;Company&gt;.Session.GetValue(SessionKeys.Company); 

            Console.Read();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            //session'a bir deger atiyoruz. Atayacagimiz degerin string tipinden oldugunu generic tipte belirtiyoruz ve SetValue metodunu kullanarak deger atiyoruz.
            SessionManager&lt;string&gt;.Session.SetValue(SessionKeys.UserName, &quot;Yazgeliştir&quot;); 

            //degeri session'dan okumak icin GetValue metodunu kullaniyoruz.
            string s = SessionManager&lt;string&gt;.Session.GetValue(SessionKeys.UserName); 

            //Ayni sekilde nesneleri de session'a atamak ve sessiondan okumak mumkun
            Company c = new Company { Id = 1, Name = &quot;Yazgeliştir A.Ş.&quot; };
            SessionManager&lt;Company&gt;.Session.SetValue(SessionKeys.Company, c);
            Company c1 = SessionManager&lt;Company&gt;.Session.GetValue(SessionKeys.Company);
        }
  </pre>
<p>Gördüğünüz gibi kodumuzu hiçbir değişiklik yapmadan hem web hem de windows uygulamalarında kullanabiliyoruz. Ayrıca ISession ve ISessionEnumKey veya Session nesnelerini kullanarak kendi session erişim yöntemlerimizi yazabiliriz. Örneğin session&#8217;un herhangi bir veri kaynağında saklanmasını kolaylıkla implement edebiliriz.</p>
<p>Umarım faydalı olmuştur.<br />
Tamer ÖZ<br />
oztamer@hotmail.com   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/18/kendi-sessionmanagerimizi-yazalim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kendi ResourceManager&#8217;ımızı yazalım</title>
		<link>http://www.tameroz.com/2011/12/18/kendi-resourcemanagerimizi-yazalim/</link>
		<comments>http://www.tameroz.com/2011/12/18/kendi-resourcemanagerimizi-yazalim/#comments</comments>
		<pubDate>Sun, 18 Dec 2011 08:11:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=821</guid>
		<description><![CDATA[Bu makalemde kendi ResourceManager&#8217;ımızı nasıl yazabileceğimizi inceleyeceğiz. Yazacağımız resource manager varsayılan olarak xml, veritabanı, resx veya bir class dosyasından resource&#8217;ları okuyor olabilecek. Ayrıca sağlayacağımız interface&#8217;leri implement ederek diğer yazılım geliştiriciler yeni resource tipleri oluşturabilecek. Dolayısıyla genişletilebilir bir yapı hazırlayacağız ve &#8230; <a href="http://www.tameroz.com/2011/12/18/kendi-resourcemanagerimizi-yazalim/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bu makalemde kendi ResourceManager&#8217;ımızı nasıl yazabileceğimizi inceleyeceğiz. Yazacağımız resource manager varsayılan olarak xml, veritabanı, resx veya bir class dosyasından resource&#8217;ları okuyor olabilecek. Ayrıca sağlayacağımız interface&#8217;leri implement ederek diğer yazılım geliştiriciler yeni resource tipleri oluşturabilecek. Dolayısıyla genişletilebilir bir yapı hazırlayacağız ve tüm bunların yanısıra config dosyasından ayarlanabiliyor olacak. Bu makalede ayrıca kendi config section&#8217;ımızı nasıl yazabileceğimizi de inceleyeceğiz.</p>
<p>Öncelikle oluşturacağımız yapının nasıl bir yapı olacağını inceleyelim.</p>
<p><img class="alignnone size-full wp-image-823" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002695_resource1.jpg" alt="" width="606" height="348" /></p>
<p>Şimdi isterseniz kodumuzu yazmaya başlayalım. Öncelikle Resource dosyalarımızın çalışması için gerekli configuration section&#8217;u yazalım.</p>
<pre class="brush: csharp; title: ; notranslate">
public sealed class ResourcesConfig : ConfigurationSection
    {

        [ConfigurationProperty(&quot;Resources&quot;, IsRequired = true, IsDefaultCollection = false)]
        public ResourceConfigElementCollection Resources
        {
            get { return (ResourceConfigElementCollection)this[&quot;Resources&quot;]; }
            set { this[&quot;Resources&quot;] = value; }
        }
        [ConfigurationProperty(&quot;Languages&quot;, IsRequired = true, IsDefaultCollection = false)]
        public LanguageConfigElementCollection Languages
        {
            get { return (LanguageConfigElementCollection)this[&quot;Languages&quot;]; }
            set { this[&quot;Languages&quot;] = value; }
        }

        [ConfigurationProperty(&quot;DefaultResourceName&quot;, IsRequired = true)]
        public string DefaultResourceName
        {
            get { return base[&quot;DefaultResourceName&quot;].ToString(); }
            set { base[&quot;DefaultResourceName&quot;] = value; }
        }
</pre>
<p>Öncelikle ResourcesConfig ismindeki config section&#8217;umuzu oluşturuyoruz. Bir class&#8217;ı config section olarak kullanmak için ConfigurationSection&#8217;dan nesnesinden inherit etmek gerekiyor. Section nesnemizin içine olası Resource tipleri için ResourceConfigElementCollection, olası dil tanımlamaları için LanguageConfigElementCollection ve kullanılacak varsayılan resporce tipi için DefaultResourceName isimlerinde property&#8217;ler oluşturuyoruz. Gördüğünüz gibi bu property&#8217;lere ConfigurationProperty attribute&#8217;ını tanımlamak gerekiyor ve bu tanımlamanın içinde config dosyasında kullanıclacak isim ve zorunlu bir property olup olmadığı belirtiliyor.</p>
<p>Şimdi isterseniz bu property&#8217;lerin taşıdıkları tipleri oluşturalım.</p>
<pre class="brush: csharp; title: ; notranslate">
public class ResourceConfigElementCollection : ConfigurationElementCollection
        {
            protected override ConfigurationElement CreateNewElement()
            {
                return new ResourceConfigElement();
            }
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((ResourceConfigElement)element).Name;
            }
        }
        public class LanguageConfigElementCollection : ConfigurationElementCollection
        {
            protected override ConfigurationElement CreateNewElement()
            {
                return new LanguageConfigElement();
            }
            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((LanguageConfigElement)element).Name;
            }
        }
</pre>
<p>Dikkat edeceğiniz üzere Collection nesnelerinin config section üzerinde property&#8217;ler olarak oluşturmak için ConfigurationElementCollection nesnesinden inherit etmek gerekmektedir. İnherit ettiğinizde CreateNewElement ve GetElementKey metodlarını override etmek gerekiyor.</p>
<p>Bu işlemleri tanımladıktan sonra isterseniz resource tiplerimizi ve dil tiplerimizi tanımlamamıza yardım edecek olan ResourceConfigElement ve LanguageConfigElement nesnelerimizi oluşturalım.</p>
<pre class="brush: csharp; title: ; notranslate">
public class LanguageConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;Id&quot;, IsRequired = true)]
            public string Id
            {
                get { return base[&quot;Id&quot;].ToString(); }
                set { base[&quot;Id&quot;] = value; }
            }
            [ConfigurationProperty(&quot;Name&quot;, IsRequired = true)]
            public string Name
            {
                get { return base[&quot;Name&quot;].ToString(); }
                set { base[&quot;Name&quot;] = value; }
            }
            [ConfigurationProperty(&quot;Culture&quot;, IsRequired = true)]
            public string Culture
            {
                get { return base[&quot;Culture&quot;].ToString(); }
                set { base[&quot;Culture&quot;] = value; }
            }
        }
        public class ResourceConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;Name&quot;, IsRequired = true)]
            public string Name
            {
                get { return base[&quot;Name&quot;].ToString(); }
                set { base[&quot;Name&quot;] = value; }
            }

            [ConfigurationProperty(&quot;ResourceType&quot;, IsRequired = true)]
            public string ResourceType
            {
                get { return base[&quot;ResourceType&quot;].ToString(); }
                set { base[&quot;ResourceType&quot;] = value; }
            }

            [ConfigurationProperty(&quot;ResxConfig&quot;, IsRequired = false)]
            public ResxConfigElement ResxConfig
            {
                get { return (ResxConfigElement)base[&quot;ResxConfig&quot;]; }
                set { base[&quot;ResxConfig&quot;] = value; }
            }

            [ConfigurationProperty(&quot;ClassConfig&quot;, IsRequired = false)]
            public ClassConfigElement ClassConfig
            {
                get { return (ClassConfigElement)base[&quot;ClassConfig&quot;]; }
                set { base[&quot;ClassConfig&quot;] = value; }
            }

            [ConfigurationProperty(&quot;DbConfig&quot;, IsRequired = false)]
            public DbConfigElement DbConfig
            {
                get { return (DbConfigElement)base[&quot;DbConfig&quot;]; }
                set { base[&quot;DbConfig&quot;] = value; }
            }

            [ConfigurationProperty(&quot;XmlConfig&quot;, IsRequired = false)]
            public XmlConfigElement XmlConfig
            {
                get { return (XmlConfigElement)base[&quot;XmlConfig&quot;]; }
                set { base[&quot;XmlConfig&quot;] = value; }
            }

            [ConfigurationProperty(&quot;DefaultLanguageId&quot;, IsRequired = true)]
            public string DefaultLanguageId
            {
                get { return base[&quot;DefaultLanguageId&quot;].ToString(); }
                set { base[&quot;DefaultLanguageId&quot;] = value; }
            }

        }
</pre>
<p>LanguageConfigElement ve ResourceConfigElement nesnelerimizi ilk kısımda olduğu gibi ConfigElement nesnesinden inherit ederek oluşturduk isterseniz şimdi içlerindeki property&#8217;lerde ne gibi bilgiler taşıyacağımızı inceleyelim.</p>
<p>LanguageConfigElement:<br />
Id(string) : Oluşturulacak dil girdisinin id&#8217;si. Örn : 1<br />
Name(string) : Oluşturulacak dil girdisinin adı. Örn: Türkçe<br />
Culture(string) : Oluşturulacak dil girdisinin culture&#8217;ı. Örn : tr-TR</p>
<p>ResourceConfigElement:<br />
Name(string):Oluşturulacak resource girdisinin adı. Örn:HataMesajlariXml<br />
ResourceType(string) : Bu girdi için oluşturulacak Resource tipi. Örn : ClassResource<br />
ResxConfıg(ResxConfigElement) : Tipin ResxResource olarak oluşturulması durumunda ayarların yapılacağı nesne.<br />
ClassConfıg(ClassConfigElement): Tipin ClassResource olarak oluşturulması durumunda ayarların yapılacağı nesne.<br />
DbConfıg(DbConfigElement): Tipin DbResource olarak oluşturulması durumunda ayarların yapılacağı nesne.<br />
XmlConfıg(XmlConfigElement): Tipin XmlResource olarak oluşturulması durumunda ayarların yapılacağı nesne.<br />
DefaultLanguageId(string) : Bu resource için resource&#8217;lara ulaşılırken spesifik bir dil belirtilmez ise kullanılacak varsayılan dil.</p>
<p>Şimdi yukarıda belirttiğimiz resource tipleri için elemanları tek tek oluşturalım.</p>
<pre class="brush: csharp; title: ; notranslate">
public class ResxConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;Type&quot;, IsRequired = true)]
            public string Type
            {
                get { return base[&quot;Type&quot;].ToString(); }
                set { base[&quot;Type&quot;] = value; }
            }
        }
</pre>
<p>Bir resx dosyasından değerlerimizi okumak için tek ihtiyacımız olan bu resource dosyasının tipidir. Dolayısıyla ResxConfigElement için sadece Type isminde bir property tanımlamak yeterlidir.</p>
<pre class="brush: csharp; title: ; notranslate">
        public class ClassConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;Type&quot;, IsRequired = true)]
            public string Type
            {
                get { return base[&quot;Type&quot;].ToString(); }
                set { base[&quot;Type&quot;] = value; }
            }
            [ConfigurationProperty(&quot;LanguageSeperator&quot;, IsRequired = true)]
            public string LanguageSeperator
            {
                get { return base[&quot;LanguageSeperator&quot;].ToString(); }
                set { base[&quot;LanguageSeperator&quot;] = value; }
            }
        }
</pre>
<p>Bir class&#8217;dan değerlerinizi okumak için bu class&#8217;ın tipine ve class içerisinde bulunan bir değişkenin farklı diller için nasıl tanımlandığını belirten bir dil ayıracı bilgisine ihtiyacımız olacaktır.</p>
<p>Örnek bir class dosyası :</p>
<pre class="brush: csharp; title: ; notranslate">
    public static class Resource
    {
        public  const string Password_1=&quot;Password c&quot;;
        public  const string Password_2=&quot;Sifre c&quot;;
    }
</pre>
<p>Bu yapıda, Type alanında class&#8217;ın tipi yani NameSpace.Resource,NameSpace LanguageSeperator kisminda ise _ bulunacaktır.</p>
<pre class="brush: csharp; title: ; notranslate">
        public class DbConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;Provider&quot;, IsRequired = true)]
            public string Provider
            {
                get { return base[&quot;Provider&quot;].ToString(); }
                set { base[&quot;Provider&quot;] = value; }
            }

            [ConfigurationProperty(&quot;ConnectionString&quot;, IsRequired = true)]
            public string ConnectionString
            {
                get { return base[&quot;ConnectionString&quot;].ToString(); }
                set { base[&quot;ConnectionString&quot;] = value; }
            }

            [ConfigurationProperty(&quot;TableName&quot;, IsRequired = true)]
            public string TableName
            {
                get { return base[&quot;TableName&quot;].ToString(); }
                set { base[&quot;TableName&quot;] = value; }
            }

            [ConfigurationProperty(&quot;KeyFieldName&quot;, IsRequired = true)]
            public string KeyFieldName
            {
                get { return base[&quot;KeyFieldName&quot;].ToString(); }
                set { base[&quot;KeyFieldName&quot;] = value; }
            }

            [ConfigurationProperty(&quot;LanguageFieldName&quot;, IsRequired = true)]
            public string LanguageFieldName
            {
                get { return base[&quot;LanguageFieldName&quot;].ToString(); }
                set { base[&quot;LanguageFieldName&quot;] = value; }
            }

            [ConfigurationProperty(&quot;ValueFieldName&quot;, IsRequired = true)]
            public string ValueFieldName
            {
                get { return base[&quot;ValueFieldName&quot;].ToString(); }
                set { base[&quot;ValueFieldName&quot;] = value; }
            }
        }
</pre>
<p>Bir veritabanından değerleri okumak için veritabanına hangi provider ile bağlanacağımız, connection string, tablo adı, resource&#8217;ların key&#8217;inin durduğu alanın adı, dil bilgisinin durduğu alanın adı ve değerin durduğu alanın adı bilgilerine ihtiyacımız olacaktır.</p>
<p>Örnek Veritabanı:</p>
<p><img class="alignnone size-full wp-image-824" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002695_resource2.jpg" alt="" width="351" height="107" /><br />
Bu durumda TableName:Resource, KeyFieldName : Key, LanguageFieldName : Language, ValueFieldName ise Value olarak belirlenmelidir.</p>
<pre class="brush: csharp; title: ; notranslate">
        public class XmlConfigElement : ConfigurationElement
        {
            [ConfigurationProperty(&quot;XmlPath&quot;, IsRequired = true)]
            public string XmlPath
            {
                get { return (string)base[&quot;XmlPath&quot;]; }
                set { base[&quot;XmlPath&quot;] = value; }
            }
            [ConfigurationProperty(&quot;KeyAttribute&quot;, IsRequired = true)]
            public string KeyAttribute
            {
                get { return (string)base[&quot;KeyAttribute&quot;]; }
                set { base[&quot;KeyAttribute&quot;] = value; }
            }
            [ConfigurationProperty(&quot;LanguageAttribute&quot;, IsRequired = true)]
            public string LanguageAttribute
            {
                get { return (string)base[&quot;LanguageAttribute&quot;]; }
                set { base[&quot;LanguageAttribute&quot;] = value; }
            }
        }
    }
}
</pre>
<p>Bir xml dosyasından değerleri okumak için xml dosyasının yoluna ve resource adının ve dil tipinin tutulduğu attribute&#8217;ların adına ihtiyacımız var.</p>
<p>Örnek bir xml dosyası:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;Resources&gt;
  &lt;Resource Key=&quot;UserName&quot;&gt;
    &lt;Language Id=&quot;1&quot;&gt;User Name&lt;/Language&gt;
    &lt;Language Id=&quot;2&quot;&gt;Kullanici Adi&lt;/Language&gt;
  &lt;/Resource&gt;
  &lt;Resource Key=&quot;Password&quot;&gt;
    &lt;Language Id=&quot;1&quot;&gt;Password&lt;/Language&gt;
    &lt;Language Id=&quot;2&quot;&gt;Sifre&lt;/Language&gt;
  &lt;/Resource&gt;
&lt;/Resources&gt;
</pre>
<p>Bu durumda KeyAttribute : Key ve LanguageAttribute ise Id olarak tanımlanmalıdır.</p>
<p>Resource Manager&#8217;ımızın config section ayarlarını yaptık. Örnek bir config dosyasını aşağıdaki gibi oluşturabiliriz.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?&gt;
&lt;configuration&gt;
  &lt;configSections&gt;
    &lt;section name=&quot;ResourceConfig&quot; type=&quot;Infra.ResourcesConfig,Infra&quot;/&gt;
  &lt;/configSections&gt;
  &lt;ResourceConfig DefaultResourceName=&quot;Xml1&quot;&gt;
    &lt;Languages&gt;
      &lt;add Id=&quot;1&quot; Name=&quot;English&quot; Culture=&quot;en-US&quot;&gt;&lt;/add&gt;
      &lt;add Id=&quot;2&quot; Name=&quot;Turkish&quot; Culture=&quot;tr-TR&quot;&gt;&lt;/add&gt;
    &lt;/Languages&gt;
    &lt;Resources&gt;
      &lt;add Name=&quot;Xml1&quot; ResourceType=&quot;Infra.XmlResource,Infra&quot; DefaultLanguageId=&quot;1&quot;&gt;
        &lt;XmlConfig XmlPath=&quot;ResourceDeneme.Xml&quot; KeyAttribute=&quot;Key&quot; LanguageAttribute=&quot;Id&quot;&gt;&lt;/XmlConfig&gt;
      &lt;/add&gt;
      &lt;add Name=&quot;Xml2&quot; ResourceType=&quot;Infra.XmlResource,Infra&quot; DefaultLanguageId=&quot;1&quot;&gt;
        &lt;XmlConfig XmlPath=&quot;ResourceDeneme2.Xml&quot; KeyAttribute=&quot;Key&quot; LanguageAttribute=&quot;Id&quot;&gt;&lt;/XmlConfig&gt;
      &lt;/add&gt;
      &lt;add Name=&quot;Class1&quot; ResourceType=&quot;Infra.ClassResource,Infra&quot; DefaultLanguageId=&quot;1&quot;&gt;
        &lt;ClassConfig Type=&quot;WindowsFormsApplication1.Resource,WindowsFormsApplication1&quot; LanguageSeperator=&quot;_&quot; &gt;&lt;/ClassConfig&gt;
      &lt;/add&gt;
      &lt;add Name=&quot;Resx1&quot; ResourceType=&quot;Infra.ResxResource,Infra&quot; DefaultLanguageId=&quot;1&quot;&gt;
        &lt;ResxConfig Type=&quot;WindowsFormsApplication1.Properties.Resources,WindowsFormsApplication1&quot;&gt;&lt;/ResxConfig&gt;
      &lt;/add&gt;
      &lt;add Name=&quot;Db1&quot; ResourceType=&quot;Infra.DbResource,Infra&quot; DefaultLanguageId=&quot;1&quot;&gt;
        &lt;DbConfig Provider=&quot;System.Data.SqlClient&quot; ConnectionString=&quot;Data Source=.;IntegratedSecurity=SSPI&quot; TableName=&quot;Resource&quot; KeyFieldName=&quot;Key&quot; LanguageFieldName=&quot;Language&quot; ValueFieldName=&quot;Value&quot;&gt;&lt;/DbConfig&gt;
      &lt;/add&gt;
    &lt;/Resources&gt;
  &lt;/ResourceConfig&gt;
&lt;/configuration&gt;
</pre>
<p>Gördüğünüz gibi config dosyamıza birden fazla resource tipi tanımlayabiliyoruz.</p>
<p>Şimdi isterseniz config dosyamızdan okuyacağımız bu resource tiplerinin ResourceManager ile nasıl kullanacağımızı inceleyelim. İşe temelden başlamak gerekirse öncelikle kullanacağımız interface&#8217;leri inceleyelim.</p>
<pre class="brush: csharp; title: ; notranslate">
      public interface IResource
    {
        Infra.ResourcesConfig.ResourceConfigElement Config { get; set; }
        string GetString(string key);
        string GetString(string key, string language);
    }
    public interface IResourceConfig&lt;T&gt; where T:ConfigurationElement
    {
        T ResourceConfig
        {
            get;
        }
    }
</pre>
<p>Uygulamamızda iki tane interface bulunuyor bunlardan biri resource tiplerimizi oluştururken kullanacağımız IResource tipinde ve diğer ise config dosyasından bir resource ile ilgili bilgileri okurken kullanacağımız IResourceConfig interface&#8217;i. </p>
<p>IResourceConfig interface&#8217;inde bulunan ResourceConfig Property&#8217;si ile bu interface&#8217;e generic olarak verdiğimiz ConfigurationElement tipinden nesnelere ulaşabileceğiz.</p>
<p>IResource interface&#8217;inde bulunan Config property&#8217;si ise tüm config bilgilerine ulaşabileceğiz.<br />
IResource interface&#8217;inde bulunan GetString metodlarının içerisine ise resource kaynağımızdan belirttiğimiz key ve language değişkenlerine göre değer okumak için gerekli kodu yazacağız.</p>
<p>Şimdi isterseniz bu interfacelerimizi implement edeceğimiz class&#8217;larımıza geçelim. </p>
<pre class="brush: csharp; title: ; notranslate">
   public class ClassResource : IResource, IResourceConfig&lt;Infra.ResourcesConfig.ClassConfigElement&gt;
    {
        #region IResource Members
        public string GetString(string key)
        {
            return GetString(key, Config.DefaultLanguageId);
        } 

        public string GetString(string key, string language)
        {
            Type t = Type.GetType(ResourceConfig.Type);
            if (t == null)
            {
                throw new Exception(&quot;Type can not be found&quot;);
            }
            FieldInfo fi = t.GetField(key + ResourceConfig.LanguageSeperator + language);
            if (fi==null)
            {
                throw new Exception(&quot;Key Can not be found&quot;);
            }
            return fi.GetValue(null).ToString();
        }
        public ResourcesConfig.ResourceConfigElement Config
        {
            get;
            set;
        }
        #endregion 

        #region IResourceConfig&lt;ClassConfigElement&gt; Members 

        public ResourcesConfig.ClassConfigElement ResourceConfig
        {
            get
            {
                return this.Config.ClassConfig;
            }
        } 

        #endregion
    }
</pre>
<p>Gördüğünüz gibi ClassResource nesnemizi IResource interface&#8217;inden ve IResourceConfig interface&#8217;inden implement ediyoruz. IResourceConfıg interface&#8217;ine ise generic olarak ClassConfigElement&#8217;i veriyoruz. Buda bu class&#8217;ımızı içerisinde ResourceConfig dediğimizde bize ClassConfigElement tipinden bir nesne geleceğini belirtiyor. </p>
<p>GetString metodlarını ineleyecek olursak sadece key alan overload&#8217;ın diğer overload&#8217;ı Config dosyasında tanımladığımız DefaultLanguage değerini okuyarak çağırdığını görüyoruz.</p>
<p>GetString metodunun 2. overloadında ise reflection ile class içerisinden değerlerin okunduğunu görüyoruz. Oluşturacağımız her Resource nesnesinde GetString metodunun 2. overload&#8217;ı farklı bir şekilde implement edilecektir. Bu implementasyonlar makalemizin konusu olmadığından tek tek anlatmayacağım ama kodu burada paylaşacağım.</p>
<p>Şimdi isterseniz diğer Resource nesnelerimizi oluşturalım. </p>
<pre class="brush: csharp; title: ; notranslate">
  public class DbResource : IResource, IResourceConfig&lt;Infra.ResourcesConfig.DbConfigElement&gt;
    {
        DbProviderFactory insDbProviderFactory = null;
        #region IResource Members 

        public string GetString(string key)
        {
            return GetString(key, Config.DefaultLanguageId);
        }
        public string GetString(string key, string language)
        {
            if (insDbProviderFactory == null)
            {
                insDbProviderFactory = DbProviderFactories.GetFactory(ResourceConfig.Provider);
            }
            DbConnection conn = insDbProviderFactory.CreateConnection();
            conn.ConnectionString=ResourceConfig.ConnectionString;
            DbCommand cmd = insDbProviderFactory.CreateCommand();
            cmd.CommandText = &quot;SELECT [&quot; + ResourceConfig.ValueFieldName + &quot;] From [&quot; + ResourceConfig.TableName + &quot;] WHERE [&quot; + ResourceConfig.KeyFieldName + &quot;]=@Key AND [&quot; + ResourceConfig.LanguageFieldName + &quot;]=@Language&quot;;
            DbParameter paramKey = insDbProviderFactory.CreateParameter();
            paramKey.DbType = System.Data.DbType.String;
            paramKey.Direction = System.Data.ParameterDirection.Input;
            paramKey.ParameterName = &quot;@Key&quot;;
            paramKey.Value = key; 

            DbParameter paramLanguage = insDbProviderFactory.CreateParameter();
            paramLanguage.DbType = System.Data.DbType.String;
            paramLanguage.Direction = System.Data.ParameterDirection.Input;
            paramLanguage.ParameterName = &quot;@Language&quot;;
            paramLanguage.Value = language; 

            cmd.Parameters.Add(paramKey);
            cmd.Parameters.Add(paramLanguage);
            cmd.Connection = conn; 

            string result = &quot;&quot;;
            try
            {
                conn.Open();
                result = cmd.ExecuteScalar().ToString(); ;
                conn.Close();
            }
            catch (Exception)
            {
                conn.Close();
                throw;
            }
            return result; 

        }
        public ResourcesConfig.ResourceConfigElement Config
        {
            get;
            set;
        }
        #endregion 

        #region IResourceConfig&lt;DbConfigElement&gt; Members 

        public ResourcesConfig.DbConfigElement ResourceConfig
        {
            get
            {
                return this.Config.DbConfig;
            }
        } 

        #endregion
    }
    public class ResxResource : IResource, IResourceConfig&lt;Infra.ResourcesConfig.ResxConfigElement&gt;
    {
        #region IResource Members 

        public string GetString(string key)
        {
            return GetString(key, Config.DefaultLanguageId);
        } 

        public string GetString(string key, string language)
        {
            string culture = ResourceManager.GetLanguageCulture(language);
            Type t=Type.GetType(ResourceConfig.Type);
            System.Resources.ResourceManager rm = new System.Resources.ResourceManager(t);
            return rm.GetString(key,CultureInfo.GetCultureInfo(culture));
        }
        public ResourcesConfig.ResourceConfigElement Config
        {
            get;
            set;
        }
        #endregion 

        #region IResourceConfig&lt;ResxConfigElement&gt; Members 

        public ResourcesConfig.ResxConfigElement ResourceConfig
        {
            get
            {
                return this.Config.ResxConfig;
            }
        } 

        #endregion
    }
    public class XmlResource : IResource, IResourceConfig&lt;Infra.ResourcesConfig.XmlConfigElement&gt;
    {
        XDocument doc = null;
        #region IResource Members
        public string GetString(string key)
        {
            return GetString(key, Config.DefaultLanguageId);
        }
        public string GetString(string key, string language)
        {
            if (doc == null)
            {
                doc = XDocument.Load(ResourceConfig.XmlPath);
            }
            var result = doc.Descendants(&quot;Resource&quot;)
                .Where(e =&gt; e.Attribute(ResourceConfig.KeyAttribute).Value == key)
                .Elements().Where(e=&gt;e.Attribute (ResourceConfig.LanguageAttribute).Value==language);
            return result.FirstOrDefault().Value;
        } 

        public ResourcesConfig.ResourceConfigElement Config
        {
            get;set;
        } 

        #endregion 

        #region IResourceConfig&lt;XmlConfigElement&gt; Members 

        public ResourcesConfig.XmlConfigElement ResourceConfig
        {
            get
            {
                return this.Config.XmlConfig;
            }
        } 

        #endregion
    }
</pre>
<p>Şimdi isterseniz tüm bu yazdıklarımızı wrap edecek olan ResourceManager sınıfımızı yazalım. </p>
<pre class="brush: csharp; title: ; notranslate">
    public static class ResourceManager
    { 

        private static ResourcesConfig _Config = null;
        public static ResourcesConfig Config
        {
            get
            { 

                try
                {
                    if (_Config == null)
                    {
                        ResourcesConfig config = null;
                        foreach (ConfigurationSection cs in System.Configuration.ConfigurationManager.OpenExeConfiguration (System.Configuration.ConfigurationUserLevel.None).Sections)
                        {
                            if (cs.ElementInformation.Type == typeof(ResourcesConfig))
                            {
                                config = (ResourcesConfig)System.Configuration.ConfigurationManager.GetSection (cs.SectionInformation.Name);
                                break;
                            }
                        }
                        if (config == null)
                        {
                            throw new Exception(&quot;Resource configuration not found.&quot;);
                        }
                        _Config = config;
                    }
                    return _Config;
                }
                catch (Exception ex)
                { 

                    throw;
                }
            }
        }
</pre>
<p>ResourceManager class&#8217;ımızı static olarak oluşturuyoruz ve içerisine Config tipinde private bir değişken ve bu değişkeni encapsulate eden readonly bir property yazıyoruz. Bu property&#8217;mizin get metodunda ise daha önceden bir config nesnesi oluşturulmamızsa config dosyasındaki bilgileri okuyarak bir config nesnesi oluşturuyoruz ve oluşturduğumuz nesneyi private değişkene atıyoruz.. Bu property&#8217;e daha sonraki erişmelerimizde config dosyasına erişilmeyecek değişkende sakladığımız config nesnesi kullanılacaktır. Dolayısıyla bir performans kazancı sağlanacaktır.</p>
<pre class="brush: csharp; title: ; notranslate">
               private static Dictionary&lt;string, IResource&gt; Resources = new Dictionary&lt;string, IResource&gt;();

        public static string GetLanguageCulture(string languageId)
        {
            return Config.Languages.OfType&lt;Infra.ResourcesConfig.LanguageConfigElement&gt;().Where(l =&gt; l.Id == languageId).FirstOrDefault().Culture;
        }
        private static IResource GetResource(string name)
        {
            Type t = Type.GetType(name);
            if (t == null)
            {
                throw new Exception(&quot;Resource specified can not be found&quot;);
            }
            if (t.GetInterface(&quot;IResource&quot;) == null)
            {
                throw new Exception(&quot;Resource specified should implement IResource&quot;);
            }
            return (IResource)Activator.CreateInstance(t);
        }
        public static IResource Resource()
        {
            return Resource(Config.DefaultResourceName);
        }
        public static IResource Resource(string resourceName)
        {
            if (!Resources.ContainsKey(resourceName))
            {
                Infra.ResourcesConfig.ResourceConfigElement cfg = Config.Resources.OfType&lt;Infra.ResourcesConfig.ResourceConfigElement&gt;().Where(r =&gt; r.Name == resourceName).FirstOrDefault();
                Resources[resourceName] = GetResource(cfg.ResourceType);
                Resources[resourceName].Config = cfg;
            }
            return Resources[resourceName];
        }
    }
</pre>
<p>Config dosyasında tanımladığımız tüm resource&#8217;ları saklayabileceğimiz bir private değişken oluşturuyoruz ve adına Resources diyoruz.</p>
<p>GetResource metodunda ise string olarak verilen tipteki bir resource nesnemizi oluşturuyoruz. Burada önemli bir nokta bu metodun oluşturabileceği tüm resource nesnelerinin IResource interface&#8217;inden türemiş olması gerekliliğidir.</p>
<p>Resource metodlarında ise erişmek istediğimiz bir resource daha önceden oluşturulmuşsa bu nesneyi alıyor ve kullanıyoruz. Daha önceden oluşturulmamış ise GetResource metodu ile resource&#8217;umuzu oluşturuyoruz ve bu nesneyi kullanıyoruz.</p>
<p>Şimdi isterseniz resourcemanager nesnemizi nasıl kullanabileceğimizi inceleyelim. Config olarak yukarıda örnek verdiğimiz config&#8217;i kullandığımızı düşünürsek;  </p>
<pre class="brush: csharp; title: ; notranslate">
            //Varsayilan resource'a erismek. Varsayilan resource config de ResourceConfig nesnesinde DefaultResourceName property'sinde tutulmaktadır.
            Infra.IResource resource = Infra.ResourceManager.Resource(); 

            //Herhangi bir resource'a ResourceName kullanarak erismek. ResourceName Config dosyasinda resources collectionunda tanimlanmis resourcelarda bulunan name property'sinde bulunur.
            resource = Infra.ResourceManager.Resource(&quot;XML1&quot;); 

            //Bir resourcedeki bir key icin varsayilan dil bilgisi degerini almak. Varsayilan dil bilgisi kullanilan resource icin DefaultLanguageId property'sinde bulunan degerdir
            string s = resource.GetString(&quot;UserName&quot;); 

            //Bir resourcedaki bir key icin herhangi bir dil bilgisini almak. Dil parametresinde config dosyasindaki languages collection'unda ilgili dil icin bulunan Id degeri gecirilmelidir.
            s = resource.GetString(&quot;UserName&quot;, &quot;2&quot;);
</pre>
<p>Siz de IResource ve IResourceConfig interfacelerini implement ederek kendi resource class&#8217;larınızın yazmış olduğumuz ResourceManager ile çalışmasını sağlayabilirsiniz.</p>
<p>Umarım faydalı olmuştur.<br />
Tamer ÖZ<br />
oztamer@hotmail.com<br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/18/kendi-resourcemanagerimizi-yazalim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nesnelerimize Çoklu Dil Desteği Eklemek</title>
		<link>http://www.tameroz.com/2011/12/17/nesnelerimize-coklu-dil-destegi-eklemek/</link>
		<comments>http://www.tameroz.com/2011/12/17/nesnelerimize-coklu-dil-destegi-eklemek/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 08:06:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Makaleler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=811</guid>
		<description><![CDATA[Merhabalar, Artık yazılan uygulamalarda lokalizasyon özelliklerinin kullanılması yavaş yavaş kaçınılmaz duruma gelmektedir. Dolayısıyla uygulama içerisinde kullandığımız bazı lokalize etmemiz gereken metinler vs resx dosyalarından okuyarak bu işlemi kolaylıkla yapabilmekteyiz. Ancak bu durum bir veritabanı veya data kaynağından gelecek dataların lokalizasyonunda &#8230; <a href="http://www.tameroz.com/2011/12/17/nesnelerimize-coklu-dil-destegi-eklemek/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Artık yazılan uygulamalarda lokalizasyon özelliklerinin kullanılması yavaş yavaş kaçınılmaz duruma gelmektedir. Dolayısıyla uygulama içerisinde kullandığımız bazı lokalize etmemiz gereken metinler vs resx dosyalarından okuyarak bu işlemi kolaylıkla yapabilmekteyiz. Ancak bu durum bir veritabanı veya data kaynağından gelecek dataların lokalizasyonunda farklı olacaktır. Günümüzdeki duruma bir örnek üzerinden baktığımızda genellikle uygulanan yöntem aşağıdaki gibi bir dizayn ile bu sorunu çözmektir.</p>
<p><a href="http://www.tameroz.com/wp-content/uploads/2011/12/1000002697_1.jpg"><img class="alignnone size-full wp-image-812" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002697_1.jpg" alt="" width="497" height="522" /></a></p>
<p>Dizayna baktığımızda bir nesneyin bir özelliğini farklı dillerde kullanabilmek için farklı bir nesne oluşturuyoruz ve bu nesneyi ana nesne içerisine list olarak ekliyoruz. Ancak uygulamamızda bu durumda birden fazla nesne olması durumunda nesne sayımız artacak ve gereksiz birçok kod yazmak zorunda kalacağız. Tüm bunların yanısıra bir orm aracı kullanıyorsak birçok mapping yapmamız gerekecek.</p>
<p>Bu yöntemin yerine nesnelerin çoklu dil desteği olan özelliklerine yönelik bir geliştirme yapılabilir. Bunun modelini aşağıdaki gibi kurduğumuzu düşünelim.</p>
<p><img class="alignnone size-full wp-image-813" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002697_2.jpg" alt="" width="492" height="485" /></p>
<p>Gördüğünüz gibi bu yöntem hem daha anlaşılabilir hem de daha genel bir tasarım içermektedir. Çoklu dil desteği olan birçok nesnenin birçok özelliği için yukarıda gördüğünüz MultilanguageProperty nesnesini kullanabilirsiniz.</p>
<p>Şimdi isterseniz bu gibi bir nesneyi nasıl yazacağımızı inceleyelim.</p>
<p>Öncelikle MultilanguageProperty nesnemizin içerisinde kullanacağımız Language class&#8217;ını oluşturalım.</p>
<p>&nbsp;</p>
<pre class="brush: csharp; title: ; notranslate">
   public class Language
    {
        public enum ApplicationLanguage
        {
            Turkish,
            English,
        }
        public static ApplicationLanguage GetDefaultLanguage()
        {
            return ApplicationLanguage.Turkish;
        }
    }</pre>
<p>Gördüğünüz gibi Language nesnemizi oluştururken içerisinde bir enum&#8217;da kullanacağımız dilleri tanımlıyoruz ve uygulamamızda kullanılacak varsayılan dili tanımlıyoruz. Burada varsayılan dili web uygulamalarında bir session değişkeninden, windows uygulamalarında ise static bir değişkenden okuyarak uygulamanızın kullanıcı basında varsayılan dil kullanmasını sağlayabilirsiniz.</p>
<p>Artık MultilanguageProperty nesnemizi kodlamaya başlayabiliriz.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class MultilanguageProperty&lt;T&gt;:IEnumerable&lt;KeyValuePair&lt;Language.ApplicationLanguage,T&gt;&gt;
    {
        public IDictionary&lt;Language.ApplicationLanguage, T&gt; Values { get; set; }
        public MultilanguageProperty()
        {
            Values = new Dictionary&lt;Language.ApplicationLanguage, T&gt;();
        }
</pre>
<p>Öncelikle nesnemizi string, int, datetime veya herhangi başka bir tipteki özelliklerin yerine kullanabilmemiz için generic bir nesne olarak tanımlıyoruz. Ve kullanıcıların bu property içerisindeki birçok değeri almak için değerler arasında dönebilmesini sağlamak amacıyla IEnumerable interface&#8217;ini implement ediyoruz.</p>
<p>Ayrıca nesnemizde IDictionary tipinden values adında bir property tanımlıyoruz. IDictionary generic tipine baktığımızda bu nesnenin key olarak ApplicationLanguage enum&#8217;unu ve karşılığında value olarak tanıttığımız generic T tipini taşıdığını görüyoruz. Bu property bizim çokludil değerlerimizi saklayacak olan property&#8217;dir. Ve nesnemizin yapıcı metodu içerisinde bu property&#8217;e Dictionary nesnesinin yeni bir instance&#8217;ını alarak atıyoruz.</p>
<p>Şimdi Values property&#8217;sinde sakladığımız değerlere nasıl ulaşabileceğimizi inceleyelim.</p>
<pre class="brush: csharp; title: ; notranslate">
        public T GetValue(Language.ApplicationLanguage language)
        {
            return (T)Values[language];
        }
        public T GetValue()
        {
            Language.ApplicationLanguage applicationLanguage = Language.GetDefaultLanguage();
            return (T)Values[applicationLanguage];
        }
        public T this[Language.ApplicationLanguage l]
        {
            get
            {
                return Values[l];
            }
            set
            {
                Values[l] = value;
            }
        }
</pre>
<p>Sakladığımız değerlere ulaşmak için GetValue adındaki metodumuzu kullanıyoruz. Gördüğünüz gibi değerlere ulaştığımızda metodların bize geridönüş tipi generic tiptendir. GetValue metodunun iki tane overload&#8217;ı vardır. Bunlardan biri belirtilen dildeki değeri vermek için diğeri ise biraz önce Language class&#8217;ında implemantasyonunu yaptığımız varsayılan dildeki değeri döndürmesi içindir. Ayrıca indexer kullanarak kullanıcıların direk olarak property üzerinden indexer kullanarak istedikleri dildeki değeri almalarını sağlayabiliyoruz.</p>
<p>Şimdi ise kodumuzu kullanacak kişiler için farklı bir kolaylık sağlayacağız. Implicit operatörler tanımlayarak kullanıcıların bir tip çevirme yapmadan nesnemizi kullanabilmeleri için aşağıdaki kodu nesnemize ekliyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
        public static implicit operator T(MultilanguageProperty&lt;T&gt; instance)
        {
            if (instance == null)
            {
                return default(T);
            }
            return instance.GetValue();
        }
        public static implicit operator List&lt;KeyValuePair&lt;Language.ApplicationLanguage,T&gt;&gt;(MultilanguageProperty&lt;T&gt; instance)
        {
            if (instance == null)
            {
                return null;
            }
            return instance.Values.ToList();
        }
</pre>
<p>Gördüğünüz gibi ilk metodda nesnemizin tanıttığımız generic T tipindeki bir değişkene direkt atanabilmesi için implicit conversation operatörümüzü yazıyoruz ve ikinci metodda ise nesnemizin bir List değişkenine atanabilmesi için gerekli kodumuzu yazıyoruz. Bu kodların kullanımda nasıl bir kolaylık sağladığını makalemizin sonunda göreceğiz.</p>
<pre class="brush: csharp; title: ; notranslate">
       #region IEnumerable&lt;KeyValuePair&lt;ApplicationLanguage,T&gt;&gt; Members

        public IEnumerator&lt;KeyValuePair&lt;Language.ApplicationLanguage, T&gt;&gt; GetEnumerator()
        {
            return Values.GetEnumerator();
        }

        #endregion

        #region IEnumerable Members

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return Values.GetEnumerator();
        }

        #endregion
    }
}
</pre>
<p>Ve en son olarak kullanıcıların bu property içinde dönebilmeleri için implement ettiğimiz IEnumerable inteface&#8217;inin gerektirdiği metodları yazıyoruz ve nesnemizi kodlamayı bitiriyoruz.</p>
<p>Şimdi isterseniz bir örnek yaparak nesnemizin kullanımını inceleyelim. Örneğimizde kullanacağımız test nesnemizi aşağıdaki gibi oluşturuyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
    public class TestObject
    {
        public TestObject()
        {
            this.Name = new MultilanguageProperty&lt;string&gt;();
        }
        public int Id { get; set; }
        public string UniversalCode { get; set; }
        public MultilanguageProperty&lt;string&gt; Name { get; set; }
    }
</pre>
<p>Gördüğünüz gibi test nesnemiz üzerinde Name property&#8217;sinin farklı diller için farklı değerleri barındırmasını istediğimizden MultilanguageProperty tipinden oluşturduk ve generic tip olarak string&#8217;i belirledik.</p>
<p>Şimdi örnek uygulamamızı yazıyoruz.</p>
<pre class="brush: csharp; title: ; notranslate">
    class Program
    {
        public static List&lt;TestObject&gt; GetSampleDataForTestObject()
        {
            List&lt;TestObject&gt; listTestObject = new List&lt;TestObject&gt;();

            TestObject testObject1 = new TestObject { Id = 1, UniversalCode = &quot;TR&quot; };
            testObject1.Name.Values.Add(Language.ApplicationLanguage.Turkish, &quot;Türkiye&quot;);
            testObject1.Name.Values.Add(Language.ApplicationLanguage.English, &quot;Turkey&quot;);

            TestObject testObject2 = new TestObject { Id = 2, UniversalCode = &quot;USA&quot; };
            testObject2.Name.Values.Add(Language.ApplicationLanguage.Turkish, &quot;Amerika Birleşik Devletleri&quot;);
            testObject2.Name.Values.Add(Language.ApplicationLanguage.English, &quot;United States Of America&quot;);

            TestObject testObject3 = new TestObject { Id = 3, UniversalCode = &quot;FR&quot; };
            testObject3.Name.Values.Add(Language.ApplicationLanguage.Turkish, &quot;Fransa&quot;);
            testObject3.Name.Values.Add(Language.ApplicationLanguage.English, &quot;France&quot;);

            listTestObject.Add(testObject1);
            listTestObject.Add(testObject2);
            listTestObject.Add(testObject3);

            return listTestObject;
        }
        static void Main(string[] args)
        {

            List&lt;TestObject&gt; listTestObject = GetSampleDataForTestObject();
            WriteAllList(listTestObject);
            Console.WriteLine();
            WriteForSpecificLanguageByIndexer(listTestObject);
            Console.WriteLine();
            WriteForSpecificLanguageByGetValue(listTestObject);
            Console.WriteLine();
            WriteForDefaultLanguageByIndexer(listTestObject);
            Console.WriteLine();
            WriteForDefaultLanguageByGetValue(listTestObject);
            Console.WriteLine();
            WriteForDefaultLanguageByImplicit(listTestObject);
            Console.Read();
        }
        private static void WriteAllList(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing All List&quot;);
            foreach (TestObject to in listTestObject)
            {
                Console.WriteLine(&quot;Id:&quot; + to.Id + &quot; Code:&quot; + to.UniversalCode);
                foreach (KeyValuePair&lt;Language.ApplicationLanguage, string&gt; kvp in to.Name)
                {
                    Console.WriteLine(&quot;     Language:&quot; + kvp.Key.ToString() + &quot; Name:&quot; + kvp.Value.ToString());
                }
            }
        }
        private static void WriteForSpecificLanguageByIndexer(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing Specific Language Value By Indexer&quot;);
            string s = listTestObject[0].Name[Language.ApplicationLanguage.English];
            Console.WriteLine(s);
        }
        private static void WriteForSpecificLanguageByGetValue(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing Specific Language Value By GetValue Method&quot;);
            string s = listTestObject[0].Name.GetValue(Language.ApplicationLanguage.English);
            Console.WriteLine(s);
        }
        private static void WriteForDefaultLanguageByIndexer(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing Default Language Value By Indexer&quot;);
            string s = listTestObject[1].Name[Language.GetDefaultLanguage()];
            Console.WriteLine(s);
        }
        private static void WriteForDefaultLanguageByGetValue(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing Default Language Value By GetValue Method&quot;);
            string s = listTestObject[1].Name.GetValue();
            Console.WriteLine(s);
        }
        private static void WriteForDefaultLanguageByImplicit(List&lt;TestObject&gt; listTestObject)
        {
            Console.WriteLine(&quot;Writing Default Language Value By Implicit Operator&quot;);
            string s = listTestObject[2].Name;
            Console.WriteLine(s);
        }

    }
</pre>
<p>Kodumuzu inceleyecek olursak;</p>
<p>GetSampleDataForTestObject metodunda test nesnemizden birçok örnek yaratarak bir list&#8217;e atıyoruz aynı zamanda test nesnemizdeki Name özelliğine çoklu dil değerlerinin nasıl atanabileceğinide görüyoruz. Gerçek uygulamalarınızda, bilhassa orm araçları kullanıyorsanız bu nesne doldurma işlemini birkaç satır kodla veritabanından yapabilirsiniz.</p>
<p>Main&#8217;de ise gördüğünüz gibi listemize çeşitli metodlar kullanarak erişiyoruz ve Multilanguage Name property&#8217;sindeki değerleri farklı diller için farklı yöntemlere kullanarak okuyoruz.</p>
<p>WriteAllList metodu nesne içerisindeki tüm dil değerlerine nasıl erişebileceğinizi göstermektedir. Bu metod içerisindeki kodumuzda Name property&#8217;sinin değerleri içerisinde dönerken Multilanguage nesnemize implement ettiğimiz IEnumerable interface&#8217;inden faydalanıyoruz.</p>
<p>WriteForSpecificLanguageByIndexer metodunda ise Name property&#8217;mizin indexer&#8217;ına değerini almak istediğimiz dil tipini vererek değeri okuyoruz.</p>
<p>WriteForSpecificLanguageByGetValue metodunda ise Name property&#8217;mizin GetValue metoduna değerini almak istediğimiz dil tipini vererek değeri okuyoruz.</p>
<p>WriteDefaultLanguageByIndexer metodunda ise Name property&#8217;mizin indexer&#8217;ına varsayılan dil değerini okuyarak veriyoruz ve değeri okuyoruz.</p>
<p>WriteDefaultLanguageByGetValue metodunda ise Name property&#8217;mizin GetValue metoduna parametre vermiyoruz ve varsayılan dil değerini okuyoruz.</p>
<p>WriteForDefaultLanguageByImplicit metodunda ise gördüğünüz gibi nesnemizin Name property&#8217;sini direkt olarak bir string değişkene atayabiliyor ve varsayılan dil değerini bu şekilde kolaylıkla okuyabiliyoruz.</p>
<p>Uygulamamızı çalıştırdığımızda örnek bir ekran görüntüsü aşağıdaki gibi olacaktır.</p>
<p><img class="alignnone size-full wp-image-815" title="" src="http://www.tameroz.com/wp-content/uploads/2011/12/1000002697_3.jpg" alt="" width="533" height="407" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/17/nesnelerimize-coklu-dil-destegi-eklemek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Tarafından Ankara ve İstanbul’da düzenlenen Web Camp’lere davetlisiniz!</title>
		<link>http://www.tameroz.com/2011/12/12/microsoft-tarafindan-ankara-ve-istanbulda-duzenlenen-web-camplere-davetlisiniz/</link>
		<comments>http://www.tameroz.com/2011/12/12/microsoft-tarafindan-ankara-ve-istanbulda-duzenlenen-web-camplere-davetlisiniz/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 06:59:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=808</guid>
		<description><![CDATA[13 Aralık 2011’de Ankara ve 19 Aralık 2011’de Istanbul ofisimizde saat 09:00’da Web Camp’lerimiz başlıyor. Web Camp Nedir? Web Camp’ler pek çok web geliştirme teknolojisi ile tanışacağınız, sadece web geliştiricileri için düzenlenmiş ücretsiz etkinliklerdir. İşin uzmanlarından, en hızlı ve doğru &#8230; <a href="http://www.tameroz.com/2011/12/12/microsoft-tarafindan-ankara-ve-istanbulda-duzenlenen-web-camplere-davetlisiniz/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>13 Aralık 2011’de Ankara ve 19 Aralık 2011’de Istanbul ofisimizde saat 09:00’da<br />
Web Camp’lerimiz başlıyor.</p>
<p><strong>Web Camp Nedir?</strong><br />
Web Camp’ler pek<br />
çok web geliştirme teknolojisi ile tanışacağınız, sadece web geliştiricileri<br />
için düzenlenmiş ücretsiz etkinliklerdir. İşin uzmanlarından, en hızlı ve doğru<br />
geliştirme çözümlerini interaktif bir ortamda öğrenmenizi ve etkinlikte web<br />
sitenizi geliştirerek yayınlamanızı hedeflemektedir.</p>
<p><strong>Eğitmen Kim?</strong></p>
<p>Her iki Webcamp de Microsoft Regional Director Daron Yöndem tarafından<br />
gerçekleştirilecektir.</p>
<p><strong>Nasıl Kayıt Olacağım?</strong><br />
Kayıt olmak çok<br />
kolay! Aşağıda yeralan linklere tıklayarak hızlıca kaydınızı olabilirsiniz!</p>
<p><strong><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032501249&amp;Culture=TR-TR" target="_blank">13 Aralık 2011 Ankara Web Camp’e kayıt olmak için tıklayın.</a></strong></p>
<p><a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=tr-TR&amp;EventID=1032501291&amp;IO=AG%2b3j%2bmPVFUDwBL6HIOhEA%3d%3d" target="_blank">19 Aralık 2011Istanbul Web Camp’e kayıt olmak için<br />
tıklayın.</a></p>
<p>Katılım ücretsizdir, ancak yerimiz oldukça sınırlı.<br />
Hemen kayıt olarak yerinizi ayırın!</p>
<p><strong>Peki, Ne Öğreneceğim?</strong><br />
Bu<br />
Web Camp‘te, interaktif, yüksek erişilebilirliliğe sahip ve profesyonel<br />
görünümlü web sitelerini aralarında ASP.NET, MVC3, Razor, HTML5/CSS3/JavaScript,<br />
WebMatrix ve Visual Studio 2010 Web Express’in de bulunduğu Microsoft web araç<br />
ve platformlarını kullanarak çözümü nasıl geliştireceğinizi ve nasıl<br />
yayınlayacağınızı başlangıçtan bitiş anına kadar öğreniyor olacaksınız.</p>
<p>Web Camp içeriğinde bulunan konu başlıklarından bazıları:</p>
<ul>
<li>HTML5, ASP.NET, Visual Studio 2010 Web Express</li>
<li>Azure ve MVC</li>
<li>WebMatrix v2</li>
<li>NuGet bileşenleri</li>
<li>Internet Explorer (Site Pinning, Uyarılar, Jump List özelliği, Media Player<br />
dahil etmek)</li>
<li>Web API Oluşturma</li>
<li>Windows Phone Uygulamasından Web API oluşturmak</li>
<li>WRE ve Site yayınlama</li>
</ul>
<p><strong>Yanımda Ne Getirmeliyim?</strong></p>
<p>Eğer Web Camp boyunca gerçekleştirilecek ve web sitenizi hemen orada<br />
geliştirme fırsatını kaçırmak istemiyorsanız yanınızda Dizüstü bilgisayarınızı<br />
getirmenizi ve Web Camps Training Kit&#8217;i önceden yüklemenizi rica ediyoruz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/12/microsoft-tarafindan-ankara-ve-istanbulda-duzenlenen-web-camplere-davetlisiniz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MVP Türkiye Topluluk sitesi yayında!</title>
		<link>http://www.tameroz.com/2011/12/06/mvp-turkiye-topluluk-sitesi-yayinda/</link>
		<comments>http://www.tameroz.com/2011/12/06/mvp-turkiye-topluluk-sitesi-yayinda/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 06:28:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=801</guid>
		<description><![CDATA[MVP Programının önemini, programın içeriğini anlatmak ve Türk MVP’ler hakkında ve MVP’lerin aktiviteleri hakkında bilgi vermek için hazırlanmış olan MVP Türkiye Topluluğu sitesi yayında. Sitede; MVP Programı nedir? Türk MVP’ler kimlerdir? Aramıza yeni katılan MVP’ler MVP Uzmanlıkları Türk MVP’lere ait &#8230; <a href="http://www.tameroz.com/2011/12/06/mvp-turkiye-topluluk-sitesi-yayinda/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>MVP Programının önemini, programın içeriğini anlatmak ve Türk MVP’ler hakkında ve MVP’lerin aktiviteleri hakkında bilgi vermek için hazırlanmış olan MVP Türkiye Topluluğu sitesi yayında. Sitede;</p>
<ul>
<li>MVP Programı nedir?</li>
<li>Türk MVP’ler kimlerdir?</li>
<li>Aramıza yeni katılan MVP’ler</li>
<li>MVP Uzmanlıkları</li>
<li>Türk MVP’lere ait seminer, eğitim, webcast bilgileri</li>
</ul>
<p>gibi bilgileri bulabilirsiniz.</p>
<p>Adres : <a href="http://www.mvpturkiye.com">http://www.mvpturkiye.com</a></p>
<p>Facebook : <a href="http://www.facebook.com/mvpturkiye">http://www.facebook.com/mvpturkiye</a></p>
<p>Twitter : <a href="http://twitter.com/mvpturkiye">http://twitter.com/mvpturkiye</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/06/mvp-turkiye-topluluk-sitesi-yayinda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# Türkiye &#124; LinkedIn Grubu</title>
		<link>http://www.tameroz.com/2011/12/05/c-turkiye-linkedin-grubu/</link>
		<comments>http://www.tameroz.com/2011/12/05/c-turkiye-linkedin-grubu/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 17:07:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=797</guid>
		<description><![CDATA[LinkedIn üzerinde C# ile uygulama geliştiren tüm yazılım geliştiriciler için paylaşım ve networking amaçlı C# Türkiye grubunu kurdum. Katılmak isterseniz adresi : http://www.linkedin.com/groups/C-T%C3%BCrkiye-4147931?gid=4147931&#38;trk=hb_side_g]]></description>
			<content:encoded><![CDATA[<p>LinkedIn üzerinde C# ile uygulama geliştiren tüm yazılım geliştiriciler için paylaşım ve networking amaçlı C# Türkiye grubunu kurdum. Katılmak isterseniz adresi : <a href="http://www.linkedin.com/groups/C-T%C3%BCrkiye-4147931?gid=4147931&amp;trk=hb_side_g">http://www.linkedin.com/groups/C-T%C3%BCrkiye-4147931?gid=4147931&amp;trk=hb_side_g</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/12/05/c-turkiye-linkedin-grubu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yepyeni SDK&#8217;lar, İndirip Denemeniz İçin Hazır!</title>
		<link>http://www.tameroz.com/2011/11/29/yepyeni-sdklar-indirip-denemeniz-icin-hazir/</link>
		<comments>http://www.tameroz.com/2011/11/29/yepyeni-sdklar-indirip-denemeniz-icin-hazir/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 10:42:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=804</guid>
		<description><![CDATA[Windows Azure, Windows Phone ve Webmatrix ile ilgili SDK&#8217;lar ve araçlar&#8217;ı hemen indirebilirsiniz. İndirmek için tıklayınız.]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-805" title="SDK" src="http://www.tameroz.com/wp-content/uploads/2011/12/header.jpg" alt="" width="710" height="120" /></p>
<p>Windows Azure, Windows Phone ve Webmatrix ile ilgili SDK&#8217;lar ve araçlar&#8217;ı hemen indirebilirsiniz.</p>
<p>İndirmek için <a href="http://www.microsoft.com/turkiye/yenisdklar/index.htm?WT.mc_id=ban-f-tr-loc--TAMEROZCOM" target="_blank">tıklayınız</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/11/29/yepyeni-sdklar-indirip-denemeniz-icin-hazir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone Geliştiricileri İçin İki Çok Önemli Rehber</title>
		<link>http://www.tameroz.com/2011/11/24/windows-phone-gelistiricileri-icin-iki-cok-onemli-rehber/</link>
		<comments>http://www.tameroz.com/2011/11/24/windows-phone-gelistiricileri-icin-iki-cok-onemli-rehber/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 08:09:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=890</guid>
		<description><![CDATA[Bütün Windows Phone Mobil Geliştiricileri! Uygulamanızın Marketplace’e taşınması ve yayınlanması için Microsoft Sertifikasyon gereksinimlerini sağlaması gerekmektedir. Uygulamaların yayınlanma sürecini hatasız dolayısıyla daha hızlı yapmak için uygulama gönderim sürecini adım adım anlatan bu dökümandan faydalanabilirsiniz. Kodlamaya yeni başlamış öğrenciler için başlangıç kılavuzu Yazılım &#8230; <a href="http://www.tameroz.com/2011/11/24/windows-phone-gelistiricileri-icin-iki-cok-onemli-rehber/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Bütün Windows Phone Mobil Geliştiricileri!<br />
Uygulamanızın Marketplace’e taşınması ve yayınlanması için Microsoft Sertifikasyon gereksinimlerini sağlaması gerekmektedir. Uygulamaların yayınlanma sürecini hatasız dolayısıyla daha hızlı yapmak için uygulama gönderim sürecini adım adım anlatan <strong><a href="http://www.yazgelistir.com/WindowsPhoneDevelopmentDocuments/Windows_Phone_Uygulama_G%C3%B6nderimi_Yapmak.pdf" target="blank">bu dökümandan</a></strong> faydalanabilirsiniz.</p>
<p>Kodlamaya yeni başlamış öğrenciler için başlangıç kılavuzu<br />
Yazılım dünyasında yeni olmanız hayalinizdeki uygulamayı geliştirmeniz için bir engel değil. <strong><a href="http://www.yazgelistir.com/WindowsPhoneDevelopmentDocuments/Underground_WinPhone_Uygulama_Geli%C5%9Ftirme_Ba%C5%9Flarken.pdf" target="_blank">Bu kılavuz</a></strong> sayesinde öğrenciler için ücretsiz olan Microsoft araç ve kaynaklarının dünyasına giriş yapacaksınız. Aktif, bilgili ve motive öğrenci gruplarıyla iletişime geçme şansınız olacak. İlk Windows Phone uygulamanızı geliştirmek için kodlama ve uygulama yazılımlarını bilmenize gerek yok. Size tüm araçları, çalışmaları, tavsiyeleri ve desteği sağlıyoruz. <strong><a href="http://www.yazgelistir.com/WindowsPhoneDevelopmentDocuments/Underground_WinPhone_Uygulama_Geli%C5%9Ftirme_Ba%C5%9Flarken.pdf" target="_blank">Bu kılavuzu</a></strong> takip ederek uygulamanızı Windows Phone Marketplace’de görebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/11/24/windows-phone-gelistiricileri-icin-iki-cok-onemli-rehber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Server 2012 Release Candidate (RC 0) Çıktı</title>
		<link>http://www.tameroz.com/2011/11/18/server-2012-release-candidate-rc-0-cikti/</link>
		<comments>http://www.tameroz.com/2011/11/18/server-2012-release-candidate-rc-0-cikti/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 08:07:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=887</guid>
		<description><![CDATA[SQL Server 2012 Release Candidate (RC 0) çıktı. İndirmek ve detayları incelemek için aşağıdaki adresi kullanabilirsiniz. http://www.microsoft.com/download/en/details.aspx?id=28145]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-888" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/sql-server-2012.png" alt="" width="562" height="124" /></p>
<p>SQL Server 2012 Release Candidate (RC 0) çıktı. İndirmek ve detayları incelemek için aşağıdaki adresi kullanabilirsiniz.</p>
<p><a href="http://www.microsoft.com/download/en/details.aspx?id=28145">http://www.microsoft.com/download/en/details.aspx?id=28145</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/11/18/server-2012-release-candidate-rc-0-cikti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Azure Platformunu David Chappell ile Keşfe Davetlisiniz</title>
		<link>http://www.tameroz.com/2011/11/15/windows-azure-platformunu-david-chappell-ile-kesfe-davetlisiniz/</link>
		<comments>http://www.tameroz.com/2011/11/15/windows-azure-platformunu-david-chappell-ile-kesfe-davetlisiniz/#comments</comments>
		<pubDate>Tue, 15 Nov 2011 08:05:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=884</guid>
		<description><![CDATA[Yazılım geliştirici firmalar için Bulut Bilişim teknolojisi büyük fırsatları da beraberinde getirmektedir. Gelecek uygulamalarınız nerede çalışacak? Uygulamalarınız ne olursa olsun Microsoft Windows Azure Platformu sizlere büyük fırsatlar sağlayacaktır. David Chappell, yazılım sektöründeki doğal değişimlerin ne zaman ve nasıl uygulanması gerektiğine &#8230; <a href="http://www.tameroz.com/2011/11/15/windows-azure-platformunu-david-chappell-ile-kesfe-davetlisiniz/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-885" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/winazuredavidchappel.png" alt="" width="750" height="160" /></p>
<p>Yazılım geliştirici firmalar için Bulut Bilişim teknolojisi büyük fırsatları da beraberinde getirmektedir. Gelecek uygulamalarınız nerede çalışacak? Uygulamalarınız ne olursa olsun Microsoft Windows Azure Platformu sizlere büyük fırsatlar sağlayacaktır. David Chappell, yazılım sektöründeki doğal değişimlerin ne zaman ve nasıl uygulanması gerektiğine dair doğru kararları vermenize yardımcı olmak için Windows Azure’u anlatacaktır.</p>
<ul>
<li>Teknolojiye Genel Bakış: Windows Azure Platformu</li>
<li>Windows Azure Programlama Modeli: Windows Server ile Farklar</li>
<li>Windows Azure Platformu ile diğer Bulut Bilişim Sistemlerinin Karşılaştırılması</li>
</ul>
<p><strong>22 Kasım 2011 Salı</strong> günü Microsoft İstanbul ofisinde gerçekleşecek ve Windows Azure platformunu anlamanıza yönelik mimari içeriğin de anlatılacağı etkinliğimizde sizleri de aramızda görmekten büyük mutluluk duyacağız.</p>
<p>Hemen kayıt olmak için <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032497999&amp;Culture=TR-TR" target="_blank"><strong>tıklayın</strong></a>.</p>
<p><strong>Konuşmacı Hakkında</strong><br />
David Chappell San Francisco, California’daki Chappell &amp; Associates (<a href="http://www.davidchappell.com/" target="_blank">www.davidchappell.com</a>) yöneticisidir. Konuşmaları, yazıları ve danışmanlıkları sayesinde dünyanın farklı bölgelerinden insanlara yeni teknolojileri anlamasını, kullanmasını ve daha iyi kararlar vermesini sağlamaktadır. Chappell beş farklı kıtada yüzlerce etkinlikte ana konuşmacı olarak yer aldı. Seminerlerine kırk ülkede binlerce teknik karar verici, uzman yazılım geliştirici, yazılım mimarı ve liderleri katıldı. Kitapları birçok dile çevrildi ve MIT, ETH Zurich gibi birçok üniversitede ders kitabı olarak kullanıldı. Hewlett-Packard, IBM, Microsoft, Stanford Üniversitesi ve Target Corporation gibi farklı firmalara yeni teknolojilere adaptasyon, yeni ürünleri pazarlama, müşteri ve çalışanları eğitme konularında yardımcı oldu. Winconsin-Madison Üniversitesi’nde Ekonomi dalında Lisans ve Bilgisayar Bilimleri dalında yüksek lisans diploması almıştır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/11/15/windows-azure-platformunu-david-chappell-ile-kesfe-davetlisiniz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yeni Blog</title>
		<link>http://www.tameroz.com/2011/10/06/yeni-blog/</link>
		<comments>http://www.tameroz.com/2011/10/06/yeni-blog/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 08:28:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=782</guid>
		<description><![CDATA[Merhabalar, Uzun zamandır işlerimin yoğunluğundan dolayı bloguma birşeyler yazamıyordum. Bunu değiştirmem gerekiyordu, değişime blog sistemimi değiştirerek başladım, umarım yeni blogumun tasarımını beğenirsiniz. Tasarım olarak değişen blogumun içeriğini de mümkün oldukça güncel tutmaya çalışacağım.]]></description>
			<content:encoded><![CDATA[<p>Merhabalar,</p>
<p>Uzun zamandır işlerimin yoğunluğundan dolayı bloguma birşeyler yazamıyordum. Bunu değiştirmem gerekiyordu, değişime blog sistemimi değiştirerek başladım, umarım yeni blogumun tasarımını beğenirsiniz.</p>
<p>Tasarım olarak değişen blogumun içeriğini de mümkün oldukça güncel tutmaya çalışacağım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/10/06/yeni-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2011 – 2012 Dönemi Microsoft Student Partners Programı</title>
		<link>http://www.tameroz.com/2011/09/12/2011-%e2%80%93-2012-donemi-microsoft-student-partners-programi/</link>
		<comments>http://www.tameroz.com/2011/09/12/2011-%e2%80%93-2012-donemi-microsoft-student-partners-programi/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 08:04:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=881</guid>
		<description><![CDATA[Microsoft’un dünya genelinde yürüttüğü Microsoft Student Partners (MSP) programı seçkin bir öğrenci grubuna hitap etmektedir. Programa kabul edilen öğrencilerde aranan en önemli özellikler: teknolojiye olan tutkunluk, sunum yeteneği ve girişimicliktir. Programa dahil olan öğrenciler Microsoft’un mevcut ve yeni nesil ürünleri, &#8230; <a href="http://www.tameroz.com/2011/09/12/2011-%e2%80%93-2012-donemi-microsoft-student-partners-programi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Microsoft’un dünya genelinde yürüttüğü Microsoft Student Partners (MSP) programı seçkin bir öğrenci grubuna hitap etmektedir. Programa kabul edilen öğrencilerde aranan en önemli özellikler: teknolojiye olan tutkunluk, sunum yeteneği ve girişimicliktir. Programa dahil olan öğrenciler Microsoft’un mevcut ve yeni nesil ürünleri, hedefleri konusunda eğitimler alıp, dahil oldukları üniversitenin kampüsünde teknik konuları tartışmak gibi ayrıcalığa sahip olabileceklerdir. Ayrıca son sürüm birçok Microsoft ürünü, iş olanakları ve dünya genelindeki MSP program üyeleri ile bağlantı kurmak gibi olanaklar ile özgeçmişlerine ekleyebilecekleri saygın bir tecrübe geçmişine sahip olacaklardır.</p>
<p>Öğrencilik hayatınız boyunca bir defa karşınıza çıkacak olan bu fırsatı kaçırmamanız dileği ile 2011 – 2012 dönemi Microsoft Student Partners programı için başvurularin 15 Eylül 2011 tarihinde son bulacağını hatırlatırız. Başvurunuzu<a href="http://msakademik.net/V2/msp-basvuru-formu" target="_blank">http://msakademik.net/V2/msp-basvuru-formu</a> adresinden yapabilirsiniz. Değerlendirme sonuçları son başvuru tarihini takip eden hafta içerisinde <a href="http://www.msakademik.net/" target="_blank">http://www.msakademik.net</a> sitesinden duyurulacaktır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/09/12/2011-%e2%80%93-2012-donemi-microsoft-student-partners-programi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 Haziran 2011 Yazgeliştir Zirvesine Kayıtlar Başladı!</title>
		<link>http://www.tameroz.com/2011/05/31/8-haziran-2011-yazgelistir-zirvesine-kayitlar-basladi/</link>
		<comments>http://www.tameroz.com/2011/05/31/8-haziran-2011-yazgelistir-zirvesine-kayitlar-basladi/#comments</comments>
		<pubDate>Tue, 31 May 2011 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2011/05/31/8-haziran-2011-yazgelistir-zirvesine-kayitlar-basladi/</guid>
		<description><![CDATA[Yazgeliştir etkinliklerinden Yazgeliştir Zirve&#8217;nin ikincisi 8 Haziran Çarşamba günü Microsoft İstanbul ofisinde gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile ilgili seminerlere katılabilir, Windows &#8230; <a href="http://www.tameroz.com/2011/05/31/8-haziran-2011-yazgelistir-zirvesine-kayitlar-basladi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P><IMG style="WIDTH: 463px; HEIGHT: 43px" src="http://www.tameroz.com/content/pictures/e36abb30-acfa-49d1-83c6-2979b8f8a357Zirve2011Banner.jpg" width=782 height=51> </P><br />
<P>Yazgeliştir etkinliklerinden Yazgeliştir Zirve&#8217;nin ikincisi 8 Haziran Çarşamba günü Microsoft İstanbul ofisinde gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile ilgili seminerlere katılabilir, Windows Phone 7, Windows Embedded, Windows Azure gibi tüm dünyanın yakından takip ettiği konuları ve son bir sene içinde Microsoft teknolojilerinde olan yenilikleri konunun uzmanlarından öğrenebilirsiniz. Etkinlikte aynı zamanda Yazgeliştir editörleri ile bir araya gelip kendilerine danışmak istediğiniz konularda sorular sorabilirsiniz. Etkinlik ile ilgili detaylı bilgiye <A href="http://zirve.yazgelistir.com/"><U><FONT color=#0066cc>zirve.yazgelistir.com</FONT></U></A> adresinden ulaşıp etkinliğe kayıt olabilirsiniz. </P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/05/31/8-haziran-2011-yazgelistir-zirvesine-kayitlar-basladi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft WebCamp İstanbul&#8217;da Gerçekleşiyor!</title>
		<link>http://www.tameroz.com/2011/05/25/microsoft-webcamp-istanbulda-gerceklesiyor/</link>
		<comments>http://www.tameroz.com/2011/05/25/microsoft-webcamp-istanbulda-gerceklesiyor/#comments</comments>
		<pubDate>Wed, 25 May 2011 08:01:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=877</guid>
		<description><![CDATA[Yeni Web teknolojileri ile kampa girmeye hazır mısınız? Microsoft WebCamp serisinin bu ayağında Microsoft Regional Director ve Silverlight MVP Daron Yöndem eşliğinde HTML5 ve Internet Explorer 9 ile Web uygulamaları geliştirirken; jQuery, oData ve ASP.NET MVC 3 Razor syntax’ının da &#8230; <a href="http://www.tameroz.com/2011/05/25/microsoft-webcamp-istanbulda-gerceklesiyor/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-878" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/microsoftwebcamp2011.jpg" alt="" width="650" height="141" /></p>
<p>Yeni Web teknolojileri ile kampa girmeye hazır mısınız?</p>
<p>Microsoft WebCamp serisinin bu ayağında Microsoft Regional Director ve Silverlight MVP Daron Yöndem eşliğinde HTML5 ve Internet Explorer 9 ile Web uygulamaları geliştirirken; jQuery, oData ve ASP.NET MVC 3 Razor syntax’ının da detaylarına doğru keyifli bir yolculuk yapacağız.</p>
<p><strong>Ayrıca etkinliği tüm gün boyunca canlı olarak Yazgeliştir.com&#8217;da izleyebileceksiniz!</strong></p>
<p>Kampa bilgisayarınızla gelmeyi unutmayın, yüklemelerimizi de hep beraber yapacağız!</p>
<p>Tarih: 27 Mayıs 2011 Cuma<br />
Saat: 10.00 &#8211; 17.00<br />
Yer: Microsoft İstanbul Ofisi<br />
Detaylı bilgi için <a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032487619&amp;Culture=TR-TR" target="_blank">tıklayın</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/05/25/microsoft-webcamp-istanbulda-gerceklesiyor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>8 Haziran 2011 Yazgeliştir Zirvesi</title>
		<link>http://www.tameroz.com/2011/05/25/8-haziran-2011-yazgelistir-zirvesi/</link>
		<comments>http://www.tameroz.com/2011/05/25/8-haziran-2011-yazgelistir-zirvesi/#comments</comments>
		<pubDate>Wed, 25 May 2011 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2011/05/25/8-haziran-2011-yazgelistir-zirvesi/</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;&#160;&#160; Yazgeliştir etkinliklerinden Yazgeliştir Zirve&#8217;nin ikincisi 8 Haziran Çarşamba günü Microsoft İstanbul ofisinde gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile ilgili seminerlere katılabilir, &#8230; <a href="http://www.tameroz.com/2011/05/25/8-haziran-2011-yazgelistir-zirvesi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;	<span id="lblMetin"><br />
<center><a href="http://zirve.yazgelistir.com/" target="_blank"><img style="width: 466px;" border="0" src="http://www.yazgelistir.com/images/news/Zirve2011Banner.jpg" width="600" height="45"></a></center></p>
<p>Yazgeliştir etkinliklerinden Yazgeliştir<br />
Zirve&#8217;nin ikincisi 8 Haziran Çarşamba günü Microsoft İstanbul ofisinde<br />
gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most </p>
<p>Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak.<br />
Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile ilgili seminerlere<br />
katılabilir, Windows Phone 7, Windows Embedded, Windows Azure gibi tüm dünyanın<br />
yakından takip ettiği konuları ve son bir sene içinde Microsoft teknolojilerinde<br />
olan yenilikleri konunun uzmanlarından öğrenebilirsiniz. Etkinlikte aynı zamanda<br />
Yazgeliştir editörleri ile bir araya gelip kendilerine danışmak istediğiniz<br />
konularda sorular sorabilirsiniz. Etkinlik ile ilgili detaylı bilgiye <a href="http://zirve.yazgelistir.com/"><u><font color="#0066cc">zirve.yazgelistir.com</font></u></a> adresinden<br />
ulaşabilirsiniz. <br />Zirveye 1 Haziran&#8217;da kayıt olabilirsiniz.</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/05/25/8-haziran-2011-yazgelistir-zirvesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Bilişim Zirvesi 2011: Sanal Sitesi Yayında</title>
		<link>http://www.tameroz.com/2011/04/25/microsoft-bilisim-zirvesi-2011-sanal-sitesi-yayinda/</link>
		<comments>http://www.tameroz.com/2011/04/25/microsoft-bilisim-zirvesi-2011-sanal-sitesi-yayinda/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 08:00:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=875</guid>
		<description><![CDATA[Microsoft Bilişim Zirvesi’nde gerçekleştirilen 10&#8242;dan fazla paralel oturum ile 60&#8242;dan fazla sunuma Microsoft Bilişim Zirvesi Sanal sitesi ile erişebilirsiniz. Detaylı bilgi için tıklayınız.]]></description>
			<content:encoded><![CDATA[<p>Microsoft Bilişim Zirvesi’nde gerçekleştirilen 10&#8242;dan fazla paralel oturum ile 60&#8242;dan fazla sunuma Microsoft Bilişim Zirvesi Sanal sitesi ile erişebilirsiniz. Detaylı bilgi için <strong><a href="http://www.microsoft.com/turkiye/cloud/localEvents.aspx" target="_blank">tıklayınız</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/04/25/microsoft-bilisim-zirvesi-2011-sanal-sitesi-yayinda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dev Unplugged Internet Explorer Yarışması</title>
		<link>http://www.tameroz.com/2011/03/25/dev-unplugged-internet-explorer-yarismasi/</link>
		<comments>http://www.tameroz.com/2011/03/25/dev-unplugged-internet-explorer-yarismasi/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 07:56:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=871</guid>
		<description><![CDATA[HTML5&#8242;in duyurulması ile birlikte, geleceğin en önemli geliştirme dillerinden biri olacağını ve daha hızlı, daha canlı ve interaktif web sitelerine doğru gidileceğini kanıtladı. Elbette yakın gelecekte çok sayıda HTML5 geliştirme aracı ve plug-in leri ile de tanışıyor olacağız. Ancak bugünden, &#8230; <a href="http://www.tameroz.com/2011/03/25/dev-unplugged-internet-explorer-yarismasi/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-872" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/devunplugged.png" alt="" width="460" height="63" /></p>
<p>HTML5&#8242;in duyurulması ile birlikte, geleceğin en önemli geliştirme dillerinden biri olacağını ve daha hızlı, daha canlı ve interaktif web sitelerine doğru gidileceğini kanıtladı. Elbette yakın gelecekte çok sayıda HTML5 geliştirme aracı ve plug-in leri ile de tanışıyor olacağız. Ancak bugünden, ciddi bir HTML5 geliştirme aracı olmadan HTML5 geliştirmeye ve dünyanın diğer ülkelerindeki geliştiricilerle yarışmaya hazır msınız? Eğer cevabınız evet ise 40.000 USD nin üzerinde toplam ödülü olan ve birinci gelen geliştiriciye 9000 USD ödülü olan, MEA (Ortadoğu ve Afrika) bölgesinde ise genel yarışmadan ayrı olarak çok sayıda ödülün verileceği bu yarışmaya Türkiye&#8217;den sizleri de bekliyoruz. <a href="http://www.beautyoftheweb.com/#/unplugged" target="_blank"><strong>Daha detaylı bilgi ve yarışmaya katılım için lütfen tıklayın</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/03/25/dev-unplugged-internet-explorer-yarismasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startup Weekend Istanbul’da</title>
		<link>http://www.tameroz.com/2011/03/18/startup-weekend-istanbul%e2%80%99da/</link>
		<comments>http://www.tameroz.com/2011/03/18/startup-weekend-istanbul%e2%80%99da/#comments</comments>
		<pubDate>Fri, 18 Mar 2011 07:53:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=868</guid>
		<description><![CDATA[Dünyanın en büyük iş fikri yarışmalarından Startup Weekend, 25 – 27 Mart tarihlerinde İstanbul&#8217;da yine Microsoft Türkiye evsahipliğinde gerçekleşiyor. İş fikri olan, yaratıcılığına güvenen, yazılım geliştiren, tasarım veya pazarlama yetkinliğini ortaya koymak isteyen girişimciler, Startup Weekend İstanbul’da buluşuyor. Haftasonu etkinliği, Microsoft &#8230; <a href="http://www.tameroz.com/2011/03/18/startup-weekend-istanbul%e2%80%99da/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-medium wp-image-869" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/istanbulstartupweekend2011-300x72.jpg" alt="" width="300" height="72" /></p>
<p>Dünyanın en büyük iş fikri yarışmalarından <a href="http://istanbul.startupweekend.org/" target="_blank"><strong>Startup Weekend</strong></a>, 25 – 27 Mart tarihlerinde İstanbul&#8217;da yine Microsoft Türkiye evsahipliğinde gerçekleşiyor.</p>
<p>İş fikri olan, yaratıcılığına güvenen, yazılım geliştiren, tasarım veya pazarlama yetkinliğini ortaya koymak isteyen girişimciler, Startup Weekend İstanbul’da buluşuyor. Haftasonu etkinliği, Microsoft ve Özyeğin Üniversitesi desteği ile gerçekleştirilecek. <a href="http://istanbul.startupweekend.org/"><strong>Startup Weekend Istanbul</strong></a> için şimdi kayıt zamanı!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/03/18/startup-weekend-istanbul%e2%80%99da/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Profesyonel Yazılım Geliştiriciler Microsoft Bilişim Zirvesi’nde Buluşuyor!</title>
		<link>http://www.tameroz.com/2011/02/22/profesyonel-yazilim-gelistiriciler-microsoft-bilisim-zirvesi%e2%80%99nde-bulusuyor/</link>
		<comments>http://www.tameroz.com/2011/02/22/profesyonel-yazilim-gelistiriciler-microsoft-bilisim-zirvesi%e2%80%99nde-bulusuyor/#comments</comments>
		<pubDate>Tue, 22 Feb 2011 07:50:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=865</guid>
		<description><![CDATA[11 Mart 2011 tarihinde İstanbul’da düzenlenecek Zirve’de Web Platformu, Uygulama Yaşam Döngüsü, Geleceğin Çalışma Dünyası ve Bulut Bilişim gibi birçok farklı konuda, otuzdan fazla paralel sunum sizi bekliyor. Tüm gün sürecek etkinliği, Komedi Dükkanı’nı izleyerek Tolga Çevik ile eğlence seline &#8230; <a href="http://www.tameroz.com/2011/02/22/profesyonel-yazilim-gelistiriciler-microsoft-bilisim-zirvesi%e2%80%99nde-bulusuyor/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignnone size-full wp-image-866" title="" src="http://www.tameroz.com/wp-content/uploads/2012/01/BilisimZirvesi2011Mart.jpg" alt="" width="600" height="100" /></p>
<p>11 Mart 2011 tarihinde İstanbul’da düzenlenecek Zirve’de Web Platformu, Uygulama Yaşam Döngüsü, Geleceğin Çalışma Dünyası ve Bulut Bilişim gibi birçok farklı konuda, otuzdan fazla paralel sunum sizi bekliyor. Tüm gün sürecek etkinliği, Komedi Dükkanı’nı izleyerek Tolga Çevik ile eğlence seline kapılarak tamamlayabileceksiniz. Tüm bunlar için <a href="https://msevents.microsoft.com/cui/EventDetail.aspx?culture=tr-TR&amp;EventID=1032474048&amp;IO=l1KCS%2fdGn2P%2fFbGk97ziug%3d%3d" target="_blank"><strong>etkinliğe şimdi kayıt olun</strong></a>!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/02/22/profesyonel-yazilim-gelistiriciler-microsoft-bilisim-zirvesi%e2%80%99nde-bulusuyor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft’tan Uluslararası Anadil Günü’nde anlamlı hediye</title>
		<link>http://www.tameroz.com/2011/02/21/microsoft%e2%80%99tan-uluslararasi-anadil-gunu%e2%80%99nde-anlamli-hediye/</link>
		<comments>http://www.tameroz.com/2011/02/21/microsoft%e2%80%99tan-uluslararasi-anadil-gunu%e2%80%99nde-anlamli-hediye/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2011/02/21/microsoft%e2%80%99tan-uluslararasi-anadil-gunu%e2%80%99nde-anlamli-hediye/</guid>
		<description><![CDATA[‘Visual Studio 2010 artık Türkçe dil destekli’ UNESCO tarafından Uluslararası Anadil Günü olarak ilân edilen 21 Şubat’ta Microsoft, Visual Studio 2010’a Türkçe dil özelliği ekleyerek bu anlamlı günde Türk yazılım geliştiricilerin ve kullanıcıların yüzünü güldürdü. Dünyada yaklaşık 6000 farklı yerel &#8230; <a href="http://www.tameroz.com/2011/02/21/microsoft%e2%80%99tan-uluslararasi-anadil-gunu%e2%80%99nde-anlamli-hediye/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>‘Visual Studio 2010 artık Türkçe dil destekli’</p>
<p>UNESCO tarafından Uluslararası Anadil Günü olarak ilân edilen 21 Şubat’ta Microsoft, Visual Studio 2010’a Türkçe dil özelliği ekleyerek bu anlamlı günde Türk yazılım geliştiricilerin ve kullanıcıların yüzünü güldürdü. </p>
<p>Dünyada yaklaşık 6000 farklı yerel dilin konuşulmasının kutlandığı bugünde Microsoft, Visual Studio 2010’a Türkçe dil seçeneği ekleyerek Türk yazılım geliştirici ve son kullanıcıların Visual Studio teknolojisini çok daha verimli kullanabilmelerini sağlıyor. Visual Studio 2010’a eklenen yerel dil seçeneklerinden biri olan Türkçe ile&nbsp; Türk kullanıcılar artık teknolojinin getirdiği yenilikleri kendi dillerinden takip ederken programın tüm özelliklerini kolayca kullanabilecek. Ürünlerin yoğunlukla kullanılan özelliklerinin yerel dillerde sunulduğu arayüz olan dil paketi (LIP) kullanımı için, lisanslı ürün üzerine, ücretsiz olarak kurulabilmektedir. Visual Studio 2010 Türkçe dil paketini indirmek için http://tinyurl.com/6yte5cl</p>
<p>21. yüzyılının sonuna geldiğimizde birçok yerel dilin hızla yok olmasından dolayı UNESCO, 1999 yılında kültürel çeşitliliğin ve yerel dillerin korunması için 21 Şubat’ı Uluslararası Anadil Günü ilân etti. Microsoft, 21 Şubat Uluslararası Anadil Günü’nde globalde Office 2010, Windows 7 ve Visual Studio 2010’a eklediği yeni dil seçenekleriyle bugünün önemini destekliyor ve kutluyor. Çokdilliliğin ve kültürel çeşitliliğin devamlılığına katkı sağlayan Microsoft, Türkçe’nin de içinde yer aldığı Microsoft Yerel Dil Programı’nda 1.7 milyar kişinin konuştuğu yerel diller ile yazılımlarını buluşturuyor. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/02/21/microsoft%e2%80%99tan-uluslararasi-anadil-gunu%e2%80%99nde-anlamli-hediye/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yazgeliştir Forumları Yenilendi</title>
		<link>http://www.tameroz.com/2011/02/07/yazgelistir-forumlari-yenilendi/</link>
		<comments>http://www.tameroz.com/2011/02/07/yazgelistir-forumlari-yenilendi/#comments</comments>
		<pubDate>Mon, 07 Feb 2011 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2011/02/07/yazgelistir-forumlari-yenilendi/</guid>
		<description><![CDATA[Yazgeliştir forumları yenilendi. Yeni özellikleri, yeni arayüzü ve yeni moderatör kadrosu ile hizmetinizde. Ziyaret etmek için http://forum.yazgelistir.com adresini ziyaret edebilirsiniz.]]></description>
			<content:encoded><![CDATA[<p><img border=0 src="http://www.yazgelistir.com/images/ygforum.gif" onclick="window.location='http://forum.yazgelistir.com'"><BR><BR>Yazgeliştir forumları yenilendi. Yeni özellikleri, yeni arayüzü ve yeni moderatör kadrosu ile hizmetinizde. Ziyaret etmek için <A href="http://forum.yazgelistir.com">http://forum.yazgelistir.com</A> adresini ziyaret edebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/02/07/yazgelistir-forumlari-yenilendi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kaçıranlar için PDC 2010 Türkiye Etkinlikleri!</title>
		<link>http://www.tameroz.com/2011/01/14/kaciranlar-icin-pdc-2010-turkiye-etkinlikleri/</link>
		<comments>http://www.tameroz.com/2011/01/14/kaciranlar-icin-pdc-2010-turkiye-etkinlikleri/#comments</comments>
		<pubDate>Fri, 14 Jan 2011 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2011/01/14/kaciranlar-icin-pdc-2010-turkiye-etkinlikleri/</guid>
		<description><![CDATA[Ekim ayı sonunda Redmond’da düzenlenen Microsoft Professional Developers Conference &#8211; PDC10’u takiben, konferansın önemli duyurularını da içerecek özel etkinliklerde Türkiye’deki profesyonel yazılım geliştiricilerle bir araya geldik. Ankara, İzmir ve İstanbul’da düzenlenen PDC10 Türkiye Özel etkinliklerinde, özenle seçilmiş teknik oturumlar, Microsoft &#8230; <a href="http://www.tameroz.com/2011/01/14/kaciranlar-icin-pdc-2010-turkiye-etkinlikleri/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ekim ayı sonunda Redmond’da düzenlenen Microsoft Professional Developers Conference &#8211; PDC10’u takiben, konferansın önemli duyurularını da içerecek özel etkinliklerde Türkiye’deki profesyonel yazılım geliştiricilerle bir araya geldik. Ankara, İzmir ve İstanbul’da düzenlenen PDC10 Türkiye Özel etkinliklerinde, özenle seçilmiş teknik oturumlar, Microsoft Türkiye çalışanları ve teknik alanda uzmanlıklarını kanıtlamış deneyimli Microsoft RD’leri tarafından gerçekleştirilmiştir. <BR><BR>Kaçırdım diye üzülmeyin! <A href="http://www.microsoft.com/turkiye/PDC2010/?WT.mc_id=ban-n-tr-sat-BSA-January" target=_blank>Bu adresten</A> hem PDC10 Türkiye oturumlarını ve yanısıra PDC10 Redmond konferansı açılış konuşmasının Türkçe altyazılı versiyonunu ve tüm oturumları izleyebilir, hem de sizin için faydalı teknik kaynaklara ulaşabilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/01/14/kaciranlar-icin-pdc-2010-turkiye-etkinlikleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebMatrix için hazır mısınız?</title>
		<link>http://www.tameroz.com/2011/01/12/webmatrix-icin-hazir-misiniz/</link>
		<comments>http://www.tameroz.com/2011/01/12/webmatrix-icin-hazir-misiniz/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 07:49:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/?p=863</guid>
		<description><![CDATA[WebMatrix, yeni websitesi oluşturmak, varolan websitelerinizde değişiklikler yapmak isteyen herkes için, hayatı kolaylaştıran, yeni ve ücretsiz bir araçtır. Canlı olarak izleyebileceğiniz WebMatrix lansman etkinliğine katılarak, kolay Web geliştirme deneyimi için WebMatrix’I nasıl kullanabileceğinizi öğrenebilirsiniz. İster kendiniz kodlayarak bir websitesi yaratın &#8230; <a href="http://www.tameroz.com/2011/01/12/webmatrix-icin-hazir-misiniz/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>WebMatrix, yeni websitesi oluşturmak, varolan websitelerinizde değişiklikler yapmak isteyen herkes için, hayatı kolaylaştıran, yeni ve ücretsiz bir araçtır.</p>
<p>Canlı olarak izleyebileceğiniz WebMatrix lansman etkinliğine katılarak, kolay Web geliştirme deneyimi için WebMatrix’I nasıl kullanabileceğinizi öğrenebilirsiniz. İster kendiniz kodlayarak bir websitesi yaratın ister WordPress, Joomla!, DotNetNuke, Umbraco gibi açık kaynak Web uygulamaları kullanın, WebMatrix size olasılıklarla dolu yepyeni bir dünya sunuyor.</p>
<p>Ücretsiz ve kayıt gerektirmeden; <a href="http://www.microsoft.com/web/enter" target="_blank">WebMatrix lansmanını izleyin</a> ve bu deneyime ortak olun!</p>
<p>13 Ocak 2011, Perşembe saat: 19:00 (Türkiye saati ile)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2011/01/12/webmatrix-icin-hazir-misiniz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free ebook: Programming Windows Phone 7</title>
		<link>http://www.tameroz.com/2010/10/31/free-ebook-programming-windows-phone-7/</link>
		<comments>http://www.tameroz.com/2010/10/31/free-ebook-programming-windows-phone-7/#comments</comments>
		<pubDate>Sun, 31 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/31/free-ebook-programming-windows-phone-7/</guid>
		<description><![CDATA[Windows Phone 7 üzerinde uygulama geliştirmenin anlatıldığı ve Charles Petzold tarafından yazılıp Microsoft Press&#8217;den çıkan e-book&#8217;u ve örnek kodları aşağıdaki linklerden bedava indirebilirsiniz. Kitap Örnek Kodlar]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.tameroz.com/content/pictures/7f24f714-e24b-4e25-9c16-cc05c5881728ProgrammingWindowsPhone7_Ebook.jpg" alt="" width="179" height="218" /></p>
<p>Windows Phone 7 üzerinde uygulama geliştirmenin anlatıldığı ve Charles Petzold tarafından yazılıp Microsoft Press&#8217;den çıkan e-book&#8217;u ve örnek kodları aşağıdaki linklerden bedava indirebilirsiniz.</p>
<p><a href="http://download.microsoft.com/download/5/0/A/50A39509-D015-410F-A8F2-A5511E5A988D/Microsoft_Press_ebook_Programming_Windows_Phone_7_PDF.pdf">Kitap</a></p>
<p><a href="http://download.microsoft.com/download/5/0/A/50A39509-D015-410F-A8F2-A5511E5A988D/Microsoft_Press_ebook_Programming_Windows_Phone_7_Sample_Code.zip">Örnek Kodlar</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/31/free-ebook-programming-windows-phone-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free ebook: Moving to Microsoft Visual Studio 2010</title>
		<link>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010/</link>
		<comments>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010/</guid>
		<description><![CDATA[Visual Studio 2003, 2005, 2008 versiyonlarından herhangi birinden Visual Studio 2010&#8242;a geçiş için yararlı bilgilerin yer aldığı ve Patrice Pelland, Pascal Paré, and Ken Haines tarafından yazılıp Microsoft Press&#8217;den çıkan e-book&#8217;u aşağıdaki adresten bedava indirebilirsiniz. http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.tameroz.com/content/pictures/cbdc6b5c-4326-42e1-b39b-7af1f673a667MovingToMicrosoftVisualStudio2010.jpg" alt="" width="179" height="218" /><br />
Visual Studio 2003, 2005, 2008 versiyonlarından herhangi birinden Visual Studio 2010&#8242;a geçiş için yararlı bilgilerin yer aldığı ve Patrice Pelland, Pascal Paré, and Ken Haines tarafından yazılıp Microsoft Press&#8217;den çıkan e-book&#8217;u aşağıdaki adresten bedava indirebilirsiniz.</p>
<p><a href="http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx">http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free ebook: Moving to Microsoft Visual Studio 2010</title>
		<link>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010-2/</link>
		<comments>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010-2/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010-2/</guid>
		<description><![CDATA[&#8220;Moving to Microsoft Visual Studio 2010&#8243; is a book written by Patrice Pelland, Pascal Paré, and Ken Haines and published by Microsoft Press. This book includes useful information about upgrading to Visual Studio 2010 from 2003, 2005 or 2008 versions. You can download &#8230; <a href="http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.tameroz.com/content/pictures/cbdc6b5c-4326-42e1-b39b-7af1f673a667MovingToMicrosoftVisualStudio2010.jpg" alt="" width="179" height="218" />&#8220;Moving to Microsoft Visual Studio 2010&#8243; is a book written by Patrice Pelland, Pascal Paré, and Ken Haines and published by Microsoft Press. This book includes useful information about upgrading to Visual Studio 2010 from 2003, 2005 or 2008 versions. You can download the book in a e-book format by using the link below. <a href="http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx">http://blogs.msdn.com/b/microsoft_press/archive/2010/09/13/free-ebook-moving-to-microsoft-visual-studio-2010.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/27/free-ebook-moving-to-microsoft-visual-studio-2010-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft PDC10 konferansına online katılın</title>
		<link>http://www.tameroz.com/2010/10/26/microsoft-pdc10-konferansina-online-katilin/</link>
		<comments>http://www.tameroz.com/2010/10/26/microsoft-pdc10-konferansina-online-katilin/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/26/microsoft-pdc10-konferansina-online-katilin/</guid>
		<description><![CDATA[28, 29 Ekim 2010 tarihlerinde Microsoft Redmond kampüsünde yapılacak olan Microsoft PDC10&#8242;u online olarak izleyebilirsiniz. İzlemek için aşağıdaki adresi ziyaret edebilirsiniz. İzlemek için tıklayınız&#160;]]></description>
			<content:encoded><![CDATA[<p><P>28, 29 Ekim 2010 tarihlerinde Microsoft Redmond kampüsünde yapılacak olan Microsoft PDC10&#8242;u online olarak izleyebilirsiniz. İzlemek için aşağıdaki adresi ziyaret edebilirsiniz. </P><br />
<P><A href="http://www.microsoftpdc.com/?WT.mc_id=soc-n-tr-loc--MVP_oztamer@hotmail.com">İzlemek için tıklayınız</A>&nbsp;</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/26/microsoft-pdc10-konferansina-online-katilin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yazgeliştir Gönüllüleri Etkinliği &#8211; Yazılım Geliştiriciler İçin Yenilikler Sunumu</title>
		<link>http://www.tameroz.com/2010/10/25/yazgelistir-gonulluleri-etkinligi-yazilim-gelistiriciler-icin-yenilikler-sunumu/</link>
		<comments>http://www.tameroz.com/2010/10/25/yazgelistir-gonulluleri-etkinligi-yazilim-gelistiriciler-icin-yenilikler-sunumu/#comments</comments>
		<pubDate>Mon, 25 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/25/yazgelistir-gonulluleri-etkinligi-yazilim-gelistiriciler-icin-yenilikler-sunumu/</guid>
		<description><![CDATA[23 Ekim 2010 Cumartesi günü gerçekleştirdiğimiz Yazgeliştir Gönüllüleri etkinliğinde yaptığım &#8220;Yazılımcılar İçin Yenilikler&#8221; sunumunu buradan indirebilirsiniz.]]></description>
			<content:encoded><![CDATA[<p><a href="http://yazgelistir.com/etkinlik/yazilimgelistiricilericinyenilikler_tameroz.pptx"><img class="alignleft" style="border: 0px currentColor;" src="http://www.tameroz.com/content/pictures/1382bbad-41d5-4949-b0d8-3327c47366d1YazilimGelistiricilerIcinYenilikler.jpg" alt="" width="221" height="166" border="0" /> </a>23 Ekim 2010 Cumartesi günü gerçekleştirdiğimiz Yazgeliştir Gönüllüleri etkinliğinde yaptığım &#8220;Yazılımcılar İçin Yenilikler&#8221; sunumunu <a href="http://yazgelistir.com/etkinlik/yazilimgelistiricilericinyenilikler_tameroz.pptx">buradan</a> indirebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/25/yazgelistir-gonulluleri-etkinligi-yazilim-gelistiriciler-icin-yenilikler-sunumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft Forumları Artık Türkçe</title>
		<link>http://www.tameroz.com/2010/10/18/microsoft-forumlari-artik-turkce/</link>
		<comments>http://www.tameroz.com/2010/10/18/microsoft-forumlari-artik-turkce/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/10/18/microsoft-forumlari-artik-turkce/</guid>
		<description><![CDATA[Microsoft tarafından yönetilen forumlar artık&#160;Türkçe olarak hizmetinizde.&#160;Çeşitli teknolojilerle ilgili sorularınızı sorabilir ve yetkili uzmanların ve Microsoft MVP’lerinin önceden cevapladığı&#160;sorulara göz atabilirsiniz. TechNet ve TechNet Forumları MSDN ve MSDN Forumları MS Answers]]></description>
			<content:encoded><![CDATA[<p><P>Microsoft tarafından yönetilen forumlar artık&nbsp;Türkçe olarak hizmetinizde.&nbsp;Çeşitli teknolojilerle ilgili sorularınızı sorabilir ve yetkili uzmanların ve Microsoft MVP’lerinin önceden cevapladığı&nbsp;sorulara göz atabilirsiniz. </P><br />
<P><A href="http://technet.microsoft.com/tr-tr">TechNet </A>ve <A href="http://social.technet.microsoft.com/Forums/tr-TR/categories?prof=required&amp;lc=1055">TechNet Forumları</A> <BR><A href="http://msdn.microsoft.com/tr-tr">MSDN</A> ve <A href="http://social.msdn.microsoft.com/Forums/tr-TR/categories?prof=required&amp;lc=1055">MSDN Forumları</A> <BR><A href="http://answers.microsoft.com/tr-tr/default.aspx">MS Answers</A></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/10/18/microsoft-forumlari-artik-turkce/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formspring&#8217;de bana soru sorabilirsiniz</title>
		<link>http://www.tameroz.com/2010/08/08/formspringde-bana-soru-sorabilirsiniz/</link>
		<comments>http://www.tameroz.com/2010/08/08/formspringde-bana-soru-sorabilirsiniz/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Eğlencelik]]></category>
		<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/08/08/formspringde-bana-soru-sorabilirsiniz/</guid>
		<description><![CDATA[Son zamanlardaki modaya uyarak kendime bir formspring hesabı açtım. Bana formspring de soru sormak için http://www.formspring.me/oztamer linkine ttıklamanız yeterli olacaktır. Soracağınız sorular teknik içerikli olabileceği gibi herhangi birşey üzerine de olabilir. SorularInızı Türkçe ve İngilizce olarak yöneltebilirsiniz. Ayrıca&#160;aklımda sitemi formspring &#8230; <a href="http://www.tameroz.com/2010/08/08/formspringde-bana-soru-sorabilirsiniz/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Son zamanlardaki modaya uyarak kendime bir formspring hesabı açtım. Bana formspring de soru sormak için <A href="http://www.formspring.me/oztamer">http://www.formspring.me/oztamer</A> linkine ttıklamanız yeterli olacaktır. Soracağınız sorular teknik içerikli olabileceği gibi herhangi birşey üzerine de olabilir. SorularInızı Türkçe ve İngilizce olarak yöneltebilirsiniz. Ayrıca&nbsp;aklımda sitemi formspring ile entegre edip formspring&#8217;e girmeden direkt sitem üzerinden soru sorma ve cevapları görebilmeniz için bir çalışma yapmak var. Tek sorun vakit. Umarım yakında bu çalışmayı yaparım.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/08/08/formspringde-bana-soru-sorabilirsiniz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Türkiyenin Açık Kaynak Topluluğu Birliktegeliştir Yeni Versiyonu İle Yayında</title>
		<link>http://www.tameroz.com/2010/06/15/turkiyenin-acik-kaynak-toplulugu-birliktegelistir-yeni-versiyonu-ile-yayinda/</link>
		<comments>http://www.tameroz.com/2010/06/15/turkiyenin-acik-kaynak-toplulugu-birliktegelistir-yeni-versiyonu-ile-yayinda/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Açık Kaynak Kod]]></category>
		<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/06/15/turkiyenin-acik-kaynak-toplulugu-birliktegelistir-yeni-versiyonu-ile-yayinda/</guid>
		<description><![CDATA[Açık kaynak kodlu proje geliştirme yaklaşımının giderek yaygınlaştığı günümüz yazılım dünyasında Microsoft platform ve araçları kullanılarak birçok açık kaynak kodlu uygulama geliştirilmekte ve Microsoft&#8217;un kendisi de bu konuda çalışmalar yapmaktadır.&#160;Açık kaynak kodlu bir içerik yönetim sistemi olan Umbraco üzerine kurulan &#8230; <a href="http://www.tameroz.com/2010/06/15/turkiyenin-acik-kaynak-toplulugu-birliktegelistir-yeni-versiyonu-ile-yayinda/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P><IMG src="http://www.tameroz.com/content/pictures/5afe9311-9a23-46c6-9a5e-b625bd512be7bgLogo.png" width=242 height=116></P><br />
<P>Açık kaynak kodlu proje geliştirme yaklaşımının giderek yaygınlaştığı günümüz yazılım dünyasında Microsoft platform ve araçları kullanılarak birçok açık kaynak kodlu uygulama geliştirilmekte ve Microsoft&#8217;un kendisi de bu konuda çalışmalar yapmaktadır.<BR>&nbsp;<BR>Açık kaynak kodlu bir içerik yönetim sistemi olan Umbraco üzerine kurulan Birliktegeliştir, Türkiye&#8217;de de Microsoft platformlarında açık kaynaklı projeler geliştirilmesi ve mevcut açık kaynak kodlu projelerin kullanımının yaygınlaştırılmasını amaçlamaktadır. Zaman içinde yaygınlaşan açık kaynak kod topluluğuna daha iyi içerik sağlamak amacıyla Birliktegeliştir yeni arayüzü ve yeni özellikleriyle yayında.<BR>&nbsp;<BR>Sizlerin de kendi projelerinizi ve kendi içeriğinizi rahatlıkla paylaşabileceğiniz Birliktegeliştir&#8217;de ayrıca Türkiye&#8217;de geliştirilmiş açık kaynak kodlu projelere, bugüne kadar dünyada yapılmış açık kaynak kodlu uygulamaların kullanımı ile ilgili makale, video gibi Türkçe kaynaklara ulaşabilirsiniz.<BR>&nbsp;<BR>Bunun yanısıra uygulama geliştiricilerin kodlama sırasında çoğunlukla kullandığı kod bloklarına Kod Parçaları kısmından ulaşabilirsiniz.<BR>&nbsp;<BR>Birliktegeliştir topluluğuna <A href="http://www.birliktegelistir.com">www.birliktegelistir.com</A> adresinden ulaşabilirsiniz.<BR>&nbsp;<BR>E-Mail: <A href="mailto:birliktegelistir@birliktegelistir.com">birliktegelistir@birliktegelistir.com</A> <BR>Twitter: <A href="http://www.twitter.com/bgelistir">www.twitter.com/bgelistir</A><BR></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/06/15/turkiyenin-acik-kaynak-toplulugu-birliktegelistir-yeni-versiyonu-ile-yayinda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yazgeliştir Zirvesi &#8211; Mayıs 2010</title>
		<link>http://www.tameroz.com/2010/04/22/yazgelistir-zirvesi-mayis-2010/</link>
		<comments>http://www.tameroz.com/2010/04/22/yazgelistir-zirvesi-mayis-2010/#comments</comments>
		<pubDate>Thu, 22 Apr 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/22/yazgelistir-zirvesi-mayis-2010/</guid>
		<description><![CDATA[&#160; &#160;Yazgeliştir etkinliklerinin en yenisi olan Yazgeliştir Zirvelerinin ilki 29 Mayıs Cumartesi günü Microsoft İstanbul ofisinde gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile &#8230; <a href="http://www.tameroz.com/2010/04/22/yazgelistir-zirvesi-mayis-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P>&nbsp;<IMG src="http://www.tameroz.com/content/pictures/af69d483-4b2a-4bea-9c67-9d1b8127a415YazGelistirZirveLogo.png"></P><br />
<P>&nbsp;Yazgeliştir etkinliklerinin en yenisi olan Yazgeliştir Zirvelerinin ilki 29 Mayıs Cumartesi günü Microsoft İstanbul ofisinde gerçekleştirilecek. Etkinlikte Microsoft Regional Director (RD), Microsoft Most Valuable Professional (MVP) ve Yazgeliştir editörleri konuşmacı olacak. Microsoft’un çeşitli yazılım geliştirme ürün ve araçları ile ilgili seminerlere katılabilir, Visual Studio 2010, SQL Server 2008 R2, ASP.Net 4.0, Sharepoint 2010 ile gelen yenilikleri konunun uzmanlarından öğrenebilirsiniz. Etkinlikte aynı zamanda Yazgeliştir editörleri ile bir araya gelip kendilerine danışmak istediğiniz konularda sorular sorabilirsiniz. <BR><BR>Kayıt olmak ve oturumlar, konuşmacılar&nbsp;hakkında bilgi almak&nbsp;için <A href="http://www.yazgelistirzirvesi.com">http://www.yazgelistirzirvesi.com</A> adresini ziyaret edebilirsiniz.</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/22/yazgelistir-zirvesi-mayis-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010</title>
		<link>http://www.tameroz.com/2010/04/13/visual-studio-2010/</link>
		<comments>http://www.tameroz.com/2010/04/13/visual-studio-2010/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/13/visual-studio-2010/</guid>
		<description><![CDATA[Bildiğiniz gibi Visual Studio&#8217;nun son sürümü olan Visual Studio 2010 dün paylaştığım gibi 12 Nisan itibariyle piyasaya çıktı. Daha detaylı bilgi alabileceğiniz linkleri ve express versiyonları indirebileceğiniz linkleri sizlerle paylaşmak istiyorum. Visual Studio hakkında Türkçe bilgi almak için http://www.microsoft.com/turkiye/netİngilizce bilgi &#8230; <a href="http://www.tameroz.com/2010/04/13/visual-studio-2010/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P><IMG src="http://www.tameroz.com/content/pictures/290bcf06-b2d0-40a5-9f6a-8d9da956de6evs2010Banner.gif"></P><br />
<P>Bildiğiniz gibi Visual Studio&#8217;nun son sürümü olan Visual Studio 2010 dün paylaştığım gibi 12 Nisan itibariyle piyasaya çıktı. Daha detaylı bilgi alabileceğiniz linkleri ve express versiyonları indirebileceğiniz linkleri sizlerle paylaşmak istiyorum.</P><br />
<P>Visual Studio hakkında Türkçe bilgi almak için <A href="http://www.microsoft.com/turkiye/net">http://www.microsoft.com/turkiye/net</A><BR>İngilizce bilgi almak için <A href="http://www.microsoft.com/visualstudio/en-us">http://www.microsoft.com/visualstudio/en-us</A><BR>Express versiyonlar hakkında bilgi almak için <A href="http://www.microsoft.com/express/Windows">http://www.microsoft.com/express/Windows</A></P><br />
<P>adreslerini ziyaret edebilirsiniz.</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/13/visual-studio-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 RTM Oldu</title>
		<link>http://www.tameroz.com/2010/04/12/visual-studio-2010-rtm-oldu/</link>
		<comments>http://www.tameroz.com/2010/04/12/visual-studio-2010-rtm-oldu/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/12/visual-studio-2010-rtm-oldu/</guid>
		<description><![CDATA[Visual Studio 2010 RTM oldu. Trial versiyonu indirmek ve incelemek için http://www.microsoft.com/visualstudio/en-us/download&#160;adresini ziyaret edebilirsiniz.]]></description>
			<content:encoded><![CDATA[<p>Visual Studio 2010 RTM oldu. Trial versiyonu indirmek ve incelemek için <A href="http://www.microsoft.com/visualstudio/en-us/download">http://www.microsoft.com/visualstudio/en-us/download</A>&nbsp;adresini ziyaret edebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/12/visual-studio-2010-rtm-oldu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yazgeliştir Webinerleri</title>
		<link>http://www.tameroz.com/2010/04/12/yazgelistir-webinerleri/</link>
		<comments>http://www.tameroz.com/2010/04/12/yazgelistir-webinerleri/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/12/yazgelistir-webinerleri/</guid>
		<description><![CDATA[Yazgeliştir topluluğu olarak Nisan ve Mayıs aylarında 4 farklı webiner gerçekleştireceğiz ve değineceğimiz konular Microsoft CRM Dynamics and Extendibility, WCF Ria Services, Windows Mobile 6.5 ile Web Widgets Geliştirmek, Windows Embedded CE 6.0 R3 &#8211; Silverlight Uygulaması Geliştirmek olacak. Bu &#8230; <a href="http://www.tameroz.com/2010/04/12/yazgelistir-webinerleri/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P><IMG src="http://www.tameroz.com/content/pictures/d0442f3e-37ff-4b2e-bac7-2b028249887dYG_Webiner_Logo.png"></P><br />
<P>Yazgeliştir topluluğu olarak Nisan ve Mayıs aylarında 4 farklı webiner gerçekleştireceğiz ve değineceğimiz konular Microsoft CRM Dynamics and Extendibility, WCF Ria Services, Windows Mobile 6.5 ile Web Widgets Geliştirmek, Windows Embedded CE 6.0 R3 &#8211; Silverlight Uygulaması Geliştirmek olacak. <BR><BR>Bu webinerlere aşağıdaki linkden katılabilirsiniz.</P><br />
<P><A href="http://www.yazgelistir.com/Haberler/HaberDetay.aspx?hId=1000000211">http://www.yazgelistir.com/Haberler/HaberDetay.aspx?hId=1000000211</A></P><br />
<P></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/12/yazgelistir-webinerleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bunları Sakın Yapmayın!</title>
		<link>http://www.tameroz.com/2010/04/04/bunlari-sakin-yapmayin/</link>
		<comments>http://www.tameroz.com/2010/04/04/bunlari-sakin-yapmayin/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 22:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[İpucları]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/04/bunlari-sakin-yapmayin/</guid>
		<description><![CDATA[Chip dergisindeki Tek Kişilik yazılım evi köşesinin sahibi Kadir Çamoğlu 29 Mart 2010&#8242;da yazılımcılar için faydasının çok büyük olduğuna inandığım bir yazı paylaştı. Bu yazıda profesyonellerin gerçek yaşam deneyimlerinden yola çıkarak bir projede neler yapılmaması gerektiğinden bahsediliyor. Katkıda bulunduğum bu &#8230; <a href="http://www.tameroz.com/2010/04/04/bunlari-sakin-yapmayin/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Chip dergisindeki Tek Kişilik yazılım evi köşesinin sahibi Kadir Çamoğlu 29 Mart 2010&#8242;da yazılımcılar için faydasının çok büyük olduğuna inandığım bir yazı paylaştı. Bu yazıda profesyonellerin gerçek yaşam deneyimlerinden yola çıkarak bir projede neler yapılmaması gerektiğinden bahsediliyor. Katkıda bulunduğum bu yazıyı okumak için <A href="http://www.chip.com.tr/blog/kadircamoglu/bunlari-sakin-yapmayin_4906.html">http://www.chip.com.tr/blog/kadircamoglu/bunlari-sakin-yapmayin_4906.html</A>&nbsp;adresini ziyaret edebilirsiniz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/04/bunlari-sakin-yapmayin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yeniden MVP</title>
		<link>http://www.tameroz.com/2010/04/01/yeniden-mvp-2/</link>
		<comments>http://www.tameroz.com/2010/04/01/yeniden-mvp-2/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/04/01/yeniden-mvp-2/</guid>
		<description><![CDATA[Bu sene de Microsoft tarafından MVP ünvanı ile ödüllendirildim. 5. sene üst üste aldığım bu ödüle beni layık gören ve almamda emeği geçen herkese teşekkür ederim. Kategorim her zamanki gibi C#. Bu sene geçen seneye göre daha çok bilgi paylaşma &#8230; <a href="http://www.tameroz.com/2010/04/01/yeniden-mvp-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.tameroz.com/content/pictures/224eabdf-1c88-40d0-a333-64166d32229cimage.png" alt="" width="96" height="150" />Bu sene de Microsoft tarafından MVP ünvanı ile ödüllendirildim. 5. sene üst üste aldığım bu ödüle beni layık gören ve almamda emeği geçen herkese teşekkür ederim. Kategorim her zamanki gibi C#. Bu sene geçen seneye göre daha çok bilgi paylaşma fırsatı bulabileceğime inanıyorum. C# Forever <img src='http://www.tameroz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/04/01/yeniden-mvp-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 9 Platform Review</title>
		<link>http://www.tameroz.com/2010/03/17/internet-explorer-9-platform-review/</link>
		<comments>http://www.tameroz.com/2010/03/17/internet-explorer-9-platform-review/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/03/17/internet-explorer-9-platform-review/</guid>
		<description><![CDATA[Microsoft tarafından Internet Explorer için platform review yayınlandı. Platform review bize Internet Explorer 9&#8242;da ne gibi yeni özelliklerin geldiği konusunda fikir vermek ve bu özellikleri biraz da olsa göstermek için yayınlandı. Henüz çok erken olmasına karşın benim gibi bu konuda &#8230; <a href="http://www.tameroz.com/2010/03/17/internet-explorer-9-platform-review/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Microsoft tarafından Internet Explorer için platform review yayınlandı. Platform review bize Internet Explorer 9&#8242;da ne gibi yeni özelliklerin geldiği konusunda fikir vermek ve bu özellikleri biraz da olsa göstermek için yayınlandı. Henüz çok erken olmasına karşın benim gibi bu konuda heyecanlı olanlar ve &nbsp;bilgi almak isteyenler <A href="http://ie.microsoft.com/testdrive/">http://ie.microsoft.com/testdrive/</A>&nbsp;adresini ziyaret edebilirler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/03/17/internet-explorer-9-platform-review/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 2 Nihayet RTM Oldu</title>
		<link>http://www.tameroz.com/2010/03/12/asp-net-mvc-2-nihayet-rtm-oldu/</link>
		<comments>http://www.tameroz.com/2010/03/12/asp-net-mvc-2-nihayet-rtm-oldu/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/03/12/asp-net-mvc-2-nihayet-rtm-oldu/</guid>
		<description><![CDATA[Uzun süredir RTM olmasını beklediğimiz ASP.NET MVC 2 Nihayet Rtm oldu. Download etmek isteyenler http://www.microsoft.com/downloads/details.aspx?FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9&#38;displaylang=en&#160;adresini ziyaret edebilirler.]]></description>
			<content:encoded><![CDATA[<p>Uzun süredir RTM olmasını beklediğimiz ASP.NET MVC 2 Nihayet Rtm oldu. Download etmek isteyenler <A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9&amp;displaylang=en">http://www.microsoft.com/downloads/details.aspx?FamilyID=c9ba1fe1-3ba8-439a-9e21-def90a8615a9&amp;displaylang=en</A>&nbsp;adresini ziyaret edebilirler.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/03/12/asp-net-mvc-2-nihayet-rtm-oldu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amerika Günlüğüm 2 &#8211; New York</title>
		<link>http://www.tameroz.com/2010/02/23/amerika-gunlugum-2-new-york/</link>
		<comments>http://www.tameroz.com/2010/02/23/amerika-gunlugum-2-new-york/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/02/23/amerika-gunlugum-2-new-york/</guid>
		<description><![CDATA[New York&#8217;u geçen ziyaretimde sadece 1 gün kalabilmiştim. Geçen ziyaretim ile ilgili yorumlarımı http://www.tameroz.com/tr/blog/9842bc64-7771-412c-83ac-12bcfe225fa7.aspx adresinden okuyabilirsiniz. Bu sene 3 gün boyunca gezme şansı yakaladım. New York kar yağışlı ve hava 0 derece civarlarında olduğundan dolayı bol bol üşüdüm. Geçen ziyaretimde &#8230; <a href="http://www.tameroz.com/2010/02/23/amerika-gunlugum-2-new-york/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P>New York&#8217;u geçen ziyaretimde sadece 1 gün kalabilmiştim. Geçen ziyaretim ile ilgili yorumlarımı <A href="http://www.tameroz.com/tr/blog/9842bc64-7771-412c-83ac-12bcfe225fa7.aspx">http://www.tameroz.com/tr/blog/9842bc64-7771-412c-83ac-12bcfe225fa7.aspx</A> adresinden okuyabilirsiniz. </P><br />
<P><IMG src="http://www.tameroz.com/content/pictures/8c1ef6ac-6593-4f65-8a58-cc3f1b22217825064_323597423214_555098214_3485438_391234_n.jpg" width=360><BR><BR>Bu sene 3 gün boyunca gezme şansı yakaladım. New York kar yağışlı ve hava 0 derece civarlarında olduğundan dolayı bol bol üşüdüm. <BR><BR><IMG src="http://www.tameroz.com/content/pictures/420fac75-89fc-477e-9784-832a7bbfef7buntitled15.jpg" width=360><BR><BR>Geçen ziyaretimde gidemediğim Özgürlük heykelini yakından görme fırsatı yakaladım. Ayrıca bunun dışında Broadway&#8217;de Rock Of Ages isimli müzikali izledim, New York Knicks NBA maçını izledim. 30 Rockefeller Center&#8217;ın 67. katından bol bol Manhattan resimleri çektim. Bu resimlere sitemdeki fotoğraflar kısmından erişebilirsiniz. Central Park&#8217;ı bol bol gezme fırsayı yakaladım. <BR><BR><IMG src="http://www.tameroz.com/content/pictures/47d4dc50-028d-439a-8d2c-a7ff4ec6cfc6untitled6.jpg" width=360><BR><BR>Tüm bunların yanısıra NBC Experience Store&#8217;u ziyaret edip favori dizilerimden olan House, Friends ve Chuck&#8217;a ait eşyalar aldım. Diğer zamanlarda ise vaktim şehir sokaklarında yürümekle geçti, gideceğim her lokasyona ise karmaşık New York metrosunu kullanarak gittim, bana oldukça anlaşılır geldi <img src='http://www.tameroz.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . <BR><BR>Bu kadar gezme tozma yeter artık zaman eve ve işe dönme zamanı.<BR><BR></P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/02/23/amerika-gunlugum-2-new-york/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amerika Günlüğüm 2 &#8211; Seattle</title>
		<link>http://www.tameroz.com/2010/02/18/amerika-gunlugum-2-seattle/</link>
		<comments>http://www.tameroz.com/2010/02/18/amerika-gunlugum-2-seattle/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/02/18/amerika-gunlugum-2-seattle/</guid>
		<description><![CDATA[Seattle&#8217;a ancak Global Summit&#8217;in ilk gününün akşamı gelebildim. Los Angeles&#8217;tan kalacak olan uçakta meydana gelen arıza sebebiyle havalimanında başka bir uçak ayarlanmasını bekledim. İlk günkü oturumda Windows 7 testlerinde geri bildirimde bulunduğum 550 adet bug ile ilgili olarak adım sunumda &#8230; <a href="http://www.tameroz.com/2010/02/18/amerika-gunlugum-2-seattle/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P>Seattle&#8217;a ancak Global Summit&#8217;in ilk gününün akşamı gelebildim. Los Angeles&#8217;tan kalacak olan uçakta meydana gelen arıza sebebiyle havalimanında başka bir uçak ayarlanmasını bekledim. </P><br />
<P>İlk günkü oturumda Windows 7 testlerinde geri bildirimde bulunduğum 550 adet bug ile ilgili olarak adım sunumda geçmiş, açıkçası bunu kaçırdığıma çok üzüldüm. İkinci gün ise artık product group ile daha niş konularda yapılan seminerlerde C# opening session&#8217;da MSDN forumlarında yaptığım katılımlardan dolayı sunumlarda adım geçti. Gerçekten yaptığı çalışmaların bu şekilde karşısına çıkması insanı oldukça mutlu ediyor.<BR><BR><IMG src="http://www.tameroz.com/content/pictures/715259dc-0590-4a0c-8ea7-e7028a5e9d7825064_323623128214_555098214_3485529_5323924_n.jpg" width=360><BR><BR>Seminerlerde konuşulan konular hakkında sizlerle çok fazla birşey paylaşmam tüm seminerlerin nda kapsamında olmasından dolayı ne yazık ki pek mümkün olmayacak. Seattle&#8217;da seminerler dışında Boeing fabrikasını gezme fırsatı buldum. Fabrika devasa büyüklükte ve uçaklar konusunda birçok bilgi edinebiliyorsunuz. Uçak ve teknoloji merakı olan herkesin mutlaka gezmesi gereken bir tur olduğuna inanıyorum. <BR><BR><IMG src="http://www.tameroz.com/content/pictures/2a72dab4-850a-442d-ac2e-2e69dee28d3225064_323623068214_555098214_3485525_3190881_n.jpg" width=360><BR><BR>Bunun yanısıra geleneksel outlet alışveriş etkinliğini de gerçekleştirdikten sonra bu seneki Amerika seyahatimin son durağı olan New York&#8217;a hareket etmeye hazırdım.<BR>&nbsp;<BR>Not: 2008 yılındaki seattle ziyaretim için <A href="http://www.tameroz.com/tr/blog/d79f4edd-138b-4dc0-ac9f-7e9cb0490c71.aspx">http://www.tameroz.com/tr/blog/d79f4edd-138b-4dc0-ac9f-7e9cb0490c71.aspx</A> adresini ziyaret edebilirsiniz.</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/02/18/amerika-gunlugum-2-seattle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amerika Günlüğüm 2 &#8211; Los Angeles</title>
		<link>http://www.tameroz.com/2010/02/16/amerika-gunlugum-2-los-angeles/</link>
		<comments>http://www.tameroz.com/2010/02/16/amerika-gunlugum-2-los-angeles/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/02/16/amerika-gunlugum-2-los-angeles/</guid>
		<description><![CDATA[Los Angeles bence görülmesi gereken yerlerden biri. Los Angeles&#8217;da gezilecek yerler downtown&#8217;dan ziyade genellikle Beverly Hills, Hollywood semtlerinde bulunuyor. Gezmenize buralardan başlamanızı ve zaman kalırsa downtown&#8217;ı gezmenizi öneririm. Zira downtown baya eski bir yerleşim yeri ve şaşırtıcı bir biçimde çok &#8230; <a href="http://www.tameroz.com/2010/02/16/amerika-gunlugum-2-los-angeles/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P>Los Angeles bence görülmesi gereken yerlerden biri. Los Angeles&#8217;da gezilecek yerler downtown&#8217;dan ziyade genellikle Beverly Hills, Hollywood semtlerinde bulunuyor. Gezmenize buralardan başlamanızı ve zaman kalırsa downtown&#8217;ı gezmenizi öneririm. Zira downtown baya eski bir yerleşim yeri ve şaşırtıcı bir biçimde çok fazla gezilecek bir yer yok. Spor veya müzik düşkünü iseniz LA Lakers&#8217;ın sahası ve aynı zamanda Grammy ödüllerinin düzenlendiği yer olan Staples Center&#8217;ı gezebilirsiniz. Ayrıca Grammy ödüllerine ait bir müze de downtown&#8217;da bulunmakta. Downtown&#8217;da halkın çoğunu Meksikalılar oluşturuyor. Bunun yanısıra Hollywood&#8217;a gittiğinizde (gece gitmenizi tercih ederim, gündüze göre çok daha güzel oluyor) birçok görülecek yer var. Bunlardan başlıcaları star&#8217;ların isimlerinin yazdığı Walk of Fame, star&#8217;ların el ve ayak izlerinin olduğu Chinese Theatre, Oscar ödüllerinin düzenlendiği yer olan Kodak Theatre, Roosevelt Hotel. Ayrıca Hollywood Wax Museum gibi Star&#8217;lar veya Hollywood temalı birçok müzeyi de gezmeniz mümkün. Bunun dışında gezmenizi tavsiye edeceğim yerlerden bir diğeri ise Beverly Hills. Beverly Hills gerek gece yolda rastlayabileceğiniz star&#8217;lar, gerek alışveriş ve lüks restoranları ile ilgi çekici bir yer.</P><br />
<P><IMG src="http://www.tameroz.com/content/pictures/247a2298-d4bc-487d-a989-185769c5603425064_323544903214_555098214_3485162_6107389_n.jpg" width=360><BR><BR>Ayrıca ilk durağı Hollywood olan sightseeing turlarını kullanarak tüm şehir hakkında bilgi sahibi olabilir veya ünlülerin evlerine yapılan turlara katılabilirsiniz. Turlara katılırsanız yapılan anlatımlar ile esasında şehrin her yerinde bir filmden veya bir ünlüden bir iz olduğunu farkedeceksiniz. Eğer zamanınız varsa Santa Monica&#8217;ya veya Malibu&#8217;ya yüzmeye gidebilirsiniz. Santa Monica gerçekten dünyanın en büyük sahillerinden biri. Dediğim gibi ben gittiğimde aylardan şubat ve hava sıcaklığı 25 derece idi. Ben şehiri gezerken bile bronzlaştım Yaz aylarında ise sıcaklık 40 derece civarlarında oluyormuş.<BR><BR><IMG src="http://www.tameroz.com/content/pictures/c5b30e28-e1cc-44a5-ab75-1eb05828580825064_323545038214_555098214_3485172_3766268_n.jpg" width=360><BR><BR>Bunun yanı sıra gezmenizi tavsiye etmekten ziyade gezmenizi şiddetle tavsiye edeceğim ve hatta gezmemenin kayıp olduğunu düşündüğüm Univesal Studios&#8217;a mutlaka gitmelisiniz. Universal Studios Universal City (bu adı tamamıyla hakediyor) denilen bir komplex&#8217;in içinde yer alıyor, gerek film setlerinin gezdirildiği turlar gerek ise filmlerin nasıl çekildiğine dair bilgilendirici turlar ve eğlenceli birçok aktaksiyon sizleri bekliyor. Universal Studios&#8217;u ziyaret edecekseniz kesinlikle 1 tam gününüzü ayırmanız gerekiyor ayrıca atraksiyon&#8217;ların önünde çok kuyruklar olduğundan Front Line Pass bilet alıp kuyrukta beklememek çok kazançlı olabiliyor.<BR><BR><IMG src="http://www.tameroz.com/content/pictures/0ae410d1-9158-4643-bcd8-c2354ebfbc5325064_323894333214_555098214_3486555_6728634_n.jpg" width=360><BR><BR>Universal Studios&#8217;da çektiğim bir çok resmi yine sitemdeki fotoğraflar kısmından görebilirsiniz. Tüm bunların yanısıra gezmeye fırsat bulamadığım ancak bir daha gidersem ilk gezeceğim yerlerden biri olan Disneyland&#8217;ı (gezmek 2 gün sürüyormuş) da görmek isteyebilirsiniz. Şimdi Seattle&#8217;a geçip MVP Global Summit&#8217;e katılma vakti.</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/02/16/amerika-gunlugum-2-los-angeles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Amerika Günlüğüm 2 &#8211; Las Vegas</title>
		<link>http://www.tameroz.com/2010/02/13/amerika-gunlugum-2-las-vegas/</link>
		<comments>http://www.tameroz.com/2010/02/13/amerika-gunlugum-2-las-vegas/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 00:00:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Haberler]]></category>

		<guid isPermaLink="false">http://www.tameroz.com/2010/02/13/amerika-gunlugum-2-las-vegas/</guid>
		<description><![CDATA[San Francisco&#8217;dan sonraki durağım 1 günlüğüne de olsa Las Vegas oldu. Las Vegas gerçekten dünyanın eğlence merkezi diyebilirim. Şehirin tamamı eğlence ve kumar üzerine kurulmuş. Hatta durum öyle ki uçaktan iner inmez havalimanında sizi tek kollu canavarlar karşılıyor. Şehirdeki otellerin &#8230; <a href="http://www.tameroz.com/2010/02/13/amerika-gunlugum-2-las-vegas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><P>San Francisco&#8217;dan sonraki durağım 1 günlüğüne de olsa Las Vegas oldu. Las Vegas gerçekten dünyanın eğlence merkezi diyebilirim. Şehirin tamamı eğlence ve kumar üzerine kurulmuş. Hatta durum öyle ki uçaktan iner inmez havalimanında sizi tek kollu canavarlar karşılıyor.</P><br />
<P><IMG src="http://www.tameroz.com/content/pictures/095ef618-9060-49de-b23b-8225bbbb5e8c25064_323576618214_555098214_3485327_4016046_n.jpg" width=360></P><br />
<P>Şehirdeki otellerin birçoğu ise çeşitli temalar üzerinde kurulmuş. Mısır temalı Luxor, küçük bir New York&#8217;u andıran New York New York, Eifel Kulesi olan Paris Paris, bir sirki andıran Circus Circus, Sahra çölü temasında olan Sahara otelleri başlıca aklıma gelenler. Ziyaret ettiğim günü hava 18 derece civarındaydı. Gidecek olanlar için MGM Casino&#8217;daki aslan gösterisi, Bellagio önündeki havuz gösterisi, şehrin çeşitli yerlerindeki Roller Coaster&#8217;lar, Stratosphere görülmesi gereken yerler. <BR><BR><IMG src="http://www.tameroz.com/content/pictures/f433866d-8894-4645-bbb5-7e2705eef8a625064_323576513214_555098214_3485319_6310872_n.jpg" width=360><BR><BR>Esasında şehrin merkezi The Strip denilen caddeden ibaret. Tüm atraksiyonlar bu cadde üzerinde ve bu caddeyi uçtan uca yürüyerek Las Vegas&#8217;ı tam anlamıyla gezmiş olabiliyorsunuz. Gezerken 1-1.5 litrelik bardaklarda satılan margaritalardan içmenizi tavsiye ederim. Ayrıca Coca Cola&#8217;nın çok büyük bir merchandise mağazası bulunuyor, eğer siz de benim gibi bir Coca Cola fanatiği iseniz burayı da ziyaret etmek hoşunuza gidebilir. Las Vegas&#8217;ta The Strip üzerinde trafik gerçekten çok tıkalı olduğundan araba kiralamak çok verimli bir çözüm olmuyor. <BR><BR><IMG src="http://www.tameroz.com/content/pictures/06c8eea4-dd59-4ea9-bb68-538fa56e08d125064_323576488214_555098214_3485317_5084771_n.jpg" width=360><BR><BR>İlgimi çeken ve değişik gelen başka bir durum ise Bellagio, MGM, Ceasars Palace gibi dünyanın en heybetli ve lüks kumarhanelerinde bile 1 cent&#8217;den 25 dolar&#8217;a kadar oyun oynuyor olabilmeniz. Kısacası Las Vegas bütçenize bakmadan size kumar oynama imkanı sunuyor. Benim zamanım olmadı ama Grand Canyon&#8217;u da ziyaret edebilirsiniz. Şimdiki durağımız ise Los Angeles.</P></p>
]]></content:encoded>
			<wfw:commentRss>http://www.tameroz.com/2010/02/13/amerika-gunlugum-2-las-vegas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

