<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>oucel</title>
	<atom:link href="http://oucel.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://oucel.wordpress.com</link>
	<description>Bir geliştiricinin dünyası desem?</description>
	<lastBuildDate>Sun, 12 Feb 2012 02:31:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='oucel.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>oucel</title>
		<link>http://oucel.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://oucel.wordpress.com/osd.xml" title="oucel" />
	<atom:link rel='hub' href='http://oucel.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Ipad ve VPN DNS Sorunu</title>
		<link>http://oucel.wordpress.com/2012/02/12/ipad-ve-vpn-dns-sorunu/</link>
		<comments>http://oucel.wordpress.com/2012/02/12/ipad-ve-vpn-dns-sorunu/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 02:30:39 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[İnternet]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[pptpd]]></category>
		<category><![CDATA[vpn]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1182</guid>
		<description><![CDATA[Ipad üzerinde maalesef VPN için özel bir DNS ayarı mevcut değil. Bu yüzden VPN sunucusuna bağlandıktan sonra internete çıkamama gibi bir problemle karşılaşabilirsiniz. Bende maalesef bu sorunla uğraştım biraz. Yapmanız gereken tek şey sunucunuzdaki /etc/ppp/pptpd-options dosyasında bulunan aşağıdaki ayarları güncellemek: ms-dns 8.8.8.8 ms-dns 8.8.4.4 ms-wins 8.8.8.8 ms-wins 8.8.4.4 Böylelikle Ipad gibi bu tür ayara sahip &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2012/02/12/ipad-ve-vpn-dns-sorunu/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1182&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Ipad üzerinde maalesef VPN için özel bir DNS ayarı mevcut değil. Bu yüzden VPN sunucusuna bağlandıktan sonra internete çıkamama gibi bir problemle karşılaşabilirsiniz. Bende maalesef bu sorunla uğraştım biraz.</p>
<p>Yapmanız gereken tek şey sunucunuzdaki /etc/ppp/pptpd-options dosyasında bulunan aşağıdaki ayarları güncellemek:</p>
<p>ms-dns 8.8.8.8<br />
ms-dns 8.8.4.4</p>
<p>ms-wins 8.8.8.8<br />
ms-wins 8.8.4.4</p>
<p>Böylelikle Ipad gibi bu tür ayara sahip olmayan cihazlardaki DNS sorununu aşmış oluyorsunuz. Bu ayarlarla birlikte cihaz DNS bilgilerini otomatik olarak alıyor.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1182/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1182/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1182/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1182&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2012/02/12/ipad-ve-vpn-dns-sorunu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Node.js events Modülü</title>
		<link>http://oucel.wordpress.com/2012/01/10/node-js-events-modulu/</link>
		<comments>http://oucel.wordpress.com/2012/01/10/node-js-events-modulu/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 02:34:43 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1170</guid>
		<description><![CDATA[node.js ile geliştirme yaparken (her yeni başlayan gibi) benim de en zorlandığım konu asenkron kod yazmaya alışmak oldu. Arkaplanda işlemler olaylarla (events) yürüdüğü için, eğer senkron işlem yapacaksanız ya callback kullanmak ya da events modülünü kullanmak gerekiyor. callback yöntemini kullanırsanız, yazdığınız koddan sonra ekrana bir süre anlamsız bir şekilde bakabilirsiniz. Hatta bu anlamsız bakış kodu &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2012/01/10/node-js-events-modulu/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1170&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://nodejs.org">node.js</a> ile geliştirme yaparken (her yeni başlayan gibi) benim de en zorlandığım konu asenkron kod yazmaya alışmak oldu. Arkaplanda işlemler olaylarla (events) yürüdüğü için, eğer senkron işlem yapacaksanız ya callback kullanmak ya da events modülünü kullanmak gerekiyor. callback yöntemini kullanırsanız, yazdığınız koddan sonra ekrana bir süre anlamsız bir şekilde bakabilirsiniz. Hatta bu anlamsız bakış kodu her okumaya çalışmanızda da oluşur.</p>
<p><a href="http://nodejs.org/docs/latest/api/events.html">events modülü</a> node.js ile birlikte gelmekte. Bu modül içindeki EventEmitter sınıfını extend ederek sınıflarınızı yazabilirsiniz ve böylelikle yazdığınız modüllerin daha işlevsel olmasını sağlarsınız.</p>
<p>Bir uygulama ile konuyu örneklendirelim. Bu masum uygulamamızda kullanıcı adı ve parolayı kontrol ettirip, durum olumlu ise kullanıcıya ait bir model oluşturacağız. İlk örnek kodlar callback yöntemi için.</p>
<p>ApiClientCallback.js:<br />
<pre class="brush: jscript;">
var ApiClientCallback = function(){};

ApiClientCallback.prototype = {
    getUserModel : function(object, callback){
        var model = new Object();
        model.username = object.username;
        model.password = object.password;

        callback(false, model);
    },
    isUser : function(object, callback){
        if (object.username == &quot;admin&quot; &amp;&amp; object.password == &quot;admin&quot;)
        {
            this.getUserModel(object, callback);
        }else{
            callback(&quot;User not found&quot;, null)
        }
    }
};

exports.ApiClientCallback = ApiClientCallback;
</pre></p>
<p>callbackTest.js<br />
<pre class="brush: jscript;">
var ApiClientCallback = require(&quot;./ApiClientCallback.js&quot;).ApiClientCallback;

var client = new ApiClientCallback();
client.isUser({
    username : &quot;admin&quot;,
    password : &quot;admin&quot;
}, function(err, model){
    if (err)
    {
        console.log(err);
    }else{
        console.log(&quot;username : &quot; + model.username + &quot; password : &quot; + model.password);
    }
});
</pre></p>
<p>Açıkçası bu yöntemin yönetimi bana zor geliyor. Önyargı mı bilemiyorum ancak 6. his debug işlemleri, kod güncellemeleri vb. konularda bu yöntemin epey soruna neden olacağını söylüyor. Çünkü koda her baktığımda kimin kimi çağırdığını kontrol etmem gerekiyor. Bunları takip etmek bu tür ufak kodlar için zor değil belki ama kod satır sayısı arttıkça iç içe dallanma ile bu işlem işkenceye dönüşebilir.</p>
<p>Şimdi aynı örneği events modülü ile yapalım:</p>
<p>ApiClientEvent.js<br />
<pre class="brush: jscript;">
// events modülünü yükledik.
var events = require(&quot;events&quot;);

// Balatıcımızı oluşturduk.
var ApiClientEvents = function(){
    events.EventEmitter.call(this);

    // Olaylara sınıf metodlarımızı bağlıyoruz.
    this.on(this.ON_IS_USER_SUCCESS, this.onIsUserSuccess);
    this.on(this.ON_IS_USER_FAIL, this.onIsUserError);
    this.on(this.ON_USER_MODEL_READY, this.onUserModelReady);
};

// Sınıfımızın EventEmitter sınıfını extend etmesini sağladık.
ApiClientEvents.super_ = events.EventEmitter;
ApiClientEvents.prototype = Object.create(events.EventEmitter.prototype, {
    constructor : {
        value : ApiClientEvents,
        enumerable : false
    }
});

// Artık sınıfımızla ilgilenmeye başlayabiliriz.

// Öncelikle olay isimlerimizi tanımlıyoruz. Sınıfla birlikte kullanırken kolaylık oluyor.
ApiClientEvents.prototype.ON_PREFIX = &quot;ApiClientEventsOn&quot;;
ApiClientEvents.prototype.ON_IS_USER_SUCCESS = ApiClientEvents.prototype.ON_PREFIX + &quot;IsUserSuccess&quot;;
ApiClientEvents.prototype.ON_IS_USER_FAIL = ApiClientEvents.prototype.ON_PREFIX + &quot;IsUserFail&quot;;
ApiClientEvents.prototype.ON_USER_MODEL_READY = ApiClientEvents.prototype.ON_PREFIX + &quot;UserModelReady&quot;;

// Kullanıcıyı bu metodla kontrol edeceğiz.
ApiClientEvents.prototype.isUser = function(object){
    var self = this;
    if (object.username == &quot;admin&quot; &amp;&amp; object.password == &quot;admin&quot;)
    {
        // İşlem başarılıysa ON_IS_USER_SUCCESS olayını tetikle. Parametre olarak object i ver.
        self.emit(self.ON_IS_USER_SUCCESS, object);
    }else{
        // İşlem başarısız ise ON_IS_USER_FAIL olayını tetikle. Parametre olarak object i ver.
        self.emit(self.ON_IS_USER_FAIL, object);
    }

    return self;
};

// Kullanıcı için bu metodla model oluşturacağız.
ApiClientEvents.prototype.createUserModel = function(object){
    var self = this;
    var model = new Object();
    model.isLogged = true;
    model.username = object.username;
    model.password = object.password;

    // Model oluşturma işleminden sonra modelin hazır olduğunu ON_USER_MODEL_READY ile duyur.
    self.emit(self.ON_USER_MODEL_READY, model);
    return self;
};

// Olay metodlarımız
ApiClientEvents.prototype.onIsUserSuccess = function(object){
    console.log(&quot;onIsUserSuccess&quot;);
    var self = this;
    self.createUserModel(object);
    return self;
};

ApiClientEvents.prototype.onIsUserError = function(object){
    console.log(&quot;onIsUserError&quot;);
};

ApiClientEvents.prototype.onUserModelReady = function(model){
    console.log(&quot;onUserModelReady&quot;);
    console.log(model);
};

exports.ApiClientEvents = ApiClientEvents;
</pre></p>
<p>events_test.js:<br />
<pre class="brush: jscript;">
var ApiClientEvents = require(&quot;./ApiClientEvents.js&quot;).ApiClientEvents;

var client = new ApiClientEvents;

client.on(client.ON_USER_MODEL_READY, function(model){
    console.log(&quot;Buradayım 1&quot;);
});

client.on(client.ON_USER_MODEL_READY, function(model){
    console.log(&quot;Buradayım 2&quot;);
});

var check = client.isUser({
    username : &quot;admin&quot;,
    password : &quot;admin&quot;
});
</pre></p>
<p>events modülü ile daha çok kod yazıldığının farkındayım. Ancak daha temiz kodlara sahip olduğumuz kesin. Peki ne yaptık biz bu kodlarda?</p>
<p>İlk başta EventEmitter sınıfını extend ettik. Bu bizim sınıfımıza olayları yönetme özelliği kazandırdı. EventEmitter sınıfının genelde ihtiyaç duyulan on ve emit adlı iki metodu var. on metodu ile ilgili olay için fonksiyonları tanımladık. Aynı olaya birden çok fonksiyon tanımlanabilir. Bu tanımlanan fonksiyonları emit metodu ile çağırdık. emit ile çağrılan bir olay, on ile tanımlı tüm fonksiyonları sırasıyla tetikler.</p>
<p>Olayları sınıfınız içinde tanımlayabildiğiniz gibi, sınıfı kullanacak olanların tanımlaması için olayları hiç tanımlamadan da geliştirmenizi yapabilirsiniz.</p>
<p>Sınıf içinde isimleri ayrı bir değişkene aldım. Bu kullanım açısından epey kolaylık sağlıyor. Aynı zamanda bu yöntemle daha tekil isimler kullanabilirsiniz. Olaylar için bir ön ek belirlemeniz de bu tekilliği sağlamanıza yardımcı olur.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1170/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1170/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1170/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1170&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2012/01/10/node-js-events-modulu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Node.js ve Güncellik Sorunu</title>
		<link>http://oucel.wordpress.com/2011/12/27/node-js-ve-guncellik-sorunu/</link>
		<comments>http://oucel.wordpress.com/2011/12/27/node-js-ve-guncellik-sorunu/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 17:27:39 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[node.js]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1163</guid>
		<description><![CDATA[node.js kullanırken uygulamadaki herhangi bir güncelleme için sunucunun yeniden başlatılması pek hoş olmuyor. Henüz node.js ile bir proje geliştirip yayınlamadım ancak node.js ile test amaçlı kodlar yazarken bu yeniden başlatma olaylarını gerçekleştirmek zorunda kalıyorum. Konuyu biraz araştırdıktan sonra güzel bir çözüm buldum. require fonksiyonu ile kişisel modüllerimizi uygulamaya dahil edebiliyoruz. node.js bu modülleri önbellekliyor ve &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/27/node-js-ve-guncellik-sorunu/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1163&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://nodejs.org">node.js</a> kullanırken uygulamadaki herhangi bir güncelleme için sunucunun yeniden başlatılması pek hoş olmuyor. Henüz node.js ile bir proje geliştirip yayınlamadım ancak node.js ile test amaçlı kodlar yazarken bu yeniden başlatma olaylarını gerçekleştirmek zorunda kalıyorum. Konuyu biraz araştırdıktan sonra güzel bir çözüm buldum.</p>
<p>require fonksiyonu ile kişisel modüllerimizi uygulamaya dahil edebiliyoruz. node.js bu modülleri önbellekliyor ve tekrar tekrar kullanmayı engelliyor. Sorunda burada çıkıyor. require.cache listesi ile dosya yoluna göre önbellekleme işlemi yapıyor. Arkaplanda bu dosyaların güncellenmesini takip etmiyor, bu kontrol geliştiriciye kalıyor.</p>
<p><strong>require.cache listesinden önbelleğin silinmesi:</strong></p>
<p>Buradaki örnekte sunucuya bağlanan her client yeni app.js kodlarını çalıştırır.</p>
<p><pre class="brush: jscript;">
var net = require(&quot;net&quot;);

var server = net.createServer(function (stream) {
    // Önbelleği sil.
    delete require.cache[process.cwd() + &quot;/app.js&quot;];
    // Dosyayı yeniden önbellekle.
    var App = require(&quot;./app.js&quot;);

    var MyApp = new App();
    MyApp.init(stream);
});

server.listen(7000);
</pre></p>
<p>Böylelikle sunucuyu durdurmadan sürekli güncel kodların çalışmasını sağlayabiliyorsunuz. Ancak &#8220;Performansa etkisi nedir?&#8221; sorusu cevapsız kalıyor şu an. Belki <a href="http://nodejs.org/docs/latest/api/fs.html#fs.watchFile">fs.watchFile</a> ile farklı bir çözüm üretilebilir.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1163/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1163/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1163/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1163&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/27/node-js-ve-guncellik-sorunu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Büyük Firmalar Neden Akılsız?</title>
		<link>http://oucel.wordpress.com/2011/12/19/buyuk-firmalar-neden-akilsiz/</link>
		<comments>http://oucel.wordpress.com/2011/12/19/buyuk-firmalar-neden-akilsiz/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 17:59:20 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[İnternet]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1158</guid>
		<description><![CDATA[Haftasonu http://dictionary.cambridge.org sitesine API desteklerinin olup olmadığını öğrenmek için bir mail attım. Cevabı bugün döndüler: 2011 bitmeden böyle bir desteğe sahip olacaklarını umuyorlarmış (Geliştirici ekibe acıdım şimdi, kovulmazlar inş.). API yerine XML verelim diyorlar.. İlk olarak garibime giden şey böyle bir firmanın (ya da kuruluşun) neden API konsoluna sahip olmadığı. İkincisi ise bana gönderdikleri e-postada &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/19/buyuk-firmalar-neden-akilsiz/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1158&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Haftasonu http://dictionary.cambridge.org sitesine API desteklerinin olup olmadığını öğrenmek için bir mail attım. Cevabı bugün döndüler: 2011 bitmeden böyle bir desteğe sahip olacaklarını umuyorlarmış (Geliştirici ekibe acıdım şimdi, kovulmazlar inş.). API yerine XML verelim diyorlar..</p>
<p>İlk olarak garibime giden şey böyle bir firmanın (ya da kuruluşun) neden API konsoluna sahip olmadığı. İkincisi ise bana gönderdikleri e-postada sordukları sorular (aşağıda).</p>
<p>Artık müşteri saçma şeylerle vakit kaybetmek istemiyor. Online satış yapan bir sitenin size, aldığınız ürünü ne amaçla kullanacağını sormasını istermiydiniz? Bu bilginin ne cevaplayan ne de soran açısından hiç bir anlamı yok. Olay para kazanmak ve harcamaksa geri kalan saçmalıkları ortadan kaldırmak lazım.</p>
<p>Bırakın parasını harcamak isteyen onu harcasın, siz gerekli alt yapıyı kurun. Böylelikle insanlar daha hızlı ürünlerinize erişebilir. Bu en temel kullanıcı seviyesinde de böyle olmalı, en üst seviyede de. Online satışlardaki kolaylık en temel kullanıcılar için güzel bir örnek. Amazon servislerini ise üst seviye kullanıcılara örnek gösterebiliriz.</p>
<p>Bir &#8211; iki haftadır boş vakitlerde Amazon EC2 hizmetini denedim. Kimse ile iletişim kurmadan devasa sunucularda kodlarımı çalıştırdım. Onlar beni bilmiyorlar bende onların kim olduğunu. Ama onlar para kazandı, bende işimi gördüm. Kimseyi telefonla aramak zorunda kalmadım. Her şeyi geliştirilen konsol ile hallettim.</p>
<p>Artık firmaların bu yeni düzene ayak uydurmaları gerekiyor. Üst seviye kullanıcılar çok fazla dataya ihtiyaç duyuyor. Temel kullanıcılara hizmet sunarken geniş boyutlu olaya bakmak lazım.</p>
<p>Use<br />
What is the nature of the proposed use (e.g., a feed, an app, a lookup<br />
feature underlying text, a stand-alone product)?<br />
When are you planning to launch the product?<br />
How would our data be built into the structure of your product?<br />
How will you sell the commercial product, and at what price? What are your<br />
anticipated annual sales?</p>
<p>Data<br />
Do you require British or American English?<br />
Do you require audio pronunciations?<br />
Do you require additional content (e.g., word family information, usage<br />
notes)?</p>
<p>User experience and characteristics<br />
How would your target users experience our data if they use your product?<br />
Can you characterize your target users &#8211; adults, younger people, students,<br />
nationality &#8211; as well as the size of the potential user base?</p>
<p>Branding<br />
Do you seek to use the Cambridge brand in your product?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1158/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1158/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1158/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1158&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/19/buyuk-firmalar-neden-akilsiz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Android ve Content-Disposition Sorunu</title>
		<link>http://oucel.wordpress.com/2011/12/13/android-ve-content-disposition-sorunu/</link>
		<comments>http://oucel.wordpress.com/2011/12/13/android-ve-content-disposition-sorunu/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 16:07:14 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[android]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1147</guid>
		<description><![CDATA[Üzerinde çalıştığım bir projede içeriklere indirme limiti koyabiliyoruz. Böylelikle kullanıcılar izin verildiği kadar indirme işlemini gerçekleştirebiliyorlar. Sistem tarayıcılarda ve mobil cihazlarda sorunsuz çalışıyor. Ancak bugün test ekibinin bildirdiği bir sorundan yola çıkarak sadece Android üzerinde görülen ilginç bir sorunla karşılaştım. Bu sorun Android ile gelen öntanımlı tarayıcıda yaşanıyor. Kullanıcı için sistem tarafından üretilen bağlantıya kullanıcı &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/13/android-ve-content-disposition-sorunu/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1147&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Üzerinde çalıştığım bir projede içeriklere indirme limiti koyabiliyoruz. Böylelikle kullanıcılar izin verildiği kadar indirme işlemini gerçekleştirebiliyorlar. Sistem tarayıcılarda ve mobil cihazlarda sorunsuz çalışıyor. Ancak bugün test ekibinin bildirdiği bir sorundan yola çıkarak sadece Android üzerinde görülen ilginç bir sorunla karşılaştım.</p>
<p>Bu sorun Android ile gelen öntanımlı tarayıcıda yaşanıyor. Kullanıcı için sistem tarafından üretilen bağlantıya kullanıcı bir kez tıklıyor ancak arkaplanda sunucuya iki istek geliyor. Bunun nedeni de öntanımlı tarayıcının <strong>Content-Disposition</strong> başlık bilgisinde <strong>attachment</strong> gördüğünde bağlantıyı İndirme Yöneticisine aktarması. İlk bağlantıya tıklamada tarayıcı istek yapıyor, ikinci istek ise İndirme Yöneticisi tarafından tarayıcının tetiklemesiyle yapılıyor.</p>
<p>Gerçekten sıkıntı verici bir durum. Çünkü bunu tespit edebilmenin bir yolu yok. Her iki istekte birbirinin aynısı. Tespit etseniz dahi dosyanın sorunsuz bir şekilde indirilebilmesi için ikinci isteğe izin vermeniz gerekiyor.</p>
<p>Bununla ilgili bir test dosyası hazırlamıştım. Android telefonlarda denemek isteyenler bu kodları kullanabilirler:</p>
<p><pre class="brush: php;">
&lt;?php

header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
header(&quot;Expires: Sat, 26 Dec 2011 05:00:00 GMT&quot;);
header(&quot;Content-Type: application/octet-stream&quot;);
header(&quot;Content-Disposition: attachment; filename=\&quot;deneme.JPG\&quot;&quot;);

error_log(var_export($_SERVER, true), 3, &quot;/epsilon/logs/deneme.log&quot;);
echo file_get_contents(&quot;deneme.jpg&quot;);
</pre></p>
<p>İşin diğer kötü tarafı ise ikinci isteğin hep GET ile yapılması. Yani şöyle düşünün; bir form üzerinden özel bir kod girilerek mobil cihaza dosya teslim ettireceksiniz. Müşteri kodu girip gönder butonuna basıyor. Form bilgileri POST ile alınıp dosya teslim ediliyor, sonra İndirme Yöneticisine durum aktarılıyor. İndirme Yöneticisi bu sefer GET ile sayfaya gidiyor ve aslında dosya yerine kod giriş sayfasını indiriyor. Onla alakalıda şu örneğe göz atabilirsiniz:</p>
<p><pre class="brush: php;">
&lt;?php
if ($_SERVER['REQUEST_METHOD'] == 'POST' 
	&amp;&amp; isset($_POST['kod'])
	&amp;&amp; $_POST['kod'] = 123)
{
	header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
	header(&quot;Expires: Sat, 26 Dec 2011 05:00:00 GMT&quot;);
	header(&quot;Content-Type: application/octet-stream&quot;);
	header(&quot;Content-Disposition: attachment; filename=\&quot;deneme.JPG\&quot;&quot;);

	error_log(var_export($_SERVER, true), 3, &quot;/epsilon/logs/deneme.log&quot;);
	echo file_get_contents(&quot;deneme.jpg&quot;);
	exit;
}
error_log(var_export($_SERVER, true), 3, &quot;/epsilon/logs/deneme.log&quot;);
header('Content-Type: text/html; charset=utf-8');
?&gt;

&lt;form method=&quot;POST&quot; action=&quot;&quot;&gt;
&lt;input type=&quot;text&quot; name=&quot;kod&quot; value=&quot;&quot; /&gt;
&lt;button type=&quot;submit&quot;&gt;Gönder&lt;/button&gt;
&lt;/form&gt;
</pre></p>
<p>Bu sorun giderilene kadar dikkatli kod yazmak lazım.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1147/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1147/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1147/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1147&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/13/android-ve-content-disposition-sorunu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Pes</title>
		<link>http://oucel.wordpress.com/2011/12/12/pes/</link>
		<comments>http://oucel.wordpress.com/2011/12/12/pes/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 18:18:36 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1140</guid>
		<description><![CDATA[3 aydan fazla bir süredir twitter, facebook, google+ gibi sosyal ağ hesaplarını kapatıp yaşamaya çalıştım. Bunu devam ettiremeyeceğim sanırım, pes ediyorum Maalesef çevrede olup bitenlerden bu şekilde çok fazla haber alamıyorum. Yalnız beni kendine çeken aslında biraz da Twitter&#8217;ın yeni tasarımıydı. Yeni açtığım hesapla inceleme fırsatı buldum (eski hesapta aktifleşmemiş tasarım). Gerçekten çok kullanışlı olmuş. &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/12/pes/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1140&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>3 aydan fazla bir süredir <a href="http://twitter.com/oucel">twitter</a>, facebook, <a href="https://plus.google.com/114356855715910915373/">google+</a> gibi sosyal ağ hesaplarını kapatıp yaşamaya çalıştım. Bunu devam ettiremeyeceğim sanırım, pes ediyorum <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Maalesef çevrede olup bitenlerden bu şekilde çok fazla haber alamıyorum.</p>
<p>Yalnız beni kendine çeken aslında biraz da Twitter&#8217;ın yeni tasarımıydı. Yeni açtığım hesapla inceleme fırsatı buldum (eski hesapta aktifleşmemiş tasarım). Gerçekten çok kullanışlı olmuş. Benim üyeliğimi tekrar kazanmak için çok büyük bir hamle <img src='http://s2.wp.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1140/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1140/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1140/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1140&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/12/pes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Şike Yasası</title>
		<link>http://oucel.wordpress.com/2011/12/06/sike-yasasi/</link>
		<comments>http://oucel.wordpress.com/2011/12/06/sike-yasasi/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 21:18:26 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[gündem]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1134</guid>
		<description><![CDATA[Bir anda bir yasanın değişmesi, cezaların inmesi ve sanki bunlar normalmiş gibi AK Parti&#8217;nin buna destek vermesi akıl alır gibi değil. Bu yasa son şekliyle meclisten geçerse benim bu ülkeye olan güvenim maalesef epey bir yara alacak. Demek ki hala maddi gücü olan karar aldırabiliyormuş hükümete, demek ki hiç bir şey değişmemiş bunca yıldır.. Şamil &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/06/sike-yasasi/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1134&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Bir anda bir yasanın değişmesi, cezaların inmesi ve sanki bunlar normalmiş gibi AK Parti&#8217;nin buna destek vermesi akıl alır gibi değil. Bu yasa son şekliyle meclisten geçerse benim bu ülkeye olan güvenim maalesef epey bir yara alacak. Demek ki hala maddi gücü olan karar aldırabiliyormuş hükümete, demek ki hiç bir şey değişmemiş bunca yıldır.. </p>
<p><a href="http://zaman.com.tr/haber.do?haberno=1211199">Şamil Tayyar</a> çok güzel özetlemiş durumu: &#8220;Yani bir kopya çeken öğrenciye bile onlarca yıl hapis cezası verildiği bir hukuk sistemi içerisinde, şike suçu için öngörülen cezanın bu kadar az ve çok ağırmış gibi algılanmasını da doğru bulmuyorum&#8221;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1134/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1134/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1134/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1134&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/06/sike-yasasi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>PHP ile Unit Testler Nasıl Yazılır</title>
		<link>http://oucel.wordpress.com/2011/12/04/php-ile-unit-testler-nasil-yazilir/</link>
		<comments>http://oucel.wordpress.com/2011/12/04/php-ile-unit-testler-nasil-yazilir/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 20:49:24 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1124</guid>
		<description><![CDATA[Uzun zamandır kod yazıyorum ancak unit testleri hiç kullanmıyorum. Epey büyük bir eksiklik maalesef.. Bu haftasonu boş kalan vakti bu eksikliği gidermek için kullandım. Bir kaç deneme yaparak en azından başlangıç için ilerleme kaydettiğim söylenebilir. Bugün konuyla alakalı olarak bir video hazırladım. Aşağıdan bu videoya erişebilirsiniz. Harici bir mikrofon olmadığı için ses biraz kısık ancak &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/04/php-ile-unit-testler-nasil-yazilir/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1124&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Uzun zamandır kod yazıyorum ancak unit testleri hiç kullanmıyorum. Epey büyük bir eksiklik maalesef.. Bu haftasonu boş kalan vakti bu eksikliği gidermek için kullandım. Bir kaç deneme yaparak en azından başlangıç için ilerleme kaydettiğim söylenebilir.</p>
<p>Bugün konuyla alakalı olarak bir video hazırladım. Aşağıdan bu videoya erişebilirsiniz. Harici bir mikrofon olmadığı için ses biraz kısık ancak anlaşılır seviyede. Videonun son kısımlarında da uygulamanın çalışması ile ilgili beklenmedik bir sorun çıktı. Bu sorunlar haricinde &#8220;PHP de unit test yazarak nasıl uygulama geliştirebilirim?&#8221; sorusuna biraz da olsa cevap bulabilirsiniz.</p>
<span style="text-align:center; display: block;"><a href="http://oucel.wordpress.com/2011/12/04/php-ile-unit-testler-nasil-yazilir/"><img src="http://img.youtube.com/vi/frrUdmGJk98/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1124/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1124/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1124/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1124&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/04/php-ile-unit-testler-nasil-yazilir/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Prezi : Sunum Hazırlamanın Kolay Yolu</title>
		<link>http://oucel.wordpress.com/2011/12/02/prezi-sunum-hazirlamanin-kolay-yolu/</link>
		<comments>http://oucel.wordpress.com/2011/12/02/prezi-sunum-hazirlamanin-kolay-yolu/#comments</comments>
		<pubDate>Fri, 02 Dec 2011 20:10:51 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[İnternet]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1120</guid>
		<description><![CDATA[Scrum ve Kullanıcı Hikayeleri başlıklı bir sunum hazırlamam gerekiyordu. Kullanımı kolay bir uygulama bulmak için web üzerinde araştırma yaparken prezi.com sitesi ile karşılaştım. Eğer öğrenci ya da öğretmenseniz &#8220;EDU Enjoy&#8221; aboneliğine ücretsiz sahip olabiliyorsunuz. Bunun için sadece üniversite e-posta adresinizin olması yeterli. Boş yere sunum hazırlamak için masaüstü uygulaması ile uğraşmayın. Sitenin sunduğu geniş alan &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/12/02/prezi-sunum-hazirlamanin-kolay-yolu/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1120&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://prezi.com/bqixbxztkb8i/scrum-ve-kullanc-hikayeleri/">Scrum ve Kullanıcı Hikayeleri</a> başlıklı bir sunum hazırlamam gerekiyordu. Kullanımı kolay bir uygulama bulmak için web üzerinde araştırma yaparken prezi.com sitesi ile karşılaştım. Eğer öğrenci ya da öğretmenseniz &#8220;EDU Enjoy&#8221; aboneliğine ücretsiz sahip olabiliyorsunuz. Bunun için sadece üniversite e-posta adresinizin olması yeterli.</p>
<p>Boş yere sunum hazırlamak için masaüstü uygulaması ile uğraşmayın. Sitenin sunduğu geniş alan ile standartların dışına çıkarak sunumlarınızı hazırlayıp bunları hızlıca paylaşabilirsiniz. Birden çok kişinin tek bir sunum üzerinde çalışması gibi bir özellik de mevcut.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1120&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/12/02/prezi-sunum-hazirlamanin-kolay-yolu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
		<item>
		<title>Projeler için Kullanıcı Hikayeleri</title>
		<link>http://oucel.wordpress.com/2011/11/23/projeler-icin-kullanici-hikayeleri/</link>
		<comments>http://oucel.wordpress.com/2011/11/23/projeler-icin-kullanici-hikayeleri/#comments</comments>
		<pubDate>Wed, 23 Nov 2011 00:19:30 +0000</pubDate>
		<dc:creator>Ömer</dc:creator>
				<category><![CDATA[Geliştirme]]></category>
		<category><![CDATA[scrum]]></category>

		<guid isPermaLink="false">http://oucel.wordpress.com/?p=1093</guid>
		<description><![CDATA[Kişisel projelerde çoğumuz dökümantasyona dikkat etmiyoruz. Bununda tabi ki kişiden kişiye değişen geçerli sebepleri vardır muhakkak. Ancak şöylede bir gerçek var ortada: dökümante edilmeyen fikirler ister istemez projenin bir yerde tıkanmasına sebep oluyor. Çünkü fikirler aklımızda ve sürekli -ve bazende hedefsiz bir şekilde- değişebiliyor. Bu durumdan kurtulmanın tek yolu fikirleri yazıya aktarmak gibi görünüyor. Bunuda &#8230; <span class="more-link"><a href="http://oucel.wordpress.com/2011/11/23/projeler-icin-kullanici-hikayeleri/">Continue reading &#187;</a></span><img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1093&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Kişisel projelerde çoğumuz dökümantasyona dikkat etmiyoruz. Bununda tabi ki kişiden kişiye değişen geçerli sebepleri vardır muhakkak. Ancak şöylede bir gerçek var ortada: dökümante edilmeyen fikirler ister istemez projenin bir yerde tıkanmasına sebep oluyor. Çünkü fikirler aklımızda ve sürekli -ve bazende hedefsiz bir şekilde- değişebiliyor.</p>
<p>Bu durumdan kurtulmanın tek yolu fikirleri yazıya aktarmak gibi görünüyor. Bunuda çok detaya kaçmadan Scrum metodolojisi içerisinde &#8220;User Stories&#8221; olarak nitelendirilen kullanıcı hikayelerini yazarak gerçekleştirebiliriz. Scrum metodolojisine göre çalışmasanız bile, kullanıcı hikayeleri projenize ait fikirlerin her zaman elinizin altında olmasını sağlar; projeye günlerce vakit ayırmasanız bile fikirleriniz bir yerde saklı kalır.</p>
<p>Bir kullanıcı hikayesinin yapısı oldukça basittir. Aşağıda bu yapıya göz atabilirsiniz:</p>
<p>Bir <strong>[aktör]</strong> bir <strong>[eylem]</strong> yapar ve bir <strong>[sonuç]</strong> oluşur.</p>
<p><strong>[aktör] :</strong> Kullanıcı hikayesinin sahibidir ve bu genelde kullanıcıyı temsil eder.</p>
<p><strong>[eylem] :</strong> Aktörün gerçekleştirmek istedği aksiyon.</p>
<p><strong>[sonuç] :</strong> Gerçekleşen aksiyon sonucunda oluşan sonuç.</p>
<p>Bir örnek vermek gerekirse:</p>
<p><strong>No : 01<br />
Başlık :</strong> Kullanıcı Kayıt İşlemi<br />
<strong>Açıklama :</strong> Kullanıcı kayıt olma sayfasına girdikten sonra email, parola ve güvenlik kodu alanlarını doldurur. Kaydet butonu ile kayıt işlemini gerçekleştirir.</p>
<p>Kullanıcı hikayeleri yazarken dikkat edilmesi gereken şeyler vardır. Öncelikle tek bir işleme odaklanmaya çalışılmalıdır. Aynı anda birden fazla işlem tek bir kullanıcı hikayesinde barınmamalıdır. Örneğin aşağıdaki kullanım şekli hatalıdır:</p>
<p><strong>Başlık :</strong> Kullanıcı Kayıt İşlemi<br />
<strong>Açıklama :</strong> Kullanıcı kayıt olma sayfasına girdikten sonra email, parola ve güvenlik kodu alanlarını doldurur. Kaydet butonu ile kayıt işlemini gerçekleştirir. <em>Kullanıcı ayrıca Facebook Login ve Twitter Login sistemleri ilede kayıt işlemini gerçekleştirebilir.</em></p>
<p>Bu yanlış kullanımdan kurtulmak için mümkün olan en küçük ve anlamlı işlemi kullanıcı hikayesi haline getirmeye çalışmalıyız. Yukarıdaki hatalı hikayeyi 3 farklı kullanıcı hikayesi ile düzeltebiliriz. Birincisini ilk örnekte yazmıştık, şimdi diğer kullanıcı hikayelerini örneklendirelim:</p>
<p><strong>No : 02<br />
Başlık :</strong> Facebook Login İle Kayıt İşlemi<br />
<strong>Açıklama :</strong> Kullanıcı kayıt olma sayfasına girdikten sonra facebook login bağlantısına tıklar. Facebook api ile gerçekleşen login işleminden sonra kayıt işlemi gerçekleşir.</p>
<p><strong>No : 03<br />
Başlık :</strong> Twitter Login İle Kayıt İşlemi<br />
<strong>Açıklama :</strong> Kullanıcı kayıt olma sayfasına girdikten sonra twitter login bağlantısına tıklar. Twitter api ile gerçekleşen login işleminden sonra kayıt işlemi gerçekleşir.</p>
<p>Gördüğünüz gibi bu şekilde ayırmak hem yapılacak işlemin ne olduğunu daha belirgin hale getirdi, hem de projeye katılabilecek olası çalışma arkadaşlarına görev atama işlemlerini kolaylaştırdı. Çünkü yapılacak iş teke düşürüldükçe, atama işlemi ve bunun takibi daha kolay hale geliyor. Ayrıca uğraşmaya başladığınız bir işe ayıracağınız vakit kısaldığı için psikolojik olarak projeden kopmamış oluyorsunuz.</p>
<p>Sizi bilmem ama benim çok garip yapılacak işler listem oluyordu. Mesela şu şekilde yapılacak işler belirliyordum : Kayıt sayfası tamamlanacak, profil sayfası tamamlanacak.. Haliyle proje bitmiyordu, fikirler çöpe gidiyordu.. Nedeni ise bir işe bir çok işin bağlanmasıydı. Kullanıcı hikayeleri bu tür şeylerden sizi koruyor -tabi düzgün yazılırsa-.</p>
<p>Kullanıcı hikayeleri yazmanın bir diğer güzelliğide test işlemlerini kolaylaştırmasıdır. Kişisel çalışmalarda buna belki vakit ayırmak güç olabilir ama genede yazmakta fayda var. Peki bunu nasıl yazacağız? 01 numaralı kullanıcı hikayesi ile bunu örneklendirelim:</p>
<p><strong>No : 01<br />
Başlık :</strong> Kullanıcı Kayıt İşlemi<br />
<strong>Açıklama :</strong> Kullanıcı kayıt olma sayfasına girdikten sonra email, parola ve güvenlik kodu alanlarını doldurur. Kaydet butonu ile kayıt işlemini gerçekleştirir.<br />
<strong>Test1 :</strong> Zorunlu olan email, parola ve güvenlik kodu alanları doldurulmadan kaydet butonuna tıklanarak &#8220;Zorunlu alanlar boş bırakılmamalı&#8221; hatası alınmalı.<br />
<strong>Test2 :</strong> Daha önce kayıt işlemini gerçekleştiren bir email ile kayıt işlemi tekrarlanarak &#8220;Bu email kullanılmakta&#8221; hatası alınmalı.<br />
<strong>Test3 :</strong> 6 karakterden küçük bir parola girilerek &#8220;Parolanız 6 karakter ya da daha büyük olmalı&#8221; hatası alınmalı.<br />
<strong>Test4 :</strong> Güvenlik kodu hatalı girilerek &#8220;Güvenlik kodunu hatalı girdiniz&#8221; hatası alınmalı.</p>
<p>Son olarak belirtmem gereken şey ise kullanıcı hikayelerine bir puan ya da öncelik değeri atamanız. Bu halde bırakırsanız hangi hikayeler önemli, hangileri önemsiz ayrımını yapmak vakit alabilir. En iyisi bu puan ya da önceliği kullanıcı hikayesini yazarken atamanız. Tüm hikayeleri tamamladıktan sonra en öncelikli ya da en yüksek puanlı hikayelerden başlayarak projenizi geliştirmeye başlayabilirsiniz.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/oucel.wordpress.com/1093/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/oucel.wordpress.com/1093/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/oucel.wordpress.com/1093/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=oucel.wordpress.com&amp;blog=26465009&amp;post=1093&amp;subd=oucel&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://oucel.wordpress.com/2011/11/23/projeler-icin-kullanici-hikayeleri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/294efc2905891749e1e4ab176b386ae5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">oucel</media:title>
		</media:content>
	</item>
	</channel>
</rss>
