<?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>GÜVEN ATBAKAN &#187; Yazılım</title>
	<atom:link href="http://www.guvenatbakan.net/kategoriler/web-tasarim-yazilim/yazilim/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.guvenatbakan.net</link>
	<description>Lorem ipsum dolor sit amet.</description>
	<lastBuildDate>Thu, 02 Feb 2012 13:19:03 +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>Subversion Eğitim Seti</title>
		<link>http://www.guvenatbakan.net/2011/12/05/subversion-egitim-seti/</link>
		<comments>http://www.guvenatbakan.net/2011/12/05/subversion-egitim-seti/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 18:54:27 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[subversion eğitim seti]]></category>
		<category><![CDATA[subversion video]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[svn eğitim seti]]></category>
		<category><![CDATA[svn video]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=1125</guid>
		<description><![CDATA[Ülkemizde maalesef screencast olayı çok fazla yok. Aslında makale de çok fazla çıkmıyor. Bu açıdan gerçek anlamda emek verilen ve herkese hitap edebilecek her video eğitimi destekliyorum. Bu destek kapsamında sizlere ceviz.net yöneticilerinden Süleyman Demirkeser&#8217;in hazırladığı &#8220;Subversion sürüm  [...]]]></description>
			<content:encoded><![CDATA[<p>Ülkemizde maalesef screencast olayı çok fazla yok. Aslında makale de çok fazla çıkmıyor. Bu açıdan gerçek anlamda emek verilen ve herkese hitap edebilecek her video eğitimi destekliyorum. Bu destek kapsamında sizlere ceviz.net yöneticilerinden Süleyman Demirkeser&#8217;in hazırladığı &#8220;Subversion sürüm kontrol sistemi&#8221; hakkındaki eğitimi tanıtmak istiyorum.</p>
<p>Windows ortamı için hazırlanan bu eğitim şu konulardan oluşuyor:</p>
<ul>
<li>1. Neden Subversion</li>
<li>2.a Visual SVN Server Kurulumu 04:31</li>
<li>2.b Visual SVN Server ile Reporsitory (Depo) Oluşturmak 06:40</li>
<li>2.c Visual SVN Server Yetkilendirme &#8211; Kullanıcı İşlemleri &#8211; Güvenlik Seviyeleri 09:00</li>
<li>3.a Tortoise SVN Kurulumu 02:11</li>
<li>3.b Tortoise SVN ile Browse, Checkout, Commit, Update İşlemleri 23:23</li>
<li>3.c Geçmişe (History) Dönük İşlemler &#8211; Geçmiş (Show Log), Farklar (Diff) Geri alma (Revert) İşlemleri 10:12</li>
<li>3.d Projeyi Export İşlemi İle Dışarı Alma 02:31</li>
<li>3.e Svn Depo Adresini Değiştirme İşlemi (Relocate) 02:07</li>
<li>3.f Offline Depo İle Çalışmak 05:19</li>
<li>3.g Conflict (Çakışma) Kavramı ve Çözümleme İşlemi 07:29</li>
<li>3.h Tortoise SVN Türkçeleştirme İşlemi 01:50</li>
<li>3.h Tortoise SVN Gözardı edilenler (Ignore) Listesi oluşturma 02:39</li>
<li>3.i Kayıtlı kullanıcı adı ve şifreyi değiştirmek 01:54</li>
<li>4. Dreamviewer ile subversion kullanımı 07:11</li>
<li>5. Google Code ile Subversion Projesi Geliştirmek 06:54</li>
</ul>
<p>Üstelik Süleyman Bey, seti satın aldıktan sonra yeni hazırlayacağı videoları ücretsiz olarak size ulaştırmayı garanti ediyor. Eğitim ücreti ise çok cüzi bir miktar; 10 TL. Eğer sizde svn kurulumunu ve kullanımını öğrenmek istiyorsanız, bu eğitim setini sizlere tavsiye ederim..</p>
<p>http://forum.ceviz.net/duyurular-amp-ilanlar/113053-kod-kaybetmeye-son-subversionsvn-ile-surum-yonetim-sistemi-video-egitimi-cikti.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2011/12/05/subversion-egitim-seti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSA Şifreleme Algoritması</title>
		<link>http://www.guvenatbakan.net/2011/05/08/rsa-sifreleme-algoritmasi/</link>
		<comments>http://www.guvenatbakan.net/2011/05/08/rsa-sifreleme-algoritmasi/#comments</comments>
		<pubDate>Sun, 08 May 2011 18:02:47 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[rsa ile şifreleme]]></category>
		<category><![CDATA[rsa matematiksel yöntemi]]></category>
		<category><![CDATA[rsa şifreleme]]></category>
		<category><![CDATA[rsa şifreleme algoritması]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=853</guid>
		<description><![CDATA[Matematik ve Bilgisayar Bilimleri okuduğumu hissettiren tek ders &#8220;Ayrık Matematik&#8221; oldu. Sebebi; şu anda dünyada en çok kullanılan ve en güvenli şifreleme algoritması olan RSA&#8217;nın matematiksel algoritmasını öğrenmemiz   Hemen bu şifreleme metoduyla ilgili detaylara geçeyim.
RSA nasıl ortaya  [...]]]></description>
			<content:encoded><![CDATA[<p>Matematik ve Bilgisayar Bilimleri okuduğumu hissettiren tek ders &#8220;Ayrık Matematik&#8221; oldu. Sebebi; şu anda dünyada en çok kullanılan ve en güvenli şifreleme algoritması olan RSA&#8217;nın matematiksel algoritmasını öğrenmemiz <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Hemen bu şifreleme metoduyla ilgili detaylara geçeyim.<span id="more-853"></span></p>
<p><strong>RSA nasıl ortaya çıktı?</strong></p>
<p>İki genç birbirini çok sevmekteydi ve gizlice mektuplaşmaktaydılar. Bir gün kızın annesi mektupları gördü ve babasına söyledi. Babası çok kızdı ve bir daha mektup görürse kızını sürgüne göndereceğini söyledi. Bunun üzerine çok üzüldü kız.</p>
<p>Bir gün kız kütüphaneye gidiyorum bahanesiyle çocukla buluştu. Durumu anlattı. Neyseki kız ve çocuk matematikçiydiler. Bunun üzerine birlikte bir çözüm buldular. Gönderdikleri mektupları şifreleyeceklerdi!</p>
<p>Hemen basit bir şifreleme algoritması oluşturdular. Bu algoritmaya göre her harfin bir sayısal karşılığı vardı. Örneğin A için 01 kullanıyorlardı. Bu durumda ASKIM kelimesinin şifreli hali 01 19 09 11 13 oluyordu. Ancak delikanlı bir an duraksadı. Çünkü bu geri dönüşümlü bir şifreydi. Herkes kırabilirdi. Hemen farklı bir yöntem düşündü. Şifrelemek için farklı bir yöntem, şifreyi çözmek için farklı bir yöntem kullanmaları gerekiyordu. Şifreleme yöntemi bulunsa bile şifreyi çözme yöntemi bulunamayacaktı. Ve bunu sadece kendileri bileceklerdi. Euler Teoremi ve Sayılar Teorisi&#8217;ni kullanarak bir yöntem buldu. Bu yöntem aşama aşama şöyleydi:</p>
<ol>
<li><span style="text-decoration: underline;">p</span> ve <span style="text-decoration: underline;">q</span> iki asal sayı olmak üzere seçilir.</li>
<li><span style="text-decoration: underline;">n</span> = p * q olacak şekilde bir n sayısı bulunur.</li>
<li><span style="text-decoration: underline;">φ(n)</span> = (p-1)*(q-1) olacak şekilde bulunur.</li>
<li><span style="text-decoration: underline;">φ(n)</span> ve <span style="text-decoration: underline;">E</span> aralarında asal olacak şekilde keyfi bir <span style="text-decoration: underline;">E</span> tamsayısı seçilir. <span style="text-decoration: underline;">E</span> tamsayısı 1 ile φ(n) arasında olmalıdır.</li>
<li>Seçilen <span style="text-decoration: underline;">E</span> tamsayısının mod <span style="text-decoration: underline;">φ(n)</span>&#8216;de tersi alınır. Sonuç <span style="text-decoration: underline;">D</span> olsun.</li>
</ol>
<p>Şifreleme yaparken <span style="text-decoration: underline;">n</span> ve <span style="text-decoration: underline;">E</span> sayılarını kullanacaklardı. Şifreyi çözerken ise <span style="text-decoration: underline;">n</span> ve <span style="text-decoration: underline;">D</span> sayılarını kullanacaklardı. Birisi şifrelemeyi yapan <span style="text-decoration: underline;">n</span> ve <span style="text-decoration: underline;">E</span> sayılarını bulabilirdi. Fakat <span style="text-decoration: underline;">D</span> sayısını bulmak için <span style="text-decoration: underline;">φ(n)</span>&#8216;i, dolayısıyla <span style="text-decoration: underline;">p</span> ve <span style="text-decoration: underline;">q</span> sayılarını bilmeleri gerekmekteydi. Bu sayıları bulmakta o günkü teknolojiyle imkansızdı. Hoş bugünkü teknolojiyle de imkansız, orası ayrı. Dolayısıyla çocuğun sivri zekası kusursuz bir şifreleme algoritması yapmalarını sağlamıştı.</p>
<p>İlk mektubu şifreleyerek çocuk gönderdi. Mektup eve ulaştığında babası el koydu ve sadece sayılardan oluşan bir mektup gördü. Kızına sordu hemen bu ne diye? Kızıda bastı palavrayı: &#8220;Baba onu okuldan gönderdiler, derslerle ilgili.&#8221; Babası hiç birşey anlamadığı için doğal olarak inandı. Kız mektubu aldı şifreyi çözdü. Mektubu okudu cevabını şifreleyerek yazdı. Kimse bu durumdan birşey anlamadı, mutlu mesut haberleştiler.</p>
<p>İşin aslı, bu şifreleme algoritması daha önce 1977 yılında Ron <strong>R</strong>ivest, Adi <strong>S</strong>hamir ve Len <strong>A</strong>dleman tarafından bulunmuştu. Öyle ki 1983 yılında patenti alınmıştı. İşin aslı böyle işte. Şimdi bu teorikteki 5 maddeyi pratiğe dökelim.</p>
<p>Yukarıdaki 5 adımda kapalı ve açık anahtarları ürettik. <span style="text-decoration: underline;">E</span> ve <span style="text-decoration: underline;">n</span> bizim açık anahtarımız, <span style="text-decoration: underline;">D</span> ve <span style="text-decoration: underline;">n</span> ise kapalı anahtarımız olacak. <span style="text-decoration: underline;">E</span> ve <span style="text-decoration: underline;">n</span> sayılarını kullanarak veriyi şifreleyeceğiz, <span style="text-decoration: underline;">D</span> ve <span style="text-decoration: underline;">n</span> sayılarını kullanarak şifreli metni orjinal halinde getireceğiz. Peki bu işlemler nasıl yapılıyor derseniz; çok basit olduğunu söylemekle birlikte hemen gösterelim.</p>
<p><strong>Şifreleme:</strong> <span style="text-decoration: underline;">M</span> bizim metnimiz olsun ve bunu şifreleyelim. Tabii ki bu işlemler sadece sayılar üzerinde gerçekleştirildiğinden <span style="text-decoration: underline;">M</span> metnini öncelikle sayısal değere çevirmeliyiz. Bu işlem okuyucuya bırakılmıştır ve <span style="text-decoration: underline;">M</span> metni sayıymış gibi devam edilecektir. <span style="text-decoration: underline;">M^E mod n</span> bize şifreli metni verecektir. Daha da açarsak bunu <span style="text-decoration: underline;">M</span> sayısının <span style="text-decoration: underline;">E</span>&#8216;inci kuvvetini alıyoruz. Daha sonra <span style="text-decoration: underline;">mod n</span> tabanında karşılığını yazıyoruz.</p>
<p><strong>Şifreyi çözme: </strong>Şifrelemeye benzer şekilde bu kez tersi işlem yapıyoruz. Bu kez şifrelenmiş metnin <span style="text-decoration: underline;">D</span>&#8216;inci kuvvetini alıyoruz. Ve bunun <span style="text-decoration: underline;">mod n</span> tabanında karşılığını yazıyoruz. Bu yaptığımız işlemler sonucunda karşımıza orjinal metnin sayısal değeri çıkıyor. Orjinal metnin sayısal değerini siz bulduğunuz için bu sayısal değeri rahatlıkla orjinal metne çevirebilirsiniz <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Matematikçileri ve mühendisleri algoritma konusunda kıyaslarsak; futboldan benzetme yaparak, mühendisler teknik oyunculardır, matematikçiler taktik oyunculardır. Şöyleki; matematikçiler maçın taktiğini belirler. Taktikte hata yoktur. Herşey ortadadır ve ispatlanmıştır. Bunu uygulamak teknik oyuncuların elindedir. Taktik bilgisi olmayan teknik futbolcular bir işe yaramazlar bildiğiniz üzre. Bu kapsamda matematikçiler ve mühendisler birbirlerini tamamlarlar. Ülkemizde özellikle algoritma konusunda büyük eksiklikler çekilmektedir. Bu kapsamda &#8220;Matematik ve Bilgisayar Bilimleri&#8221; bu eksikliği kapatacak bir bölümdür.</p>
<p>RSA ile ilgili detayları içerecek olan ikinci yazımızda görüşmek üzere.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2011/05/08/rsa-sifreleme-algoritmasi/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>PHP ile basit SEF yapımı (URL Rewrite)</title>
		<link>http://www.guvenatbakan.net/2011/02/20/php-ile-basit-sef-yapimi-url-rewrite/</link>
		<comments>http://www.guvenatbakan.net/2011/02/20/php-ile-basit-sef-yapimi-url-rewrite/#comments</comments>
		<pubDate>Sat, 19 Feb 2011 23:29:00 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[arama motoru dostu bağlantılar]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[php sef]]></category>
		<category><![CDATA[php seo yapımı]]></category>
		<category><![CDATA[search engine friendly]]></category>
		<category><![CDATA[sef]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[url rewrite php]]></category>
		<category><![CDATA[URL Rewriting]]></category>
		<category><![CDATA[URL Rewriting php]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=855</guid>
		<description><![CDATA[Apache bizlere SEF konusunda çok büyük bir nimet sağlıyor. Bunun adı .htaccess   Bu dosya içerisine çeşitli kurallar yazıyorsunuz ve o kurallara göre arama motoru dostu bağlantıları kullanabiliyorsunuz. Ancak bu kural yazma işi can sıkıcı olabiliyor. Zira RegExp (Regular Expression &#8211; Koşullu  [...]]]></description>
			<content:encoded><![CDATA[<p>Apache bizlere SEF konusunda çok büyük bir nimet sağlıyor. Bunun adı .htaccess <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Bu dosya içerisine çeşitli kurallar yazıyorsunuz ve o kurallara göre arama motoru dostu bağlantıları kullanabiliyorsunuz. Ancak bu kural yazma işi can sıkıcı olabiliyor. Zira RegExp (Regular Expression &#8211; Koşullu ifadeler) bilmeniz gerekmekte. Ve bazen baya uğraştırıcı olabiliyor. Ben bu konuda daha farklı bir yöntem kullanıyorum. Belki performans açısından direkt olarak kural yazmaya göre daha kötü olabilir ama çok çok büyük bir projede çalışmıyorsanız çok fazla etkileyeceğini düşünmüyorum.</p>
<p>Öncelikle nasıl bir sistem kullandığımdan bahsedeyim, sonrasında bir kaç kod ile örnek göstereyim. Yazının sonunda ise çok basit bir örnek sistemi indirebilirsiniz. <span id="more-855"></span></p>
<p>Linkimizin http://site.com/haberdetay/basligin-sef-hali/432 olduğunu varsayalım. Buradaki &#8220;haberdetay&#8221; bizim modül(controller) sayfamız oluyor. &#8220;basligin-sef-hali&#8221; anladığınız üzere haber başlığının özel karakterlerden arındırılarak urlye yerleştirilmiş hali oluyor. 432 ise haberin eşsiz idsi oluyor.</p>
<p>Şimdi neler yapacağız? Öncelikle haberdetay modülünü çağıracağız, bu modül dosyası içinde id&#8217;yi göstereceğiz ve ona göre işlemler yaptıracağız. Asıl işin canalıcı kısmı bu modül ismini ve idyi nasıl aldığımız. İşte burada .htaccessten yararlanıyoruz.</p>
<pre class="brush: plain; title: ; notranslate">
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</pre>
<p>Bu dosyada yaptığımız işlem şu. URL&#8217;yi al, siteadi.com/ dan sonraki herşeyi index.php dosyasına $url olarak gönder. Yani biz http://site.com/haberdetay/basligin-sef-hali/432 linkine gittiğimizde aslında http://site.com/index.php?url=/haberdetay/basligin-sef-hali/432 çalışıyor. Yapacağımız şey çok basit.</p>
<p>index.php dosyasına şöyle bir değişken yazıyoruz.</p>
<pre class="brush: php; title: ; notranslate">

 $url = explode(&quot;/&quot;, $_GET['url']);
</pre>
<p>Bu değişken  /haberdetay/basligin-sef-hali/432 linkini bizim için parçalara ayırıyor. Son durumda $url değişkeninin değeri şu şekilde oluyor:</p>
<p>$url[0] = &#8220;haberdetay&#8221; | Modülümüzün adı<br />
$url[1] = &#8220;basligin-sef-hali&#8221; | SEF Başlığımız<br />
$url[2] = &#8220;432&#8243; | Haber ID</p>
<p>Artık index.php içinde modül dosyamızı çağırmaya geçebiliriz.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

 	$url = explode(&quot;/&quot;, htmlspecialchars( strtolower( $_GET['url'] ) ) );

	if ($url[0] == &quot;&quot; )
	{
		$url[0] = &quot;anasayfa&quot;;
	}

include(&quot;header.php&quot;); //klasik olarak header yüklüyoruz.

if (file_exists(&quot;modul/&quot;.$url[0].&quot;.php&quot;))  //Eğer modül dosyamız varsa çağırıyoruz. Yoksa hiç bir işlem yapmayacak.
{
	include(&quot;modul/&quot;.$url[0].&quot;.php&quot;); // modül klasöründeki modülümüzü çağırdık.
	//Yani şöyle oldu: include(modul/haberdetay.php);
}

include(&quot;footer.php&quot;); //klasik olarak footer dosyamızı yüklüyoruz

?&gt;
</pre>
<p>İşte index.php dosyamız bundan ibaret. (Kodlar ile açıklamalar yorum satırı olarak mevcut.) Şimdi modul/haberdetay.php dosyasına geçip ve orada istediğimiz işlemi yapabilirsiniz. Haberdetay.php sayfasında id kullanmamız gerektiğinde $url[2] değişkenimiz bizim ID değerimiz oluyor. Veya linkteki herhangi bir sırayı da çağırabiliriz.</p>
<p>Ancak url değişkenini alırken gerekli güvenlik kontrollerini yapmayı unutmayın. Bunun yanı sıra modül dosyalarıyla birlikte Smarty ve benzeri bir tema motoru kullanmanız yararınıza olacaktır. Şahsen ben o şekilde kullanıyorum <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Umarım yararlı bir yazı olmuştur, sormak istediklerinizi yorum bölümünü kullanarak sorabilirsiniz.</p>
<h2><a href="http://www.guvenatbakan.net/wp-content/uploads/sefornek.tar.gz">PHP SEF Örnek Siteyi İndirmek İçin Tıklayın</a></h2>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2011/02/20/php-ile-basit-sef-yapimi-url-rewrite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Linux&#8217;ta Sıkıştırılmış Yedek Oluşturma</title>
		<link>http://www.guvenatbakan.net/2011/01/18/linuxta-sikistirilmis-yedek-olusturma/</link>
		<comments>http://www.guvenatbakan.net/2011/01/18/linuxta-sikistirilmis-yedek-olusturma/#comments</comments>
		<pubDate>Tue, 18 Jan 2011 17:35:51 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash ile yedek alma işlemi]]></category>
		<category><![CDATA[c++ bash komutları çalıştırma]]></category>
		<category><![CDATA[c++ ile konsol kullanımı]]></category>
		<category><![CDATA[Execute bash commands and running programs by c++]]></category>
		<category><![CDATA[linux yedekleme]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=825</guid>
		<description><![CDATA[Zayıf C++ bilgimle istenilen dosyayı/klasörü istenilen klasöre yedekleyen bir program yazdım.
Ancak bu program öyle ahım şahım değil. Zaten Linux komut satırını kullanıyor. Linuxta konsola yazdığınız kodu kısmen bu program içerisine yazıyorsunuz. Bunu konsoldan da yapabilirim diyebilirsiniz, ancak  [...]]]></description>
			<content:encoded><![CDATA[<p>Zayıf C++ bilgimle istenilen dosyayı/klasörü istenilen klasöre yedekleyen bir program yazdım.</p>
<p>Ancak bu program öyle ahım şahım değil. Zaten Linux komut satırını kullanıyor. Linuxta konsola yazdığınız kodu kısmen bu program içerisine yazıyorsunuz. Bunu konsoldan da yapabilirim diyebilirsiniz, ancak isterseniz cronjob ile dilediğiniz zaman programın çalıştırılıp yedek almasını sağlayabilirsiniz. Ben bilgisayar kapanırken veya yeniden başlatılırken yedek almasını sağlamak için yapacağım bunu.</p>
<p>Programın kodları aşırı derece de amele usulü olabilir, kabulümdür. Malum üniversitemizde C++ öğreteceğiz dediler ama for,while ve bir kaç string fonksiyonu dışında hiçbirşey göstermediler. Buna rağmen araştırmacı kişilik olarak işimi görecek bu programı yazmayı başardım <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Kodların devamında açıklamalarda bulunacağım.<span id="more-825"></span></p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;sys/wait.h&gt;
#include &lt;string.h&gt;
#include &lt;time.h&gt;

using namespace std;

int RunCommand(const char *strCommand)
{
	int iForkId, iStatus;
	iForkId = vfork();
	if (iForkId == 0)	// This is the child
	{
		iStatus = execl(&quot;/bin/sh&quot;,&quot;sh&quot;,&quot;-c&quot;, strCommand, (char*) NULL);
		exit(iStatus);	// We must exit here,
				// or we will have multiple
				// mainlines running...
	}
	else if (iForkId &gt; 0)	// Parent, no error
	{
		iStatus = 0;
	}
	else	// Parent, with error (iForkId == -1)
	{
		iStatus = -1;
	}
	return(iStatus);
} 

int main(int argc, char *argv[])
{
	int iNumProc = 0, iChildiStatus = 0, iStatus = 0, iDeadId = 0;
	int iExitFlag = 0;

    time_t rawtime;
	struct tm * timeinfo;
	char buffer [80];

	time ( &amp;rawtime );
	timeinfo = localtime ( &amp;rawtime );

	strftime (buffer,80,&quot;%Y_%m_%d-%H.%M.tar.gz&quot;,timeinfo);

	//puts (buffer);
	//cout&lt;&lt;buffer;

	char command[100] = &quot;tar cvzf &quot;;
	char topath[100] = &quot;/home/guven/yedekler/&quot;;
	char tocompress[100] = &quot;/home/guven/public_html/&quot;;
	char topath2[200];
	// Yedek oluşturulacak dosya
	strcat(topath2,topath);strcat(topath2,buffer);

	//komuta yedek dosyası ekleniyor
	strcat(command,topath2);
	strcat(command,&quot; &quot;);
	//dosyaya sıkıştırılacak konum-dosya ekleniyor
	strcat(command,tocompress);

	//if (Exists( topath ) )
	//{

		clock_t baslangic = clock(); // performans bilgisi

		iStatus = RunCommand(command);
		if (!iStatus)
			iNumProc++;
	//}

	// Wait till the commands complete
	while (iNumProc &amp;&amp; !iExitFlag)
	{
		iDeadId = waitpid(-1, &amp;iChildiStatus, WNOHANG);
		if (iDeadId &lt; 0)
		{
			// Wait id error - exit the loop
			iExitFlag = 1;
		}
		else if (iDeadId &gt; 0)
		{
			iNumProc--;
			// You can check the process exit iStatus here - its in the
			// iChildiStatus variable
		}
		else  // iDeadId == 0, no processes died
		{
			sleep(3);	// give them time to die
		}
	} 

	clock_t bitis = clock(); // performans bilgisi
	cout&lt;&lt;endl&lt;&lt;&quot;Bu islem &quot;&lt;&lt;(((double)bitis - (double)baslangic) / (double)CLOCKS_PER_SEC)&lt;&lt;&quot; saniyede yapildi.&quot;&lt;&lt;endl;

	return 0;
}
</pre>
<ul>
<li>Programın 52. satırındaki kodda yedeğin yapılacağı hedefi belirtiyorsunuz. Şöyle ki ben /home/guven/yedekler klasörüne atıyorum sıkıştırılmış dosyayı.</li>
<li>53. satırdaki kodda ise yedek alınacak dosya veya klasörü giriyorsunuz. Örneğin ben public_html klasörümü yedekliyorum.</li>
<li>Programda klasörü/dosya var mı yok mu kontrolü bulunmuyor. Dolayısıyla hedef ve kaynak dosyalarınızın/klasörlerinizin mutlaka bulunması gerekmektedir, yoksa program hata verir ki normali de budur <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>Yedek dosyasının ismi şu şekilde oluşturulmaktadır: 2011_01_18-19.31.tar.gz Yani Yıl_Ay_Gün-Saat.Dakika.tar.gz.</li>
</ul>
<p>Şimdilik bunlar aklıma geldi, kafanıza takılan birşey olursa yorum bölümünden sorabilirsiniz. Bir sonraki yazımda bu programı bilgisayarın kapanış servislerine eklemeyi göstereceğim, tabii ki öncelikle bu işlemi doğru düzgün yapabilmem gerekecek <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Kaynakça</strong><br />
<a href="http://kengine.sourceforge.net/tutorial/g/execute-command-eng.htm" target="_blank">Execute bash commands and running programs by c++</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2011/01/18/linuxta-sikistirilmis-yedek-olusturma/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>MVC Yapısının Önemi</title>
		<link>http://www.guvenatbakan.net/2010/12/27/mvc-yapisinin-onemi/</link>
		<comments>http://www.guvenatbakan.net/2010/12/27/mvc-yapisinin-onemi/#comments</comments>
		<pubDate>Mon, 27 Dec 2010 01:18:09 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[model view controller]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[mvc ne işe yarar]]></category>
		<category><![CDATA[mvc nedir]]></category>
		<category><![CDATA[mvc yapısı]]></category>
		<category><![CDATA[mvc yapısı nedir]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=792</guid>
		<description><![CDATA[Uzun zamandır yazmaya başladığım yazıları sonlandıramıyorum. Öyle taslakta kalıyorlar, bir süre sonra da siliyorum. Umarım bu sefer başladığım yazı yarım kalmaz.
Öncelikle MVC&#8217;nin tanımından başlamak gerekiyor sanırsam.
MVC yani Model-View-Controller benim anladığım kadarıyla sitenin kod kısmı ile  [...]]]></description>
			<content:encoded><![CDATA[<p>Uzun zamandır yazmaya başladığım yazıları sonlandıramıyorum. Öyle taslakta kalıyorlar, bir süre sonra da siliyorum. Umarım bu sefer başladığım yazı yarım kalmaz.</p>
<p>Öncelikle MVC&#8217;nin tanımından başlamak gerekiyor sanırsam.</p>
<p>MVC yani Model-View-Controller benim anladığım kadarıyla sitenin kod kısmı ile tasarım kısmının birbirinden ayrılmasını sağlıyor. Emin olun bir yazılımcı için çok büyük kolaylıklar sağlıyor. En büyük özelliği de bir başkasının kodlarınızı incelediğinde basit bir yapıyla karşılaşması. Bu, iş hayatında çok önemli. Bir proje yaparsınız ve bir başka iş arkadaşınız kodlarınızdan hiç birşey anlamadığında hiç hoş olmaz. <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<blockquote><p>Model-view-controller, <a title="Yazılım mühendisliği" href="http://tr.wikipedia.org/wiki/Yaz%C4%B1l%C4%B1m_m%C3%BChendisli%C4%9Fi">yazılım mühendisliği</a>&#8216;nde kullanılan bir &#8220;<a title="Mimari desen" href="http://tr.wikipedia.org/wiki/Mimari_desen">mimari desen</a>&#8220;dir. Kullanıcıya yüklü miktarda verinin sunulduğu karmaşık uygulamalarda veri ve gösterimin soyutlanması esasına dayanır. Böylece veriler (model) ve kullanıcı arayüzü (view) birbirini etkilemeden düzenlenebilir. Model-view-controller, bunu controller adı verilen ara bileşenle, veri gösterimi ve kullanıcı etkileşiminden, veri erişimi ve iş mantığını çıkarma suretiyle çözmektedir.<br />
<a href="http://tr.wikipedia.org/wiki/Model-view-controller"><em><br />
</em>Model-view-controller - <em>Vikipedi</em></a></p></blockquote>
<p>MVC kavramını ilk duyduğumda biraz araştırdım ve ne gerek var gibi bir cümle kurdum. Hem tasarımımı yaparım hem de kodlarımı yazarım aynı sayfada dedim. Kaldı ki bu dediğimde kendi açımdan çok zor değil. Gayet rahat bir şekilde yapabiliyorum. Ancak MVC ile ilk proje geliştirdiğimde gerçekten ne kadar rahat olduğunu gördüm.</p>
<p>Biraz detaya gireyim; MVC denilen kavram üç temel olaydan oluşuyor.</p>
<p><strong>Model:</strong> Veritabanı ile bağlantı işlemleri burada yapılıyor.<br />
<strong>View:</strong> Sitenin tasarımı controllerdan alınan verilerle view sayfalarında yapılıyor.<br />
<strong>Controller:</strong> Bir nevi model ile view arasında köprü görevi görüyor.</p>
<blockquote><dl>
<dt>M (Model)</dt>
<dd>M (Model), İş Mantığını ve veri işleme süreçlerini yürütür. C (Controller) tarafından gönderilen emirlere göre hareket eder. Bilgi işleme sürecinden sonra veriyi C&#8217;ye, diğer modellere veya doğrudan V (View)&#8217;ye gönderir.</dd>
</dl>
<dl>
<dt>V (View)</dt>
<dd>V (View) son kullanıcıya gösterilecek olan verinin sunumu ile ilgilenir. V, bu bilgiyi C veya M&#8217;den alır, aynı zamanda son kullanıcıdan gelen talepleri C&#8217;ye iletir.</dd>
</dl>
<dl>
<dt>C (Controller)</dt>
<dd>C ise sistemin ana kısmıdır. Gelen talepleri kontrol eder ve sistemin diğer elemanlarının (M,V) bilgiyi uygun şekilde alıp, göndermelerini sağlar.</dd>
</dl>
<p><a href="http://tr.wikipedia.org/wiki/Model-view-controller">Model-view-controller - Vikipedi</a></p></blockquote>
<p>Böyle söyleyince bu tanımların çok havada kaldığını tahmin edebiliyorum. O zaman çok fazla kod kullanmadan basit bir sistem yazalım. <span id="more-792"></span></p>
<p>Şöyleki bu basit bir forum sistemi olsun. Kategoriler olsun, kategoriye göre konu listelensin, yeni konu eklensin ve konu görüntülensin.</p>
<p><em>Codeigniter MVC Framework baz alınarak kodlar yazılacaktır.</em></p>
<p>Normal şartlarda bu istekler 3 sayfada yapılacaktı.</p>
<ul>
<li>kategori.php // Tüm konuların ve kategorideki konuların listeleneceği sayfa</li>
<li>konu.php // Tek bir konunun görüntüleneceği sayfa</li>
<li>konuekle.php // Yeni bir konunun ekleneceği sayfa</li>
</ul>
<p>O zaman controller sayfamızla başlamamız gerekiyor. Kodların hemen hepsini yazacağım ve içerisinde açıklama satırları bulunacak.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

	// Forum sayfamız ilk açıldığında bu fonksiyon gerçekleştirilecek
	function index()
	{
		//Kategori fonksiyonunu parametresiz çağırıyoruz. Bu demek oluyor ki  kategori bağımsız tüm konuları listele
		$this-&gt;kategori();
	}

	//Bu fonksiyonda konular listelenecek
	//Eğer parametre ile çağrılırsa o kategoriye ait konular listelenecek
	function kategori($id = null)
	{
		if(isset($id))
		{
			// model sayfamızda tanımladığımız fonksiyon çağrılıyor.
			// Aslında genel olarak model ile controller ı aynı anda kodluyorum ancak burda tanıtma yoluna gittiğim için çok fazla değinmeyeceğim
			$posts = $this-&gt;forum_model-&gt;get_posts($id);
		}
		else
		{
			$posts = $this-&gt;forum_model-&gt;get_posts(null);
		}

		// posts değişkenimiz bir array içerisine alınıyor.
		// View de görünmesini istediğimiz tüm veritabanı öğelerini
		// bir dizi yardımıyla view dosyasına göndereceğiz
		$data  = array(
		'posts' =&gt; $posts
		);

		// forum_kategori view dosyamızı yüklüyoruz ve içerisine $data değişkenini gönderiyoruz
		// İşte bu kadar basit
		$this-&gt;load-&gt;view('forum_kategori',$data);

	}

	// Bu fonksiyon konu eklememizi sağlayacak
	function konuekle()
	{
		// aynı tek sayfa kodlamarında olduğu gibi burada da veri ekleme için aynı sistem kullanılıyor.
		// eğer post edilmiş veri varsa şu satırı yap
		if ($this-&gt;input-&gt;post('submit'))
		{
			// formdaki verileri alıyoruz
			$baslik = $this-&gt;input-&gt;post('baslik'); // $_POST['baslik'] ile eşdeğer
			$icerik = $this-&gt;input-&gt;post('icerik');
			$kategori = $this-&gt;input-&gt;post('kategori');

			// modeldeki insertpost fonksiyonunu parametrelerle çağırıyoruz
			// modelden veritabanına bilgi eklendikten sonra insertid return ediliyor
			$konuid = $this-&gt;forum_model-&gt;insertpost($baslik,$icerik,$kategori);

			// konu eklendikten sonra o konunun görünmesi için konu fonksiyonumuzu çağırıyoruz.
			$this-&gt;konu($konuid);
		}
		else
		{
			//eğer herhangi veri post edilmemişse konuekle view ini çağırıyoruz
			$this-&gt;load-&gt;view('forum_konuekle');
		}

	}

	// bu fonksiyonumuz ile konuyu göstereceğiz
	function konu($id)
	{
		// yine view de gösterilmek üzere değişkenimizi data dizisi içine atıyoruz.
		$data = array(
		// burada modelden get_single_post ile belirtilen id deki konuyu aldık
		'konu' =&gt; $this-&gt;forum_model-&gt;get_single_post($id)
		);

		// view dosyamızı verilerimizle birlikte çağırdık
		$this-&gt;load-&gt;view('forum_konu',$data);
	}
</pre>
<p>Benim yaptığım sistemde konulara cevap yazma, dosya yükleme gibi özellikler de bulunuyor ancak ufak bir örnek olması için birkaç kısmı çıkarttım.</p>
<p>Controller dosyamızı oluşturduktan sonra model dosyamıza geçelim.</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
	// bu fonksiyon controllerdan hatırlayacağınız üzere tek bir konuyu göstermemize yarıyor.
	function get_single_post($forumid)
	{
		// sql sorgumuzu oluşturup veritabanına sorgulatıyoruz
		$sql = &quot;select * from forum_konular id= &quot;.$forumid;
		$query = $this-&gt;db-&gt;query($sql);

		// her bir verimizi diziye aktarıyoruz. Tabi burada tek bir konu olacağı için
		// tek bir veri olarak, aslında gereksiz bir işlem yapmışım, şimdi farkettim <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
		$i=0;
		foreach ($query-&gt;result() as $row)
		{

			$gonder[$i]['id'] = $row-&gt;id;
			$gonder[$i]['baslik'] = $row-&gt;baslik;
			$gonder[$i]['icerik'] = $row-&gt;icerik;
			// yine model içinde kullandığımız bir fonksiyon ile kategori ismini de diziye aktarıp return ediyoruz
			$gonder[$i]['kategori'] = $this-&gt;_get_cat_name($row-&gt;kategori);
			$gonder[$i]['kategoriid'] = $row-&gt;kategori;
			$i++;
		}

		if (isset($gonder))
		{
		return $gonder;
		}

	}

	// bir kategoriye ait konuları veya tüm konuları listeliyoruz
	function get_posts($kategori = null)
	{
		//sql sorgumuzu oluşturuyoruz
		$sql = &quot;select * from forum_konular&quot;;

		// kategori id si parametre olarak gönderilmişse sql sorgusuna ekliyoruz
		if ($kategori != null)
		{
			$sql .= &quot; where kategori = &quot;.$kategori;
		}

		//sorgumuzu çalıştırıyoruz
		$query = $this-&gt;db-&gt;query($sql);

		// burada tüm verileri diziye aktarıyoruz get_single_post fonksiyonunda olduğu gibi
		$i=0;
		foreach ($query-&gt;result() as $row)
		{

			$gonder[$i]['id'] = $row-&gt;id;
			$gonder[$i]['baslik'] = $row-&gt;baslik;
			$gonder[$i]['icerik'] = $row-&gt;icerik;
			$gonder[$i]['kategori'] = $this-&gt;_get_cat_name($row-&gt;kategori);
			$gonder[$i]['kategoriid'] = $row-&gt;kategori;

			$i++;
		}

		if (isset($gonder))
		{
		return $gonder;
		}
	}

	// konu ekleme fonksiyonumuz
	function insertpost($baslik,$icerik,$kategori)
	{

		// burada standart veri insert etme işlemini gerçekleştireceğiz
		// ancak codeigniter in sunduğu özellik sayesinde ben böyle bir yöntem kullanmışım.
		// aslında yapılan işlem bildiğimiz Insert Into <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
			$data = array(
               'baslik' =&gt; $baslik,
               'icerik' =&gt; $icerik,
               'kategori' =&gt; $kategori,
            );

		$this-&gt;db-&gt;insert('forum_konular', $data);

		// konumuzu veritabanına ekledik ve kayıt id sini return ediyoruz.
		// hatırlayacaksınız konu eklendikten hemen sonra görüntülenmesi için
		return $this-&gt;db-&gt;insert_id();

	}

	// bu fonksiyon sadece model içinde kullanılıyor. View dosyasına kategori id si ile birlikte adını da göndermek için
	function _get_cat_name($id)
	{
		$query = $this-&gt;db-&gt;query('SELECT * FROM forum_kategori where id = '.$id.' limit 1');

		foreach ($query-&gt;result_array() as $row)
		{
			return $row['kategoriadi'];
		}
	}
</pre>
<p>Controller dosyamızdaki veritabanı işlemlerini gerçekleştiren fonksiyonları içeren model dosyamızı da oluşturduk. Şimdi sıra geldi view dosyalarımıza bakmaya. Bunun için sadece kategori dosyasını göstereceğim.</p>
<pre class="brush: php; title: ; notranslate">
	&lt;table&gt;
		&lt;tr&gt;
			&lt;td colspan=&quot;5&quot; class=&quot;pagination&quot;&gt;
				&lt;b&gt;&lt;a href=&quot;forum/konuekle&quot; class=&quot;curved&quot;&gt;Yeni Konu Ekle&lt;/a&gt;&lt;/b&gt;
			&lt;/td&gt;
		&lt;/tr&gt;

		&lt;tr&gt;
			&lt;th&gt;Başlık&lt;/th&gt;
			&lt;th&gt;Kategori&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tbody&gt;
		&lt;?php
		if (isset($posts)):
		foreach($posts as $item):?&gt;
			&lt;tr&gt;
				&lt;td&gt;&lt;a href=&quot;forum/konu/&lt;?php echo $item['id']?&gt;&quot;&gt;&lt;?php echo $item['baslik'];?&gt;&lt;/a&gt;&lt;/td&gt;
				&lt;td&gt;&lt;a href=&quot;forum/kategori/&lt;?php echo $item['kategoriid']?&gt;&quot;&gt;&lt;?php echo $item['kategori'];?&gt;&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
		&lt;?php endforeach;
		endif;?&gt;
		&lt;/tbody&gt;
	&lt;/table&gt;
</pre>
<p>Controller dosyasında kategori fonksiyonunda konuları $posts değişkenine aktarıp view e göndermiştik. İşte burada o değişkeni kullanarak bir döngü oluşturuyoruz ve tüm verileri listeliyoruz.</p>
<hr />İşte MVC dediğimiz olay bu kadar basit. Çok mu karışık geldi? Olabilir, bana da karışık gelmişti zamanında <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ancak yeni birşeyler öğrenmenin en iyi yolu onu bir projede kullanmaktır. Siz de bir projenizi MVC yapısı sunan bir framework ile geliştirirseniz emin olun çok rahat öğreneceksiniz. Ve ne kadar kolay, kod okumasını kolaylaştıran, spaghetti code kullanımını azaltan bir yapı olduğunu göreceksiniz.</p>
<p>Ben MVC yapısını Esogü Bilişim Günleri 2011 için geliştirdiğim bir projede öğrendim ve bundan sonra ufak çaplı olmayan tüm projelerimde MVC kullanacağımı düşünmekteyim.</p>
<p>Bu arada bir tüyo verdim sanırsam, Bilişim Günleri 2011 çalışmaları başladı <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Yakın bir zamanda çalışmaların başlamasıyla ilgili de bir blog girdisi düşmek istiyorum bloguma.</p>
<p>Umarım bu yazdıklarım yararlı olmuştur, yardımcı olmuştur. Yazdıklarımın yararı dokunacak bir kişi bile çıksa mutlu olurum. Sanırsam uzun süre sonra başladığım bir yazıyı bitirdim ve bunun mutluluğunu yaşıyorum şu an <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bir başka yazıda görüşmek üzere</p>
<p><strong>Bilgilendirebilecek forum konuları:</strong><br />
<a id="thread_title_98895" href="http://forum.ceviz.net/framework-mvc/98895-mvc-nedir-mvcnin-avantajlari-nelerdir.html">MVC Nedir? MVC&#8217;nin avantajları nelerdir?</a><br />
<a id="thread_title_99157" href="http://forum.ceviz.net/framework-mvc/99157-framework-nedir-avantajlari-nelerdir.html">Framework Nedir? Avantajları Nelerdir?</a><br />
<a id="thread_title_91351" href="http://forum.ceviz.net/framework-mvc/91351-framework-ve-mvc-nedir-neden-kullanilir.html">Framework ve MVC nedir? Neden Kullanılır?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/12/27/mvc-yapisinin-onemi/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>TBDGenç Algoritma Sorusu 8: Yalancılar</title>
		<link>http://www.guvenatbakan.net/2010/11/28/tbdgenc-algoritma-sorusu-8-yalancilar/</link>
		<comments>http://www.guvenatbakan.net/2010/11/28/tbdgenc-algoritma-sorusu-8-yalancilar/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 23:41:20 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[c++ türkçe karakter kontrolü]]></category>
		<category><![CDATA[tbdgenc]]></category>
		<category><![CDATA[tbdgenc algoritma sorusu]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=767</guid>
		<description><![CDATA[Geçen ayki sorunun çözümünü gecikmeli de olsa paylaşıyorum. Soruya ulaşmak için tıklayın.
Çözümü görmek için yazının devamına bakın.

]]></description>
			<content:encoded><![CDATA[<p>Geçen ayki sorunun çözümünü gecikmeli de olsa paylaşıyorum. Soruya ulaşmak için <a href="http://www.tbdgenc.com/soru/soru8.html" target="_blank">tıklayın</a>.</p>
<p>Çözümü görmek için yazının devamına bakın.<br />
<span id="more-767"></span></p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
#include &lt;string.h&gt;

using namespace std;

int turkcekontrol(char kelime[100])
{
	int sonuc=0;
	unsigned int i;
	unsigned int uzunluk = strlen(kelime);
	for(i=0;i&lt;uzunluk;i++)
	{
		if(!((kelime[i] &gt;= 95 &amp;&amp; kelime[i] &lt;= 122) || (kelime[i] &gt;= 65 &amp;&amp; kelime[i] &lt;= 90 )) )
		{
		sonuc = 1;
		}
	}

	if (sonuc==1)
		return 1;
	else
		return 0;
}

int main()
{
	int k,n,i,m,j;
	char * bulunan;
	char * bulunan2;
	char * bulunan3;
	char * boslukvarmi ;

	cout&lt;&lt;&quot;Kasabadaki kisi sayisini girin:&quot;;

	ntekrar:
	cin&gt;&gt;n;
	cin.ignore(256, '\n');

	if (n&lt;1 || n&gt;1000)
	{
	cout&lt;&lt;&quot;Yanlis giris yaptiniz! Kasabadaki kisi sayisini girin:&quot;;
	goto ntekrar;
	}

	int listuzunluk = (n*100)+n+2;

	char name[n][100],kisi[n-1][100],list1[listuzunluk],list2[listuzunluk];

	strcpy(list1,&quot;,&quot;);
	strcpy(list2,&quot;,&quot;);

	for(k=0;k&lt;=n-1;k++)
	{

		nametekrar:
		cout&lt;&lt;endl&lt;&lt;&quot;Kasabadaki &quot;&lt;&lt;k+1&lt;&lt;&quot;. kisiyi girin:&quot;;
		cin.getline(name[k],100);

		boslukvarmi = strstr(name[k],&quot; &quot;);

		if (strlen(name[k])&lt;1 || strlen(name[k])&gt;10)
		{
			cout&lt;&lt;&quot;\nGirdiginiz isim hatali! Maksimum 10 karakter giriniz! \n&quot;;
			goto nametekrar;
		}
		else if (turkcekontrol(name[k])==1)
		{
			cout&lt;&lt;&quot;\nIsimler turkce karakter-bosluk-sayi-ozel karakter iceremez. Lutfen tekrar giriniz! \n&quot;;
			goto nametekrar;
		}

		mtekrar:
		cout&lt;&lt;name[k]&lt;&lt;&quot; kac kisinin ismini vericek:&quot;;
		cin&gt;&gt;m;
		cin.ignore(256, '\n');

		//öyle bi kontrol işte
		if(m+1&gt;n)
		{
			cout&lt;&lt;&quot;Kasabadaki kisi sayisi asildi: Tekrar giris yapin! \n&quot;;
			goto mtekrar;
		}

		if (m!=0)
		{
			for(i=0;i&lt;=m-1;i++)
			{
			kisitekrar:
			cout&lt;&lt;&quot;\t &quot;&lt;&lt;i+1&lt;&lt;&quot;. kisiyi girin: &quot;;
			cin.getline(kisi[i],100);

			if (strlen(kisi[i])&lt;1 || strlen(kisi[i])&gt;10)
			{
				cout&lt;&lt;&quot;\nGirdiginiz isim hatali! Maksimum 10 karakter giriniz! \n&quot;;
				goto kisitekrar;
			}
			else if (turkcekontrol(kisi[i])==1)
			{
				cout&lt;&lt;&quot;\nIsimler turkce karakter-bosluk-sayi-ozel karakter iceremez. Lutfen tekrar giriniz! \n&quot;;
				goto kisitekrar;
			}
				//ilk kayıt için kişiler listelere otomatik yazılıyor
				//söyleyen list1 e
				//söylenenler list2 ye
				if(k==0)
				{
					//söyleyen kişi list1 de tekrar tekrar yazılmasın diye kontrol
					bulunan = strstr(list1,name[k]);
					if (!bulunan)
					{
					strcat (list1,name[k]);
					strcat (list1,&quot;,&quot;);
					}

					strcat (list2,kisi[i]);
					strcat (list2,&quot;,&quot;);
				}
				else
				//dananın kuyruğu kopuyo
				{
					//eğer söyleyen kişi herhangi bir listede varsa
					//söylediği kişiler fişleniyor
					bulunan = strstr(list1,name[k]);
					bulunan2 = strstr(list2,name[k]);
					if (bulunan || bulunan2)
					{
						if(bulunan)
						{
							bulunan3 = strstr(list2,kisi[i]);
							if(!bulunan3)
							{
							strcat (list2,kisi[i]);
							strcat (list2,&quot;,&quot;);
							}
						}
						else if (bulunan2)
						{
							bulunan3 = strstr(list1,kisi[i]);
							if(!bulunan3)
							{
							strcat (list1,kisi[i]);
							strcat (list1,&quot;,&quot;);
							}
						}
					}
					else
					//eğer söyleyen kişi herhangi bi listede yoksa
					//söylediği kişiler içinde herhangi bi listede olan varsa
					//ona göre söyleyen kişi fişlenecek
					{
						bulunan = strstr(list1,kisi[i]);
						bulunan2 = strstr(list2,kisi[i]);
							if (bulunan || bulunan2)
							{
								if(bulunan)
								{
									strcat (list2,name[k]);
									strcat (list2,&quot;,&quot;);
								}
								else if (bulunan2)
								{
									strcat (list1,name[k]);
									strcat (list1,&quot;,&quot;);
								}
								//söyleyeni listeye yazdığımıza göre
								//bu kişiden önceki tüm söylediği kişileri
								//gerekli listeye yazalım
								//tabi bu söylenen kişi ilk kişi değilse
								if(i!=0)
								for(j=0;j&lt;=i-1;j++)
								{
										if(bulunan)
										{
											strcat (list1,kisi[j]);
											strcat (list1,&quot;,&quot;);
										}
										else if (bulunan2)
										{
											strcat (list2,kisi[j]);
											strcat (list2,&quot;,&quot;);
										}
								}
							}
					}
				}//dananın kuyruğu bitiş
			}
		}

	}
	unsigned int l;
	int list1sayi = 0,list2sayi=0;

	for (l=0;l&lt;= strlen(list1);l++)
	{
	if (list1[l] == ',')
	list1sayi++;
	}

	for (l=0;l&lt;= strlen(list2) ;l++)
	{
	if (list2[l] == ',')
	list2sayi++;
	}

	cout&lt;&lt;endl;

	if (list1sayi == 0 &amp;&amp; list2sayi == 0)
	cout&lt;&lt;n&lt;&lt;&quot; 0&quot;;
	else if (list1sayi&gt;list2sayi)
	cout&lt;&lt;list1sayi-1&lt;&lt;&quot; &quot;&lt;&lt;list2sayi-1;
	else if (list2sayi&gt;=list1sayi)
	cout&lt;&lt;list2sayi-1&lt;&lt;&quot; &quot;&lt;&lt;list1sayi-1;

	cout&lt;&lt;endl&lt;&lt;endl;
	return 0;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/11/28/tbdgenc-algoritma-sorusu-8-yalancilar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tic Tac Toe Hakemi &#124; TBDGenç Algoritma Sorusu</title>
		<link>http://www.guvenatbakan.net/2010/10/22/tic-tac-toe-hakemi-tbdgenc-algoritma-sorusu/</link>
		<comments>http://www.guvenatbakan.net/2010/10/22/tic-tac-toe-hakemi-tbdgenc-algoritma-sorusu/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 21:20:53 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[Yazılım]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=740</guid>
		<description><![CDATA[TBD Genç Ankara&#8217;nın her ay düzenlediği ödüllü algoritma yarışmasına Ağustos ayında katılmış, algoritmamım doğru olmasına rağmen çekiliş sonucunda ödülü kazanamamıştım  
http://www.tbdgenc.com/soru/soru6.html
Sonuçlar açıklandıktan sonra algoritmamı burada yayınlamak hiç aklıma gelmemişti. Belki de  [...]]]></description>
			<content:encoded><![CDATA[<p>TBD Genç Ankara&#8217;nın her ay düzenlediği ödüllü algoritma yarışmasına Ağustos ayında katılmış, algoritmamım doğru olmasına rağmen çekiliş sonucunda ödülü kazanamamıştım <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.tbdgenc.com/soru/soru6.html" target="_blank">http://www.tbdgenc.com/soru/soru6.html</a></p>
<p>Sonuçlar açıklandıktan sonra algoritmamı burada yayınlamak hiç aklıma gelmemişti. Belki de baya bi amele usulü olduğu için olabilir, bilmiyorum <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ekim ayının sorusunu çözmeye çalıştığım şu günlerde bu algoritmayı sizlerle paylaşmak geldi aklıma. Buyrun inceleyin, ama amelelik yüzünden acımasızca eleştirmeyin <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<p><span id="more-740"></span><br />
Yaptığım uygulamaya şöyle bir baktım ki ben bile anlamadım <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
using namespace std;

int main()
{
	int oyun[4][4],oyun2[4][4],i,j,g,kazanan,sifirsayisi=0,birsayisi=0,ikisayisi=0;

	for(i=1;i&lt;=3;i++)
	{
		cout&lt;&lt;i&lt;&lt;&quot;. satiri gir:&quot;;
		for(j=1;j&lt;=3;j++)
			{
				cin&gt;&gt;oyun[i][j];
					if (oyun[i][j]==0)
						sifirsayisi+=1;
					else if (oyun[i][j]==1)
						birsayisi+=1;
					else
						ikisayisi+=1;
			}
	}	

	for(i=1;i&lt;=3;i++)
		{
			g=oyun[i][1];
				for(j=1;j&lt;=3;j++)
					{
						if (g!=oyun[i][j])
						{
							kazanan=8;
							break;
						}
						else
						{
							kazanan=oyun[i][j];
						}
					g = oyun[i][j];
					}
			if (kazanan!=8 )
				i=3;
		}

		if(kazanan == 8 ){
		for(j=1;j&lt;=3;j++)
		{
			g=oyun[1][j];
				for(i=1;i&lt;=3;i++)
					{
						if (g!=oyun[i][j])
						{
							kazanan=8;
							break;
						}
						else
						{
							kazanan=oyun[i][j];
						}
					g = oyun[i][j];
					}
			if (kazanan!=8 )
				j=3;
		}
		}//if durum!=8

	// Çaprazlamalar Bakılıyor
	if( (oyun[1][1]==oyun[2][2] &amp;&amp; oyun[2][2]==oyun[3][3]) &amp;&amp; kazanan == 8 )
	{
		if(oyun[1][1] != 0)
		{
			if(oyun[1][1] == 1)
			{
			    kazanan=1;
			}
			else
			{
				kazanan=2;
			}
		}
	}

	if((oyun[1][3]==oyun[2][2] &amp;&amp; oyun[2][2]==oyun[3][1]) &amp;&amp; kazanan == 8 )
	{
		if(oyun[1][3] != 0)
		{
			if(oyun[1][3] == 1)
			{
			    kazanan=1;
			}
			else
			{
				kazanan=2;
			}
		}
	}
	//Çapraz bitiş

	if(sifirsayisi &gt;=2 &amp;&amp; kazanan == 8 ){
		kazanan = 0;
	}
	else if (sifirsayisi == 0 &amp;&amp; kazanan == 8 )
	{
		kazanan = 3;
	}
	else if (sifirsayisi == 1 &amp;&amp; kazanan == 8 )
	{
			if (birsayisi==ikisayisi)
			{
			//sifir olan yere bir koy kontrol et
			//kazanan çıkarsa oyun bitmemiş, kazanan çıkmazsa oyun berabere
				for(i=1;i&lt;=3;i++)
					for(j=1;j&lt;=3;j++)
						{
							if (oyun[i][j]!=0)
								oyun2[i][j]=oyun[i][j];
							else
								oyun2[i][j]=1;
						}

						//yapay sonuç1//
								for(i=1;i&lt;=3;i++)
									{
										g=oyun2[i][1];
											for(j=1;j&lt;=3;j++)
												{
													if (g!=oyun2[i][j])
													{
														kazanan=8;
														break;
													}
													else
													{
														kazanan=oyun2[i][j];
													}
												g = oyun2[i][j];
												}
										if (kazanan!=8 )
											i=3;
									}

									if(kazanan == 8 ){
									for(j=1;j&lt;=3;j++)
									{
										g=oyun2[1][j];
											for(i=1;i&lt;=3;i++)
												{
													if (g!=oyun2[i][j])
													{
														kazanan=8;
														break;
													}
													else
													{
														kazanan=oyun2[i][j];
													}
												g = oyun2[i][j];
												}
										if (kazanan!=8 )
											j=3;
									}
									}//if durum!=8

								// Çaprazlamalar Bakılıyor
								if( (oyun2[1][1]==oyun2[2][2] &amp;&amp; oyun2[2][2]==oyun2[3][3]) &amp;&amp; kazanan == 8 )
								{
									if(oyun2[1][1] != 0)
									{
										if(oyun2[1][1] == 1)
										{
											kazanan=1;
										}
										else
										{
											kazanan=2;
										}
									}
								}

								if((oyun2[1][3]==oyun2[2][2] &amp;&amp; oyun2[2][2]==oyun2[3][1]) &amp;&amp; kazanan == 8 )
								{
									if(oyun2[1][3] != 0)
									{
										if(oyun2[1][3] == 1)
										{
											kazanan=1;
										}
										else
										{
											kazanan=2;
										}
									}
								}
								//Çapraz bitiş
						//yapay sonuç1//

					if(kazanan == 8 )
						kazanan=3;
					else
						kazanan=0;

			}
			else if (birsayisi&gt;ikisayisi)
			{
			//sifir olan yere iki koy kontrol et
			//kazanan çıkarsa oyun bitmemiş, kazanan çıkmazsa oyun berabere
				for(i=1;i&lt;=3;i++)
					for(j=1;j&lt;=3;j++)
						{
							if (oyun[i][j]!=0)
								oyun2[i][j]=oyun[i][j];
							else
								oyun2[i][j]=2;
						}

						//yapay sonuç2//
								for(i=1;i&lt;=3;i++)
									{
										g=oyun2[i][1];
											for(j=1;j&lt;=3;j++)
												{
													if (g!=oyun2[i][j])
													{
														kazanan=8;
														break;
													}
													else
													{
														kazanan=oyun2[i][j];
													}
												g = oyun2[i][j];
												}
										if (kazanan!=8 )
											i=3;
									}

									if(kazanan == 8 ){
									for(j=1;j&lt;=3;j++)
									{
										g=oyun2[1][j];
											for(i=1;i&lt;=3;i++)
												{
													if (g!=oyun2[i][j])
													{
														kazanan=8;
														break;
													}
													else
													{
														kazanan=oyun2[i][j];
													}
												g = oyun2[i][j];
												}
										if (kazanan!=8 )
											j=3;
									}
									}//if durum!=8

								// Çaprazlamalar Bakılıyor
								if( (oyun2[1][1]==oyun2[2][2] &amp;&amp; oyun2[2][2]==oyun2[3][3]) &amp;&amp; kazanan == 8 )
								{
									if(oyun2[1][1] != 0)
									{
										if(oyun2[1][1] == 1)
										{
											kazanan=1;
										}
										else
										{
											kazanan=2;
										}
									}
								}

								if((oyun2[1][3]==oyun2[2][2] &amp;&amp; oyun2[2][2]==oyun2[3][1]) &amp;&amp; kazanan == 8 )
								{
									if(oyun2[1][3] != 0)
									{
										if(oyun2[1][3] == 1)
										{
											kazanan=1;
										}
										else
										{
											kazanan=2;
										}
									}
								}
								//Çapraz bitiş
								//yapay sonuç2//

				if(kazanan == 8 )
						kazanan=3;
					else
						kazanan=0;
			}
	}

	cout&lt;&lt;endl;

	for(i=1;i&lt;=3;i++)
	{
		for(j=1;j&lt;=3;j++)
		{
			cout&lt;&lt;oyun[i][j]&lt;&lt;&quot; &quot;;
		}
		cout&lt;&lt;endl;
	}
	cout&lt;&lt;endl;
	for(i=1;i&lt;=3;i++)
	{
		for(j=1;j&lt;=3;j++)
		{
			if(oyun[i][j]==0)
			cout&lt;&lt;&quot;  &quot;;
			else if (oyun[i][j]==1)
			cout&lt;&lt;&quot;X &quot;;
			else if (oyun[i][j]==2)
			cout&lt;&lt;&quot;O &quot;;
		}
		cout&lt;&lt;endl;
	}

	cout&lt;&lt;endl&lt;&lt;&quot;Sonuç:&quot;&lt;&lt;kazanan&lt;&lt;endl&lt;&lt;endl;

	return 0;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/10/22/tic-tac-toe-hakemi-tbdgenc-algoritma-sorusu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Smarty ile çalışmak</title>
		<link>http://www.guvenatbakan.net/2010/09/21/smarty-ile-calismak/</link>
		<comments>http://www.guvenatbakan.net/2010/09/21/smarty-ile-calismak/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 20:37:05 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[smarty gerekli mi]]></category>
		<category><![CDATA[smarty ile tema yapımı]]></category>
		<category><![CDATA[smarty neden gerekli]]></category>
		<category><![CDATA[smarty nedir]]></category>
		<category><![CDATA[smarty template]]></category>
		<category><![CDATA[smartynin katkıları]]></category>
		<category><![CDATA[smartynin yararları]]></category>
		<category><![CDATA[smartynin zararları]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=703</guid>
		<description><![CDATA[Bu yazımda sizlere yaz tatilimde yani yaklaşık 2 haftalık bir sürede kullandığım Smarty&#8217;nin olumlu yanlarından bahsetmek istiyorum. Aslında yazı başlığını bir framework ile çalışmak olarak da değiştirebiliriz.
Öncelikle Smarty&#8217;nin ne olduğundan biraz bahsedeyim. Smarty, gayet esnek bir template  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.guvenatbakan.net/wp-content/uploads/smarty-logo-orange.gif"><img class="alignleft size-full wp-image-705" title="smarty-logo-orange" src="http://www.guvenatbakan.net/wp-content/uploads/smarty-logo-orange.gif" alt="" width="250" height="64" /></a>Bu yazımda sizlere yaz tatilimde yani yaklaşık 2 haftalık bir sürede kullandığım Smarty&#8217;nin olumlu yanlarından bahsetmek istiyorum. Aslında yazı başlığını bir framework ile çalışmak olarak da değiştirebiliriz.</p>
<p>Öncelikle Smarty&#8217;nin ne olduğundan biraz bahsedeyim. Smarty, gayet esnek bir template çatısıdır. PHP kodları ile html kodlarını birbirinden ayırır. Tabii ki bu ayırma işlemi &#8220;photoshoptan tasarımı htmle dökeyim smartye atayım site canavar gibi çalışsın&#8221; şeklinde değil. PHP kodlarınızı oluşturduktan sonra elde ettiğiniz değerleri Smartye gönderiyorsunuz. Html kodları içine PHP kodları değil de Smartye gönderilmiş bu değerlerin Smarty dilinde htmlin içine yazıyorsunuz. <span id="more-703"></span></p>
<p>Heey! Smarty dili dediysek &#8220;işimiz gücümüz yok yeni bir dil mi öğreneceğiz yahu&#8221; diyerekten korkmayın hemen. Herşey çok basit. Bir dökümantasyonu var ki bir kere gözden geçirdiğinizde dilin tüm yapısını öğrenebilirsiniz hemen. Bak yine dil dedim <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Yok öyle birşey. Bir başkasının hazırladığı bir sınıf kullandığınızda yine o sınıfın nasıl kullanıldığını öğrenmeniz gerekiyor. Forumlarda göreceğiniz Smarty dili denen o şey bir sınıfın kullanılışından başka birşey değil bence. Dezavantajı çook gelişmiş olması. Peki avantajı nedir derseniz tasarımcınızın yazılım dili bilmesine gerek yok. Siz Smartye değerleri gönderirsiniz o da onları yazdırır bu kadar basit <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ne gereği var diyebilirsiniz belki. Öncelikle ne gereği olduğuna sizin karar vermeniz gerekiyor. Hemen geçtiğimiz iki haftada yaşadığım tecrübelerime başvurayım ve sizlere aktarayım.</p>
<p>Her siteye uyabilecek dinamik bir yönetim paneli yaptım. E tabi bunun için dinamik bir önyüz yapmak gerekiyordu. Smartyi daha duymuştum hemen incelemeye aldım. Başta ceviz.net forumlarını kurcaladım. Daha sonra blog yazıları takip ettim, ingilizce incelemeler okudum. Burada İngilizceninde önemine dikkat çekiyorum <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' />  Ardından Smartyi bir denemeye karar verdim. Başlarda biraz zorlandım. Ama bu zorlanma çok uzun sürmedi <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Html&#8217;i verilmiş bir önyüzün Php kodlamaları ve smarty entegrasyonu 5 günde bitti. Bu zamanın bir çoğunu ince ayarlara ve php kodlamasına harcadım. Bir sonraki site kaç günde bitti dersiniz? 1 gün <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Normal php+html kodlama yapsaydım kaç günde biterdi? Tahminen yine 1 günde <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ama olay ne kadar sürede bitirildiğinde değil aslında çok fazla. Biraz daha temiz kod yazmayla ilgili. Ben kendimi biliyorum, eğer sadece php+html yazsaydım php kodlarımın içinde echo ile html kodları verecektim <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Buda okunurluğu zorlaştırıcaktı. Bu şekilde gerçekten daha iyi iş yaptığımı hissettim, belki de o kadar kullandım bi işe yaramamış olamaz psikolojisiyle söylüyorum bunu, bilmiyorum <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Sanırsam Smarty&#8217;nin gerekliliğinden daha çok MVC yapısının gerekliliğine fazlasıyla inanmaya başladım.</p>
<p>Bu yazıyı yazarken bir yandan internette geziniyorum, bir yandan arkadaşlarımla sohbet ediyorum bir yandan da yatıyorum <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Dolayısıyla yazım yanlışları yapmış olabilirim. Konuyu çok iyi bağlayamamış olabilirim, sizlere çok iyi aktaramamış olabilirim. Bu yazının kötü olabilitesinden dolayı sizlerden özür diliyorum. (Aman ha sanki diğerleri çok iyiydi filan demeyin <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> )</p>
<p>Smarty ile ilgili son söyleyeceğim şey; çok fazla söylenenlere aldırmayın en azından bir deneyin. Çok fazla bir kaybınız kesinlikle olmaz.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/09/21/smarty-ile-calismak/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Proje Detayları</title>
		<link>http://www.guvenatbakan.net/2010/08/13/proje-detaylari/</link>
		<comments>http://www.guvenatbakan.net/2010/08/13/proje-detaylari/#comments</comments>
		<pubDate>Fri, 13 Aug 2010 00:06:14 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[Yazılım]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=662</guid>
		<description><![CDATA[Yeni bir projeye başlarken çok detaylı düşünüyorum. Kafamda algoritmalar kuruyorum, kağıda döküyorum bunları unutmayayım diye.
&#8220;Şu özellik olsun, ama şurası şöyle burası böyle olsun. Başka bir sitede kullanmak istediğim zaman kolayca kullanabileyim. Çok gelişmiş olsun, hayvan gibi bi sistem olsun.  [...]]]></description>
			<content:encoded><![CDATA[<p>Yeni bir projeye başlarken çok detaylı düşünüyorum. Kafamda algoritmalar kuruyorum, kağıda döküyorum bunları unutmayayım diye.</p>
<p>&#8220;Şu özellik olsun, ama şurası şöyle burası böyle olsun. Başka bir sitede kullanmak istediğim zaman kolayca kullanabileyim. Çok gelişmiş olsun, hayvan gibi bi sistem olsun. Algoritması hemen hemen şöyle olsun&#8221; gibi düşüncelerle çıkıyorum yola. Fakat daha sonra koda dökerken bunları, sıkılıyorum bunalıyorum. Neredeyse bir çok projeyi bu şekilde yarıda bıraktım.</p>
<p>Ama geçenlerde okuduğum bir <a href="http://ferruh.mavituna.com/minimum-urun-oku/" target="_blank">yazı</a> bir proje/ürün ilk aşamada nasıl olmalı konusunda yardımcı oldu bana.</p>
<p>Bir çok fikir olabilir kafamızda fakat şu soruyu sorduğumuzda sanırsam bir çoğu çöpe gidiyor. <strong>Bu özellik ilk etapta kesinlikle olmalı mı?</strong> Yazıda da belirtildiği gibi birçok fikrimi rafa kaldırdım. Hemen ufak bir örnek vereyim.</p>
<p>Bir yönetim paneli yapıyorsunuz ve sınırsız sayıda yönetici ekleyebilme özelliği yönetim panelinin olmazsa olmazlarından bence. Ancak yöneticilere roller verebilme (a bölümün görsün, b bölümünü göremesin) ilk etapta gerekli değil. Tabi bir müşterinin istekleri doğrultusunda değil de birçok projede kullanmak istediğiniz birşey yapıyorsanız.</p>
<p>O zaman ne yapmalı?</p>
<ul>
<li>Fikirleri belirledikten sonra bir kez daha bir eleme yapmalı. Bazı fikirler atılmalı, bazıları sonra kullanılmak üzere rafa kaldırılmalı.</li>
<li>Daha sonra yeni özellikler ekleyebilmek için spagetti kod minimuma indirilmeli.</li>
</ul>
<p>İşte bu adımları doğru gerçekleştirdikten sonra ilk aşamada gayet başarılı bir ürün ortaya çıkacaktır.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/08/13/proje-detaylari/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mssql2Mysql script bilgileri</title>
		<link>http://www.guvenatbakan.net/2010/03/15/mssql2mysql-script-bilgileri/</link>
		<comments>http://www.guvenatbakan.net/2010/03/15/mssql2mysql-script-bilgileri/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 18:12:24 +0000</pubDate>
		<dc:creator>Güven Atbakan</dc:creator>
				<category><![CDATA[ASP]]></category>
		<category><![CDATA[Yazılım]]></category>
		<category><![CDATA[mssql to mysql]]></category>
		<category><![CDATA[mssql2mysql]]></category>

		<guid isPermaLink="false">http://www.guvenatbakan.net/?p=460</guid>
		<description><![CDATA[Bu yazımda sizlere scriptin çalışma mantığından  bahsedeceğim ve kod açıklamalarını yapacağım.
Öncelikle kullanıcıdan kaynak (Mssql) sunucu ve hedef (Mysql) sunucunun bilgilerini bir form yardımıyla alıyoruz. Aynı işlemi dosya düzenleme yoluyla da yapabilirlerdi ancak bu şekilde daha kolay  [...]]]></description>
			<content:encoded><![CDATA[<p>Bu yazımda sizlere scriptin çalışma mantığından  bahsedeceğim ve kod açıklamalarını yapacağım.<span id="more-460"></span></p>
<p>Öncelikle kullanıcıdan kaynak (Mssql) sunucu ve hedef (Mysql) sunucunun bilgilerini bir form yardımıyla alıyoruz. Aynı işlemi dosya düzenleme yoluyla da yapabilirlerdi ancak bu şekilde daha kolay olacağını düşündüm.</p>
<p>Akabinde bağlantı cümleciklerini oluşturuyorum.</p>
<p>Bir sonraki aşama ise kaynak veritabanındaki tüm tabloları listelemek oluyor.</p>
<blockquote><p>tablolar = &#8220;&#8221;</p>
<p>set rs = mssqldb.execute(&#8220;SELECT * FROM INFORMATION_SCHEMA.TABLES&#8221;)<br />
do until rs.eof<br />
&#8216;Eğer tablo sistem tablosu değilse döngüde kullanmak için tablolar değişkenine virgül yardımıyla sıralıyoruz.<br />
if left(rs(&#8220;table_name&#8221;),3)&lt;&gt;&#8221;sys&#8221; then<br />
tablolar = tablolar&amp;rs(&#8220;table_name&#8221;)&amp;&#8221;,&#8221;<br />
end if<br />
rs.movenext<br />
loop<br />
rs.close<br />
set rs = nothing</p></blockquote>
<p>Tablolarımızı yazdırdıktan sonra tüm tabloları işleme sokabilmek için for döngüsüne alıyoruz.</p>
<blockquote><p>tablox = split(tablolar,&#8221;,&#8221;)<br />
for k = 0 to Ubound(tablox)-1<br />
tabloismi = tablox(k)</p>
<p>&#8216;işlemler burada yapılıyor.</p>
<p>next</p></blockquote>
<p>Kodların anlatımında dıştan içe yöntem kullandım. Kabuk kabuk anlatıyorum. Bu nedenle yukarıdaki kodda döngüyü başlattım ve bitirdim.</p>
<p>Şimdi tablonun sütun sayısına göre bir döngü oluşturacağız. Bu döngü içinde Mysql&#8217;de tablomuzu ve sütunlarını oluşturacağız.</p>
<blockquote><p>Set ks = Server.CreateObject(&#8220;ADODB.RecordSet&#8221;)<br />
ks.open &#8220;select * from &#8220;&amp;tabloismi&amp;&#8221;",mssqldb,3,3<br />
sayif = ks.fields.count</p>
<p>For i = 0 to sayif-1</p>
<p>Next</p></blockquote>
<p>Bu noktada birkaç bilgilendirme yapayım. Bu döngü içerisinde sütunun ismini, veri tipini ve gerekirse uzunluğunu alacağız.</p>
<p>Sütunun ismi:</p>
<blockquote><p>ks.fields(i).Name</p></blockquote>
<p>Sütunun tipi:</p>
<blockquote><p>ks.fields(i).Type</p></blockquote>
<p>Sütunun uzunluğu:</p>
<blockquote><p>ks.fields(i).DefinedSize</p></blockquote>
<p>Sütun tipleri sayısal değer olarak geliyor. Bu sayısal değerleri birazdan göreceğiniz ifli koşullarla sql cümleciğinde kullanılabilecek tipe getireceğiz.<br />
Sütun uzunluğu ise bir çok sütun tipinde kullanılmıyor. Ama kullanılıyor da olabilir çünkü tam anlamıyla hakim olduğumu söyleyemem.<br />
Aynı şekilde bu üç değerin dışında birçok değer var, fakat bir çoğu için gerekli mi değil mi, nerede kullanılıyor kullanılmıyor bilmediğimden bu scripte eklemedim.</p>
<blockquote><p>ty = ks.fields(i).Type<br />
uzunluk = ks.fields(i).DefinedSize<br />
ty = cint(ty)<br />
if ty = 3 then<br />
nty = &#8220;int&#8221;<br />
nuz = &#8220;&#8221;<br />
elseif ty = 129 then<br />
nty = &#8220;char&#8221;<br />
nuz = &#8220;(&#8220;&amp;uzunluk&amp;&#8221;)&#8221;<br />
elseif ty = 202 then<br />
nty = &#8220;text&#8221; &#8216;nvarchar<br />
nuz = &#8220;&#8221;<br />
elseif ty = 11 then<br />
&#8216;nty = &#8220;ENUM(&#8220;&#8221;1&#8243;&#8221;, &#8220;&#8221;0&#8243;&#8221;)&#8221;<br />
nty = &#8220;tinyint&#8221;<br />
nuz = (&#8220;1&#8243;)<br />
elseif ty = 135 then<br />
nty = &#8220;datetime&#8221;<br />
nuz = &#8220;&#8221;<br />
elseif ty = 131 then<br />
nty = &#8220;int&#8221;&#8216;numeric<br />
nuz = &#8220;&#8221;<br />
elseif ty = 128 then<br />
nty = &#8220;binary&#8221;<br />
nuz = &#8220;(&#8220;&amp;uzunluk&amp;&#8221;)&#8221;<br />
else<br />
nty = &#8220;text&#8221;<br />
nuz = &#8220;&#8221;<br />
end if</p></blockquote>
<p>Yukarıda verdiğim listeyi kısaltarak ekledim. Genel olarak mantığı anlamışsınızdır.</p>
<p><em>Veri tipleri ile ilgili bilgilendirmeler:</em><br />
Mssql&#8217;deki BIT yani True/False veri tipini tinyint(1) olarak kaydediyorum. Normalde Mysql&#8217;de bu işlem ENUM ile yapılıyor. Fakat ENUM&#8217;a çevirdiğimiz zaman ASP dosyalarımızdaki bağlantı cümleciklerinde köklü değişiklikler yapmamız gerekecek.</p>
<p>Normal bağlantı cümleciğimiz şu şekilde:</p>
<blockquote><p>select * from tablo where aktif = 1</p></blockquote>
<p>Bu bize aktif sütunu True olan kayıtları getirir. ENUM tipine çevirdiğimiz zaman aktif = &#8217;1&#8242; şeklinde kullanmamız gerekiyor.<br />
Eğer bağlantı cümleciklerinde zaten bu şekilde kullandıysanız veya sitenizi PHP ile yeniden kodlayacaksanız ENUM tipine geçmenizi öneririm.<br />
Diğer değişikliklerse Numeric, nvarchar tiplerinde oldu. Nvarchar text olarak kaydedildi, numeric ise int olarak. Neden derseniz, kendi veritabanımda denedim bu şekilde başarıya ulaşamadım <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Geriye kalan kodlarımıza devam edebiliriz. Şimdi tablomuzu ve sütunlarımızı oluşturacağız. Bununla ilgili bilgilendirmeleri kodun içinde yapacağım.</p>
<blockquote><p>if i = 0 then<br />
&#8216;i=0 durumunda birinci sütunda oluyoruz. Ve tablomuzu ilk sütunuyla birlikte oluşturuyoruz.<br />
&#8216;Bu scripti birden fazla denemeyle oluşturduğum için tek tek Phpmyadminden tablo silmek ile uğraşmadım. Bu kod ile Mysql&#8217;de varolan tabloyu sildim. Sonra tekrar oluşturdum.<br />
mysqldb.execute(&#8220;DROP TABLE IF EXISTS `&#8221;&amp;tabloismi&amp;&#8221;` &#8220;)<br />
&#8216;Eğer ki ilk sütunumuz sayısal bir değerse %90 ihtimalle otomatik artan bir değerdir. Belki otomatik artan değer olup olmadığını kodlarla bulabiliriz ama ben bilmiyorum henüz <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
if ty = 3 or ty = 17 or ty = 20 or ty = 5 or ty = 4 then<br />
mysqldb.Execute(&#8220;Create Table &#8220;&amp;tabloismi&amp;&#8221;  (&#8220;&amp;ks.fields(i).name&amp;&#8221; &#8220;&amp;nty&amp;nuz&amp;&#8221; NOT NULL auto_increment , PRIMARY KEY  (`&#8221;&amp;ks.fields(i).name&amp;&#8221;`))&#8221;)<br />
else<br />
&#8216;Eğer ilk sütunumuz sayısal değilse otomatik artan olmasına imkan yoktur.<br />
mysqldb.Execute(&#8220;Create Table `&#8221;&amp;tabloismi&amp;&#8221;`  (&#8220;&amp;ks.fields(i).name&amp;&#8221; &#8220;&amp;nty&amp;nuz&amp;&#8221;) &#8221; )<br />
end if</p>
<p>else<br />
&#8216;i=0 olmadığı yani ilk sütun olmayan durumlarda Alter Table komutuyla tablomuza sütunları tek tek ekliyoruz.<br />
mysqldb.Execute(&#8220;alter table &#8220;&amp;tabloismi&amp;&#8221;  add &#8220;&amp;ks.fields(i).name&amp;&#8221; &#8220;&amp;nty&amp;&#8221;"&amp;nuz&amp;&#8221;")<br />
end if</p></blockquote>
<p>Ve böylelikle veritabanımızı oluşturmuş bulunuyoruz. Sütun tipleri ile ilgili problemleri olanlar olabilir, hemen belirtiyim; veritabanı konusunda çok çok iyi bir bilgiye sahip olduğumu söyleyemem. Bu kodlar ile kendi veritabanımı sorunsuz olarak oluşturdum. Eğer sizin veritabanınız düzgün bir biçimde aktarılmıyorsa ve yeterli bilgiye sahip değilseniz iletişime geçerseniz elimden geldiğince yardımcı olmaya çalışırım.</p>
<p><strong>Artık sıra geldi verilerimizi aktarmaya!</strong></p>
<p>Yukarıda olduğu gibi kodun içinde neyi ne amaçla yaptığımı anlatacağım.</p>
<blockquote><p>Do While not ks.eof &#8216;Hepiniz biliyorsunuz bunu <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
eklen = &#8220;&#8221;<br />
deger = &#8220;&#8221;<br />
&#8216;Hangi veritabanında hangi sütun olduğunu bilmiyoruz, dolayısıyla genel bir bağlantı cümleciği kullanmamız gerekiyor. Bu cümlecikte aşağıdaki &#8220;insert into&#8221; ile başlayan kod.</p>
<p>For i = 0 to sayif-1<br />
&#8216;insert into kodunu &#8220;insert into tablo (sutun1,sutun2,sutun3) Values (&#8216;deger1&#8242;,&#8217;deger2&#8242;,&#8217;deger3&#8242;)&#8221; şeklinde kullanıyoruz. Görüldüğü üzre son sütunda ve verisinde virgül kullanılmıyor. Bu nedenle aşağıdaki if kontrolünde son sütunsa virgül koymuyoruz.<br />
if i = sayif-1 then<br />
eklen = eklen&amp;&#8221;`&#8221;&amp;ks.fields(i).name&amp;&#8221;` &#8221;<br />
&#8216;Veri tipimiz datetime ise daha önceden belirlediğim Tarihcevir fonksiyonu ile Mssql deki tarihleri mysql biçimine çeviriyorum.<br />
&#8216; 12.03.2010 01:20:56 &#8216;In MSSQL<br />
&#8216; 2010-03-12 01:20:56: &#8216;In MySQL<br />
if cint(ks.fields(i).Type) = 135 then<br />
a = Tarihcevir(ks.fields(i)&amp;&#8221;")<br />
else<br />
a = ks.fields(i)&amp;&#8221;"<br />
end if<br />
deger = deger&amp;&#8221;&#8216;&#8221;&amp;Temizle(a)&amp;&#8221;&#8216; &#8221;<br />
else<br />
&#8216;Son sütun olmadığı için gönül rahatlığıyla virgülleri ekliyorum.<br />
eklen = eklen&amp;&#8221;`&#8221;&amp;ks.fields(i).name&amp;&#8221;`, &#8221;<br />
if cint(ks.fields(i).Type) = 135 then<br />
a = Tarihcevir(ks.fields(i)&amp;&#8221;")<br />
else<br />
a = ks.fields(i)&amp;&#8221;"<br />
end if<br />
deger = deger&amp;&#8221;&#8216;&#8221;&amp;Temizle(a)&amp;&#8221;&#8216; , &#8221;<br />
end if<br />
next</p>
<p>&#8216;Ve kaydı tablomuza gönderiyoruz.<br />
sql = &#8220;insert into &#8220;&amp;tabloismi&amp;&#8221; (&#8220;&amp;eklen&amp;&#8221;) VALUES ( &#8220;&amp;deger&amp;&#8221;)&#8221;<br />
mysqldb.execute(sql)<br />
ks.movenext<br />
s = s +1<br />
Loop</p></blockquote>
<p>Kodlarımın açıklaması bu kadar. Mantığı kavradıysanız eğer siz de farklı yollardan bu işe yarayan bir script yazabilirsiniz.</p>
<p>Kendi veritabanımı taşıdım demiştim, işte veritabanımın bilgileri:<br />
19 tablo, 20,318 kayıt. Eksiksiz aktarım.</p>
<p>Bir not, mssql sunucunuz ve mysql sunucunuz aynı bilgisayar üzerinde olursa script timeout vermez. Eğer Local&#8217;de çalışırsanız tadından yenmez <img src='http://www.guvenatbakan.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.guvenatbakan.net/mssql2mysql/mssql2mysql.asp.zip">Bu güzelim scripti indir</a></p>
<p><a href="http://kofler.info/english/mssql2mysql/">Yok bu hoşuma gitmedi başka bitane varmış onu indireyim. (Visual basicte yazılmış ve sadece orada kullanılan, mükemmel olduğunu düşündüğüm, mysql resmi sitesinde linki bulunan, çalıştırmayı beceremediğim dosya)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.guvenatbakan.net/2010/03/15/mssql2mysql-script-bilgileri/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

