<?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>karalamalar &#187; Yazılım</title>
	<atom:link href="http://www.karalamalar.net/kategori/yazilim/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.karalamalar.net</link>
	<description>ortaya kişisel bir şeyler...</description>
	<lastBuildDate>Fri, 13 Jan 2012 18:02:00 +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>PHP söz dizimi kontrolü</title>
		<link>http://www.karalamalar.net/php-soz-dizimi-kontrolu/</link>
		<comments>http://www.karalamalar.net/php-soz-dizimi-kontrolu/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 07:22:50 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[sentaks kontrolü]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=256</guid>
		<description><![CDATA[Dün yayında olan bir PHP projesinde çeşitli değişiklikler yapmak durumunda kaldım. Test etme şansım olmadığından dosyanın bir kopyasını sunucuya atarak sunucu üzerinde test etmeye çalıştım. Gönderdiğim dosyayı çalıştırmayı denediğimde bomboş bir ekranla karşılaştım. Güvenlik nedeniyle sunucu, hata mesajlarını ekrana basmayacak şekilde ayarlanmıştı. Hata kayıtları da benim yetkim olmayan bir yerde duruyordu. Bir şekilde hatanın nerede [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Dün yayında olan bir <a href="http://www.karalamalar.net/etiket/php">PHP</a> projesinde çeşitli değişiklikler yapmak durumunda kaldım. Test etme şansım olmadığından dosyanın bir kopyasını sunucuya atarak sunucu üzerinde test etmeye çalıştım. Gönderdiğim dosyayı çalıştırmayı denediğimde bomboş bir ekranla karşılaştım. Güvenlik nedeniyle sunucu, hata mesajlarını ekrana basmayacak şekilde ayarlanmıştı. Hata kayıtları da benim yetkim olmayan bir yerde duruyordu. Bir şekilde hatanın nerede olduğunu bulmam gerekiyordu. Çok fazla değişiklik yaptığım için eski dosya ve yeni dosya arasında bir karşılaştırma yapmak uzun sürecekti. Bir kaç kontrol yapmaya karar verdim.</p>
<p>İlk olarak söz dizimi kontrolü yaparak dosyanın PHP tarafından işlenebildiğinden emin olmak istedim. Bunun için PHP&#8217;yi komut satırından &#8220;-l&#8221; parametresi ile çalıştırıp ikinci parametre olarak dosyanın ismini verebilirsiniz. Eğer PHP klasörünüz PATH değişkeninde tanımlandıysa dosyanızın olduğu klasörde komut satırı açarak <code>php -l dosyaismi.php</code> şeklinde söz dizimi kontrolü gerçekleştirebilirsiniz. PATH değişkeninde tanımlı değilse php.exe&#8217;nin tam yolunu girmeniz gerekebilir (Örneğin: <code>c:\php\php.exe -l dosyaismi.php</code>)</p>
<p>Bu komut PHP dosyanızı kontrol edecek, bir hata bulamazsa sonlanacak ya da bulduğu ilk hatada hatanın olduğu satır numarasını ekrana basarak sonlanacaktır. İlgili hatayı düzelttikten sonra komutu tekrar çalıştırarak, dosyayı tekrar kontrol edebilirsiniz. Bu şekilde hiç söz dizimi hatası kalmayana kadar kodu tekrar tekrar çalıştırarak dosyanızı hatalardan arındırabilirsiniz.</p>
<p>Bu şekilde problemimi giderip dosyayı sunucuya tekrar yükledim. Problemim giderilmişti.</p>
<div class="shr-publisher-256"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fphp-soz-dizimi-kontrolu%2F' data-shr_title='PHP+s%C3%B6z+dizimi+kontrol%C3%BC'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fphp-soz-dizimi-kontrolu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fphp-soz-dizimi-kontrolu%2F' data-shr_title='PHP+s%C3%B6z+dizimi+kontrol%C3%BC'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fphp-soz-dizimi-kontrolu%2F' data-shr_title='PHP+s%C3%B6z+dizimi+kontrol%C3%BC'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/php-soz-dizimi-kontrolu/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>&#8220;Ambiguous match found&#8221; hatası neden kaynaklanır, nasıl düzeltilir?</title>
		<link>http://www.karalamalar.net/ambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir/</link>
		<comments>http://www.karalamalar.net/ambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 19:58:54 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[ambiguous match found]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[Hata]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=251</guid>
		<description><![CDATA[ASP.NET ile uygulama geliştirirken çok ilginç bir sorunla karşılaştım. Biraz uğraştıktan sonra sorunu çözdüm. Şansıma çok büyük bir proje değildi ve yine şansıma küçük bir değişiklik yaptığım sırada karşıma çıktı. Bu yüzden problemi çok daha kolay tanımlayabildim ve bu da çözüme daha kolay ulaşmamı sağladı. Problem derleme sırasında karşınıza çıkmıyor. Proje sorunsuz bir şekilde yapılandırılıyor [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p><a href="http://www.karalamalar.net/etiket/asp-net">ASP.NET</a> ile uygulama geliştirirken çok ilginç bir sorunla karşılaştım. Biraz uğraştıktan sonra sorunu çözdüm. Şansıma çok büyük bir proje değildi ve yine şansıma küçük bir değişiklik yaptığım sırada karşıma çıktı. Bu yüzden problemi çok daha kolay tanımlayabildim ve bu da çözüme daha kolay ulaşmamı sağladı.</p>
<p>Problem derleme sırasında karşınıza çıkmıyor. Proje sorunsuz bir şekilde yapılandırılıyor fakat problemin olduğu web sayfasını açmak istediğinizde ilk satırda belirsiz eşleşme (Ambiguous match) bulunduğu ile ilgili bir hata mesajı alıyorsunuz ve sayfa açılmıyor. Aşağıdaki ekran görüntüsüne benzer bir görüntü ortaya çıkıyor.</p>
<p><a href="http://www.karalamalar.net/dosyalar/2011/04/AmbiguosMatchFound.png"><img src="http://www.karalamalar.net/dosyalar/2011/04/AmbiguosMatchFound-300x206.png" alt="" title="Ambiguos Match Found hatası" width="300" height="206" class="aligncenter size-medium wp-image-252" /></a></p>
<p>Bir süre webde araştırınca sorunun neden oluştuğunu, nasıl çözüleceğini <a href="http://dotnetdebug.net/2006/03/21/ambiguous-match-found-in-a-web-control-a-possible-bug/">burada</a> buldum. Temel olarak problem, web sayfasında tanımlanmış bir kontrol ile aynı isme sahip bir değişken tanımlandığında ortaya çıkıyor. C# büyük/küçük harf duyarlı bir dil olsa da nedense bu durumda düzgün çalışmıyor ve hata üretiyor. Yani sayfanızda &#8220;Metin&#8221; isimli bir kontrol bulunuyorsa &#8220;metin&#8221; isimli bir değişken kullanmamanız gerekiyor.</p>
<p>Karşımıza açıklayıcı bir hata mesajı çıkmadığı için bu davranışın bir bug olduğunu düşünüyorum. İşin ilginç yanı konuyla ilgili bulduğum makale 2006 yılına ait, yani en az 5 senedir bu problem var ve Microsoft tarafından konu ile ilgili bir geliştirme/açıklama/düzeltme söz konusu değil&#8230;</p>
<div class="shr-publisher-251"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir%2F' data-shr_title='%22Ambiguous+match+found%22+hatas%C4%B1+neden+kaynaklan%C4%B1r%2C+nas%C4%B1l+d%C3%BCzeltilir%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir%2F' data-shr_title='%22Ambiguous+match+found%22+hatas%C4%B1+neden+kaynaklan%C4%B1r%2C+nas%C4%B1l+d%C3%BCzeltilir%3F'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir%2F' data-shr_title='%22Ambiguous+match+found%22+hatas%C4%B1+neden+kaynaklan%C4%B1r%2C+nas%C4%B1l+d%C3%BCzeltilir%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/ambiguous-match-found-hatasi-neden-kaynaklanir-nasil-duzeltilir/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VMWare&#8217;e geçit vermeyen FixCamera.exe&#8217;yi öldürün!!!</title>
		<link>http://www.karalamalar.net/vmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun/</link>
		<comments>http://www.karalamalar.net/vmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 06:34:49 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[FixCamera.exe]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[Sanal Makina]]></category>
		<category><![CDATA[Virtual Machine]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[VMWare çalışmıyor]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=238</guid>
		<description><![CDATA[İş yerinde kullandığım Orite RN3700 webcam ile beraber gelen kurulum dosyaları, bilgisayarın açılışında çalışmak üzere FixCamera.exe adlı bir uygulamayı da beraberinde kuruyor. Ne işe yaradığını bulamadığım bu uygulama VMWare uygulama dosyaları ve kurulum dosyaları ile çakışıyor ve ne uygulama dosyalarının, ne de kurulum dosyalarının çalışmasına izin veriyor. VMWare&#8217;i ya da VMWare kurulum dosyalarını çalıştırmak istediğinizde, [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>İş yerinde kullandığım <strong>Orite RN3700</strong> webcam ile beraber gelen kurulum dosyaları, bilgisayarın açılışında çalışmak üzere <strong>FixCamera.exe</strong> adlı bir uygulamayı da beraberinde kuruyor. Ne işe yaradığını bulamadığım bu uygulama <strong>VMWare</strong> uygulama dosyaları ve kurulum dosyaları ile çakışıyor ve ne uygulama dosyalarının, ne de kurulum dosyalarının çalışmasına izin veriyor. VMWare&#8217;i ya da VMWare kurulum dosyalarını çalıştırmak istediğinizde, hiç bir hata mesajı almıyorsunuz ve çalıştırmak istediğiniz uygulama da çalışmıyor. Görev Yöneticisinde de VMWare ile ilgili bir iz göremiyorsunuz. Benim gibi olayın FixCamera.exe&#8217;den kaynaklandığını bilmiyorsanız bir çok VMWare kaldırma/yeniden kurma vb işlemleri yapmaya çalışabilir, değerli vaktinizi boşa harcayabilirsiniz.</p>
<p>Bir çok başarısız yeniden yükleme denemesinden sonra, <a href="http://www.karalamalar.net/etiket/problem">problem</a>e farklı bir açıdan yaklaşıp, çalışan diğer uygulamalarla çakışma ihtimalini göz önüne aldım ve görev yöneticisini açıp, bilgisayarın çalışmasını engellemeyecek, çalışan harici uygulamaları teker teker sonlandırmaya başladım. Her uygulamayı sonlandırdıktan sonra VMWare&#8217;i tekrar çalıştırmayı deneyim. FixCamera.exe&#8217;yi sonlandırdıktan sonra VMWare çalıştı. Mevzuyu hemen <a href="http://www.google.com/search?hl=en&#038;safe=off&#038;client=firefox-a&#038;hs=n4q&#038;rls=org.mozilla%3Aen-US%3Aofficial&#038;q=FixCamera.exe+vmware&#038;aq=f&#038;aqi=&#038;aql=&#038;oq=&#038;gs_rfai=">yetkili mercilere</a> taşıyıp, yalnız olup olmadığımı kontrol ettim ve yalnız olmadığımı gördüm. Benim gibi bu dertten muzdarip bir kaç kişi daha varmış. Ben de konuyla ilgili Türkçe bir çözümün de internetlerde yer alması için bu yazıyı yazayım dedim.</p>
<p>FixCamera.exe&#8217;yi bilgisayarın açılışından gönül rahatlığıyla kaldırabilirsiniz. Kameranız çalışmaya devam edecektir. Açılıştan kaldırmadan VMWare çalıştırabilmek isterseniz bu durumda Görev Yöneticisinden FixCamera.exe uygulamasını sonlandırmanız gerekecektir.</p>
<div class="shr-publisher-238"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun%2F' data-shr_title='VMWare%27e+ge%C3%A7it+vermeyen+FixCamera.exe%27yi+%C3%B6ld%C3%BCr%C3%BCn%21%21%21'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun%2F' data-shr_title='VMWare%27e+ge%C3%A7it+vermeyen+FixCamera.exe%27yi+%C3%B6ld%C3%BCr%C3%BCn%21%21%21'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fvmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun%2F' data-shr_title='VMWare%27e+ge%C3%A7it+vermeyen+FixCamera.exe%27yi+%C3%B6ld%C3%BCr%C3%BCn%21%21%21'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/vmwaree-gecit-vermeyen-fixcamera-exeyi-oldurun/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>C# ile SEO uyumlu daha anlaşılır web adresleri hazırlama</title>
		<link>http://www.karalamalar.net/csharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama/</link>
		<comments>http://www.karalamalar.net/csharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama/#comments</comments>
		<pubDate>Mon, 17 May 2010 06:53:30 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[Sanitization]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Slug]]></category>
		<category><![CDATA[URL ReWrite]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=235</guid>
		<description><![CDATA[PHP ile bu işi nasıl yapabileceğimizi daha önce anlatmıştım. C# ile geliştirdiğimiz bir uygulamada da gerekli olunca biraz araştırdım. PHP ile olan deneyimlerimden yola çıkarak ihtiyaç listesi çıkarttım ve bu ihtiyaçlar doğrultusunda biraz araştırma yaptım. Bu araştırmalardan bir tanesi HTML etiketlerinin temizlenmesi konusuydu ki ondan da bahsetmiştim. Geriye çentikli karakterlerin (ğ,ü,ş,ö,ç, ì, é vb.) çentiksiz [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>PHP ile bu işi nasıl yapabileceğimizi daha önce <a href="http://www.karalamalar.net/php-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama/">anlatmıştım</a>. C# ile geliştirdiğimiz bir uygulamada da gerekli olunca biraz araştırdım. PHP ile olan deneyimlerimden yola çıkarak ihtiyaç listesi çıkarttım ve bu ihtiyaçlar doğrultusunda biraz araştırma yaptım. Bu araştırmalardan bir tanesi HTML etiketlerinin temizlenmesi konusuydu ki ondan da <a href="http://www.karalamalar.net/net-icin-html-etiketleri-temizleme-metodu/">bahsetmiştim</a>. Geriye çentikli karakterlerin (ğ,ü,ş,ö,ç, ì, é vb.) çentiksiz hallerine ulaşmak gibi bir problem kalmıştı. Problemin çözümüne <a href="http://bytes.com/topic/net/answers/689193-how-remove-accents-umlaut">burada</a> ulaştım.<br />
<span id="more-235"></span><br />
PHP deneyimlerim ile ulaştığım metotları birleştirince aşağıdaki kod öbeği ortaya çıktı. Önce bir örnek vererek nasıl kullanacağınızı göstereyim;</p>
<pre class="brush:csharp">string baslik = "Öğümce yolları çakıl taşları ile dolmuş - Test başlığı";
MakeSlug(baslik); // "ogumce-yollari-cakil-taslari-ile-dolmus-test-basligi" değerini döndürecektir.</pre>
<p>Bu işi yapan kod öbeği:</p>
<pre class="brush:csharp">public string MakeSlug(string input)
{
  input = input.ToLower(new CultureInfo("tr-TR"));
  input = StripTags(input);
  input = RemoveAccents(input);
  input = Regex.Replace(input, "&#038;.+?;", "");
  input = Regex.Replace(input, "[^.a-z0-9 _-]", "");
  input = Regex.Replace(input, @"\.|\s+", "-");
  input = Regex.Replace(input, "-+", "-");
  input = input.Trim('-');
  return input;
}

public string RemoveAccents(string input)
{
  string normalized = input.Replace('ı', 'i').Normalize(NormalizationForm.FormKD);
  char[] array = new char[input.Length];
  int arrayIndex = 0;
  foreach (char c in normalized)
  {
    if (char.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
    {
      array[arrayIndex] = c;
      arrayIndex++;
    }
  }
  return new string(array, 0, arrayIndex);
}

public string StripTags(string input)
{
  char[] array = new char[input.Length];
  int arrayIndex = 0;
  bool inside = false;

  for (int i = 0; i < input.Length; i++)
  {
    char let = input[i];
    if (let == '<')
    {
      inside = true;
      continue;
    }
    if (let == '>')
    {
      inside = false;
      continue;
    }
    if (!inside)
    {
      array[arrayIndex] = let;
      arrayIndex++;
    }
  }
  return new string(array, 0, arrayIndex);
}</pre>
<div class="shr-publisher-235"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcsharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama%2F' data-shr_title='C%23+ile+SEO+uyumlu+daha+anla%C5%9F%C4%B1l%C4%B1r+web+adresleri+haz%C4%B1rlama'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcsharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcsharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama%2F' data-shr_title='C%23+ile+SEO+uyumlu+daha+anla%C5%9F%C4%B1l%C4%B1r+web+adresleri+haz%C4%B1rlama'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcsharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama%2F' data-shr_title='C%23+ile+SEO+uyumlu+daha+anla%C5%9F%C4%B1l%C4%B1r+web+adresleri+haz%C4%B1rlama'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/csharp-ile-seo-uyumlu-daha-anlasilir-web-adresleri-hazirlama/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Internet Explorer iFrame çerezlerini (cookie) neden engelliyor?</title>
		<link>http://www.karalamalar.net/internet-explorer-iframe-cerezlerini-cookie-neden-engelliyor/</link>
		<comments>http://www.karalamalar.net/internet-explorer-iframe-cerezlerini-cookie-neden-engelliyor/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 06:36:05 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[Web Tasarımı]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[çerez]]></category>
		<category><![CDATA[cookie]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[internet explorer]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=228</guid>
		<description><![CDATA[Gün geçmiyor ki Internet Explorer yeni bir arızayla beni çıldırtmasın. Bugüne kadar hep standartları takip etmediği için çıldırtmıştı, bugün ise yeni bir standardı direkt desteklemeye başladığı için çıldırttı. IFrame içinde yer alan sayfalar Internet Explorer&#8217;da tarayıcıya çerez (cookie) gönderemeyince problemi araştırmaya başladım ve buradaki yazıya ulaştım. Problem Internet Explorer&#8217;ın W3C tarafından gizlilik tercihleri ile ilgili [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Gün geçmiyor ki Internet Explorer yeni bir arızayla beni çıldırtmasın. Bugüne kadar hep standartları takip etmediği için çıldırtmıştı, bugün ise yeni bir standardı direkt desteklemeye başladığı için çıldırttı. IFrame içinde yer alan sayfalar Internet Explorer&#8217;da tarayıcıya çerez (cookie) gönderemeyince problemi araştırmaya başladım ve <a href="http://adamyoung.net/IE-Blocking-iFrame-Cookies">buradaki</a> yazıya ulaştım.</p>
<p>Problem Internet Explorer&#8217;ın W3C tarafından gizlilik tercihleri ile ilgili oluşturulmuş Platform for Privacy Preferences Project, kısaca P3P adlı standardı desteklemesinden kaynaklanıyormuş. Tabi bu durumda buna bir problem demek doğru olur mu bu da tartışılır. Aslında iFrame içinde gösterdiğiniz sayfa farklı bir alan adından çağrılıyorsa, asıl alan adındaki çerezlerin etkilenmemesi/kötüye kullanılamaması için geliştirilmiş bir önlem. Firefox&#8217;ta varsayılan olarak bu ayar kapalı geliyor. İsteğe bağlı olarak kendiniz <a href="http://mozilla.gunnars.net/firefox_help_firefox_cookie_tutorial.html#Advanced_Cookie_options">açabiliyorsunuz</a>. Internet Explorer ise varsayılan olarak bu ayarı açık olarak kullanıyor. Lafı fazla uzatmaya gerek yok aslında. P3P hakkında detaylı bilgiye <a href="http://www.w3.org/P3P/">buradan</a> ulaşabilirsiniz. Ben size sorunu nasıl çözebileceğinizden bahsedeyim;</p>
<p>İsterseniz çeşitli online araçlarla kendi P3P kodunuzu üretebilirsiniz(<a href="http://www.alphaworks.ibm.com/tech/p3peditor/">IBM P3P Policy Editor</a>). Uğraşmak istemeyenler iFrame içinde çalışacak olan ve çerez gönderecek olan her sayfanın başlık bilgilerinde P3P için özel bir bilgi göndermeniz gerekiyor. Çeşitli platformlar için örnekleri ekliyorum. Burada yer almayan fakat sizin kullandığınız bir platform varsa, örnek olarak ekleyebilirseniz sevinirim.</p>
<p>PHP:</p>
<pre class="brush:php">header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');</pre>
<p>ASP.NET (C#);</p>
<pre class="brush:csharp">HttpContext.Current.Response.AddHeader("p3p","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");</pre>
<p>Django:</p>
<pre class="brush:plain">response = render_to_response('mytemplate.html')
response["P3P"] = 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'</pre>
<p>JSP:</p>
<pre class="brush:plain">response.addHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"")</pre>
<p>Rails:</p>
<pre class="brush:ruby">response.headers['P3P'] = 'CP="NON DSP COR CURa IVAa IVDa CONa OUR NOR STA"'</pre>
<div class="shr-publisher-228"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Finternet-explorer-iframe-cerezlerini-cookie-neden-engelliyor%2F' data-shr_title='Internet+Explorer+iFrame+%C3%A7erezlerini+%28cookie%29+neden+engelliyor%3F'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Finternet-explorer-iframe-cerezlerini-cookie-neden-engelliyor%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Finternet-explorer-iframe-cerezlerini-cookie-neden-engelliyor%2F' data-shr_title='Internet+Explorer+iFrame+%C3%A7erezlerini+%28cookie%29+neden+engelliyor%3F'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Finternet-explorer-iframe-cerezlerini-cookie-neden-engelliyor%2F' data-shr_title='Internet+Explorer+iFrame+%C3%A7erezlerini+%28cookie%29+neden+engelliyor%3F'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/internet-explorer-iframe-cerezlerini-cookie-neden-engelliyor/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>&#8220;Cannot create/shadow copy &#8216;dll ismi&#8217; when that file already exists&#8221; probleminin çözümü</title>
		<link>http://www.karalamalar.net/cannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu/</link>
		<comments>http://www.karalamalar.net/cannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 08:49:17 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[çözüm]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[shadow copy]]></category>
		<category><![CDATA[solution]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=227</guid>
		<description><![CDATA[Geçen gün uygulamalarımızın çalıştığı sunucunun olay kayıtlarını incelerken ASP.NET&#8217;in sürekli olarak bu hata ile karşılaştığını gördüm. Bunun neticesinde web siteleri kimi zaman cevap veremez duruma geliyordu. Internette biraz araştırma yaptığımda genelde geliştiricilerin Visual Studio&#8217;da çalışırken bu hatayla karşılaştıklarını gördüm. Bir süre çözüm aradıktan sonra bu yazıyı bulduk(Engin ile birlikte). Benim gibi bu problemle karşılaşmış ve [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Geçen gün uygulamalarımızın çalıştığı sunucunun olay kayıtlarını incelerken ASP.NET&#8217;in sürekli olarak bu hata ile karşılaştığını gördüm. Bunun neticesinde web siteleri kimi zaman cevap veremez duruma geliyordu. Internette biraz araştırma yaptığımda genelde geliştiricilerin Visual Studio&#8217;da çalışırken bu hatayla karşılaştıklarını gördüm. Bir süre çözüm aradıktan sonra <a href="http://bloggingabout.net/blogs/rick/archive/2007/02/14/cannot-create-shadow-copy-your-assembly-info-here-when-that-file-already-exists.aspx">bu yazıyı</a> bulduk(<a href="http://www.enginpolat.com">Engin</a> ile birlikte). Benim gibi bu problemle karşılaşmış ve çözüm yolu arayışındaki başka bir geliştiricinin bulduğu çözümü ben de sizlerle paylaşayım dedim.</p>
<p>web.config dosyanızda system.web elemanına aşağıdaki kod öbeğini ekleyerek sorundan kurtulabilirsiniz.</p>
<pre class="brush:xml"><hostingenvironment shadowCopyBinAssemblies="false" /></pre>
<p><strong>shadowCopyBinAssemblies</strong> özelliği şu şekilde tanımlanmış: Bir Boolean(Evet/Hayır) değeri ile uygulamanın Bin klasöründe yer alan bileşenlerinin, gölge kopyalarının (shadow copy) uygulamanın ASP.NET geçici dosyalar klasörüne kopyalanıp kopyalanmayacağını belirtir.</p>
<p>Umarım işinize yarar.</p>
<div class="shr-publisher-227"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu%2F' data-shr_title='%22Cannot+create%2Fshadow+copy+%27dll+ismi%27+when+that+file+already+exists%22+probleminin+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu%2F' data-shr_title='%22Cannot+create%2Fshadow+copy+%27dll+ismi%27+when+that+file+already+exists%22+probleminin+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fcannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu%2F' data-shr_title='%22Cannot+create%2Fshadow+copy+%27dll+ismi%27+when+that+file+already+exists%22+probleminin+%C3%A7%C3%B6z%C3%BCm%C3%BC'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/cannot-createshadow-copy-dll-ismi-when-that-file-already-exists-probleminin-cozumu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BOM karakter dizisi olmadan XmlWriter ile UTF-8 kullanımı</title>
		<link>http://www.karalamalar.net/bom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi/</link>
		<comments>http://www.karalamalar.net/bom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 08:05:15 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[BOM]]></category>
		<category><![CDATA[Encoding]]></category>
		<category><![CDATA[UTF-8]]></category>
		<category><![CDATA[UTF8]]></category>
		<category><![CDATA[XmlWriter]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=226</guid>
		<description><![CDATA[C# ile geliştirdiğim projelerde XML üretmem gerektiğinde, bu konuda çok becerikli olduğunu düşündüğüm XmlWriter nesnesini kullanırım. Nesneyi oluştururken aşağıdaki gibi oluştururdum; XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8); Bilmediğim şey ise, bu şekilde nesneyi oluştururken otomatik olarak streamin başına UTF-8 tanımlayıcısı olan üç baytlık BOM karakter dizisinin ekleniyor olduğuydu. Yazmış olduğum bir servisi kullanan firmadan gelen [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>C# ile geliştirdiğim projelerde XML üretmem gerektiğinde, bu konuda çok becerikli olduğunu düşündüğüm XmlWriter nesnesini kullanırım. Nesneyi oluştururken aşağıdaki gibi oluştururdum;</p>
<pre class="brush:csharp">XmlWriter writer = new XmlTextWriter(stream, Encoding.UTF8);</pre>
<p>Bilmediğim şey ise, bu şekilde nesneyi oluştururken otomatik olarak streamin başına UTF-8 tanımlayıcısı olan üç baytlık BOM karakter dizisinin ekleniyor olduğuydu. Yazmış olduğum bir servisi kullanan firmadan gelen dönüş ile, gönderdiğim XML&#8217;de BOM olduğunu ve bu yüzden XML&#8217;i düzgün işleyemediklerini öğrendim. Bunun üzerine BOM olmadan XML&#8217;i nasıl oluştururum diye araştırdım ve <a href="http://baleinoid.com/whaly/2009/07/xmlwriter-and-utf-8-encoding-without-signature/">buradaki</a> makaleye ulaştım.</p>
<p>Yapmamız gereken çok basit. Daha önce <strong>Encoding.UTF8</strong> ile elde ettiğimiz <strong>Encoding</strong> nesnesini bu sefer yeni bir Encoding nesnesi oluşturarak hallediyoruz. Yeni Encoding nesnemizi oluştururken de <strong>encoderShouldEmitUTF8Identifier</strong> parametresini <strong>false</strong> olarak kullanıyoruz;</p>
<pre class="brush:csharp">XmlWriter writer = new XmlTextWriter(stream, new UTF8Encoding(false));</pre>
<p>Ben XmlWriter kullanırken bu sorunla karşılaştığımdan yazı da bu konu etrafında şekillendi. Elbette ki Encoding kullandığınız başka durumlarda da bu şekilde Encoding nesneleri oluşturabilirsiniz.</p>
<div class="shr-publisher-226"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fbom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi%2F' data-shr_title='BOM+karakter+dizisi+olmadan+XmlWriter+ile+UTF-8+kullan%C4%B1m%C4%B1'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fbom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fbom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi%2F' data-shr_title='BOM+karakter+dizisi+olmadan+XmlWriter+ile+UTF-8+kullan%C4%B1m%C4%B1'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fbom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi%2F' data-shr_title='BOM+karakter+dizisi+olmadan+XmlWriter+ile+UTF-8+kullan%C4%B1m%C4%B1'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/bom-karakter-dizisi-olmadan-xmlwriter-ile-utf-8-kullanimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript kapsam ve kaplamları anlamak</title>
		<link>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/</link>
		<comments>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:49:05 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Closure]]></category>
		<category><![CDATA[Kaplam]]></category>
		<category><![CDATA[Kapsam]]></category>
		<category><![CDATA[Scope]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=219</guid>
		<description><![CDATA[Bu makalenin orijinali (Explaining JavaScript scope and closures) Robert Nyman tarafından kendi blogunda yazılmıştır. Türkçe çevirisi için kendisinden izin alınmış olup, aşağıda okuyacağınız birinci tekil şahıs yine Robert Nyman&#8217;ın kendisidir; Javascript ile uygulama geliştirirken bir çok insanın zorluk çektiği bir konuyu açıklamaya çalışmak istedim. Arkaplan Kapsam ve kaplamları anlatmaya çalışan bir sürü makale olmasına rağmen [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><blockquote><p>Bu makalenin <a href="http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/">orijinali (Explaining JavaScript scope and closures)</a> Robert Nyman tarafından kendi blogunda yazılmıştır. Türkçe çevirisi için kendisinden izin alınmış olup, aşağıda okuyacağınız birinci tekil şahıs yine Robert Nyman&#8217;ın kendisidir;</p></blockquote>
<p>Javascript ile uygulama geliştirirken bir çok insanın zorluk çektiği bir konuyu açıklamaya çalışmak istedim.<br />
<span id="more-219"></span></p>
<h2>Arkaplan</h2>
<p>Kapsam ve kaplamları anlatmaya çalışan bir sürü makale olmasına rağmen bir çoğunun net bir şekilde konuyu ele almadığını söyleyebilirim. Bunun yanında bir çok makalede de herkesin daha önce 15 başka yazılım dili ile uygulama geliştirdiğini varsayılıyor ki deneyimlerime göre JavaScript yazan bir çok kişi C ve Java yerine HTML ve CSS altyapısından geliyor.</p>
<p>Bu nedenle bu makale ile mütevazi hedefim herkesin kapsam ve kaplamların ne olduğunu kavraması, nasıl çalıştıklarını ve daha önemlisi bunlardan nasıl yararlanabileceklerini görmeleri. Okumaya başlamadan önce değişkenler ve fonksiyonların temellerini anlıyor olmalısınız.</p>
<h2>Kapsam</h2>
<p>Kapsam, değişkenlerin ve fonksiyonların nerede erişilebilir oldukları ve hangi bağlam içinde çalıştırıldıklarını refere eder. Basitçe, bir değişken ya da fonksiyon, genel ya da yerel kapsam içinde tanımlanabilir. Değişkenler sözde fonksiyon kapsamına sahiptirler ve fonksiyonlar da değişkenlerle aynı kapsama sahiptirler.</p>
<h3>Genel Kapsam</h3>
<p>Bir şey genel olduğunda bu demektir ki ona kodunuzda istediğiniz yerden erişebilirsiniz. Şu örneği ele alalım:</p>
<pre class="brush:javascript">var maymun = "Goril";

function misafiriKarsila() {
  return alert("Merhaba değerli blog okuyucusu!");
}</pre>
<p>Bu kod bir tarayıcıda çalıştığında, fonksiyon kapsamı pencere olacaktı, bu da ilgili tarayıcı penceresinde çalışan her şey için fonksiyonu erişilebilir kılacaktı.</p>
<h3>Yerel Kapsam</h3>
<p>Genel kapsamın tersine, yerel kapsam bir şeyin, örneğin bir fonksiyonun, kodun belli bir kısmında tanımlanmış olmasıdır. Örneğin;</p>
<pre class="brush:javascript">function terbiyesizKonus() {
  var konusma = "Oh, seni gidi VB sever seni";
  return alert(konusma);
}
alert(konusma); // Hata fırlatır</pre>
<p>Yukardaki koda bakarsanız konusma değişkeni sadece terbiyesizKonus fonksiyonu içinde erişilebilir durumdadır. Fonksiyonun dışında tanımlı değildir. Buraya dikkat: eğer değişkeni tanımlarken öncesinde var kullanmazsanız, değişken otomatik olarak bir genel değişken olur.</p>
<p>Bu aynı zamanda şu manaya da gelir, iç içe fonksiyonlar tanımladığınızda içerdeki fonksiyon, içinde bulunduğu fonksiyonun değişkenlerine ve fonksiyonlarına erişebilir:</p>
<pre class="brush:javascript">function adSakla(ad) {
  function buyukHarfeCevir() {
    return ad.toUpperCase();
  }
  var buyutulmus = buyukHarfeCevir();
  return buyutulmus;
}
alert(adSakla("Robert")); // "ROBERT" döndürür</pre>
<p>Gördüğünüz gibi, iç fonksiyon buyukHarfeCevir işlem yapmak için herhangi bir parametreye ihtiyaç duymadı fakat dış fonksiyon adSakla&#8217;nın parametresi olan ad parametresine tam erişim sağladı. Daha net anlaşılması için bir örnek daha ele alalım:</p>
<pre class="brush:javascript">function kardesler() {
  var kardesler = ["Mehmet", "Mahmut", "Ayşe"];
  function kardesSayisi() {
    var kardeslerUzunlugu = kardesler.length;
    return kardeslerUzunlugu;
  }
  function kardesIsimleriniBirlestir() {
    return "Benim " + kardesSayisi() + " kardeşim var:\n\n" + kardesler.join("\n");
  }
  return kardesIsimleriniBirlestir();
}
alert(kardesler()); // "Benim 3 kardeşim var: Mehmet Mahmut Ayşe" döndürür</pre>
<p>Az önce gördüğünüz gibi, her iki iç fonksiyon da kendilerini kapsayan fonksiyona ait dizi değişkenine erişebildiler ve her iç fonksiyon kendisiyle aynı seviyedeki diğer iç fonksiyonlara (bu durumda kardesIsimleriniBirlestir fonksiyonu kardesSayisi fonksiyonuna erişti) erişebildi. Ne varki kardeslerUzunlugu değişkeni sadece ilgili fonksiyonda erişilebilir durumda, başka bir deyişle o kapsamda erişilebilir.</p>
<h2>Kaplamlar</h2>
<p>Hazır kapsam konusunu daha iyi kavramışken şimdi karışıma bir de kaplamları ekleyelim. Kaplamlar, genellikle, belirli bir bağlamda değişkenlerle çaışabilen ifadelerdir ya da işi daha da kolaylaştırmak adına, dış fonksiyonların yerel değişkenleri ile işlem yapan iç fonksiyonlar kaplamları oluşturur. Örneğin:</p>
<pre class="brush:javascript">function topla(x) {
  return function(y) {
    return x + y;
  };
}
var topla5 = topla(5);
var sayi8 = topla5(3);
alert(sayi8); // 8 döndürür</pre>
<p>Dur bir dakika! Az önce ne oldu? Şunu parçalarına ayıralım:</p>
<ol>
<li>topla fonksiyonu çağırıldığında geriye bir fonksiyon döndürüyor.</li>
<li>Bu fonksiyon ilgili bağlamı kapatıyor ve x parametresinin o anki değerini hafızasında tutuyor.(Yukardaki örnekte 5 değeri)</li>
<li>topla5 değişkenine değeri atanırken, dönen fonksiyon x değerinin 5 olduğunu hep biliyor.</li>
<li>topla5 değişkeni parametre olarak aldığı değere 5 ekleyen bir fonksiyonu refere eder hale geliyor.</li>
<li>topla5 fonksiyonu 3 parametresi ile çağrıldığında, 5 değerine 3 ekliyor ve 8 değerini dönüyor.</li>
</ol>
<p>Yani JavaScript dünyasında topla5 fonksiyonu aslında şuna benzer:</p>
<pre class="brush:javascript">function topla5 (y) {
  return 5 + y;
}</pre>
<h2>Rezil döngü problemi</h2>
<p>Kaç defa, bir döngü yaratıp, i değerini bir elemana atamaya çalıştığınızda, gördünüz ki sadece i&#8217;nin en son değeri geri dönüyor?</p>
<h3>Yanlış referans</h3>
<p>Şimdi, 5 adet a elemanı yaratıp, i değişkeni ile metinlerini oluşturan ve tıklama olayında da i değerini mesaj kutusu (alert) ile ekrana basan, şu yanlış koda bir bakalım. Oluşan a elemanları dokümanın (document) gövdesine (body) eklenecekler:</p>
<pre class="brush:javascript">function baglantiEkle() {
  for (var i=0, baglanti; i < 5; i++) {
    baglanti = document.createElement("a");
    baglanti.innerHTML = "Bağlantı " + i;
    baglanti.onclick = function () {
      alert(i);
    };
    document.body.appendChild(baglanti);
  }
}
window.onload = baglantiEkle;</pre>
<p>Her eleman  "Bağlantı 0", "Bağlantı 1" vb doğru metinlere sahip olacaklar. Fakat hangi bağlantıya tıklarsanız tıklayın, mesaj kutusunda hep "5" yazacaktır. Peki ama neden? Döngünün her yinelenmesinde i değeri bir artıyor ve tıklama olayı sadece elemana bağlanıyor ama henüz çalıştırılmıyor.</p>
<p>Böylece döngü i değeri 5 olana kadar devam ediyor, ki bu da baglantiEkle fonksiyonu çalışmayı bitirmeden önce i'nin aldığı son değer. Sonrasında da her tıklama olayı gerçekleştiğinde, son i değeri kullanılıyor.</p>
<h3>Doğru referans</h3>
<p>Bunun yerine yapmanız gereken bir kaplam yaratmak, böylece tıklama olayını her bağladığınızda o anki doğru i değeri ile olay çalışır. Şöyle ki:</p>
<pre class="brush:javascript">function baglantiEkle() {
  for (var i=0, baglanti; i < 5; i++) {
    baglanti = document.createElement("a");
    baglanti.innerHTML = "Bağlantı " + i;
    baglanti.onclick = function (numara) {
      return function () {
        alert(numara);
      };
    }(i);
    document.body.appendChild(baglanti);
  }
}
window.onload = baglantiEkle;</pre>
<p>Bu kod ile her a elemanına tıkladığınızda "Bağlantı 0", "Bağlantı 1" gibi ilk kod parçasında olmasını beklediğiniz değerler karşınıza çıkacaktır. Burada çözümü sağlayan, tıklama olayına atanan iç fonksiyon numara değişkenini -bu örnekte parametre olarak geçilen i değişkeninin o andaki değeri- refere eden bir kaplam oluşturmasıdır.</p>
<p>Bu fonksiyon geçerli değer ile kapanıyor ve bu sayede tıklama olayı çağırıldığında olması gereken değeri dönebiliyor.</p>
<h2>Kendi kendini çalıştıran fonksiyonlar</h2>
<p>Kendi kendini çalıştıran fonksiyonlar anında çalışan ve kendi kaplamlarını oluşturan fonksiyonlardır. Şuna bir göz atın:</p>
<pre class="brush:javascript">(function () {
  var kopek = "Alpan Çobanı";
  alert(kopek);
})();
alert(kopek); // undefined (tanımlanmamış) geri döner</pre>
<p>Tamam, demek ki kopek değişkeni sadece o bağlamda uygun durumda. Büyük iş, gizli köpekler... Ama, sevgili arkadaşlarım, işte olayın ilginçleştiği nokta da bu! Biraz önceki döngüde sorunumuzu çözen şey bu. Yahoo da bunu <a href="http://yuiblog.com/blog/2007/06/12/module-pattern/">Yahoo JavaScript Modül Deseni</a> için kullanıyor.</p>
<h2>Yahoo JavaScript Modül Deseni</h2>
<p>Desenin özü şu; Kendi kendini çağıran fonksiyonlar kullanarak bir kaplam yaratıyoruz, bu sayede özel ve genel değişkenler ve metotlar oluşturabiliyoruz. Basit bir örnek:</p>
<pre class="brush:javascript">var kisi = function () {
  // Özel
  var isim = "Robert";
  return {
    ismiGetir : function () {
      return isim;
    },
    ismiBelirle : function (yeniIsim) {
      isim = yeniIsim;
    }
  };
}();
alert(kisi.isim); // undefined
alert(kisi.ismiGetir()); // "Robert"
kisi.ismiBelirle("Robert Nyman");
alert(kisi.ismiGetir()); // "Robert Nyman"</pre>
<p>Bunun güzelliği, artık nelerin genel olarak görüneceğini(ve değiştirilebileceğini), nelerin ise özel olacağını dolayısıyla da kimsenin erişememesine ve değiştirememesine siz karar verebileceksiniz. Yukardaki değişkenin ismi fonksiyonun bağlamı dışında gizlidir, fakat ismiGetir ve ismiBelirle fonksiyonları aynı kaplamda yaratıldıkları için ilgili değişkenin referansına sahiptirler ve kendisine ulaşabilirler.</p>
<h2>Sonuç</h2>
<p>Naçizane umudum, bu yazıyı okuduktan sonra, ister acemi, ister uzman bir programcı olun, JavaScript'deki kapsam ve kaplamlar ile ilgili daha net bir görüş açısı kazanmanızdır. Sorular ve geri beslemelere her zaman açığım ve konuyla ilgili gerçekten önemli her türlü bilgi için makaleyi hemen güncellerim.</p>
<p>Mutlu kodlamalar!</p>
<div class="shr-publisher-219"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fjavascript-kapsam-ve-kaplamlari-anlamak%2F' data-shr_title='JavaScript+kapsam+ve+kaplamlar%C4%B1+anlamak'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/javascript-kapsam-ve-kaplamlari-anlamak/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Ultimate MySQL Sınıfı</title>
		<link>http://www.karalamalar.net/ultimate-mysql-sinifi/</link>
		<comments>http://www.karalamalar.net/ultimate-mysql-sinifi/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 15:16:40 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sınıf]]></category>
		<category><![CDATA[ultimate mysql]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=200</guid>
		<description><![CDATA[Bir süredir geliştirdiğim ufak çaplı PHP + MySQL uygulamalarında Jeff Williams tarafından yazılmış olan Ultimate MySQL sınıfını kullanıyorum. En temel ihtiyaçlarımı karşılamakla beraber kolay geliştirilebilir bir yapısı olduğundan her yeni projede ihtiyaca göre üzerine bir şeyler ekleyebiliyorum. PHP Classes sitesindeki Ultimate MySQL sayfasından sınıfı edinebilirsiniz. İsterseniz GetXML ve GetJSON fonksiyonlarını eklediğim ve ufak bir problemini [...]]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Bir süredir geliştirdiğim ufak çaplı <a href="http://www.karalamalar.net/etiket/php/">PHP</a> + <a href="http://www.karalamalar.net/etiket/mysql/">MySQL</a> uygulamalarında <a href="http://www.phpclasses.org/browse/author/422547.html">Jeff Williams</a> tarafından yazılmış olan <a href="http://www.phpclasses.org/ultimatemysql">Ultimate MySQL</a> sınıfını kullanıyorum. En temel ihtiyaçlarımı karşılamakla beraber kolay geliştirilebilir bir yapısı olduğundan her yeni projede ihtiyaca göre üzerine bir şeyler ekleyebiliyorum.<br />
<span id="more-200"></span></p>
<p><a href="http://www.phpclasses.org/">PHP Classes</a> sitesindeki <a href="http://www.phpclasses.org/ultimatemysql">Ultimate MySQL</a> sayfasından sınıfı edinebilirsiniz. İsterseniz GetXML ve GetJSON fonksiyonlarını eklediğim ve ufak bir problemini düzelttiğim versiyonu <a href="http://www.karalamalar.net/dosyalar/2009/06/ultimate_mysql.zip">buradan</a> indirebilirsiniz. Aslında eklediğim daha bir çok fonksiyon olmasına rağmen, kimisi projeye yönelik olduğundan kimisini ise çok fazla kontrol etmediğimden (SQL Injection sorunuyla karşılaşmanızı istemem) en güvenilir bulduğum şekilde yayınlıyorum.</p>
<p>Paketin içinde çok kapsamlı bir yardım dosyası (help.html &#8211; İngilizce) yer alıyor. Ben de kısaca bir kaç örnek vereyim;</p>
<pre class="brush:php">include("mysql.class.php");

$vt = new MySQL();
$vt = new MySQL(true, "veritabanı");
$vt = new MySQL(true, "veritabanı", "sunucu", "kullanici_adi", "parola");</pre>
<p>Öncelikle mysql.class.php dosyamızı projemize dahil ediyoruz. tek bir veritabanı ile çalışıyorsanız, mysql.class.php dosyasını açıp, varsayılan sunucu ve veritabanı bilgileri girebilirsiniz. Böylece hiç parametre vermeden nesneyi yarattığınızda varsayılan değerler ile bir bağlantı yaratılır. Sunucu ve veritabanı bilgilerini parametre olarak geçerek birden çok sunucuya/veritabanına özel bağlantılar da oluşturabilirsiniz.</p>
<p><strong>Kayıt ekleme:</strong></p>
<pre class="brush:php">$degerler["Ad"] = MySQL::SQLValue("Elma");
$degerler["Adet"]  = MySQL::SQLValue(6, MySQL::SQLVALUE_NUMBER);

$sonuc = $vt->InsertRow("meyveler", $degerler);

if (! $sonuc)
  $vt->Kill();
else
  echo "Yeni kayıt numarası: " . $sonuc;</pre>
<p><strong>Kayıt güncelleme:</strong></p>
<pre class="brush:php">$filtre["Id"] = 4;

$degerler["Ad"] = MySQL::SQLValue("Armut");
$degerler["Adet"]  = MySQL::SQLValue(3, MySQL::SQLVALUE_NUMBER);

if (! $vt->UpdateRows("meyveler", $values, $filtre))
  $vt->Kill();</pre>
<p><strong>Kayıt Silme:</strong></p>
<pre class="brush:php">$filtre["ID"] = 4;

if (! $vt->DeleteRows("meyveler", $filtre))
  $vt->Kill();</pre>
<p><strong>Kayıt Çekme:</strong></p>
<pre class="brush:php">$filtre["Ad"]     = MySQL::SQLValue("Armut");

$sonuc = $db->SelectRows("meyveler", $filtre);

if (! $sonuc)
  $db->Kill();
else {
  $db->MoveFirst();
  while (! $db->EndOfSeek()) {
    $satir = $db->Row();
    echo $satir->Ad . " " . $row->Adet . "\n";
  }
}</pre>
<p>Bunlar dört temel işlemi ne kadar kolay yapabileceğinizi gösteriyor. Sınıf bu kadarla sınırlı değil. SQL sorguları yazıp çalıştırmanıza imkan sağlayan metotlar, tablo yapısı ile ilgili işlemler yapabilmenizi sağlayan metotlar vb bir çok yararlı metoda sahip. Biraz kullandıktan sonra hemen alışıyorsuınuz.</p>
<p>Takıldığınız yerlerde yardım istemekten çekinmeyin. Sınıfı ben geliştirmedim belki ama elimden geldiğince yardımcı olmaya çalışırım.</p>
<div class="shr-publisher-200"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fultimate-mysql-sinifi%2F' data-shr_title='Ultimate+MySQL+S%C4%B1n%C4%B1f%C4%B1'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fultimate-mysql-sinifi%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fultimate-mysql-sinifi%2F' data-shr_title='Ultimate+MySQL+S%C4%B1n%C4%B1f%C4%B1'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fultimate-mysql-sinifi%2F' data-shr_title='Ultimate+MySQL+S%C4%B1n%C4%B1f%C4%B1'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/ultimate-mysql-sinifi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Parça Tanımlayıcılar ile Cross Domain Frame İletişimi</title>
		<link>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/</link>
		<comments>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 17:35:19 +0000</pubDate>
		<dc:creator>kara</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programlama]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[çapraz]]></category>
		<category><![CDATA[çerçeve]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[cross]]></category>
		<category><![CDATA[fragment identifier]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[iletişim]]></category>
		<category><![CDATA[parça tanımlayıcı]]></category>

		<guid isPermaLink="false">http://www.karalamalar.net/?p=197</guid>
		<description><![CDATA[Yazılarımı yazarken genelde ingilizce terimlerin varsa]]></description>
			<content:encoded><![CDATA[<!-- Start Shareaholic LikeButtonSetTop Automatic --><!-- End Shareaholic LikeButtonSetTop Automatic --><p>Yazılarımı yazarken genelde ingilizce terimlerin varsa <a href=http://www.karalamalar.net/etiket/turkce/">Türkçe</a> karşılıklarını yoksa en yakın anlamlarını kullanmaya çalışıyorum. Ne var ki Türkçe yeterli kaynak olmadığından ve ingilizce kaynaklar çok fazla olduğundan çoğu zaman bir konu ile ilgili arama yaparken ingilizce anahtar kelimeler kullanıyorum. Bu makalenin başlığını da <strong>Parça tanımlayıcılar ile çapraz alan adı çerçeve iletişimi</strong> olarak yazmak isterdim fakat arandığında bulunabilsin diye mecburen bu şekilde yazmak durumunda kaldım.<br />
<span id="more-197"></span></p>
<p>Güvenlik gereği tarayıcılar, bir alan adı üzerinde çalışan bir betiğin başka bir alan adı üzerinde çalışan başka bir betik ile haberleşmesine ve/veya ilgili dokümanın özelliklerine erişebilmesine izin vermezler. Pratikte çok işe yarayan bu güvenlik önlemi, her iki alan adına sahipseniz ve bu iki alan adında çalışan uygulamaların iletişim kurmaları gerekliliği söz konusuysa, durum çok can sıkıcı bir hal alabiliyor.</p>
<p>Flash tabanlı uygulamalarda sunucuların kök klasöründe düzgün bir şekilde yapılandırılmış <strong>crossdomain.xml</strong> dosyası yardımı ile bu sorunun üstesinden gelebiliyorsunuz. (crossdomain.xml ile ilgili daha detaylı bilgiyi <a href="http://livedocs.adobe.com/flash/8/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&#038;file=00001621.html">adobe sitesinden</a> edinebilirsiniz.) Peki javascript ile çalışırken ne yapılabilir? Bu makalede bu soruya cevap olabilecek bir yöntemden bahsedeceğim.</p>
<p>İşyerinde bir projede karşıma çıkan benzer bir problem için çözüm ararken, delicious üyeliklerim arasında tam da aradığım konuyla ilgili bir <a href="http://tagneto.blogspot.com/2006/06/cross-domain-frame-communication-with.html">yazı</a> buldum. Yazının ana fikri, değiştiğinde sayfanın yenilenmesini gerektirmeyen parça tanımlayıcı (<a href="http://en.wikipedia.org/wiki/Fragment_identifier">Fragment Identifier</a>) adı verilen url bölümünü kullanarak çerçeveleri konuşturmak.</p>
<p>Parça tanımlayıcılar, bir web sayfası içinde, sayfayı yenilemeden sayfanın içerisinde bağlantılar yardımıyla gezinti yapılabilmesine olanak sağlarlar. <strong>http://www.test.com/urunler.html#A-Urunu</strong> şeklinde bir bağlantı, sayfa yüklendikten sonra sayfanın <strong>A-Urunu</strong> olarak işaretlenmiş bölümüne odaklanmasını sağlar. <strong>A-Urunu</strong> olarak işaretlenmiş bir bölüm yoksa, bu durumda sayfa herhangi bir hata vermez ve özel bir konuma odaklanmaz.</p>
<p>Çerçeveleri konuşturmak için bizim de ihtiyacımız olan tam böyle bir şey. Tek yapmamız gereken <strong>A</strong> sayfasından, yine  <strong>A</strong> sayfasında yer alan sayfa içi çerçeve (iframe) içinde yer alan <strong>B</strong> sayfasına veri göndermek için, göndereceğimiz veriyi <strong>B</strong> sayfasının adres bölümüne parça tanımlayıcı olarak göndermek. <strong>B</strong> sayfasını da sürekli olarak parça tanımlayıcı kısmı dinleyecek ve yorumlayacak şekilde yapılandırmak. Tam ters mantıkla, <strong>A</strong> sayfasını dinleyici, <strong>B</strong> sayfasını veri gönderici şekilde yapılandırarak her iki çerçevenin birbirleriyle iletişim kurmasını sağlayabilirsiniz.</p>
<p>İletişimin boyutu, parça tanımlayıcıların ve dolayısıyla url bölümüne yazılabilecek en yüksek veri miktarı ile sınırlı. Ayrıca sayfa içi çerçeve kullanmak, tarayıcının geri tuşununu da doğru çalışmamasına yol açabilir. Bu iki konu da yöntemin dezavantajları arasında sayılabilir.</p>
<p><a href="http://www.karalamalar.net/ornekler/CrossComm.html">Örnek sayfaları</a>nın kodlarını inceleyerek anlatmak istediğimi çok daha rahat anlayabilirsiniz.</p>
<div class="shr-publisher-197"></div><!-- Start Shareaholic LikeButtonSetBottom Automatic --><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><div class='shareaholic-like-buttonset' style='float:none;height:30px;'><a class='shareaholic-fblike' data-shr_layout='button_count' data-shr_showfaces='false' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a><a class='shareaholic-fbsend' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F'></a><a class='shareaholic-googleplusone' data-shr_size='medium' data-shr_count='true' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a><a class='shareaholic-tweetbutton' data-shr_count='horizontal' data-shr_href='http%3A%2F%2Fwww.karalamalar.net%2Fparca-tanimlayicilar-ile-cross-domain-frame-iletisimi%2F' data-shr_title='Par%C3%A7a+Tan%C4%B1mlay%C4%B1c%C4%B1lar+ile+Cross+Domain+Frame+%C4%B0leti%C5%9Fimi'></a></div><div style="clear: both; min-height: 1px; height: 3px; width: 100%;"></div><!-- End Shareaholic LikeButtonSetBottom Automatic -->]]></content:encoded>
			<wfw:commentRss>http://www.karalamalar.net/parca-tanimlayicilar-ile-cross-domain-frame-iletisimi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

