Kategoriler

Benim için 2016 nasıl geçti?

13 yorum

Her sene böyle bir yazı hazırlıyorum, bu sene de yılımı değerlendirmek için bu yazıyı yazıyorum 🙂

Bu yıl içerisinde çok büyük 2 olay yaşadım.
1- Darkod ofisini kapattım.
2- Türkiye’den Malta‘ya taşındım.

Evet, Malta’ya geldiğim için ofisimizi kapatmak zorunda kaldım, arkamda bir çok sevdiğimi bırakarak Malta’ya yerleştim. Burada bir hayat kurmaya, düzen oluşturmaya çalıştım. Elbette fırsatım oldukça gidip ailemi ve sevdiklerimi ziyaret ediyorum ancak artık burada bir düzen kurup yaşamaya çalışıyorum.

Bu aldığım kararın Türkiye’de olan olaylarla çok bir alakası yok, Türkiye son günlerini bile yaşayacak olsa vatanımı terk etmem. Bu aldığım kararlar tamaman kendimle alakalı, yani geçen yıldan kendime verdiğim sözler vardı. Yeni bir dil öğrenmek, gelirimi artırmak gibi. Sonuçta nerede doğduğun değil nerede doyduğun önemli demişler.

Burada ki şartlar ve bana katacakları daha iyi olduğunu düşündüğüm için ciddi bir karar vererek Malta’ya taşındım.

Geçen yıllarda aldığım şeyleri de söylüyordum, ancak daha sonra biraz düşününce bunun görgüsüzlük olarak algılanabileceğini fark ettim. Bu yüzden kayda değer bir şey almadığım sürece şunu bunu aldım demeyeceğim. Belki aldıklarımın ne üzerine olduğundan bahsederim 🙂

Ancak bu yıl kayda değer aldığım bir şey var. Oda arabam! Evet, o kadar güzel bir duygu ki 🙂 Sonunda kendime ait güzel bir şeyim var. Bu yıl kendime güzel bir araba aldım, gerçi aldıktan 1 ay sonra babama bırakıp Malta’ya yerleştim ama olsun sonuçta aldım 😀

Babam içinde çok güzel bir haber oldu, onu öyle duygulu gördüm gururlu gördüm ya, bu saatten sonra ölsem de gam yemem. Bir şeyleri başardım!

Onun dışında bu yıl sürekli youtuber olmak istedim, hep bunun üzerine ürünler aldım. Kameralar, teknik ekipmanlar, ışıklar vs. Ama bir türlü youtuber olamadım, çünkü öyle kamerayı açıp sadece kendimi ve günlük rutinlerimi çekmek bana mantıklı gelmedi. Ben kimim aq? Öyle düşününce bir çok kez çektiklerimi koymaktan vazgeçtim 😀 Ama bir gün doğru konsepti bulup youtuber olacağım, şimdilik eğitim videolarıyla devam!!

Bu yıl beni üzen tek şey aslında hazırladığım eğitim videoları. Koca bir yılda sadece 9 tane eğitim videosu hazırlamışım, şaka mı lan bu? Şaka değil, gerçek 🙁 Ama bunun sebepleri belli, yine de bahaneler ardına saklanmak istemiyorum o yüzden yeni yılda hedeflerimi çok daha büyük tutacağım.

Bu yıl içinde en çok hissettiğim duygu ise özlem oldu, sevdiğim insanların yanımda olmasına, yanımda olmasa bile en fazla yarım saatte gidip yanlarında olabileceğimi bilmeye alışmıştım. Şimdi böyle uzun zaman sonra görmek bir garip oluyor, ama sanırım bununla baş edebilirim. Sonuçta bunu tek yapan ben değilim değil mi?

Bu yıl Jonathan’ı göstermiştim sizlere, burada aldığım papağanım. Ne yazık ki gözlerimde ki rahatsızlıktan dolayı vermek zorunda kaldım, artık benimle değil. Asla bir hayvanın günahına bu şekilde girmek istemem, ancak sağlık devreye girdiği için böyle bir karar aldım. Yoksa benim yanımda olan, ölene kadar benimle kalır. Bunun en büyük örneği 4 senedir yanımda olan Sultan ve Süleyman kuşlarım gibi.

Bu yılın garip olanı ise 3 telefon kaybetmem oldu. Yani yat durunda cebimde telefonla atlamak, 2. aldığımı düşürüp parçalamak, 3. aldığımı 7 çıkacak diye satıp 7’yi alamamak gibi 😀 Çokta uğraşmamak lazım, şu an 7 var ama bilin bakalım o nerede? Apple teknik servisinde, oda düştü ve kırıldı. Allah’ım çekilecek günahım mı var nedir?

Bu yılın en güzel gelişmesi ise Malta’ya taşındıktan sonra edindiğim farklı ülkelerden, farklı kültürleri olan arkadaşlarım. Gianfranco örneğin, italyan sosyal medya uzmanı. Mindaugas örneğin, litvanyalı ve front-end developer. Rachel örneğin, malta’lı ve marketing’ci. Helen mesela, ingiliz ve customer support. Ve daha niceleri, arap nargileciden tutunda, italyan dövmecisine kadar bir çok tanıdığım farklı insan var ve bu beni çok mutlu ediyor. Çünkü onlarla oturup konuşmak bile, aslında dünyada milyarlarca farklı fikrin olduğunu ortaya çıkarıyor.

Ön yargılı mı yaklaşıyorum yoksa benim çevrem mi bu şekildeydi bilmiyorum, ancak eskişehir’de sıradan insanlarla bile konuştuğunuzda duyduğunuz tek şey çoğunlukla geçim zorluğu, devlet düşmanlığı ve aşk acıları oluyor. Ancak burada bunun aksine herkesin çok farklı fikirleri var, öğrendiğim en önemli şey ise, bu adamlar kendilerini çok önemsiyorlar. Bu kadar yıl yaşadım, kendimi hiç önemsediğimi hatırlamam. Ama belki de önemsemek gerekir, önce kendimizi iyi hissetmek için bir şeyler yapmamız gerekir. Geçim derdine düşmeden cebinde paran azsa bile eğlenmesini bilmek gerekir.

“Mutluluğun parayla orantılı olmadığını anlamak için hala çok geç değil..”

Ayrıca bu yıl geçen yıl ki hedeflerimden 2’sini gerçekleştirdim. Geçen yıl yeni bir dil demiştim, ingilizce’yi öğrenmeye başladım ve ana dili ingilizce olan bir ülkede yaşıyorum. Bir diğeride 2015 kazancımı artırmaktı, geçen yıl 200+ bin üzeri kazanmıştım bu yıl bunu 400+ bin üzerine çıkardım. Ama önemli olan ne kadar kazandığın değil, kazandığınla neler yaptığındır. Bu yıl öyle zamanlar oldu ki birkaç tl’yi arar olduğum zamanlar yaşadım. Ama sonuç olarak buradayız, ve ölmedik 🙂

Yeni yıldan beklentim, ingilizcemi daha iyi geliştirmek. Bu yıl kazandığımdan çok daha fazlasını kazanmak. En az 70 eğitim videosu hazırlamak. En az 3 geçerli proje hazırlamak. Ve artı kendim için bir şeyler yapmaya başlamak.

Gelenekleri yerine getirip yeni yıl şarkımı şuraya bırakıyorum;

Ayrıca bkz:
Benim için 2015 nasıl geçti?
Benim için 2014 nasıl geçti?
Benim için 2013 nasıl geçti?
Benim için 2012 nasıl geçti?

Konuyu görmek için tıklayın

PHP ile Sıfırdan Proje Oluşturmak

51 yorum

Bugün bir seriye başlamaya karar verdim. Aslında ilk bölümü çektiğimde bunun bir seri olmasını beklemiyordum ancak zaten eski PHP derslerim eskidiği için yenisini bunun ile çekebilirim.

İlk ders bir projenin altyapısı nasıl olmalı onunla ilgili. Yaklaşık 1 saatten uzun ve bir çok aksiliklerle dolu videoya aşağıdan ulaşabilirsiniz;

Güncelleme: .htaccess dosyanızda RewriteRule kuralının sonuna [QSA] ekleyin. Aksi taktirde $_GET parametrelerini çalıştıramazsınız. Örnek dosyalarda ben değişikliği yaptım, seviliyorsunuz.

Veritabanı sınıfı: https://github.com/tayfunerbilen/BasicDB
Permalink fonksiyonu: http://www.erbilen.net/php-sef-link-fonksiyonu
BasicDB Kullanımı: https://www.youtube.com/watch?v=RX7YxiMYzfA
Örnek dosyalar: https://yadi.sk/d/tt86xMDcxPYFc

Konuyu görmek için tıklayın

Tasarımlarda Standart Sistem Fontunu Kullanmak

1 yorum

Kodladığımız tasarımlarda farklı işletim sistemlerinde farklı font görüntüleri alıyoruz. Çünkü ne olursa olsun hepsinin kendine göre kriterleri var ve aynı sonucu göstermiyor. Ancak sistemlerin kendi standart fontları yeterince tutarlı öyle değil mi? O halde bootstrap 4’ün yaptığı gibi bizde hangi işletim sisteminden girildiyse o işletim sistemine ait standart fontu gösterebiliriz.

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
}

Bunu kullandıktan sonra farklı işletim sistemlerinden deneyerek sonuca ulaşabilirsiniz.

Konuyu görmek için tıklayın

Zincirleme (Chain) Metodu

3 yorum

Bir çoğunuz yazılmış sınıfları incelediğinizde şu şekilde bir yazım tarzıyla karşılaşmış olabilirsiniz.

$text = new Text();
echo $text->write('Tayfun Erbilen')->color('red')->fontSize('20px')->show();

Bu örneğe ait sınıfımızı oluşturalım hemen.

class Text {
	
	private $text;
	private $style;

	public function write($text)
	{
		$this->text = $text;
	}

	public function color($color)
	{
		$this->style .= 'color: ' . $color . ';';
	}

	public function fontSize($size)
	{
		$this->style .= 'font-size: ' . $size . ';';
	}

	public function show()
	{
		return '<div style="' . $this->style . '">' . $this->text . '</div>';
	}

}

Ancak bu örnek hata verecektir. Çünkü bu şekilde bir yazım tarzı için yapmanız gereken $this objenizi geriye döndürmek. Yani sınıfımızı şu şekilde düzenlersek eğer;

class Text {
	
	private $text;
	private $style;

	public function write($text)
	{
		$this->text = $text;
		return $this;
	}

	public function color($color)
	{
		$this->style .= 'color: ' . $color . ';';
		return $this;
	}

	public function fontSize($size)
	{
		$this->style .= 'font-size: ' . $size . ';';
		return $this;
	}

	public function show()
	{
		return '<div style="' . $this->style . '">' . $this->text . '</div>';
	}

}

Artık bu şekilde bir kullanımı yapmaya hazırız.

Chain (zincirleme) metodu aynı zamanda jQuery içinde aynı mantıkta çalışır. Muhtemelen her dil için bu mantıktadır. Örneğin jQuery’de bir örnek vermem gerekirse, basit bir eklenti hazırlayalım.

$.fn.Text = function(text){
  $(this).html(text);
};

$('body').Text('Tayfun Erbilen').css({
    'color': 'red',
    'font-size': '20px'
  });

Bu şekilde bir zincirleme kullanımda çalışmayacaktır. Çünkü bir this objesi döndürmedik eklentimizde geriye. Eğer geriye this’i döndürürsek geriye kalan jQuery metodlarını da zincirleme olarak kullanabilirsiniz. O halde buna göre düzelttiğimizde son kod parçamız şöyle olacak;

$.fn.Text = function(text){
  $(this).html(text);
  return this;
};

$('body').Text('Tayfun Erbilen').css({
    'color': 'red',
    'font-size': '20px'
  });
Konuyu görmek için tıklayın

Dribbble Api Kullanımı

yorum yok

Merhaba arkadaşlar, bu konuda sizlere dribbble api kullanımını göstermek istiyorum.
Geçenlerde uzman cevap’ta sorulan bir soru üzerine böyle bir ders hazırlama gereği duydum.
Esasında tüm API’ler projelerde aynı mantıkta çalışır. Kullanıcı hesabına yetki verilir ve oluşturulan token ile sorgular oluşturulur.

Sırasıyla bu adımları görelim 🙂

1) Uygulama oluşturma

Öncelikle https://dribbble.com/account/applications/new adresine girerek yeni bir uygulama oluşturun.
Burada önemli olan Callback URL adresiniz. Çünkü daha sonra bunu kullanacağız. Çalışan bir siteniz üzerinde bir Callback URL oluşturursanız iyi olur sizin için.

Uygulamanızı oluşturduktan sonra şu değerlere sahip olacaksınız, bunları saklayın!

Screenshot_29

2) Uygulamaya İzin Verme

Oluşturduğumuz uygulamayı kullanmak için mevcut dribbble hesabımız ile bu uygulamaya izin vermek gerekiyor. Şimdi şöyle bir link yapısı oluştuacağız;
https://dribbble.com/oauth/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URL&scope=public&state=123456

Buradaki değerleri açıklayayım;
client_id – İlk adımda uygulamayı oluşturduktan sonra sahip olduğumuz Client ID değerimizo olacak.
redirect_uri – Uygulamayı oluştururken kullandığımız Callback URL olacak.
scope – Burada biz genel bilgilere ulaşacağımız için public olarak belirledik. Diğer değerler için şuraya bakabilirsiniz.
state – rasgele üretilmiş bir değer girin.

Şimdi yukarıdaki linke girdiğimizde hesabımız için uygulamaya izin vermemizi isteyecek.

Screenshot_30

İzin verdikten sonra bizi callback url’e gönderecek ve burada code değerini alacağız.

Örneğin ben yaptığımda şöyle bir url oluştu;
http://www.erbilen.net/?code=b83001d95d2182918bdc530d3b8fd056b0a1d14808071597b9fe17c008a5d741&state=123456

Buradaki code değerini alıp 3. adıma geçebiliriz.

3) Token Oluşturma

Bu adımda https://dribbble.com/oauth/token bu url’e post yapmamız gerekiyor.

Post olarak göndereceğiz değerler;

client_id – Uygulamayı oluşturduktan sonra sahip olduğumuz Client ID.
client_secret – Uygulamayı oluşturduktan sonra sahip olduğumuz Client Secret.
code – 2. adımda sahip olduğumuz code değeri.
redirect_uri – Uygulamayı oluştururken belirlediğimiz Callback Url

Ben Postman yardımıyla bu post işlemini gerçekleştirdim ve sonucunda ise kullanacağım access_token’a sahip oldum.

Screenshot_31

Lazım olur diye jquer ve php’de post işlem kodlarını paylaşıyorum

PHP kodu:

 "https://dribbble.com/oauth/token",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"client_id\"\r\n\r\nc13ba2b61a1d18e25cb9ae8f280bef14db688b705159dfa6edb4320fba00277d\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"client_secret\"\r\n\r\n7015568247e0f0dd875d004ddab3911c2d426ba2fad7b7995f973b0eebfd1680\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"code\"\r\n\r\nb83001d95d2182918bdc530d3b8fd056b0a1d14808071597b9fe17c008a5d741\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"redirect_uri\"\r\n\r\nhttp://www.erbilen.net\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "cache-control: no-cache",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}

jQuery Kodu:

var form = new FormData();
form.append("client_id", "c13ba2b61a1d18e25cb9ae8f280bef14db688b705159dfa6edb4320fba00277d");
form.append("client_secret", "7015568247e0f0dd875d004ddab3911c2d426ba2fad7b7995f973b0eebfd1680");
form.append("code", "b83001d95d2182918bdc530d3b8fd056b0a1d14808071597b9fe17c008a5d741");
form.append("redirect_uri", "http://www.erbilen.net");

var settings = {
  "async": true,
  "crossDomain": true,
  "url": "https://dribbble.com/oauth/token",
  "method": "POST",
  "headers": {
    "cache-control": "no-cache"
  },
  "processData": false,
  "contentType": false,
  "mimeType": "multipart/form-data",
  "data": form
}

$.ajax(settings).done(function (response) {
  console.log(response);
});

4) API’yi Kullanalım

Artık bir access_token sahibi olduğumuz için API’deki metodları kullanıp istediğimizi yapabiliriz.

Örneğin kendi bilgilerimizi çekelim.

İlgili url’im;
https://api.dribbble.com/v1/user?access_token=ACCESS_TOKEN

Burada 3. adımda elde ettiğimiz access_token ile kendi bilgilerimizi kolayca çekebildik.

Screenshot_32

Ya da başka bir örnek yapalım.
Örneğin Sencer abi’nin son shot’larını çekelim.

İlgili url;
https://api.dribbble.com/v1/users/sencerbugrahan/shots?access_token=ACCESS_TOKEN

Sonuç;

Screenshot_33

Demo

Adımları uygulayarak bu uygulamayı hazırladım, sizlerde daha fazlasını yapabilirsiniz 🙂
http://tayfun.net/demo/dribbble-api/

İndir

http://tayfun.net/demo/dribbble-api/dribbble.zip

Konuyu görmek için tıklayın

JavaScript Object Length Kullanımı

yorum yok

Bir dizinin boyutunu öğrenmek için length özelliğini kullanabilirsiniz. Örneğin;

var arr= ['Tayfun', 'Murat'];

alert(arr.length); // Output: 2

Ancak bunu bir object için yapmak istediğimizde biraz daha farklı şekilde kullanıyoruz;

var obj = new Object();
obj['name'] = 'Tayfun';
obj['surname'] = 'Erbilen';

alert(Object.keys(obj).length); // Output: 2

Kaynak: http://stackoverflow.com/a/6700

Konuyu görmek için tıklayın

Kişisel Alan Adlarının Önemi

1 yorum

Yıllar önce ilk kez erbilen.com ve daha sonra tayfunerbilen.com alan adlarıyla bu sektöre girmiştim.
Gariptir ki şuan 2 domainde bende değil, başkaları tarafından alınmış. Hatta erbilen.com için 2.000 $ gibi salakça bir rakama satıyorlar domain satış sitesinde 🙂

Bu yüzden aslında kişisel alan adları çok önemli. Eğer adınız ve soyadınız ve ya sadece adınız ve ya soyadınızla ilgili domainleri alabiliyorsanız alın ve saklayın.

Zira bir gün popüler olduğunuzda, tanındığınızda ya da düşman edindiğinizde bunu size karşı kullanacak çok fazla insan çıkacak.

Yıllar içerisinde ben buna çok kez şahit oldum, insanlar o kadar işsiz ki gerçekten uğraşıyorlar.
Doğal olarakta google’da adınız soyadınız aratıldığında onlar ne göstermek isterlerse onları gösteriyorlar, buda sizin için iyi sonuçlanmıyor çoğu zaman.

Bu yüzden size tavsiyem, hemen kişisel alan adlarınızı alıp uzun ömürlü saklayın.

Bana ait olan kişisel alan adlarım;

http://www.tayfunerbilen.com.tr
http://www.tayfunerbilen.com
http://www.tayfunerbilen.net
http://www.tayfunerbilen.org
http://www.erbilen.net
http://www.erbilen.org
http://www.tayfun.net

Başka bir alan adında benimle ilgili bir şeyler görürseniz ben olmadığımdan emin olabilirsiniz artık 🙂

Kolay gelsin.

Konuyu görmek için tıklayın

OS X El Capitan Sass Kurulum Hatası ve Çözümü

yorum yok

Yakın zamanda mac’de işletim sistemimi güncelledim.
Ancak daha sonra sass’ı kullanamaz oldum.
Kurulum yaparken ise şöyle bir hata alıyordum;

ERROR:  While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/sass

Daha sonra biraz araştırınca benim gibi bir çok kişi el capitan’da sorun yaşamış.
Şöyle bir issue‘ya denk geldim ve çözümünü burada buldum. Sorun yaşayanlar için çözüm;

sudo gem install sass

yerine

sudo gem install -n /usr/local/bin sass

şeklinde kurulum yapmak.

Sorun yaşanlar olursa diye blog’da bulundurmak istedim bu konuyu 🙂
Bol kodlamalı günler.

Konuyu görmek için tıklayın

PHP timeAgo Fonksiyonu

8 yorum

Daha önce şurada paylaştığım halini unutup yeni halini kullanabilirsiniz 🙂

<?php

/**
 * @param $date
 * @return mixed
 */
function timeAgo($date)
{
    $timestamp = strtotime($date);
    $currentDate = new DateTime('@' . $timestamp);
    $nowDate = new DateTime('@' . time());
    return $currentDate
        ->diff($nowDate)
        ->format(' %y yıl %m ay %d gün %h saat %i dakika %s saniye önce');
}

$date = '2015-03-12 14:05:14';
echo timeAgo($date);
Konuyu görmek için tıklayın

Geliştiriciler için Mağaza – Varianto:25

10 yorum

Geçenlerde buradan birkaç sipariş verdim.
Örneğin code:deck‘i çok aramıştım burada buldum 😀
Gerçi çok fazla seçenek yok şuan için ama alabileceğiniz güzel birkaç şey mevcut.

Ancak alışveriş yapabilecek olanlara küçük bir uyarı vermek için bu konuyu açıyorum.
Satın alma işlemini paypal ile yaptıktan sonra ee adresi nereye gireceğiz demeyin, çünkü siparişi paypal’da kayıtlı adresinize gönderiyorlar.
Bizim gibi unutan olursa şayet [email protected] adresine adres değişikliğiyle ilgili bir mail atsın, kısa sürede cevap gelecektir.
Ben Malta’ya sipariş verdim ve 3 gün içerisinde geldi, baya hızlı yani 🙂

CfcG5YiWEAEaZEe

Konuyu görmek için tıklayın