<?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>Huysuz Adam &#187; php</title>
	<atom:link href="http://www.huysuzadam.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.huysuzadam.com</link>
	<description>Web teknolojileri ile ilgili teknik bir blog...</description>
	<lastBuildDate>Mon, 18 Jul 2011 11: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>SQL Injection nedir, nasıl önlenir?</title>
		<link>http://www.huysuzadam.com/2011/02/13/sql-injection-nedir-nasil-onlenir/</link>
		<comments>http://www.huysuzadam.com/2011/02/13/sql-injection-nedir-nasil-onlenir/#comments</comments>
		<pubDate>Sun, 13 Feb 2011 09:09:04 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[Güvenlik]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=508</guid>
		<description><![CDATA[PHP&#8217;yi ya da web tabanlı herhangi bir yazılımı öğreniyorsanız güvenlikle ilgili ilk öğrenmeniz gerekenlerden biri SQL injection. Hala uzmansorusu.com&#8216;da sorulan soruların ciddiye alınacak bir kısmında, üniversiteye gelen stajerlerde, hatta çalışma fırsatım olan arkadaşlarda bu konuda bir bilgisizlik var&#8230; Aslında bu blog&#8217;a başlarken ileri düzey konulara, framework&#8217;lere falan değineyim istemiştim ama pes ediyorum artık. Şuraya yazayım [...]]]></description>
			<content:encoded><![CDATA[<p>PHP&#8217;yi ya da web tabanlı herhangi bir yazılımı öğreniyorsanız güvenlikle ilgili ilk öğrenmeniz gerekenlerden biri SQL injection.</p>
<p>Hala <a href="http://www.uzmansorusu.com">uzmansorusu.com</a>&#8216;da sorulan soruların ciddiye alınacak bir kısmında, üniversiteye gelen stajerlerde, hatta çalışma fırsatım olan arkadaşlarda bu konuda bir bilgisizlik var&#8230;</p>
<p>Aslında bu blog&#8217;a başlarken ileri düzey konulara, framework&#8217;lere falan değineyim istemiştim ama pes ediyorum artık. Şuraya yazayım da en azından lazım olduğunda al oku işte diye adresini veririm :)</p>
<p><span id="more-508"></span></p>
<h2>SQL Injection Nedir?</h2>
<p>Türkçeye çevirirsek <strong>SQL&#8217;in içine zehir enjekte edilmesidir</strong> diyebiliriz. Örnek vermek gerekirse elimizde bir kullanici_detay.php dosyası olsun:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from users where id=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>satırını ele aldığımızda, $_GET['id']&#8216;nin bir sayı olduğunu farz ederiz ve kod düzgün çalışır. Bu sayfanın adresi de şöyle birşeydir</p>
<pre>http://www.huysuzadam.com/kullanici_detay.php?id=5</pre>
<p>Peki ben uyanıklık yapıp adres satırını şöyle değiştirirsem:</p>
<pre>http://www.huysuzadam.com/kullanici_detay.php?id=1 or 1=1</pre>
<p>Bu durumda sql cümlesi şöyle birşeye dönüşmüş olur:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> users <span style="color: #993333; font-weight: bold;">WHERE</span> id<span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span></pre></div></div>

<p>1=1 önergesi her zaman doğru döndüreceği için tüm kullanıcıları listeletebilirim bu durumda&#8230;</p>
<h2>Ne Zararı Olur?</h2>
<p>Tüm kullanıcıları görse nee, görmese ne diyebilirsiniz. Peki bu güvenlik açığı ile neler yapılabilir?</p>
<p>Az önceki örneği değiştiriyorum, bu sefer biraz daha karışık işlere girelim:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$username</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$passwd</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'passwd'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from users where username='<span style="color: #006699; font-weight: bold;">$username</span>' and passwd='<span style="color: #006699; font-weight: bold;">$passwd</span>' &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Bu sefer bir hacker olarak $_POST['username'] değişkenini yine uyanıklık yaparak aynen şöyle gönderiyorum:</p>
<pre>a' or 1=1 or 'b</pre>
<p>yerine koyduğumuzda sql&#8217;imiz şu hale gelmiş oluyor:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> users <span style="color: #993333; font-weight: bold;">WHERE</span> username<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'a'</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #cc66cc;">1</span><span style="color: #66cc66;">=</span><span style="color: #cc66cc;">1</span> <span style="color: #993333; font-weight: bold;">OR</span> <span style="color: #ff0000;">'b'</span> <span style="color: #993333; font-weight: bold;">AND</span> passwd<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'asdf'</span></pre></div></div>

<p>Gördüğünüz gibi OR&#8217;lar sayesinden herhangi bir kullanıcı olarak girebiliriz. SQL&#8217;in son hali kolay okunsun diye ben böyle girdim ama biraz yaratıcılık kullanılarak daha kısa ya da daha farklı yaramazlıklar yapılabilir.</p>
<h2>Nasıl Önlememelisiniz : magic_quotes_gpc</h2>
<p>PHP&#8217;nin eski versiyonlarında magic quotes gibi bir ayarla SQL injection&#8217;a çözüm ürettiğini zannetti Zend firması. Aslında bu daha sonra çok baş ağrısı yaratacak bir karardı ve o yüzden de PHP6&#8242;da yanılmıyorsam tamamen kaldırılacak bu özellik.</p>
<h3>Magic Quotes şu şekilde çalışır:</h3>
<p>php.ini&#8217;den magic_quotes_gpc aktif edilirse PHP otomatik olarak tüm $_GET, $_POST ve $_COOKIE değişkenlerinin içindeki tırnak işaretlerini \&#8217; ve \&#8221; ile değiştirir. Bu durumda ikinci örneği ele alırsak sql şu hale gelmiş olur:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> users <span style="color: #993333; font-weight: bold;">WHERE</span> username<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'a<span style="color: #000099; font-weight: bold;">\'</span> or 1=1 or <span style="color: #000099; font-weight: bold;">\'</span>b'</span> <span style="color: #993333; font-weight: bold;">AND</span> passwd<span style="color: #66cc66;">=</span><span style="color: #ff0000;">'asdf'</span></pre></div></div>

<p>Bu durumda \ işareti yanındaki karakteri &#8220;escape&#8221; eder, yani tek tırnak işaretinin tırnağı kapama görevine son verir. Böylece veritabanı hakkaten de adı <strong>a\&#8217; or 1=1 or \&#8217;b</strong> olan bir marslıyı (!) bulmaya çalışır.</p>
<p>Kırma girişimi başarısızlıkla sonuçlanır, dünya kurtulur.</p>
<p>Burada dikkat edilmesi gereken tek nokta, yazının başında verdiğimiz örnekteki gibi sayıları kontrol ederken de tırnak işareti kullanmamız gerekir.</p>
<p>Yani;</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from users where id=&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>yerine</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$query</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from users where id='&quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">&quot;'&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>yazmamız gerekir.</p>
<p><span style="color: #ff0000; font-size: 14px;">Ancak sakın magic_quotes_gpc yönetimini kullanmayın!</span></p>
<p>Çünkü bu konuda iki büyük sorun var: Birincisi psikolojik olarak buna o kadar alışıyorsunuz ki sanki bu magic_quotes_gpc açıksa bir daha asla SQL injection yemezmişsiniz gibi geliyor. Sonra da biri gelip bu sefer de /* */ kullanarak SQL injection yapıyor. Ya da görünmez ASCII karakterleri ya da diğer muhtelif yöntemler.</p>
<p>(Not: Bu muhtelif yöntemleri burada tek tek yazmayacağım ki bu doküman bir &#8220;hacker&#8217;ın el kitabı&#8221;na dönüşmesin ;) )</p>
<p>İkinci büyük sorun da, hiç başınıza gelmeyecek zannetseniz de hosting değiştirme problemi. magic_quotes_gpc&#8217;ye güvenirken, bir anda bu ayarın kapalı duruma geldiğini düşünebiliyor musunuz? Kolay gerçekleşecek bir senaryo değil gibi gözükse de gayet olasıdır, tecrübeyle de sabittir!</p>
<p>3. daha önemsiz sorun ise, &#8220;Ozan&#8217;ın kalemi&#8221; gibi bir cümledeki tırnak işaretini de escape etmesi. Bu durumda veritabanına yazmadığınız durumlarda &#8220;strip_slashes&#8221; gibi bir işlem yapmanız gerekiyor ki bu da bazen inanılmaz can sıkıcı olabiliyor.</p>
<h2>SQL Injection Nasıl Önlenir?</h2>
<p>Gelelim sadede. Bunu yapmanın birkaç yöntemi var. Bana en makul gelenleri:</p>
<h3>mysql_real_escape_string</h3>
<p>Bu fonksiyon, değişkenlerin içindeki tüm zararlı karakterleri &#8220;escape&#8221; eder, yani güvenli hale getirir.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_real_escape_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'passwd'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_real_escape_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'passwd'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>şeklinde kullanılır.</p>
<p><strong>Avantajları:</strong></p>
<ol>
<li>Ekstra bir kütüphaneye falan gerek yok, doğrudan kullanılabilir.</li>
</ol>
<p><strong>Dezavantajları:</strong></p>
<ol>
<li> Yazması çok sıkıcı</li>
<li> MySQL&#8217;den başka veritabanı kullanırsanız ne olacak?</li>
</ol>
<h3>Bind etme yöntemi</h3>
<p>Aslında bunu mysql konutları ile yapmak da mümkün, ama zahmetli olduğu için bir database wrapper kullanarak yapılışını anlatacağım.</p>
<p>Bir database wrapper ya da PDO kullanılır. Örneğin Zend_Db kullanalım:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">'/var/lib/ZendFramework/Zend/Db.php'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> Zend_Db<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Mysqli'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
    <span style="color: #0000ff;">'username'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'myuser'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'password'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mypass'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'dbname'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'mydbname'</span><span style="color: #339933;">,</span>
    <span style="color: #0000ff;">'driver_options'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>MYSQLI_INIT_COMMAND <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'SET NAMES UTF8;'</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$user</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchRow</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;select * from users where id=?&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Avantajları:</strong></p>
<ol>
<li>Soru işaretinin yerine değişkenimiz güvenli bir şekilde yerleştirildi.</li>
<li>&#8220;fetchRow&#8221; metodu sayesinde sadece 1 satır çekilip $user&#8217;a eşitlendi. Dolayısıyla mysql_fetch_row vs. yazmanıza da gerek kalmadı.</li>
<li>MySQL sorguyu cache&#8217;leyebildi. Direkt değişkeni yazdığınızda veritabanı onu cache&#8217;leyemez.</li>
</ol>
<p><strong>Dezavantajı:</strong></p>
<ol>
<li>Yeni birşey öğrenmek ve uygulamak gerekiyor. Bu da aslında dezavantaj değil avantaj aslında ama anlayana ;)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2011/02/13/sql-injection-nedir-nasil-onlenir/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Programlamada Üretim Hızını Arttırmak&#8230;</title>
		<link>http://www.huysuzadam.com/2011/02/12/programlamada-uretim-hizini-arttirmak/</link>
		<comments>http://www.huysuzadam.com/2011/02/12/programlamada-uretim-hizini-arttirmak/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 13:57:27 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[ide'ler]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Web Teknolojileri]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=493</guid>
		<description><![CDATA[Bir ürün ortaya koyarken, aynı diğer sektörlerde olduğu gibi yazılım sektöründe de maliyet çok önemli elbette. Yazılım ve donanım masraflarını çıkardığımız zaman geriye kalan maliyet yazılımcıların çalışma süresi, bu yüzden de projenin ne kadar hızlı geliştirilirse maliyeti o kadar düşük olur diyebiliriz. İster kendi projenizi geliştiren bir yazılımcı olun, ister bir şirket, bu gerçek değişmiyor. [...]]]></description>
			<content:encoded><![CDATA[<p>Bir ürün ortaya koyarken, aynı diğer sektörlerde olduğu gibi yazılım sektöründe de maliyet çok önemli elbette.</p>
<p>Yazılım ve donanım masraflarını çıkardığımız zaman geriye kalan maliyet yazılımcıların çalışma süresi, bu yüzden de projenin ne kadar hızlı geliştirilirse maliyeti o kadar düşük olur diyebiliriz. İster kendi projenizi geliştiren bir yazılımcı olun, ister bir şirket, bu gerçek değişmiyor.</p>
<p>Tabii üretim hızını arttırırken, bunun tam karşısında dikilen çok önemli bir parametre var, o da <strong>KALİTE</strong> ! Hızlı yazmak uğruna kaliteden ödün vermemeliyiz&#8230; Türkiye&#8217;deki berbat yazılım kalitesinin bence en büyük nedeni bu.</p>
<p><span id="more-493"></span></p>
<h2>Sorun?</h2>
<p>Makine mühendliği eğitimi sırasında üretim planlama ile ilgili derslerimiz vardı. Bunlardan biri de seri üretimde maliyetin düşürülmesi için yapılabilecekler. Mesela bir otomobil üretim bandını düşünün.</p>
<p>Her ne kadar yazılım sektörü ile kıyasladığınızda maliyeti etkileyen çok fazla parametre olsa da, aynen yazılımdaki gibi üretim hızını ne kadar arttırırsanız birim otomobil başına maliyetiniz de o kadar düşer.</p>
<p>Burada hızı optimize ederken en önemli bir prensip vardır:</p>
<blockquote><p>Üretim işleminin hızını arttırmaya zorlarsanız kaliteden kaybedersiniz. Ancak asıl optimize edebileceğiniz nokta, üretim işlemleri arasında ara maddelerin bir yerden bir yere transferi, makineye bağlanması, makineden sökülmesi gibi ara işlemlerdir.</p></blockquote>
<p>Örneğin bir torna işlemini olması gerekenden daha hızlı yaparsanız torna bıçağının ısınması vb. nedenlerden ürettiğiniz malzemenin yüzey KALİTESİ düşer, pürüzsüz bir yüzey yerine tırtıklı bir yüzey elde edersiniz.</p>
<p>Çok benzer bir şekilde kod yazma süreniz 3 aşağı  5 yukarı bellidir. Eğer çok hızlı yazmaya çalışırsanız mutlaka bazı noktaları gözden kaçırmaya başlarsınız. Bunun da acısı birkaç ay sonra çıkar: &#8220;Ben mi yazmışım lan bunu?!?!&#8221;</p>
<h2>Nasıl?</h2>
<p>Peki bu konuda ne yapılabilir? Programcı özelinde baktığımızda bence önemli unsurlardan birisi, aynı seri üretim yapan bir fabrikada olduğu gibi, ara işlemleri optimize etmek. Yani program yazarken rutin olarak yaptığımız ara işlemleri hızlandırmak.</p>
<p>İşte benim optimize ettiğim bazı şeyler. Eğer bu listeye eklemek istediğiniz bir şey varsa lütfen yorum olarak yazın, buraya eklerim&#8230;</p>
<h3>1. Çift Monitör Kullanmak</h3>
<p>Bilkent&#8217;teki işimde monitörümün yanına ikinci bir monitör koyduğum zaman çalışma arkadaşlarımın ilk tepkileri daha çok &#8220;wow ne havalı&#8221; gibi hafif dalga geçen bir yaklaşımdı. Şu an, departman müdürümüz de dahil çoğu kişi çift monitör kullanıyor&#8230;</p>
<p>Nedeni kesinlikle hava atma merakımdan değil. Basit bir rutini devreden çıkartmak: (Alt + TAB) kombinasyonu. Bir proje yazıp test ederken saatte kaç keç alt+tab kombinasyonunu kullandığınızı saydınız mı? Ben de saymadım aslında ama: <strong>ÇOK</strong> :)</p>
<p>Bir monitöre favori browser&#8217;ınızı koyuyorsunuz, diğerine editörü. Editörde yazdığınızın sonucunu browser&#8217;dan karşılaştırıyorsunuz. Ya da CSS ile uğraşıyorsunuz atıyorum. CSS&#8217;i Firebug ile modifiye ederek istediğiniz sonucu elde ediyorsunuz. Sonra yandaki monitörden son halini CSS&#8217;e yazıyorsunuz.</p>
<p>Hatta itiraf ediyorum atuyorum 5 dakika süren bir işlemi yaparken ikinci monitörde minesweeper oynadığım da çoktur :) Çünkü o sırada başka bir işe girerek ilkine olan konsantrasyonumu kaybetmek istemem&#8230;</p>
<h3>2. 10 Parmak Yazabilmek</h3>
<p>Dalga geçmiyorum, hala 2-3 parmakla kod yazmaya çalışan insanlar var yahu!</p>
<h3>3. Shortcut Kullanmak</h3>
<p>Belki abarttığımı düşüneceksiniz ama, hiç klavyeden elinizi kaldırıp mouse&#8217;a götürmenin size vakit kaybettirdiği dikkatinizi çekmiş miydi? Bu hareket belki 0,3 saniye alıyor ama günde belki 10.000 kere yapıyoruz.  Hemen hemen her işlemin bir shortcut&#8217;ı var: Commit et, kaydet, yükle (upload), dosya aç, dosya bul vs.vs. Bazı işlemlerin çok abuk shortcut&#8217;ları olabiliyor, tek elle yapamadığınız. Onları da üşenmeden değiştirin derim&#8230;</p>
<p>Aslında shortcut değil ama, yeni IDE&#8217;lerde code templates diye bir olgu var. Örneğin netbeans&#8217;de &#8220;assign&#8221; yazıp TAB&#8217;a bastığımda $this-&gt;assign(&#8216;parameter&#8217;, $parameter); gibi bir kodu otomatik üretiyor ve cursor &#8216;parameter&#8217; üzerinde oluyor. Onu örneğin &#8216;users&#8217; olarak değiştirdiğimde otomatik olarak $parameter da $users oluyor&#8230;</p>
<p>Kullandığım başka bir trick de Textmate&#8217;ten: Shift + Ctrl Enter yaptığımda bulunduğum satırın sonuna bir noktalı virgül koyup sonraki satıra geçiyor. Bunu netbeans&#8217;de yapmak için basit bir makro kaydetmem gerekti. Bir satırın ortasındayken sona git, noktalı virgül koy, sonra enter&#8217;a bas yerine epey hızlandırıyor beni&#8230;</p>
<p>Siz de kendi hızınızı arttıracak shortcut&#8217;lar üretebilirsiniz.</p>
<h3>4. Programlara Kolay Erişim</h3>
<p>Favori programlarınızı başlat menüsü altından tüm programlara, oradan program dizinine, oradan programa gidip mi çalıştırıyorsunuz?</p>
<p>Her gün kullandığınız programları mac kullanıyorsanız dock&#8217;a ekleyebilir, windows 7 kullanıyorsanız &#8220;pin&#8221; ile taskbar&#8217;a sabitleyebilirsiniz. (Daha eski bir windows kullanıyorsanız önce onu çöpe atmakla işe başlayabilirsiniz!) Günlük kullanmadıklarınızı ise buraya koymayın ki bu sefer de yüzlerce program arasından günlük programınızı aramayın&#8230;</p>
<p>Diğer programlara erişmek için Mac&#8217;te Cmd+Space ile spotlight&#8217;ı açıp programın adını yazabilirsiniz. Aynısını windowsda yapmak için klavyenizdeki windows tuşuna basıp programın adını yazmaya başlayın, başlat menüsü açılıp program listede çıkar, oradan yine klavyeyle seçip açabilirsiniz.</p>
<h3>5. Yıldırım gibi Çalışan Bir Bilgisayar</h3>
<p>Birçok yerde işin bu erbapları der ki:</p>
<blockquote><p>&#8220;Paranızın alabileceği en iyi bilgisayarı alın&#8221;</p></blockquote>
<p>Sonuçta işinize yatırımdır bu. Bir yandan donanım problemleriyle ya da kanıran bir bilgisayarla uğraşırken nasıl konsantre olabilirsiniz ki işinize?</p>
<p>Kullandığınız donanımın birbirine uyumlu olması çok önemli o yüzden marka bilgisayarları tercih etmekte yarar var. Para ayırabiliyorsanız Mac&#8217;i sırf bu yüzden tavsiye ederim. Windows 7 bana göre gerek stabilite, gerek performans, gerekse fonksiyonalite açısından Snow Leopard&#8217;ı solladı ancak donanım olarak Mac kadar düzgün çalışan PC her zaman toplanmıyor. Sessizliği de cabası&#8230;</p>
<p>En son yakın bir arkadaşım bilgisayarının sesinden bıkıp kasayı yan odaya koymaktan bahsediyordu&#8230; Duvarı delip kabloları oradan geçirecekmiş ;)</p>
<p>Windows 7 kullanıyorsanız hızlı bir USB belleği windows 7&#8242;yi hızlandırmak için kulanabilirsiniz. USB&#8217;yi takın ve ekrana çıkan yönlendirmeleri takip edin. Bilgisayarınızın daha hızlı tepki verdiğini görebilirsiniz.</p>
<p>Linux&#8217;a gelince&#8230; Desktop olarak <strong>Kullanmayın!</strong> Bu kadar basit :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2011/02/12/programlamada-uretim-hizini-arttirmak/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Basit bir Model-View-Controller altyapısı</title>
		<link>http://www.huysuzadam.com/2008/07/30/basit-bir-model-view-controller-altyapisi/</link>
		<comments>http://www.huysuzadam.com/2008/07/30/basit-bir-model-view-controller-altyapisi/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 00:36:22 +0000</pubDate>
		<dc:creator>M.Ozan Hazer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.huysuzadam.com/?p=153</guid>
		<description><![CDATA[phpwomen.org diye site varmış, üstelik yarışma düzenliyomuş ödülü Zend Studio lisansıymış. Üşenmedim, oturdum basit bir PHP altyapısı yazdım gönderdim: http://www.phpwomen.org/forum/index.php?t=msg&#038;th=488 MVC&#8217;nin yandan yemişi olan bu yapı FotoKritik&#8217;te kullandığımı andırıyor. Web tabanlı yazılımlarda kullanılan MVC tip2&#8242;nin dezavantajı aynı işlem için çok dosyayla uğraşma gerekliliği. Controller dosyasında model aksiyonunu çağırıp view&#8217;a assign edeceksiniz, model dosyasında aksiyonu yazacaksınız, [...]]]></description>
			<content:encoded><![CDATA[<p>phpwomen.org diye site varmış, üstelik yarışma düzenliyomuş ödülü Zend Studio lisansıymış.<br />
Üşenmedim, oturdum basit bir PHP altyapısı yazdım gönderdim:</p>
<p><a href="http://www.phpwomen.org/forum/index.php?t=msg&#038;th=488">http://www.phpwomen.org/forum/index.php?t=msg&#038;th=488</a></p>
<p>MVC&#8217;nin yandan yemişi olan bu yapı FotoKritik&#8217;te kullandığımı andırıyor.  </p>
<p>Web tabanlı yazılımlarda kullanılan MVC tip2&#8242;nin dezavantajı aynı işlem için çok dosyayla uğraşma gerekliliği. Controller dosyasında model aksiyonunu çağırıp view&#8217;a assign edeceksiniz, model dosyasında aksiyonu yazacaksınız, view dosyasında da formatlamayı yapacaksınız. Üstüne bi de helper metotları falan gerekirse onları yazacaksınız falan.</p>
<p>Bu yazdığım yapıda ise görüntüleme için tek, insert/update/delete için de iki dosyaya bakmak yetiyor.<br />
Fazla programcının çalışmadığı küçük ve orta boy projeler için verimli bir şekilde kullanılabilir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.huysuzadam.com/2008/07/30/basit-bir-model-view-controller-altyapisi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

