## 1. Project Overview & Quickstart (mksglu/LICENSE)

# LICENSE

Open-source repository mksglu/LICENSE

### Repository Details
- **Repository:** [mksglu/LICENSE](https://github.com/mksglu/LICENSE)
- **Primary Language:** Code

*Note: High-volume repository documentation is actively indexed and synchronized by YakaAI.*

## 2. Official Technical Reference & Guides (mksglu/mksglu.github.io)

## File: README.md

##  mksglu.github.io

---

## File: _config.yml

# basic options
title: Mert Köseoğlu
author: mksglu
email: your-email@domain.com
twitter_username: jekyllrb
github_username:  jekyll

# Build settings
markdown: kramdown
theme: minima

---

## File: javascript-dersleri.md

---
id: 3793
title: JavaScript Dersleri
date: 2017-08-08T03:33:32+00:00
author: Mert Köseoğlu
layout: page
guid: https://www.mkoseoglu.com/?page_id=3793
---
Yerel betimde yazmaya özen gösterdiğim ve tamamlamak için uğraş verdiğim [JavaScript derslerini](https://www.mkoseoglu.com/etiket/javascript-dersleri/) sırası ile görüntüleyebilirsiniz. Sorularınızı konu altlarına yorum olarak sorabilirsiniz.

  1. [JavaScript: Başlangıç](https://www.mkoseoglu.com/javascript-baslangic)

---

## File: kotlin-dersleri.md

---
id: 3704
title: Kotlin Dersleri
date: 2017-06-22T07:59:06+00:00
author: Mert Köseoğlu
layout: page
guid: https://www.mkoseoglu.com/?page_id=3704
---
Yerel betimde yazmaya özen gösterdiğim ve tamamlamak için uğraş verdiğim [Kotlin dersleri](https://www.mkoseoglu.com/etiket/kotlin-dersleri/)ni sırası ile görüntüleyebilirsiniz. Sorularınızı konu altlarına yorum olarak sorabilirsiniz.

  1. [Kotlin&#8217;e Giriş](https://www.mkoseoglu.com/kotline-giris)
  2. [Kotlin: JAVA JDK ve IntelliJ IDEA Yükleyelim](https://www.mkoseoglu.com/kotlin-java-jdk-ve-intellij-idea)
  3. [Kotlin: Temel Sözdizimine Genel Bakış](https://www.mkoseoglu.com/kotlin-sozdizimine-genel-bakis)
  4. [Kotlin: Koşul İfadeleri](https://www.mkoseoglu.com/kotlin-kosul-ifadeleri)
  5. [Kotlin: Yineleyiciler & Döngüler](https://www.mkoseoglu.com/kotlin-yineleyiciler-donguler)

&nbsp;

---

## File: laravel-dersleri.md

---
id: 3729
title: Laravel Dersleri
date: 2017-07-01T22:58:32+00:00
author: Mert Köseoğlu
layout: page
guid: https://www.mkoseoglu.com/?page_id=3729
---
Yerel betimde yazmaya özen gösterdiğim ve tamamlamak için uğraş verdiğim [Laravel derslerini](https://www.mkoseoglu.com/etiket/laravel-5-4-dersleri/) sırası ile görüntüleyebilirsiniz. Sorularınızı konu altlarına yorum olarak sorabilirsiniz.

  1. [Laravel 5.4 ile Blog Yapalım – Başlangıç](https://www.mkoseoglu.com/laravel-5-4-ile-blog-yapalim-baslangic)
  2. [Laravel 5.4 ile Blog Yapalım – Bölüm 1](https://www.mkoseoglu.com/laravel-5-4-blog-bolum-1)

---

## File: nativescript-dersleri.md

---
id: 3732
title: NativeScript Dersleri
date: 2017-07-01T23:02:05+00:00
author: Mert Köseoğlu
layout: page
guid: https://www.mkoseoglu.com/?page_id=3732
---
Yerel betimde yazmaya özen gösterdiğim ve tamamlamak için uğraş verdiğim [NativeScript derslerini](https://www.mkoseoglu.com/etiket/nativescript-dersleri/) sırası ile görüntüleyebilirsiniz. Sorularınızı konu altlarına yorum olarak sorabilirsiniz.

  1. [NativeScript – Başlangıç](https://www.mkoseoglu.com/nativescript-baslangic)

---

## File: turkce-yazilim.md

---
id: 3455
title: Türkçe Yazılım
date: 2017-04-19T09:16:10+00:00
author: Mert Köseoğlu
layout: page
guid: https://www.mkoseoglu.com/?page_id=3455
ampforwp-amp-on-off:
  - default
---
Türk dili hakkında bir fikir sahibi olmak istersek şayet; en eski hesaplamalara göre 8.500 senelik bir geçmişten söz etmek mümkündür. Bu denli köklü bir dilin günümüzde “Plaza Türkçesi” ya da bir başka deyişle değerli Türk bilim insanı Sn. Oktay Sinanoğlu’nun tabiri ile “Anglomanca” olarak adlandırılan bu dil yozlaşması bizlerin bu yola çıkmasında büyük rol oynamıştır. Bizlerin tek dileği Türkçemizi her alanda ve sektörde yabancı dillerin kıskacından kurtarmak, arındırmak ve öz Türkçemizi korumaktır.

Yazılım ve teknoloji alanında Türkçemiz büyük bir yıpranmanın eşiğindedir. Türkçe Yazılım’ın ortaya çıkış amacı da budur. Mimarisi inşaa edilen platformda tamamen Türk geliştiricileri tarafından yerli yazılım projelerinin öncülüğü yapılmalı, ekonomik ve akademik alanlarda “Türkçe” bir döngü oluşturulmalıdır.

## Beklentilerimiz:

  * Yazılım dillerinin öğrenilmesinin kolaylaştırılması.
  * Farklı yazılım teknolojilerine daha rahat adapte olma.
  * Türkçe’nin sonsuz türetme imkanından yararlanma ve yazılımda yeni terimlerin oluşmasına fırsat verme.
  * Yazılım sektöründe “Anglomanca”dan arınmak
  * Yerli yazılım projerinin gelişimine destek vermek ve buna uygun altyapı sağlamak
  * Türkiye’de yazılım alanında iş bulma, tecrübeden faydalanma ve bilgi paylaşımını en üst seviyeye çıkarma.
  * Bu alanda ekonomik ve akademik bir döngü sağlamak.

Bizler, sadece geleceğe olan borcumuzu ödemenin ve geçmişten gelen mirasımızı onurlandırmanın niyetindeyiz. Türk devrimi ile zor şartlarda sağlanan bağımsızlığımızın simgesi Türkçemizi layığı ile korumak ve yüceltmek yegane görevimizdir. Her alanda olduğu gibi milli benliğimizi yerli projelerde de kullanmanın verdiği haz, Türk yazılım sektörünün de değer kazanmasını sağlayacaktır.

## Şimdi Çalışma Zamanı:

Tüm bunları eyleme geçirmek için betimde bir kampanya başlatıyorum. Türk geliştiricilerin tarafıma ilettiği projelerini yayınlayarak onlara destek olmaya çalışacağım.

## Bana Ulaşın:

Çalışmalarınızı bekliyor olacağım.

info[at]mkoseoglu.com

## Büyük Önder:

“Türk dili zengin, geniş bir dildir. Her kavramı ifade kabiliyeti vardır. Yalnız onun bütün varlıklarını aramak, bulmak, toplamak, onlar üzerinde çalışmak lazımdır.”

**Mustafa Kemal Atatürk**

---

## File: _posts/2013-06-27-php-rastgele-random.md

---
id: 1427
title: PHP Random Kullanımı ve Örnekleri
date: 2013-06-27T09:09:32+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=1427
permalink: /php-rastgele-random
views:
  - "56"
categories:
  - PHP
tags:
  - PHP
  - PHP Degiskenler
  - PHP Dersleri
  - PHP Rand Fonksiyonu Kullanımı
  - PHP Random Örnekleri
  - Wordpress Rastgele Yazılar
---
Blogumun headeri için **her sayfa yenilenmesinde** değişen **rastgele sözleri** göstermek için kod aramaktaydım. **PHP de rand** fonksiyonunu araştırırken ve tabii biraz da yardım alarak internette kolay kolay bulamadıgım **PHP rastgele** sözler kodunun **4 farklı çeşidini yazdım.**

İstediğinizi kullanabilirsiniz. Umarım birilerinin işine yarar.

$yazi=array("söz1","söz2","söz3","söz4","söz5");
$karissin =mt_rand(0,4); // mt_rand'ın rand'a göre daha performanslı oldugunu duymustum.
echo "$yazi[$karissin]";

Burada dikkat edilmesi gereken en önemli nokta **PHP&#8217;de diziler** her zaman **** dan başlar. Eğer ben bunu **mt_rand(0,5)** yapsaydım **6** tane söz arıyacaktı ve bir noktadan sonra hata vermesine neden olacaktı. O yüzden **mt_rand(0,4)** olarak başlatıyoruz.

$yazi=array("söz1","söz2","söz3","söz4","söz5");
$kactane = count($yazi);
echo $yazi[rand(0,$kactane-1)];

PHP de **count array&#8217;**ı daha çok nesneleri saydırmak için kullanırız. Ama burada saydığı nesneleri **rand fonksiyonu** rastgele sözler kodumuzu tamamladı.

&nbsp;

$soz[1] = "soz1"; // Söz 1
$soz[2] = "soz2"; // Söz 2
$soz[3] = "soz3"; // Söz 3
$soz[4] = "soz4"; // Söz 4
$soz[5] = "soz5"; // Söz 5
$karistir = rand(1,5); // Sözleri karıştıralım.
echo "$soz[$karistir]"; // Ekrana basalım.

$sozler = array("1","2","3","4");	
shuffle($sozler); // rastgele
echo $sozler[0];

---

## File: _posts/2013-07-10-php-resim-yukleme-veritabanina-kaydetme.md

---
id: 1568
title: PHP ile Görsel Yükleme
date: 2013-07-10T08:35:15+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=1568
permalink: /php-resim-yukleme-veritabanina-kaydetme
views:
  - "339"
categories:
  - PHP
tags:
  - PHP
  - PHP Dersleri
  - PHP Dosyayı Veritabanına Ekleme
---
Merhabalar, PHP ile görsellerimizi belirtilen dizine yüklerken aynı zamanda adreslerini veritabanına kaydedelim.

&lt;!DOCTYPE HTML&gt;
&lt;html lang="en-US"&gt;
&lt;body&gt;
	&lt;form enctype="multipart/form-data" action="yolla.php" method="POST"&gt;
        &lt;input type="file" name="resim" id="resim"&gt;
        &lt;input type="submit" name="gönder" value="gönder"&gt;
    &lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;

&lt;?php

# Mert Köseoğlu
# www.mkoseoglu.com
# 10.07.2013

## Uzantı Kontrollerim
    $uzanti=    array('image/jpeg','image/jpg','image/png','image/x-png','image/gif');
## Aynı Dizinde Bulunan Resimler Klasörüne Kaydet
    $dizin=     "resimler";
     if(in_array(strtolower($_FILES['resim']['type']),$uzanti)){ 
     move_uploaded_file($_FILES['resim']['tmp_name'],"./$dizin/{$_FILES['resim']['name']}");
## Veritabanına Bağlanalım ##
     $baglan=   mysql_connect("localhost","root","") or die ('Sunucuya Bağlanamadım.');
     $asd=      mysql_select_db("mertk",$baglan) or die ('Veritabanı Bağlanamadık !');
## Dosya İsmimizi Veritabanına Yazdıralım. ##
    mysql_query("SET NAMES utf8");
    mysql_query("SET CHARACTER SET utf8");
    mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");
## Türkçe Karakter Hatası
    $db=       $_FILES['resim']['name'];    
## Resmimizin Adını Alalım
    $ekle=     mysql_query("INSERT INTO blog (resim) VALUES ('".$db."')") or die (mysql_Error());
# Blog Tablosu -&gt; Resim Sütununa Ekleyelim.
    echo "Başarılı !";
    }else{
     echo "Başarısız !";
    }

?&gt;

---

## File: _posts/2013-07-20-ckeditor-ajax-post-php.md

---
id: 1716
title: CkEditor ile JQuery Ajax Kullanımı
date: 2013-07-20T11:46:40+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=1716
permalink: /ckeditor-ajax-post-php
views:
  - "127"
categories:
  - jQuery
tags:
  - Ckeditor Entegresi
  - Ckeditor Jquery Ajax Post İle Post Etme
---
Merhaba, bir metin editörü olan CkEditor&#8217;de yazdığımız girdileri JQuery&#8217;in Ajax kütüphanesi ile veritabanına kaydedeceğiz.

Buradan (<https://ckeditor.com/ckeditor-4/download>) CkEditor&#8217;ü indirelim ve HTML şablonumuzda HEAD tagları arasında tanımlayalım.

CkEditor&#8217;ü görüntülememi sağlayan bir HTML betiği içerisinde form oluşturuyorum. Metin alanı için Textarea etiketini kullanıyorum.

&lt;form id="kaydet" name="kaydet" method="post"&gt;
 &lt;textarea name="ornek_1" id="ornek_1"&gt;&lt;/textarea&gt;&lt;br /&gt;
 &lt;input type="submit" id="tik" /&gt;
&lt;/form&gt;

Oluşturduğumuz formun name değerini kaydet olarak tanımlıyorum. HTML şablonumuzda BODY tagları arasında CkEditör&#8217;ü script tagları içerisinde çağırıyorum.

&lt;script type="text/javascript"&gt;
 CKEDITOR.replace( 'ornek_1' );
&lt;/script&gt;

Burada yer alan ornek_1 kullandığımız Textarea etiketinin name değeridir. JQuery Ajax kodlarımı yazmaya başlayabilirim.

$(document)
    .ready(function () {
        $('#tik')
            .click(function () {
                for (var kaydet in CKEDITOR.instances) 
                    CKEDITOR.instances[kaydet].updateElement();
                $.ajax({
                    type: 'POST',
                    url: 'kaydet.php',
                    cache: false,
                    data: $('#kaydet').serialize(),
                    success: function (hesapCevap) {
                        $('#sonuc').html(hesapCevap);
                    }
                });
                return false;
            });
    });

Burada yer alan for (var kaydet in CKEDITOR.instances) satırındaki kaydet oluşturduğumuz formun name değeridir.

PHP üzerinde girdilerimi veritabanına kaydedebilirim artık.

mysql_select_db("dersler",mysql_connect("localhost","root",""));
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");
mysql_query("INSERT INTO ck (dene) VALUES ('".$_POST['ornek_1']."')");

---

## File: _posts/2013-08-28-php-htaccess-seo-sef-link.md

---
id: 1832
title: PHP Seo Dostu Link Yapıları
date: 2013-08-28T12:02:44+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=1832
permalink: /php-htaccess-seo-sef-link
views:
  - "232"
categories:
  - PHP
tags:
  - PHP
  - PHP Dersleri
  - PHP Sef Link
  - PHP Sef Link Fonksiyonu İle Seo Uyumlu Link Yapısı
---
Merhabalar, PHP Htaccess ile SEO uyumlu link yapıları elde edeceğiz.

require_once('config.php');

$baslik = mysql_query("SELECT * FROM tasarim ORDER BY id DESC");
while($gel=mysql_fetch_assoc($baslik)){
    echo '&lt;a href="detay/'.$gel['sef'].'.html"&gt;',$gel['Baslik'],"&lt;br/&gt;",'&lt;/a&gt;';
}

require_once('config.php');
$sef = mysql_escape_string($_GET['gel']);
$yazi = mysql_query("SELECT * FROM tasarim WHERE sef='$sef'");
$cek = mysql_fetch_assoc($yazi);
    switch($cek){
        case null;
            echo "&lt;center&gt;&lt;h1 style='font-size:500px'&gt;404&lt;/h1&gt;&lt;/center&gt;";
            break;
        default:
        echo $cek['icerik'];
}

mysql_select_db("calismalarim",mysql_connect("localhost","root"));

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^detay/([a-zA-Z0-9_-]+).html$ oku.php?gel=$1 [L]

require_once('config.php');
function sef_link($bas)
{	 
    $bas = str_replace(array("&quot;","&#39;"), NULL, $bas);
    $bul = array('Ç', 'Ş', 'Ğ', 'Ü', 'İ', 'Ö', 'ç', 'ş', 'ğ', 'ü', 'ö', 'ı', '-');
    $yap = array('c', 's', 'g', 'u', 'i', 'o', 'c', 's', 'g', 'u', 'o', 'i', ' ');
    $perma = strtolower(str_replace($bul, $yap, $bas));
    $perma = preg_replace("@[^A-Za-z0-9\-_]@i", ' ', $perma);
    $perma = trim(preg_replace('/\s+/',' ', $perma));
    $perma = str_replace(' ', '-', $perma);
    return $perma;
}
$baslik = "Başlık";
$icerik= "Başlık ile ilgili bir metin.";
$sef = sef_link($baslik);
$kaydet=mysql_query("INSERT INTO tasarim (Baslik,icerik,sef) VALUES ('".$baslik."','".$icerik."','".$sef."')");

CREATE TABLE IF NOT EXISTS `tasarim` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Baslik` varchar(250) NOT NULL,
  `icerik` text CHARACTER SET utf32 NOT NULL,
  `sef` varchar(250) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `Baslik` (`Baslik`),
  KEY `Baslik_2` (`Baslik`),
  KEY `Baslik_3` (`Baslik`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

/detay/www-mkoseoglu-com-php-htaccess-ile-sef-link-olusturma

---

## File: _posts/2013-09-26-android-galeri-auto-backup-resimleri-silme.md

---
id: 1880
title: Android Galeri Auto Backup Resimleri Silme
date: 2013-09-26T20:27:00+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=1880
permalink: /android-galeri-auto-backup-resimleri-silme
views:
  - "711"
categories:
  - Genel
tags:
  - android senkr ayarlari
  - auto backup
  - google + android galeri
  - picasa android
---
Merhaba arkadaşlar, bugün bir çok insanın mağdur olduğu **Android** [**Auto Backup**](http://www.mkoseoglu.com/etiket/auto-backup/) sorununa değineceğiz.

Android işletim sistemine sahip telefon kullanıcıları **[Picasa](http://www.mkoseoglu.com/etiket/picasa-android/)** ve [**Google Plus**](http://www.mkoseoglu.com/etiket/google-android-galeri/) gibi çeşitli sosyal medya hesaplarını **[senkronizasyon](http://www.mkoseoglu.com/etiket/android-senkr-ayarlari/)** yaptıklarında **galeri**de istenmeyen, **silinmeyen** **auto backup** isminde bazı resim ve dosyalar yer alabiliyor. Benim de bugün başıma geldi. Türkçe ve yabancı kaynaklarda yaptığım araştırmalar sonucunda çözümüne ulaştım.

## Çözüm:

  * Ayarlar
  * Uygulama Yöneticisi
  * Hepsi
  * Galeri
  * Veriyi Sil

Bu adımları sırası ile uyguladığınızda **senkronizasyon** eşitlemesinden dolayı **galeri**nizde yer alan dosyalar **silinecektir.**

## Görsel:

[](http://www.mkoseoglu.com/wp-content/uploads/Screenshot_2016-08-12-01-37-21.png)[](http://www.mkoseoglu.com/wp-content/uploads/Screenshot_2016-08-12-01-36-59.png)[](http://www.mkoseoglu.com/wp-content/uploads/Screenshot_2016-08-12-01-38-03.png)

## Önemli not:

Bu işlem telefonunuzda bulunan hiçbir dosyaya **zarar vermez**. Yukarıda da bahsettiğim gibi **senkronizasyon eşitlemesi** sonucunda **galeri**nizde yer alan **auto backup klasörü**nüz silinecektir.

Bu sorunu tekrar yaşamamak için telefonunuzun **ayarlar**->**hesaplar** sekmesinde **Google** hesabınızı bulup tıklayın. Orada yer alan **Google**, **Google Plus** ve **Google Fotoğraflar** kutucuklarındaki **senkronizasyon** onayı işaretini kaldırın.

## Sonuç:

Ben bu çözümü, serviste bir yaz günü telefonumu kurcalarken buldum. O an bana sadece benim yaşadığım bir sorun gibi geldi. Fakat sonrasında çevremde bu konudan muzdarip insanları gördüm ve **paylaş**ma kararı aldım. Belki üç beş kişiye yardımı dokunur umudu ile. Ve şu an görüyorum ki çokça kişiye ulaşabilmişim. **Sevgi** dolu mail ve yorumlarınız için teşekkür ederim.

## Güncelleme:

Gelen yorumlar üzerine görsel eklenmiştir.

---

## File: _posts/2013-12-03-google-analytics-ile-grafiksel-olarak-anlik-ziyaretci-goruntuleme.md

---
id: 2112
title: Google Analytics İle Grafiksel Olarak Anlık Ziyaretçi Görüntüleme
date: 2013-12-03T01:36:54+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2112
permalink: /google-analytics-ile-grafiksel-olarak-anlik-ziyaretci-goruntuleme
views:
  - "6"
categories:
  - PHP
tags:
  - Google Analytics Api Kullanımı
  - Google Analytics Charts kullanımı
---
Merhabalar, Bu** Google Analytics** İle **Anlık** Veri Çekimini Göreceğiz. Bu Olay Sayesinde **Google Analytics** Ziyaret Etmeden Yazdığınız Scriptlerde Anlık **Ziyaretçi Akışını** Görebilirsiniz.

  * NOT: Localhost&#8217;da Çalışırsanız Muhtemelen cURL Hatası Alacaksınız. Bu Yüzden Hostunuzda Çalışın. Hostunuz da Çalışabilmek Gibi Bir İmkanınız Yok İse php.ini Dosyasında İlgili Satırlarda cURL Ayarlarını Yapılandırın. Google&#8217;den Arastırabılırsınız.

## Profil ID

Ben Aylık Olarak Çekmek İstedim Verilerimi. Öncelikle **Google Analytics** Sitesine Girin. Amacımız **Profil ID** Öğrenmek. Hangi Sitenin Ziyaretçi Verilerini Çekmek İstiyorsanız Ona Tıklayın. URL Kısmında  &#8220;**p**&#8221; Den Sonra Gelen 8 Haneli Numara Sizin **Profil ID**&#8216;niz.

### Örneğin Benim URL Yapım Aşağıda. PROFİL ID:71662332

https://www.google.com/analytics/web/?hl=tr&pli=1#realtime/rt-overview/a40380513w69547240p&lt;strong&gt;71662332&lt;/strong&gt;/

## Düzenlenecek Tek Dosya: &#8216;ayar.php&#8217;

**ayar.php** dosyasında,

# Giriş Yaptıgınız Gmail Hesabı ve Şifresi.
		$analytics = new analytics("&lt;strong&gt;info@mkoseoglu.com&lt;/strong&gt;", "&lt;strong&gt;sifre&lt;/strong&gt;");
		$analytics-&gt;useCache();

		# Profil id'sini ayarlayalım
		$analytics-&gt;setProfileById('ga:&lt;strong&gt;71662332&lt;/strong&gt;');

**Gmail Hesabı**nızı ve **Şifre**nizi. Alt Satırda ga: **PROFİL ID**&#8216;nizi Yazınız.

### Buraya Kadar Tamam. Sıra Geldi Dosyaları İndirmeye.

## Dosyaları İndirin

## [http://yadi.sk/d/QYopf6JrDokVk](http://yadi.sk/d/QYopf6JrDokVk)

Rar Şifresi: mkoseoglu.com

## Ek Olarak Grafik Yapısını Değiştirmek İstersek

#### Düzenlenmesi Gereken Dosya &#8216;index.php&#8217;

**index.php** Dosyasında ,

  * ****line **Yazan Kısmı**** area **Olarak Değiştirirseniz Farklı Bir Görünüm Elde Edebilirsiniz.

plotOptions: {
               &lt;strong&gt; area&lt;/strong&gt;: {
                    pointStart: 1,
                    marker: {
                        enabled: false,
                        symbol: 'circle',
                        radius: 2,
                        states: {
                            hover: {
                                enabled: true
                            }
                        }
                    }
                }
            },

  * **Yine index.php Dosyamda type: line satırını type:area olarak değiştiriyorum.**

chart: {
                renderTo: 'sayac',
                type: '&lt;strong&gt;area&lt;/strong&gt;'
            }

## Demo: [http://mkoseoglu.com/depo/api/](http://mkoseoglu.com/depo/api/)

#### Kaynaklar:

  *  <a style="font-size: 1rem; line-height: 1.846153846;" href="http://www.hayatikodla.com/google-analytics-api-kullanimi/" target="_blank">http://www.hayatikodla.com/google-analytics-api-kullanimi/</a>
  * [http://www.erbilen.net/347-google-analytics-verileri-ve-grafiksel-gosterimi.html](http://www.erbilen.net/347-google-analytics-verileri-ve-grafiksel-gosterimi.html)

---

## File: _posts/2014-02-14-php-post-methodu-ile-hesap-makinesi-yapimi.md

---
id: 2205
title: PHP POST Methodu İle Hesap Makinesi Yapımı
date: 2014-02-14T04:06:55+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2205
permalink: /php-post-methodu-ile-hesap-makinesi-yapimi
categories:
  - PHP
tags:
  - PHP
  - PHP Dersleri
  - PHP eval() Fonksiyonu
  - PHP Hesap Makinesi Yapımı
---
Merhabalar, **geometri** ödevimi **&#8220;programlama ile hesap makinesi&#8221;** olarak seçtim. İnternette örnekleri incelediğim de istediğim tarzda yapılmışını bulamadım. Tek bir input içine yazılan veriler ile işlem yapmak istedim. Sonuçta PHP nin zaten **matematik** işlemleri için bir esnekliği var bir de neden biz çarpma, toplama, çıkarma.. şeklinde seçip işlem yaptıralım ?

Bu yüzden tek bir **input** a değerleri girdim. Fakat PHP ifadeyi **string** olarak aldıladı. Bunu **eval()**; fonksiyonu ile çözdüm. Ben bunu **Ajax** kullanarak tamamlayacağım. Siz istediğiniz gibi kullanırsınız.

Çarpma : **x**

Toplama : **+**

Çıkarma : **&#8211;**

Bölme: **/**

Demo : [www.mkoseoglu.com/hesap](http://www.mkoseoglu.com/hesap)

error_reporting(0);

		// Hatalar Gizlensin.

	$x = $_POST['islem'];

		// name degeri islem olan inputumuzun değerini POST methodu ile alıyoruz.

		// Verimizi X adında bir değişkene atıyoruz.

function hesapla($degerler)
{
	$degerler = preg_replace("/[^0-9+\-.x\/()%]/","",$degerler);
	$degerler = preg_replace("/([+-])([0-9]{1})(%)/","*(1\$1.0\$2)",$degerler);
	$degerler = preg_replace("/([+-])([0-9]+)(%)/","*(1\$1.\$2)",$degerler);
	$degerler = preg_replace("/([0-9]+)(%)/",".\$1",$degerler);
 $degerler = preg_replace("/x/","*",$degerler);
		// preg_replace() fonksiyonu ile sadece kullanacağımız karakterlere izin verdik.

	if ($degerler == "" OR $degerler == NULL)
	{
		$returnHata = "hata";
		return $returnHata;

		// Hata izin verdiğimiz karakterlerin dışında karakter olursa boş olarak gözükecek. 
		// Bu durumda degerler boş ise hata mesajımızı yazdırıyoruz.		

	}else {
		eval("\$return=" . $degerler . ";" );
	}

		// eval(); fonksiyonu ile string ifademizin PHP kodu olarak yorumlanmasını sağladık.

	if(strlen($return) &gt;= 4) {
		$ayirma = number_format($return, 0, '', '.');
			return $ayirma;
	}else {
			return var_dump($return);

	}

		// Girilen karakter sayısı 4 den büyükse number_format(); fonksiyonu ile ayırıp, değeri döndürüyoruz.
		// Girilen karakter sayısı 4 den küçük ise return değişkenini döndürüyoruz.

}
		Echo hesapla($x);

		// Sonuç

---

## File: _posts/2014-06-30-php-ajax-veri-silmek.md

---
id: 2557
title: JQuery Ajax ile Veri Silmek
date: 2014-06-30T00:33:13+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2557
permalink: /php-ajax-veri-silmek
categories:
  - jQuery
tags:
  - PHP
  - PHP Ajax İle Veri Silmek
  - Sayfa Yenilenmeden Veri Silmek Ajax
---
Merhabalar, PHP ve JQuery kullanarak veritabanından anlık veri silme işlemini gerçekleştireceğiz.

CREATE TABLE IF NOT EXISTS `ajaxsil` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `mesaj` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;script src="http://code.jquery.com/jquery-1.11.1.js"&gt;&lt;/script&gt;
    &lt;script src="ajax.js"&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;?php 
        $sql = mysql_query("SELECT * FROM ajaxsil ORDER BY id DESC") or die(mysql_error());
        while($a   = mysql_fetch_assoc($sql)) { 
        $mesaj = $a['mesaj']; 
        $id    = $a['id'];
    ?&gt;
    &lt;div class="silinen"&gt;
        &lt;p class="metin"&gt;&lt;?php echo $mesaj; ?&gt;&lt;/p&gt;
        &lt;a href="#" id="&lt;?php echo $id ?&gt;" class="silbeni"&gt;x&lt;/a&gt;
    &lt;/div&gt;
    &lt;?php } ?&gt;
&lt;/body&gt;
&lt;/html&gt;

mysql_select_db("ajax",mysql_connect("localhost","root","")) or die ('Veritabanı Bağlanamadık !');
mysql_query("SET NAMES utf8");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET COLLATION_CONNECTION = 'utf8_general_ci'");

$(document)
    .ready(function () {
        $('.silbeni')
            .click(function () {

                var degisken = $(this);
                var silbeni = degisken.attr('id');
                var veri = 'id=' + silbeni;
                if (confirm("Silmek İstediğinizden Emin misiniz ?")) {
                    $.ajax({type: "GET", url: "islem.php", data: veri, success: function () {}});
                }
                $(this)
                    .parents(".silinen")
                    .animate({
                        backgroundColor: "#fbc7c7"
                    }, "fast")
                    .animate({
                        opacity: "hide"
                    }, "slow");
                return false;
            });
    });

&lt;?php 

require_once('db.php'); 
$id = $_GET['id'];
if($id) {
$sql = mysql_query("DELETE FROM ajaxsil WHERE id = '$id' ") or die(mysql_error());
}

?&gt;

&nbsp;

---

## File: _posts/2014-07-07-php-data-objects-pdo-kullanimi.md

---
id: 2565
title: PHP Data Objects (PDO) Kullanımı
date: 2014-07-07T00:36:07+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2565
permalink: /php-data-objects-pdo-kullanimi
categories:
  - PHP
tags:
  - PHP Data Objects (PDO) Kullanımı
---
Merhabalar,

Bu dersimizde PHP PDO Kullanımı hakkında bilgiler vereceğim. Daha sonra **UPDATE**, **DELETE**, **INSERT**, **Veri Çekme** ve **Veritabanı Bağlantısı** işlemlerini örneklerle açıklayacağız.

## **PDO Nedir?**

**PDO** (**PHP Data Objects / PHP Veri Objeleri**) özetle; hafif ve tutarlı bir şekilde **veritabanına erişimi sağlayan bir arayüz.** Adından da anlayacağınız üzerie “**Object Oriented Programming**” arayüzüne sahip, onlarca veritabanı sürücüsü destekliyor.

## **PDO Veritabanı Bağlantısı**

&nbsp;

try{
		        $db = new PDO('mysql:host=localhost;dbname=VeritabanıIsmi;charset=utf8','Kullanıcı Adı','Sifre');
			}catch(PDOException $e){
				echo 'Hata: '.$e-&gt;getMessage();
			}

Veritabanı bağlantısında olası hataları yakalamak için **try cacth** kullandık**. Karakter Setini UTF-8 **olarak belirledik.

## **PDO prepare() Methodu Kullanımı**

prepare() Çalıştırılmak üzere bir SQL deyimini hazırlar. Metot **bindparam(),** **execute(), bindColumn(), bindValue()** metotları ile beraber çalışır. Dışarıdan **SQL sorgularına** dahil edilecek veriler için iki tür tanım yapmayı sağlar. Bunlardan birisi **soru işaretidir**. Diğeri ise önünde **iki nokta üst üste olan herhangi bir isimdir.**

## **PDO Hata Mesajlarını Yakalama errorInfo() Kullanımı**

**Mysql** kullandığımızda sorgularımızın sonuna **mysql_error();** ekleyerek **hata mesajlarını** yakalayabiliyoruz.

**PDO** kullanırken bu durum biraz değişiyor ve yerini **errorInfo();** fonksiyonuna bırakıyor. Bu fonksiyon bize **3 elemanlı bir array** döndürür. **** ve **1**. eleman ilgili sorgunun **hata kodu,** **3. elemanı ise hata mesajıdır.**

Ben hata mesajlarını yakalarken **empty();** fonksiyonunu kullanıyorum. Eğer **hata mesajı** boş ise işlem başarılıdır şeklinde. Bunu **rowCount();** fonksiyonu kullanarak veya sorgu **false** dönüyorsa hata vardır şeklinde yapanlarda var.

## **PDO DELETE Sorgusu Kullanımı**

$del = $db-&gt;prepare("DELETE FROM pdotablo WHERE id = ?");
			$del-&gt;execute(array(
				'1'
			));
			$hata = $del-&gt;errorInfo();
			echo empty($hata[2]) ?  "Başarılı Bir Şekilde Çalıştı." : $hata[2];

**Delete** sorgumuzda **ID degeri 1** olan verimizi başarılı bir şekilde sildik.

## **PDO UPDATE Sorgusu Kullanımı**

$guncelle = $db-&gt;prepare("UPDATE pdotablo SET baslik=? WHERE id = ?");
			$guncelle-&gt;execute(array('Mert Köseoğlu','5'));
			$hata = $guncelle-&gt;errorInfo();
			echo empty($hata[2]) ?  "Başarılı Bir Şekilde Çalıştı." : $hata[2];

**Update** sorgumuzda **ID degeri 5** olan **baslik** sütunumuzda ki verimizi &#8220;**Mert Köseoğlu**&#8221; olarak başarılı bir şekilde güncelledik.

## **PDO SELECT Kullanımı TEK (Verileri Listeletmek) **

$sql = $db-&gt;prepare("SELECT * FROM pdotablo WHERE id= ?");
			$sql-&gt;execute(array(
				'5'
			));

			$row=$sql-&gt;fetch(PDO::FETCH_ASSOC);
			echo $row['baslik'];

 			$hata = $sql-&gt;errorInfo();
			echo empty($hata[2]) ?  "Başarılı Bir Şekilde Çalıştı." : $hata[2];

## **PDO SELECT Kullanım Döngü (Verileri Listeletmek)**

$sql = $db-&gt;prepare("SELECT * FROM pdotablo");
			$sql-&gt;execute();

			while($row=$sql-&gt;fetch(PDO::FETCH_ASSOC)) {
				echo $row['baslik'];
			}


 			$hata = $sql-&gt;errorInfo();
			echo empty($hata[2]) ?  "Başarılı Bir Şekilde Çalıştı." : $hata[2];

## **PDO INSERT Sorgusu Kullanımı (Veri Eklemek)**

$baslik = "Deneme Baslik";
			$icerik = "Deneem İçerik";
			$footer = "Deneme Footer";

			$sql = $db-&gt;prepare('INSERT INTO pdotablo (baslik,icerik,footer) VALUES (?,?,?)');
			$ekle = $sql-&gt;execute(array(

				$baslik,
				$icerik,
				$footer,

				));
			
	 		$hata = $sql-&gt;errorInfo();
			echo empty($hata[2]) ?  "Başarılı Bir Şekilde Çalıştı." : $hata[2];

## **PDO Eklenen Verinin ID Degerini Almak**

$id = $db-&gt;lastInsertId();
			echo $id;

## **PDO quote() Methodu Kullanımı**

$id=$db-&gt;quote($_POST["id"]);
$bag-&gt;query("SELECT * FROM okul WHERE id ='$id'");

**PDO** ile **mysql\_escape\_string** ve türevlerinin yerini **quote()** methodu aldı.

---

## File: _posts/2014-07-15-php-jquery-json-formatinda-ajax-kullanimi.md

---
id: 2578
title: PHP JQuery JSON Formatında Ajax Kullanımı
date: 2014-07-15T14:14:31+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2578
permalink: /php-jquery-json-formatinda-ajax-kullanimi
categories:
  - PHP
tags:
  - Jquery
  - Jquery Ajax Data
  - Jquery Ajax Serialize
  - Jquery Json
  - PHP
  - PHP Json
---
Merhabalar,

PHP JQuery Ajax methodunu JSON formatında kullanalım.

## **Json Nedir ?**

jSON, object (nesne) ve array (dizi) olmak üzere 2 temel yapı içerir. Bu temel yapılar evrensel yapılardır ve tüm modern programlama dillerinde mevcuttur.

## **Kodlarımız &#8211; JQuery**

$(function(){
			$('input[type=submit]').click(function(){ // Type Submit Olana Tıklanıldığında.
				/* Input Name Degerlerine Göre Val() Methodunu Kullanarak Data Elde Ettik. */
				var x = $('input[name=x]').val();
				var q = $('input[name=q]').val();
				var a = $('input[name=a]').val();
				/* Verilerimizi 3 Farklı Sekilde Elde Edebiliriz. */
				var data = {"q" : q, "x" : x, "a" : a};
				var data =  "x=" + x + "&q=" + q + "&a=" + a;
				var data = $('form').serialize() + "&x=" + x + "&a=" + a;
				/* Ajax Baslasin */
				$.ajax({
					type:'POST', 						// - POST veya GET
					data:data,							// - Yukarıda data değişkenini tanımladık.
					dataType:'json', 					// - JSON Formatında Gönderilmesini Sağladık.
					url:'islem.php', 					// - Data Bilgisinin Gönderileceği Dosya Adresi.
					success:function(gelen){ 		 	// - Success, complete ve error Fonksiyonları vardır.
						$('.sonuc').html(gelen.veri);	// - Gelen Verimizi Sonuc Divinin İçerisine Yazdırdık.
					}
				});
				return false;
			});
		});

## **Kodlarımız &#8211; HTML**

&lt;form method="POST"&gt;
		&lt;input type="text" name="q" id=""&gt;
		&lt;input type="submit" value="Ajax"&gt;
	&lt;/form&gt;
		&lt;input type="text" name="x" id=""&gt;
		&lt;input type="text" name="a" id=""&gt;
	&lt;div class="sonuc"&gt;&lt;/div&gt;

## **Kodlarımız &#8211; PHP**

/*
		Mert Köseoğlu
		www.mkoseoglu.com
	*/

	$a = $_POST['a'];
	$q = $_POST['q'];
	$x = $_POST['x'];

	if($a == '' || $q== '' || $x=='') {
		$array['veri'] = "Hata Olustu.";
	}else{
		$array["veri"] = $_POST['q'].'&lt;br&gt;'.$_POST['x'].'&lt;br&gt;'.$_POST['a'];
	}

	
	echo json_encode($array);

---

## File: _posts/2014-08-27-6000-gonullu-anitkabirdeyiz.md

---
id: 2619
title: '6000 Gönüllü Anıtkabir&#8217;deyiz!'
date: 2014-08-27T15:53:37+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2619
permalink: /6000-gonullu-anitkabirdeyiz
categories:
  - Günlük
tags:
  - '#anitkabirdeyiz'
  - 26 Ağustos Atatürk Portresi
  - Atatürk Portesi Ankara
  - Cumhur Aygün Atatürk Portresi
  - En Büyük Atatürk Portresi
---
Merhabalar, **26 Ağustos** günü **Anıtkabir**&#8216;de inanılmaz bir çoşku vardı. Proje lideriğini **Cumhur Aygün**&#8216;ün üstlendiği, **gönüllü olan ilk 6000 kişi** ile gerçekleştirilen **Atatürk portresi** herkese duygulu anlar yaşattı.

Dershane çıkışı acele ile **aslanlı yol**dan kayıt masalarına ulaştığımda kapıların kapanmasına 10 dakikadan az bir süre vardı. **Son anda yetişmenin verdiği mutluluk** ve kolumda [**#anitkabirdeyiz**](http://anitkabirdeyiz.org/) mührü ile birlikte kendimi alanda buldum. Saat 13 gibi başlayan çalışma büyük bir özveri ile devam ediyordu. Yaklaşık **bir buçuk saat süren** düzenlemelerden sonra hemen hemen herkes yerini almıştı. Havanın **inanılmaz sıcak** olmasından dolayı ben en son yerleşen grupların içerisindeydim. **Marşlar ve şarkılar** bir dakika bile durmadı, herkes **siyahlar içerisinde** portrenin ölümsüzleşeceği zamanı beklemekteydi. Çalışma esnasında **Beyaz Tv muhabirine** **büyük tepki gösterildi.** Güvenlik güçlerinin araya girmesiyle **Beyaz Tv** dışarı çıkarıldı. **Saat 16 olduğunda** yavaş yavaş **finale** yaklaşılmıştı. Havanın sıcağına daha fazla dayanamayanlar son anlarda **baygınlık geçirdiler**. Alan içerisinde bulunan **sağlık görevlileri** müdahale etmede gecikmedi. Bu gibi durumlar için yedek olarak bekletilen **askerler** eksilen yerleri doldurdu. Bu sırada dev ekrandan oluşan portreyi canlı olarak izleyen bizler daha da **çoşkulandık, motive olduk**. Yanımda bekleyen birkaç kişi ile kısa bir muhabbetim oldu. **Mersin** ve **Eskişehir**&#8216;den geldiklerini öğrendim. Onları misafir etmek isteyenler olsa da gün içerisinde geri dönmekte ısrar ettiler. İnanılmaz bir dayanışma vardı. **Son 10 dakikaya** girildiğinde herkesin elleri yukarıda kalp yapmaları istendi.

Bizler bu şekilde beklerken **Dünyanın en büyük Atatürk portresi ölümsüzleşmişti bile**. Çalışma bittiğinde şapkalar havalara atıldı. Mutluluğu herkesin gözlerinde görebilmek mümkündü. Alanda çektiğim birkaç fotoğraf paylaşarak yazımı sonlandırıyorum. **Çalışmada emeği geçen herkese çok teşekkürler.**

---

## File: _posts/2015-07-02-ataturk-hakkinda-kitaplar.md

---
id: 2699
title: Mustafa Kemal Atatürk Hakkında Okunması Gereken Eserler
date: 2015-07-02T05:36:59+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2699
permalink: /ataturk-hakkinda-kitaplar
categories:
  - Günlük
tags:
  - Atatürk Eserleri
  - Atatürk Kitapları
  - Mustafa Kemal Atatürk
---
Merhabalar, uzun bir zamandır listesini tuttuğum **Atatürk** hakkında mutlaka okunması gereken eserler listemi paylaşmaya karar verdim. Listede olan kitaplarlar ile **Atatürk** **kütüphanesi** yapma amacım var. Bu güzel amaca sizlerin de dahil olabileceğini düşünmek bir **Türk genci** olarak beni mutlu ediyor. Kitapların hepsini okuyamadığım için içerik analizine girmeyeceğim. Sadece isimlerini paylasıyorum, sizler merak ettiklerinizi araştırarak hakkında bilgilere erişebilirsiniz. Ayrıca tavsiyelere son derece açığım bu konularda. Sizlerin de yardımı ile listeyi uzatabiliriz.

## Mutlaka Okunması Gereken Kitaplar

  * Nutuk &#8211; Mustafa Kemal Atatürk
  * Beyaz Zambaklar Ülkesinde &#8211; Grigory Petrov
  * Bozkurt &#8211; H.C Armstrong
  * Atatürk&#8217;ün Armstrong&#8217;a Cevabı &#8211; Sadi Borak
  * Çankaya &#8211; Fatih Rıfkı Atay
  * Sinan Meydan &#8211; Tüm Kitapları
  * Atatürk &#8211; Yakup Kadri Karaosmanoğulları
  * Atatürk Bir Milletin Yeniden Doğuşu &#8211; Lord Kinross
  * Tek Adam &#8211; Şevket Süreyya Aydemir
  * Atatürk Modern Türkiyenin Kurucusu &#8211; Andrew Mango
  * Sarı Zeybek &#8211; Can Dündar
  * Hangi Atatürk &#8211; Attila İlhan
  * Devrim Tarihi ve Toplum Bilinci Açısından Atatürk &#8211; Emre Kongar
  * Ama Hangi Atatürk &#8211; Taha Akyol
  * Atatürk &#8211; Klaus Kreiser
  * Atatürk&#8217;ün Sırdaşı Kılıç Ali&#8217;nin Anıları &#8211; Hulusi Turgut
  * Atatürk &#8211; Fabio L. Grassi
  * Yaveri Ataturk’u Anlatıyor Salih Bozok’un Anıları
  * Medeni Bilgiler &#8211; Mustafa Kemal Atatürk
  * Mustafa Kemal Atatürk&#8217;ün Liderlik Sırları &#8211; Adnan Nur Baykal
  * Dahi Diktatör &#8211; Celal Şengör

Evet, benim için de güzel oldu. Sizlerden gelen kitap tavsiyelerine açığım.

&nbsp;

---

## File: _posts/2016-02-05-osman-pamukoglu-onder-caglarin-ozlemi.md

[Binary file]

---

## File: _posts/2016-05-19-yasasin-19-mayis-ruhu.md

---
id: 2852
title: Yaşasın 19 Mayıs Ruhu!
date: 2016-05-19T00:00:23+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2852
permalink: /yasasin-19-mayis-ruhu
categories:
  - Günlük
tags:
  - 19 Mayıs 1919
  - Gençlik ve Spor Bayramı
  - Milli Mücadele
  - Mustafa Kemal Atatürk
  - Türk Devrimi
---
**Ulu Önder Mustafa Kemal Atatürk**, 36.5 saat süren ve altı günde okunan tarihi _söylev_inde ulusal varlığı sona ermiş sayılan büyük bir ulusun, bağımsızlığını nasıl kazandığını; **bilim** ve **tekniğin** en son ilkelerine dayanan **ulusal** ve **çağdaş** bir devleti nasıl kurduğunu anlatmaya çalışmıştır.

Sözlerine ise: &#8220;**1919 yılı Mayıs ayının 19&#8217;uncu günü Samsun&#8217;a çıktım.**&#8221; diye başlamıştır. Ulusal egemenliğin kayıtsız şartsız milletin olduğu bir **Türk devrimi** gerçekleştirirken aynı zamanda çağdaş uygarlık düzeyine erişmenin yolunun da **tam bağımsız** bir millet olmaktan geçtiğini belirtmiştir. Türk gençliği **anti emperyalist** bir geleneği çok çalışarak devam ettirecektir.

&#8220;**19 Mayıs**&#8221; bir simgedir. **Türk** devrimin, demokrasinin, laikliğin, medeniyetin, ve bağımsızlığın simgesidir.

Köhneleşmiş siyasi çıkarların demokrasiye darbe vurmaya çalıştığı; **Mustafa Kemal devrimleri**ne yapılan saygısızlığın ve nankörlüğün zirve yaptığı bu günlerde **19 Mayıs** ruhunu ve bizlere bırakılan eşsiz mirası damarlarımızdaki asil kanın son damlasına kadar yaşatacağımıza, _Nutuk_&#8216;u &#8220;**Gençliğe Hitabe**&#8221; ile bitiren **Mustafa Kemal**&#8216;e ve kahraman silah arkadaşlarına söz veriyoruz, doğum günün kutlu olsun atam!

**Yaşasın Atatürk’ü Anma, Gençlik ve Spor Bayramı!**

---

## File: _posts/2016-05-31-paypal-hesaplarimizla-loseve-bagis-kampanyasi.md

[Binary file]

---

## File: _posts/2016-06-27-tengri-biz-menenin-gunumuz-karsiligi.md

---
id: 2967
title: 'Tengri Biz Menen&#8217;in Günümüz Karşılığı'
date: 2016-06-27T04:09:19+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2967
permalink: /tengri-biz-menenin-gunumuz-karsiligi
categories:
  - Genel
tags:
  - Orta Asya
  - Slogan
  - Tengri
  - Türk
  - Türkçü
---
Tanım olarak öz Türkçede &#8220;**Tanrı Bizimledir**&#8221; anlamına gelen slogan, kelimeler bütünüdür.
  


**İslamiyet** öncesi **Türk** tarihinde **Gök Tanrı**(kök tengri) inancından filizlenen, ilk olarak **Orhun Yazıtları**&#8216;nda çözümlenen **Tengri** kelimesi günümüz Türkçesi ile **Tanrı** anlamına gelmektedir. &#8220;**Biz menen**&#8221; kelime öbekleri ise; bizimle, bizim yanımızda gibi anlamlar oluşturmaktadır.
  



  
Anadolu Türkçesi ile &#8220;**Tanrı Bizimledir**&#8221; anlamına gelen &#8220;**Tengri Biz Menen**&#8221; tarihte Türkler tarafından bir çok yerde kullanılmıştır. Bunun bir örneği de Çanakkale Savaşı döneminde sloganın  değiştirilerek &#8220;**Allah Bizimle**&#8221; olarak kullanılmasıdır. **SSCB**&#8216;ye karşı savaşan **Türkistan Lejyonu**&#8216;nun logosunda da yine bu **slogan**a rastlamak mümkün.
  



  
**Orta Asya**&#8216;nın uçsuz bucaksız bozkırlarında yaşayan atalarımızın bir yansıması olan bu söylem hiçbir siyasi oluşuma mal edilemeyeceği gibi; günümüzde sloganın bilincinde olan bazı **Türkçü** gruplarca toplumsal aktivitelerde, bayram ve önemli günlerde söylenildiği, slogan şeklinde kullanıldığı bilinilmektedir.

---

## File: _posts/2016-06-29-biz-ani-kacirdik-unuttuk-yakalayamadik.md

---
id: 2970
title: 'Biz An&#8217;ı Kaçırdık, Unuttuk, Yakalayamadık'
date: 2016-06-29T03:54:50+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2970
permalink: /biz-ani-kacirdik-unuttuk-yakalayamadik
categories:
  - Günlük
tags:
  - Atatürk Havalimanı Patlaması
  - Mustafa Kemal
  - O An
  - Terör
---
Şu **An**&#8216;ı düşünüyorum. Ben **An** olsam, tadımı çıkaramayanlara, yakalayamayanlara ve beni yaşayamayanlara çok kızardım, söverdim ben. Nitekim öyle de oldu. An bize küstü. **An**, insanlığa küstü. Nedeni mi? Basit, sevgili blog.

Bizleri hep acele ettirdiler, hep kendileri gibi yetiştirmeye çalıştılar, hep maskelediler; kalıp ve imajlara bürdüler. O **An**&#8216;ı bir türlü yaşayamadık, öngördük; var olamadık.&nbsp;

Yanıbaşımızda bombalar patladı, yardım etmek yerine resim çektik. Tepki vermek yerine, klavyemizden kınadık, yuhaladık, istifa çağrılarında bulunduk, uzman dehamızla olayların perde arkasını gün yüzüne çıkardık. O **An**&#8216;lar gözümün önünden, avcumuzun içinden kayıp giderken, biz IE misali gecikmeli geldik.&nbsp;

Çevremizi doğadan soyutladık. Kafesimizi internet kabloları ve wireless sinyalleri ile ördük. Taş yapıtlara hapsolduk, huzuru maddi kazançta aradık. İnsanoğlunun en temel 2 dürtüsüne yenildik; **bencillik** ve **ikiyüzlülük**. O kadar yenildik ki güvenemez olduk kimseye; daha da acısı normalleştirdik. Mutluluğumuzu bir ekrana sığdırdık, beğeni sayıları ile taçlandırdık. Tacımızın büyümesi için mutluy(muş) gibi yaptık; 6 saat sonra intihat ettik!

Sevgili blog, bugün sözlük&#8217;te **28 Haziran Atatürk Havalimanı patlaması**nın ardından fahiş fiyatlara yolcu taşıyan, fırsatçılığın tezini yazmış taksicilerle tanıştım. Yeri geldi, evine gitmek isteyen bir öğrenci, oteline ulaşmak isteyen bir turist, oğlundan haber alamayan gözü yaşlı bir anne oldum. Ve hepsinde kazananlar belliydi. Terörden beslenen siyasiler, bağnazlar, yobazlar, hainler; el birliği ile **Mustafa Kemal&#8217;in Tam Bağımsızlık projesi**ne ket vuran işbirlikçiler!

Satırlara devam ederken herkesin bildiği konular hakkında neden bu kadar düşündüğümü saptamaya çalışıyorum. Sorun bende mi? Yoksa diğerlerinde mi? Biz mi evrildik; ben mi yalnız kaldım?&nbsp;

Birilerinin makamı, birilerinin canı, birilerinin parası, birilerinin de çıkarları. Bize emanet edilen mirası yaşanılmayacak bir An&#8217;a yine biz getirdik, götürüyoruz. Sonu mu? Belki sütünü emziren çocuğu ile sokağa çıkan bir anne, belki bir önder, belki de Suriye&#8217;den hallice. Kim bilir?

---

## File: _posts/2016-07-31-asus-uyku-modu-siyah-ekran-cozumu.md

---
id: 2986
title: Asus Uyku Modu Siyah Ekran Hatası ve Çözümü
date: 2016-07-31T03:29:45+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=2986
permalink: /asus-uyku-modu-siyah-ekran-cozumu
categories:
  - Genel
tags:
  - Asus K555
  - Siyah Ekran
  - Uyku Modu
  - Windows 10 Parlaklık
  - Windows 10 VGA
---
Bugün edindiğim [**Asus K555U**](http://www.mkoseoglu.com/tag/asus-k555/) serisi dizüstü bilgisayarda **uyku modu**ndan çıkarken yaşadığım **siyah ekran**/**ekran gelmeme** sorununun çözümünü inceleyeceğiz.

Bilgisayarı, kullanıcıların forum ve çeşitli mecralarda **kronik** olarak bahsettiği bir kaç sorunu göze alarak satın aldım. Ve açıkçası bu satırları yazarken de pişman değilim. Belki de kampanyadan aldığım içindir, kim bilir(!)

Cumartesi olması sebebi ile sabah saatlerinde MNG kargodan ürünümü kendim gidip teslim aldım. Şube yetkililerine de buradan bir kez daha teşekkür ediyorum. Aradığımın ilk seferinde telefona baktıkları ve bilgi verdikleri için. Türkiye&#8217;deki kargo firmalarının çıtasını düşünün artık. Neyse, o da bir başka mesele&#8230;

Eve geldim, ürünümün kutusunu açtım. **Kapak** yüzeyinin metalik görünümünden hoşlandım. El izi bırakması dışında. Kasa yapısına genel anlamda pek özenilmemiş olsa da fiyat performans açısından yeterli olduğunu düşünüyorum. Bu seride ürün almak isteyenlere yeri gelmişken en sık rastlanılan bir sorundan bahsedeyim. **Menteşe** sorunu. Çoğu kullanıcı menteşelerden ve **ekran çerçevesi**nin aralığından yakınmış. Ben rahatsız olmadım pek, bu şartlarda beni tatmin etti.

Öncelikle **ekran kartı** başta olmak üzere ürünün güncel olmayan birkaç sürücüsünü güncelledim. Genelinde ve sonrasında da ihtiyacım olan programları yükledim, kendimce performans ölçütleri yaptım. Buraya kadar sakin, rutin, hissiz yaşantımda bir fark olmadı. Ta ki bilgisayar [**uyku modu**](http://www.mkoseoglu.com/tag/uyku-modu/)ndan çıkamayana kadar!

Evet. Yanlış duymadınız. Bilgisayarın **kapağını kapattığımda** ya da **güç tuşu**na bastığımda geçiş yaptığı **uyku modu**ndan bir türlü uyanmaması, **[siyah ekran gelmesi](http://www.mkoseoglu.com/tag/siyah-ekran/)** sinir katsayımda hareketlenmelere neden oldu.

**Güç tuşu**na basılı tutmak sureti ile kapat/aç işleminin ardından **uyku modu**nu bir kaç kez daha denedim. Sonuç aynı. İçeriden bilgisayar monitörümü **VGA** çıkışı ile bilgisayarıma bağladım. Tekrar denedim. Bu kez hem harici ekrana hem de bilgisayarın ekranına görüntü geliyordu. Sevindim, lakin bu geçici bir çözümdü.

**Google**&#8216;da yaptığım **Türkçe** kaynak araştırmalarında herkesin bu sorunu yaşadığını gözlemledim. Çözüm ise ortalıklarda yok, henüz&#8230; Biraz da yabancı kaynakları taramak istedim. Çoğu kişinin yaptığı gibi servise göndermeden çözmek için var gücümle soruna yoğunlaşmıştım. Sonunda bir kaynakta **aygıt yöneticisi** üzerinden uygulanan bir **çözüm**e ulaştım, denedim. Çalışıyor.

## Çözüm:

  * Aygıt yöneticisi
  * Görüntü Bağdaştırıcısı
  * Tümleşik ekran kartı(dahili ekran kartınız)
  * Sürücü yazılımını güncelleştir
  * Sürücü yazılımı için bilgisayarımı tara
  * Bilgisayarımdaki aygıt sürücüsü listesinden seçmeme izin ver
  * Microsoft Gemel Görüntü Bağdaştırıcı
  * İleri

Tüm bu adımları uyguladığınızda bilgisayarınız **güç modu**ndan sorunsuz bir şekilde uyanacaktır. Şimdi siz deneyin. Oldu değil mi? Evet. Ben de çok sevinmiştim. Fakat sıkı durun; bu işlemin bir bedeli olacak!

## Sonrası:

Bu işlemlerden sonra fark ettim ki bilgisayarımın **parlaklığımı** ayarlayamaz oldum. Tüm seçenekleri denememe rağmen [**parlaklık**](http://www.mkoseoglu.com/tag/windows-10-parlaklik/) ayarlarım devre dışı olmuş durumda. Bu işlemleri yapmadan önce en **parlak** konumda olan bilgisayarım, artık en **parlak** konumda ebedi hayatına merhaba demişti. Maalesef buna bir **çözüm** bulamadım. Beni çok da rahatsız etmedi açıkçası. Eğer siz bulursanız, **yorum**a bekliyorum.

Bitmedi! Bir **sorun** daha var. [**VGA**](http://www.mkoseoglu.com/tag/windows-10-vga/) ile hiçbir şekilde yansıtma kullanamıyorsunuz. Harici bir **ekran**da görüntü paylaşımınız devre dışı kalmış oluyor.

Benim bu soruna dair **çözüm**lerim ve sonrasında yaşadıklarım bu şekilde. Bu sorunu yaşayanlar, servise gönderenler ya da farklı bir yol ile **çözüm**e kavuşanlar; bu çağrım size. **Yorum** alanından tecrübelerini paylaş ve insanlığa değer kat. Paylaşın ki mutlu olun.

Esenlikler.

* * *

## 1 Aralık Güncellemesi:

HDD&#8217;den rahatsız edici bir ses gelmekte. Cızırtı desek yanlış olmaz sanırım. Kapağın arkasındaki ASUS çıkartmasının S harfi resmen kavladı. Sol USB portunda temassızlık var gibi. Touchpad hassasiyetinde gerileme var.

Yukarıda yazdıklarım dışında çok memnunum.

* * *

## 1 Şubat 2017 Güncellemesi:

Ekran kapağımda açılma oldu. Menteşede de sorun vardı. ASUS teknik servisi garanti kapsamında tüm sorunlarımı beş günde halletti. Kendilerine tekrar teşekkür ediyorum.

---

## File: _posts/2016-08-24-codeigniter-dersleri-giris.md

---
id: 3021
title: CodeIgniter 3 Giriş
date: 2016-08-24T05:15:43+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3021
permalink: /codeigniter-dersleri-giris
categories:
  - CodeIgniter 3.x
tags:
  - CI
  - CodeIgniter
  - CodeIgniter Dersleri
  - Framework
  - MVC
  - PHP
---
Yakın zamanda **[PHP](http://www.mkoseoglu.com/etiket/php/)** ile dinamik web uygulamaları geliştirmeye olanak sağlayan; çatı projesi **CodeIgniter** kullanmaya başladım. Ben de bu fırsatı değerlendirerek her zaman olduğu gibi; bilginin paylaşılmasına katkıda bulunmaktan ve buna aracı olmaktan duyduğum zevki [**CodeIgniter dersleri**](http://www.mkoseoglu.com/etiket/codeigniter/) paylaşarak saçmaya karar verdim. Bu yazıyı okumadan önce muhtemelen diğer betiklerde yer alan standart tanımları okudunuz. Ben biraz onlardan kaçınarak biraz da samimiyetin verdiği içtenlikle farklı bir şekilde giriş yapmayı uygun gördüm.

**CodeIgniter**, günümüzde çok yaygın biçimde kullanılmaktadır. Birçok projenin mimarisini oluşturmaktadır. Geliştirici kişiye en önemli katkılarından birisi de hiçbir zaman bir başka yazılımcının kodladığı esere soru işaretleri ile bakmasına gerek kalmayacak olmasıdır. Sözün özü: takım çalışmasına uydundur efendim. [**CI**](http://www.mkoseoglu.com/etiket/ci/) çatısı ile projeler geliştirebilmek için bir **PHP** geçmişinizin olması kaçınılmaz. Bu konuda kendinizi yetersiz hissediyorsanız sizi şöyle alalım: bkz: [php dersleri](https://www.google.com.tr/search?q=php+dersleri&oq=php+dersleri&aqs=chrome..69i57j69i64.255j0j7&sourceid=chrome&ie=UTF-8)

[**CodeIgniter** çatısı](http://www.mkoseoglu.com/etiket/framework/)nda kullanılan [**MVC**](http://www.mkoseoglu.com/etiket/mvc/) tasarım deseni bizleri iç içe girmiş metin tabanlı dillerin karmaşıklığından kurtarmakta. _Model_ – _View_ – _Controller_  üçlüsü bu açıdan hayati bir zemin sağlamaktadır. bkz: [mvc nedir?](https://www.google.com.tr/search?q=php+mvc&oq=php+mvc&aqs=chrome..69i57j69i60j69i64j69i60.2679j0j9&sourceid=chrome&ie=UTF-8#q=mvc+nedir)

Blogumda yayınlayacağım **CodeIgniter** derslerini bölümler halinde yazmayı düşünüyorum. Ve hatta serinin sonunda paylaştığım tüm dersleri bir **blog sistemi** yazarak pekiştirelim, tamamlayalım. Yazıları, yayınlamaya hazır taslaklar haline getirmeden fazla iddialı planlar yapıp Tanrı&#8217;yı güldürmeden sizlere veda edeyim.

Paylaşın, sevin, mutlu olun.

---

## File: _posts/2016-08-24-codeigniter-dersleri-insert-islemleri.md

---
id: 3061
title: CodeIgniter 3 Insert Kullanımı
date: 2016-08-24T07:07:27+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3061
permalink: /codeigniter-dersleri-insert-islemleri
categories:
  - CodeIgniter 3.x
tags:
  - CI
  - CodeIgniter
  - CodeIgniter Dersleri
  - CodeIgniter Veri Ekleme
  - MVC
  - PHP
---
[**CodeIgniter**](http://www.mkoseoglu.com/etiket/codeigniter/) ile veritabanına veri ekleme işlemini gerçekleştirelim. Öncelikle _models _klasörümüzde **YeniProje **isminde bir [PHP](http://www.mkoseoglu.com/etiket/php/) dosyası oluşturalım. Dosyanın içerisine aşağıda yer alan kodları yazalım.

### models/YeniProje

class YeniProje extends CI_Model		
	{

		function Insert(){

		$data = array(
			'alanBir'	=&gt; 'Ben alanBire eklenecek veriyim.',
			'alanIki'	=&gt; 'Ben alanIkiye eklenecek veriyim.',
		);

		$query = $this-&gt;db-&gt;insert('tablo',$data);
		echo $query	? "&lt;h1&gt;veri eklendi..&lt;/h1&gt;" : FALSE;

		/*
		SQL = INSERT INTO tablo (alanBir, alanIki) VALUES ('Ben alanBire eklenecek veriyim.', 'Ben alanIkiye eklenecek veriyim.')

		*/

		}

	}

**CodeIgniter **üzerinde kullanılan **insert** fonksiyonunda birinci parametre işlem yapmak istediğimiz tablo ismi, ikincisi ise verilerimizi gönderdiğimiz dizi değişkenimizdir. Hemen alt satırında yaptığımız if bloğunda da işlem hakkında çıktı alabiliyoruz.

### controllers/Uygulama

defined('BASEPATH') OR exit('No direct script access allowed');

	class Uygulama extends CI_Controller {

		function __construct() 
		{
			parent::__construct();
		}

		function insert()
		{
		$this-&gt;load-&gt;model('yeniproje');
		$query = $this-&gt;yeniproje-&gt;Insert();
   		}
	  
	}


**Uygulama** dosyamızda ise **insert** isminde bir fonksiyon oluşturduk ve **Model** dosyamızdan gelen işlem mekanizmamızı tanımladık.

Tarayıcımızda, _localhost/index.php/uygulama/insert_ adresini çalıştırdığımızda işlemin başarılı olduğunu görebilirsiniz.

---

## File: _posts/2016-09-09-codeigniter-template-yapisi.md

---
id: 3075
title: CodeIgniter 3 Template Yapısı
date: 2016-09-09T02:27:17+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3075
permalink: /codeigniter-template-yapisi
categories:
  - CodeIgniter 3.x
tags:
  - CodeIgniter
  - CodeIgniter Dersleri
  - CodeIgniter Kütüphane Oluşturma
  - CodeIgniter Tema Kullanımı
  - CodeIgniter Template
  - CodeIgniter Template Kullanımı
  - CodeIgniter Template Sistemi
  - PHP
---
[**CodeIgniter**](http://www.mkoseoglu.com/php-mysql/) öğrenmeye yeni başladığım sıralarda **template** yapısına gerek duymamıştım fakat **blog** sistemi yazmaya karar verdiğimde ne kadar elzem bir ihtiyaç olduğunu anlamam uzun sürmedi. Birkaç döküman ve video taramasından sonra amacıma ulaştım. Bu konuda pek **Türkçe** kaynak olmamasından mütevellit blogumda paylaşmaya karar verdim. Olay şöyle ki;

Öncelikle **kütüphane**mizi oluşturalım. [**CodeIgniter**](http://www.mkoseoglu.com/etiket/codeigniter/) dizininde **libraries** klasöründe &#8220;**TempK**&#8221; isminde bir **PHP** dosyası oluşturalım.

## TempK

&lt;?php 

class tempK {

        protected $CI;

        public function __construct()
        {
                $this-&gt;CI =& get_instance();
        }

        public function get($temp, $data=null)
        {
               
       		$data['header']  = $this-&gt;CI-&gt;load-&gt;view('template/header',$data,true);
       		$data['sidebar'] = $this-&gt;CI-&gt;load-&gt;view('template/sidebar',$data,true);
       		$data['content'] = $this-&gt;CI-&gt;load-&gt;view('content/'.$temp,$data,true);
       		$data['footer']  = $this-&gt;CI-&gt;load-&gt;view('template/footer',$data,true);
       		$this-&gt;CI-&gt;load-&gt;view('template/index',$data);
       		       		

        }

}

?&gt;


Yukarıda yer alan kodlarımızda, [**template**](http://www.mkoseoglu.com/etiket/codeigniter-template/) klasörümüzde bulunan _header.php_, _sidebar.php_, _footer.php_ ve **content** klasöründe bulunan dosya ismi dinamik olan _home.php_ dosyamıza veri gönderelim. En alt satırda da _index.php_ dosyamızda gösterelim.

## Template

**View** klasörümüzün içerisine [**Template**](http://www.mkoseoglu.com/etiket/codeigniter-template-kullanimi/) isminde bir klasör daha oluşturalım ve içerisinde _header.php_, _sidebar.php_, _footer.php_ ve _index.php_ dosyaları oluşturalım.

### Footer

&lt;div class="footer"&gt;
	&lt;span&gt;footer&lt;/span&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;

### Header

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
	&lt;meta charset="UTF-8"&gt;
	&lt;title&gt;&lt;?php echo $title; ?&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
	&lt;div class="header"&gt;
	     &lt;span&gt;header&lt;/span&gt;
	&lt;/div&gt;

### Sidebar

&lt;div class="sidebar"&gt;
		&lt;span&gt;sidebar&lt;/span&gt;
&lt;/div&gt;

### Index

&lt;?php

	echo $header;
	echo $sidebar;
	echo $content;
	echo $footer;

?&gt;

## Content

[**Template**](http://www.mkoseoglu.com/etiket/codeigniter-tema-kullanimi/) yapımızda içerik kısmımızda yer alacak [**PHP**](http://www.mkoseoglu.com/etiket/php/) dosyalarını oluşturalım. Ben, _single.php_ ve _home.php_ olarak iki farklı sayfa oluşturdum.

### Home

&lt;div class="content-home"&gt;
		&lt;span&gt;&lt;?php echo $a; ?&gt;&lt;/span&gt;
		&lt;ul id="conU"&gt;
			&lt;?php for($x = 1; $x &lt;= 10; $x++){ ?&gt;	

			&lt;li&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;?php echo $x; ?&gt;&lt;/li&gt;
						
			&lt;?php } ?&gt;	
		&lt;/ul&gt;
	&lt;/div&gt;


### Single

&lt;div class="content-single"&gt;
		&lt;span&gt;&lt;?php echo $a; ?&gt;&lt;/span&gt;
		&lt;ul id="conU"&gt;
			&lt;?php for($x = -5; $x &lt;= 10; $x++){ ?&gt;	

			&lt;li&gt;&lt;a href="#"&gt;&lt;/a&gt;&lt;?php echo $x; ?&gt;&lt;/li&gt;
						
			&lt;?php } ?&gt;	
		&lt;/ul&gt;
	&lt;/div&gt;


## Controllers

Şimdi de **controller** için kodlarımızı yazalım. **Template** isminde bir **PHP** dosyası oluşturuyorum.

&lt;?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Template extends CI_Controller {
	function __construct() 
	{
		parent::__construct();
	 	$this-&gt;load-&gt;library('tempK');
	}

	public function index()
	{
		 $data['title'] ="Ben home başlığım.";
		 $data['a'] ="Ben home içeriğim.";
		 $this-&gt;tempK-&gt;get('home',$data);
		 
	}
	public function single()
	{
 		 $data['title'] ="Ben single başlığım.";
		 $data['a'] = "Ben single içeriğim.";
		 $this-&gt;tempK-&gt;get('single',$data);
		 
	}

}
 
?&gt;

## Sonuç

Genel anlamda yapımız bu şekilde. _template/index_&#8216;e ya da _template/single_ adreslerine baktığımızda başarılı bir şekilde çalıştığını görebilirsiniz. Bu şekilde devam ettiğinizde temeli sağlam bir yapı çıkartabilirsiniz.

> Paylaşın, sevin, mutlu olun.

---

## File: _posts/2016-11-02-kobo-e-kitap-okuyucu.md

---
id: 3183
title: KOBO E-Kitap Okuyucu
date: 2016-11-02T20:03:12+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3183
permalink: /kobo-e-kitap-okuyucu
categories:
  - Genel
tags:
  - KOBO
  - KOBO Aura Multi Touch 6
  - KOBO Türkiye
---
Merhabalar, siz de benim gibi kitap okumadan duramayanlardan biri iseniz bu yazımı okumaya devam edin.

Ben basımı zor bulunan tarihi makale ve kitapları araştırmayı çok severim. Bu nedenle de PDF okuma alışkanlığı kazandım. Sosyal medya grupları ve internet üzerinde birçok kaynaktan aradığınız kitabın PDF formatını bulabiliyorsunuz. Ben bunu bir üst seviyeye taşımak istedim ve bir elektronik okuyucu edindim. Ürünün tam ismi **KOBO Aura Multi Touch 6&#8243;** olarak geçmekte. Fiyat/performans olarak bu ürünü tercih ettim.

Başlarda **Kindle** düşünüyordum fakat Türkiye&#8217;de satılan modellerinin reklamlı olduğunu ve fiyat olarak KOBO&#8217;dan daha fazla olduğunu öğrendiğimde vazgeçtim. Ben **e kitap okuyucu** yelpazesinde sadece Kindle var sandığımdan araştırmayı bırakmıştım ki Facebook PDF paylaşım gruplarından birisinde, bir abimizin tavsiyesi ile keşfettim KOBO&#8217;yu.

Bazı kişilerden **şarj** konusunda söylemler duyuyorum fakat aslı yoktur ki şu şekilde özetleyeyim. &#8220;Eğer arka aydınlatması var ise şarjı çok az gider o yüzden de o paraya tablet alırsın.&#8221; diye düşünen bir zihniyet var. Bu yanlıştır. Benim aldığım modelin de **arka aydınlatması** mevcut ve 60 gün şarj ömrü var.

Ürünün teknik özelliklerini internetten araştırarak öğrenebilirsiniz. Ben çok detaya girmek istemiyorum. İyi ki de almışım diyorum, toplu taşımada ve hayatımın her alanında çok rahat kitap okuyabiliyorum. Boyutu da harika, çantamda varlığı yokluğu anlaşılmıyor. Ben [KOBO Türkiye](http://koboturkiye.com/kobo-aura-6-inch-multi-touch-elektronik-kitap-okuyucu)&#8216;den 360TL&#8217;ye aldım, yazının güncelliğine göre daha uygun fiyatta bir yer bulursanız oradan da alabilirsiniz.

&nbsp;

---

## File: _posts/2017-01-12-json-ciktisinda-karakter-temizleme.md

---
id: 3245
title: JSON Çıktısında Karakter Temizleme
date: 2017-01-12T20:43:01+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3245
permalink: /json-ciktisinda-karakter-temizleme
categories:
  - PHP
tags:
  - Jquery Json
  - Json
  - PHP
  - PHP JSON \r\n
  - PHP JSON array_map Fonksiyonu
  - PHP JSON Dizi
  - PHP JSON Temizleme
---
Esenlikler, ufak bir çalışma için **JSON** çıktısına ihtiyaç duydum. Bu çıktı sonucunda temizlenmesi gereken karakterler baş gösterdi. Bu konuda birçok forumda çözülemeyen başlıklara rastladım. Blogumda paylaşmanın uygun olacağını düşündüm. Sizlerle birlikte, adım adm **JSON** çıktımızı dizi üzerinde değiştirmemize olanak sağlayacak kodlarımızı yazalım. **JSON** konusuna burada fazla değinmeyeceğim. Eğer ki bu konuda bilgi sahibi olmak isterseniz [**dökümanlardan**](http://www.json.org/json-tr.html) faydanabilirsiniz.

Çıktımızda istenmeyen karakterleri dizi (array) içerisinde **array_map** fonksiyonu içinde **preg_raplace** fonksiyonu ile değiştireceğiz. Öncelikle, **array_map** fonksiyonundan bahsedelim biraz.

## PHP array_map Fonksiyonu:

Bir dizimizde, tüm elemanları istediğimiz koşullarda işlevselleştirerek tekrar bize döndürmesini sağlayan ve birçok işimizde bizlere yardımcı olan fonksiyonumuzdur kendileri.

### Kullanımı:

array_map ($işlev , dizi)

PHP array_map fonksiyonu, iki parametre almaktadır.

Birinci parametremiz, her dizinin her elemanına uygulanan geri çağırım işlevidir. İkinci parametremiz ise, elemanları **$islev** tarafından işlenecek dizidir. Bizlere dönen değer ise yine dizi olacaktır.

## PHP preg_replace Fonksiyonu:

Kullanılan düzenli ifadeye göre dizgemizde değişiklik yapar.

### Kullanımı:

preg_replace("sablon", "yenisi", "konu");

**Konu** dizgesini **sablon** ile eşleştirir ve bulduklarını **yenisi** ile değiştirir.

## JSON:

**JSON** kodlarımızın tamamını paylaşıyorum ki mantığında çelişkiye düşmeyin. Yukarıda bahsettiğim fonksiyon ile ilgili farklı kaynaklardan örneklere ulaşabilirsiniz.

### Kodlar:

&lt;?php

header("Content-type: application/json; charset=utf-8");
$db = "Veritabanı"; 
$hatObje = ["hat"=&gt;null];
$hatDizi = [];
try {
	$baglan = new PDO("mysql:host=localhost;dbname=$db;charset=utf8","root","");
} catch ( PDOException $e ){
	die($e-&gt;getMessage());
}
$satirlar = $baglan-&gt;query("SELECT * FROM hatlar", PDO::FETCH_ASSOC);
foreach ($satirlar as $satir) {

  $hatDizi[count($hatDizi)] = $satir;


}
$hatDizi = array_map(
    function($str) {
        return preg_replace("!\r?\n!", " ", $str);
    },
    $hatDizi
);
 $hatObje["hat"] = $hatDizi;

echo $ilk = json_encode($hatObje, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?&gt;


JSON çıktımızı yukarıda yer alan kod bloğuna benzer bir mantık çerçevesinde kullanırsak **\r\n** gibi karakterleri temizlemiş oluruz.

&nbsp;

&nbsp;

---

## File: _posts/2017-01-22-linux-php-composer-hatasi-ve-cozumu.md

---
id: 3263
title: Linux Mint PHP Composer Hatası ve Çözümü
date: 2017-01-22T23:33:29+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3263
permalink: /linux-php-composer-hatasi-ve-cozumu
categories:
  - Linux
tags:
  - Laravel
  - Linux
  - Linux Mint 18 Composer
  - Linux Mint 18 Laravel 5
---
Esenlikler, **Linux** üzerinde **Laravel** kurmak isterken yaşadığım bir soruna çözüm olmak için bu satırlara emek vermekteyim.

## Olası hata çıktıları:

You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

Terminalde bu şekilde bir çıktı aldığınızda aşağıdaki paketleri kurmalısınız. Kullandığınız **PHP** sürümüne ve ismine göre paket isminde değişiklik gösterebilir.

## Çözüm:

sudo apt-get update && sudo apt-get upgrade && sudo apt-get autoclean && sudo apt-get autoremove
sudo apt-get install php5.6-gd
sudo apt-get install php5.6-intl
sudo apt-get install php5.6-xsl
sudo apt-get update

Yukarıda yer alan komutları sırası ile terminal ekranınızda çalıştırın. Sonrasında **composer** işleminiz başarı ile çalışacaktır.

---

## File: _posts/2017-01-25-linux-kisayol-olusturma.md

---
id: 3265
title: Linux Kısayol Oluşturma
date: 2017-01-25T03:06:55+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3265
permalink: /linux-kisayol-olusturma
categories:
  - Linux
tags:
  - Linux
  - Linux Kısayol
  - Linux Mint 18
---
Merhabalar, **Linux** üzerinde kısayol oluşturmak için kullanacağımız komut aşağıdaki gibidir;

sudo ln -s /var/www/html Sunucu

Öncelikle kısayol oluşturmak istediğimiz dizinde uçbirim açıyoruz. Konsolda cd komutu ile de istediğiniz yere ulaşabilirsiniz. Masaüstüne ulaştıktan sonra html dizinini, **Sunucu** ismi ile masaüstüne kısayol oluşturuyoruz.

---

## File: _posts/2017-03-16-developer-gelisticiler-google-chrome-eklenti.md

---
id: 3320
title: Geliştiricilere Özel Google Chrome Uzantıları
date: 2017-03-16T19:03:24+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3320
permalink: /developer-gelisticiler-google-chrome-eklenti
categories:
  - Genel
tags:
  - Geliştiricilere Özel Eklentiler
  - Google Chrome Uzantıları
  - Yazılımcılara Özel Google Chrome Eklentileri
---
Merhabalar, kullandığımız tarayıcılarda eklentiler bir hayli önemlidir. Özellikle geliştiriciler açısından büyük bir önem arz etmektedir. Bir ustanın en önemli varlığı malzemesidir felsefesi de bunu doğrular nitelikte.

## JSONView

JSONView özellikle geliştiriciler için baş tacı olması gereken bir eklenti. Çok uzun zamandır kullanıyorum. JSON çıktılarımı çok daha rahat bir şekilde okuyabiliyorum.



[Google Chrome Web Mağazası](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc)

## Papier

Bu eklenti sayesinde sürekli bir yerlerde &#8220;Yeni Metin Belgesi(99)&#8221; tarzında dosyalar görmekten kurtuldum diyebilirim. Unutmamam gerekenler artık her zaman gözümün önünde. Google Chrome yeni bir sekme açtığınızda sizi Papier&#8217;in arayüzü karşılıyor. Burada aldığınız notlar ise bilgisayarınızı kapatsanız bile orada kalmaya devam ediyor. Senkronize olan oturumunuzla paralel çalışan bu eklenti benim gibi dağınık ve aklı bir karış havada geliştiriciler ve günlük kullanıcılar için harika!



[Google Chrome Web Mağazası](https://chrome.google.com/webstore/detail/papier/hhjeaokafplhjoogdemakihhdhffacia?utm_source=chrome-app-launcher-info-dialog)

## Hideman VPN

Türkiye&#8217;de hükümet 21. yüzyılın son çeyreğinde sene 2017&#8217;de dahi sansür girişimlerinde bulunduğu için bu tarz bir eklenti kullanmak zorunda kalıyorum. Google Chrome için kullanabileceğiniz ücretsiz bir VPN eklentisi Hideman VPN. Bu tarz eklentileri kullanırken her zaman dikkatli olmanız gerekli. Önemli işlemlerinizde kullanmamanızı tavsiye ederim. Unutmayın, ücretsiz olarak size sunulan hiçbir şey ücretsiz değildir. Bilgileriniz çok daha değerli.



[Google Chrome Web Mağazası](https://chrome.google.com/webstore/detail/papier/hhjeaokafplhjoogdemakihhdhffacia?utm_source=chrome-app-launcher-info-dialog)

## Sonuç

Bu konuda tanıtacağım/tanıtmaya değer gördüğüm eklentiler şimdilik bu kadar. Belki zamanlar güncellerim. Sizler de kullandığınız eklentileri yorum kısmından paylaşabilirsiniz.

---

## File: _posts/2017-03-16-laravel-5-4-auth-db-users-tablosu.md

---
id: 3326
title: Laravel 5.4 Auth DB Users Tablosu
date: 2017-03-16T21:23:03+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3326
permalink: /laravel-5-4-auth-db-users-tablosu
categories:
  - Laravel 5.4
tags:
  - Laravel 5.4 E-Mail Kontrolü
  - Laravel 5.4 Users Tablo Yeniden Adlandırma
  - Laravel 5.4 Yönetim Paneli
---
**Laravel 5.4**&#8216;de yönetim paneli kullanımında **giriş** ve **çıkışlarda** **Auth** mekanizmasını kullanıyoruz. **Migration** ile oluşturduğumuz veritabanı şemasında tablo ismi **users** olarak gelmekte. Biz peki bunu değiştirmek istersek nasıl bir yol izlemeliyiz?

## Model

Öncelikle model dosyamızda aşağıdaki güncellemeyi yapalım ve tablo ismini belirleyelim.

/**
     * The database table used by the model.
     *
     * @var string
     */
    protected $table = 'newUsersTable';



## Config

Sonraki adımda config içerisinde yer alan auth.php dosyamızı güncelleyelim.

/*
    |--------------------------------------------------------------------------
    | Authentication Table
    |--------------------------------------------------------------------------
    |
    | When using the "Database" authentication driver, we need to know which
    | table should be used to retrieve your users. We have chosen a basic
    | default value but you may easily change it to any table you like.
    |
    */
 
    'table' =&gt; 'newUsersTable',


## Validation

En çok yapılan hata da burası. Ben dahil birçok kişinin yapmayı unuttuğu güncelleme. E mail alanında yapılan kontrollerin sağlandığı tablo ismi.

Dizin: app/Http/Controllers/Auth/AuthController.php

protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' =&gt; 'required|max:255',
            'email' =&gt; 'required|email|max:255|unique:newUsersTable',
            'password' =&gt; 'required|confirmed|min:6',
        ]);
    }

&nbsp;

---

## File: _posts/2017-03-17-linux-mint-18-1-php-5-6-ve-php-7-0-kurulumu.md

---
id: 3342
title: Linux Mint 18.1 PHP 5.6 ve PHP 7.0 Kurulumu
date: 2017-03-17T02:55:23+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3342
permalink: /linux-mint-18-1-php-5-6-ve-php-7-0-kurulumu
categories:
  - Linux
  - PHP
tags:
  - Linux
  - Linux PHP 5 Kurulumu
  - Linux PHP 7 Kurulumu
  - PHP
  - Ubuntu Linux Laravel
  - Ubuntu PHP 5 Kurulumu
  - Ubuntu PHP 7 Kurulumu
---
Merhabalar, **[Linux](http://www.mkoseoglu.com/linux/) Mint 18.1 Serena** üzerinde **PHP 5.6** ve **PHP 7.0** kurulumu birlikte inceleyelim. Öncelikle **Ubuntu 16**&#8216;dan sonra resmi depolarından PHP 5.x sürümünü kaldırdı ve yerine güncel olan PHP 7.0 kullandı. Fakat biz geliştiriciler için sürümler arasında sörf yapmak son derece mühim. Üzerinde çalıştığınız projenin sizden ne istediğini asla bilemezsiniz. Bu yüzden [Ondrej Sury](https://launchpad.net/~ondrej) isimli bir arkadaşımız kişisel paket arşivine PHP 5.x versiyonunu eklemiş. Bizler de bunu kullanacağız.

## PHP 5 Paketi

sudo apt-add-repository -y ppa:ondrej/php
sudo apt-get -y update

Paketimiz hazır.

## PHP 5.6 ve PHP 7.0 Kurulum

Şimdi her iki sürümü de **Apache2**, **MySQL** ve [**Laravel PHP Framework**](http://www.mkoseoglu.com/laravel-5-4/) destekli kurmaya hazırız.

sudo apt-get -y install php7.0 php5.6-mysql php5.6-cli php5.6-curl php5.6-json php5.6-sqlite3 php5.6-mcrypt php5.6-curl php-xdebug php5.6-mbstring libapache2-mod-php5.6 libapache2-mod-php7.0 mysql-server-5.7 apache2

## PHP 5.6 Kullanalım

sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart ; echo 1 | sudo update-alternatives --config php

## PHP 7.0 Kullanalım

sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart ; echo 2 | sudo update-alternatives --config php

## Son Olarak

sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo service apache2 restart

* * *

**Ubuntu** ve **Debian** temel alınarak geliştirilen **Linux Mint 18.1 Serena** sürümünde başarıyla [PHP 5.6 ve PHP 7.0](http://www.mkoseoglu.com/php-mysql/) kurulumunu gerçekleştirdik.

Bol keyifli kodlar.

---

## File: _posts/2017-03-17-linux-pulseaudio-hdmi-baglantisi-televizyon-ses.md

---
id: 3329
title: 'Linux Mint PulseAudio &#8211; HDMI Bağlantısı'
date: 2017-03-17T02:19:21+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3329
permalink: /linux-pulseaudio-hdmi-baglantisi-televizyon-ses
categories:
  - Linux
tags:
  - HDMI Televizyondan Ses Gelmiyor Linux
  - Linux
  - Linux HDMI Bağlantısı
  - PulseAudio
---
Merhabalar, bir [**Linux**](http://www.mkoseoglu.com/etiket/linux/) **kullanıcısı** olarak daha önce bir ses denetim aracına ihtiyaç duymamıştım. Taki dizüstü bilgisayarımı **HDMI** bağlantısı ile televizyonuma bağlamak isteyene kadar. Ekranımda bir sorun yoktu fakat **sesi bir türlü televizyona veremedim**. Tam da burada **PulseAudio** derdime derman oldu.

Terminalden **PulseAudio** ses denetim aracını çalıştırdıktan sonra üst menüden **Configuration** sekmesine tıklayınız. Burada size uygun ses kanalını seçerek televizyonunuzdan ses çıkışının keyfini sürebilirsiniz.

[Ubuntu PulseAudio](https://apps.ubuntu.com/cat/applications/pavucontrol/)

### Arch

sudo pacman -S pulseaudio pavucontrol

&nbsp;

---

## File: _posts/2017-03-17-linux-steam-buton-baslatma-sorunu.md

---
id: 3347
title: Linux Mint Steam Başlatma Sorunu
date: 2017-03-17T02:03:09+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3347
permalink: /linux-steam-buton-baslatma-sorunu
categories:
  - Linux
tags:
  - Linux
  - Linux LC_ALL=C
  - Linux Steam Başlamıyor
  - Linux Steam Buton Yok
---
Merhabalar, geçenlerde sıkıntıdan ne yapacağımı bilemez halde iken **Steam**&#8216;dan CS:GO yüklemek istedim. Eskileri yad etmek kötü olmasa gerek diye düşündüm ve satın aldım. **Linux** desteğini bildiğim için de yüreğim ferahtı. Terminalden **Steam**&#8216;ı başlattığımda aşağıdaki gibi bir görünümde beni karşıladı. Maalesef arayüzde buton yok.



## Çözüm:

Çözüm olarak çok basit, bir satır kodumuz var.

LC_ALL=C steam

Terminalde **Steam**&#8216;ı bu şekilde çalıştırdığınızda başarı ile çalışacaktır.

---

## File: _posts/2017-03-17-linux-uygulama-baslaticisi-ulauncher.md

---
id: 3332
title: 'Linux Mint Uygulama Başlatıcısı: Ulauncher'
date: 2017-03-17T02:31:20+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3332
permalink: /linux-uygulama-baslaticisi-ulauncher
categories:
  - Linux
tags:
  - Linux
  - Linux Ulauncher
  - Mac OS Uygulama Başlatıcısı
  - Ulauncher
---
Merhabalar, [**Linux kullanıcıları**](http://www.mkoseoglu.com/etiket/linux/) için harika bir uygulama tanıtmak istiyorum. **Mac OS** işletim sistemlerinde kullanılan **uygulama başlatıcısı**nı artık Linux&#8217;ta da kullanabiliriz. Peki nedir bu uygulama başlatıcısı? Bunu dilerseniz bizlere **Ulauncher** anlatsın.

## Ulauncher



* * *

Yukarıda yer alan [**Ulauncher**](http://www.mkoseoglu.com/etiket/linux-ulauncher/) tanıtım videosunda da görülebileceği üzere uygulama sayesinde **Linux işletim sistemi** kullanarak **Mac OS** tarzında bir erişim çubuğuna sahip oluyoruz.

Yükledikten sonra ayarlardan **başlangıçta çalışması** için ilgili kutucuğu işaretlemeyi ve bir **kısayol tuşu** atamayı unutmayın. Ben **CTRL+SPACE** kullanıyorum.

[Ulauncher](http://ulauncher.io/#Download)

---

## File: _posts/2017-03-17-yazilim-uzerine-blog-yazmak.md

---
id: 3356
title: Yazılım Üzerine Blog Yazmak
date: 2017-03-17T12:30:33+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3356
permalink: /yazilim-uzerine-blog-yazmak
categories:
  - Genel
---
Merhabalar, yaklaşık olarak dört senedir blogumda yazılım üzerine elimden geldiğince sizlere bir şeyler aktarmaya, bulamadığım Türkçe kaynakları oluşturmaya çalışıyorum. Son zamanlarda da blogumu bir hayli ihmal ettim. Tüm bu süreç içerisinde sizlere deneyimlerimi ve izlenimlerimi paylaşmak istiyorum.

[](http://www.mkoseoglu.com/wp-content/uploads/ewan-robertson-208022.jpg)

## Yazılım üzerine

Bu alanda uğraş ve emek verenlerin de çok iyi bildiği gibi yazılım biraz nankördür. Burada &#8220;Yazılım&#8221; çok genel bir kavram olsa da asıl anlatmak istediğim her geçen saniye yeni teknolojilere ayak uydurmak ve yeniliğe açık olmak gerektiği. Üzerinde çalıştığınız bir çatı (Framework) yeni bir sürümü çıktığında merakla dökümanı incelemek ve yenilikleri not almak. Her zaman &#8220;evet, bu çalışıyor ama nasıl daha işlevsel çalışır?&#8221; tarzında soruları kendimize yöneltmek ve 5N1K ile iç içe olmanız gerekmektedir.

###### Sorgulamaktan, çalışmaktan ve inanmaktan asla vazgeçmeyin!

Tüm bunların dışında, keşfettiğiniz her kaynağı aklınızda tutmanız mümkün değil. Bunun için düzenli bir yer imleri eklentisi kullanabilirsiniz. Ben bir proje üzerinde isem ilgimi çeken konuları gereksiz bir klasörde topluyorum. Proje sonrasında ise tek tek bakıyorum ve gerçekten işe yarar makale ve kaynakları yer imlerinde gruplarıma dahil ediyorum.

## Bloga yazmak

Peki yazılım üzerine blog yazıyorsanız süreç nasıl işliyor?

#### 1-) Ertelemeyin

Öncelikle, &#8220;harika! bunu kesin blogumda yazmalıyım&#8221; dediğiniz her konuyu o an yazmaya başlayın. Üzerinde bolca zaman harcadığınız bir sorunu çözdüğünüzde, atomu parçalamış gibi hissedebilirsiniz. O an, sizinle aynı duyguları paylaşan binlerce insan olabilir. Fakat benim gibi sonra yazarım bunu derseniz sorunun ve sorunu çözmenin heyecanını kaybetmenin etkisi ile olması gereken makaleleri yazamıyorsunuz.

#### 2-) Okunabilirlik

Çoğu yazılım blogunda kullanışsız kod renklendirme araçlarının kullanıldığını görüyorum. Bu tarz özensiz paylaşımlar, paylaşılan kod bloklarında hata olasığını yükseltmekte ve kullanıcı için okunabilirlikten sınıfta kalmakta. Ben CMS olarak WordPress kullanıyorum. Eklenti olarak da **[Crayon Syntax Highlighter](https://wordpress.org/plugins/crayon-syntax-highlighter/) **kullanmaktayım.

#### 3-) Kaynak

Yazılarınızda mutlaka yararlandığınız kaynakları ekleyin. Bu konuda gördüğüm en başarılı blog yazarı **[Fatih Hayrioğlu](http://fatihhayrioglu.com/) **bu güne değin yazdığı tüm yazılarda istisnasız kaynak belirtmesi takdire şayan bir özellik. Kendisine buradan da ayrıca selamlar. Kaynak belirtmek sığ bir zihniyetten ziyade sizi yüceltir.

#### 4-) Güncellik

Yazılarınızda mutlaka en güncel kod bloklarını paylaşmaya özen gösterin. Özellikle Laravel tarzında, güncellendiğinde geçerliğini yitiren çatılar ( Framework ) ile ilgili paylaşımlarınızda sürüm üzerinde ekstra dikkatli olun.

#### 5-) Yazım kuralları

Yazım ve imla hataları konusuna pek değinmek istemiyorum, değinirsem yazının sonunu bulamayız. Bu konuda kendisini eksik hissedenlere TDK yerine [THD](https://www.facebook.com/turkcenindirilishareketi/) öneriyorum.

## Sonuç

Benim şimdiye kadar gözlemlediğim sonuçlar bunlar. Eğer ki arama motorlarında Türkçe kaynak üzerine bir katkımız olsun diyorsanız bu maddelere bir kez de olsa göz gezdirin. Bazı arkadaşlarımız sadece reklam almak için her gün paylaşılan başlıklarla oluşturduğu blogları efesle kınıyor, azalarak tükenmelerini diliyorum.

---

## File: _posts/2017-03-22-linux-manjaro-gnome-3-22-cozumleri.md

---
id: 3380
title: Linux Manjaro Gnome 3.22 Çözümleri
date: 2017-03-22T04:48:57+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3380
permalink: /linux-manjaro-gnome-3-22-cozumleri
full_width_featured_image_disabled:
  - "1"
categories:
  - Linux
tags:
  - Linux
  - Linux Arch
  - Linux Arch Manjaro
---
Merhabalar, uzun zaman sonra **Ubuntu Mint**&#8216;ten ayrılarak **Arch Manjaro**&#8216;ya geçiş yaptım. Sisteminiz en temel gereksinimlere işlevsel bir şekilde yanıt vermediğinde sizler de tıpkı benim yaptığım gibi farklı dağıtımlara yönelebilirsiniz.

Bu yazımda, Manjaro üzerinde karşılaştığım sorunları listeleyeceğim. Bu sorunları tek tek yazmaktansa tek bir yazıda toplamak daha mantıklı geldi. SEO&#8217;nun canı cehenneme, önemli olan okuyucular diyorum ve karşılaşmanız muhtemel sorunları klavyem yazdığınca açıklamaya çalışacağım.

[](http://www.mkoseoglu.com/wp-content/uploads/2017-03-22-05-49-27-ekran-görüntüsü.png)

## Nvidia Çözünürlük Ayarları

Meraktan, terminalde sudo nvidia-xconfig komutunu çalıştırdım. Kendisi bana xorg.conf dosyasını oluşturdu. Oluşan dosyada çözünürlüğüm 864x olarak gözükmekteydi.

Terminalde dosyamızı açalım.

sudo nano /etc/X11/xorg.conf


Ve ilgili kısmı şu şekilde güncelleyelim.

Section "Monitor"
  Identifier   "CRT1"
  ModelName    "PANEL"
  Option       "DPMS"
  VendorName   "LCD"
  HorizSync    31-60
  VertRefresh  40-60
EndSection

Kaynak:

  * [https://wiki.archlinux.org/index.php/SiS#SiS\_671\_card](https://wiki.archlinux.org/index.php/SiS#SiS_671_card)
  * <http://www.randomshouting.com/2012/12/09/How-to-override-the-screen-resolution.html>

## Bumblebee Kurulumu

Öncelikle kartımızın **hibrit** olduğunu teyit edelim.

lspci | grep -E "VGA|3D"


**Multilip** deposu etkin değil ise etkinleştirelim.

sudo nano /etc/pacman.conf


[multilib]
SigLevel = PackageRequired
Include = /etc/pacman.d/mirrorlist


Sistemi güncelleyelim.

sudo pacman -Syyu


Sistemi güncelledikten sonra **xf86-video-intel** sürücüsü kurulu ise kaldıralım.

sudo pacman -Ss xf86-video-intel

Yukarıdaki kod ile yüklü olup olmadığını kontrol edelim. Terminal çıktınızda **[installed]** ya da **[kurulu]** yazıyorsa kaldıralım.

sudo pacman -R xf86-video-intel


Kurulum paketlerini yükleyelim.

sudo pacman -S bumblebee mesa xf86-video-intel nvidia lib32-nvidia-utils bbswitch nvidia-utils


Kullanıcımızı **bumblebee** grubuna ekleyelim.

sudo gpasswd -a $USER bumblebee


**Bumblebee** servisini sistem açılırken etkinleştirelim.

sudo systemctl enable bumblebeed.service


#### Bilgisayarı yeniden başlatalım.

Terminal çıktısında **bumblebee** yer alıyorsa başarıyla gruba dahil etmişizdir.

groups

**Bumblebee** servisinin durumunu görüntüleyelim. **active (running)** ve **enabled** ibarelerini görüyorsanız sorunsuz çalışıyor demektir.

systemctl status bumblebeed


&nbsp;

Sizde kurulu olabilir ama bende değildi. [**VirtualGL**](https://cdn.rawgit.com/VirtualGL/virtualgl/2.5/doc/index.html#hd006) kuralım.

yaourt -S virtualgl

Şimdi test edelim. **Nvidia** ekran kartı ile çalıştırmak istediğiniz uygulamaları terminalde çalıştırmadan önce başına **optirun** yazıyoruz ve ikinci argüman olarak da uygulamanın ismini yazıyoruz. **VGA** ve **Nvidia** farkını **FPS** ile test edebilirsiniz.

glxspheres64
optirun glxspheres64


#### Steam Yükleme

Yine **optirun steam** yazarak başarılı bir şekilde Steam kurabilirsiniz.

Ek Olarak:

  * https://forum.manjaro.org/t/optirun-cannot-access-secondary-gpu-error-xorg-ee-nouveau-0-drm-failed-to-set-drm-interface-version/15651
  * https://forum.manjaro.org/t/bumblebee-could-not-enable-discrete-graphics-card/16728/6

## PCIe Bus Error

Bu sorunu Mint ile de yaşamıştım. Boot ekranında bir dizi tekrar eden &#8220;PCIe bus error&#8230;&#8221; hatası görebilirsiniz. Genelde hibrit ekran kartı kullananlardan sık karşılaşılan bir sorun.

Boot ekranında e tuşuna basarak grub düzenleyici üzerinden de yapabilirsiniz ama ben manuel olanını göstereceğim. Çünkü onu beceremedim. Bilen bana da öğretsin, vardır bir olayı onun da.

sudo nano /etc/default/grub

Karşımıza çıkan nano düzenleyicide ilgili satırı aşağıdaki gibi güncelliyoruz.

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi"

Şimdi **Grub güncelleyelim**.  Burası önemli Grub üzerinde yaptığınız her değişiklikten sonra güncellemeniz gerekmekte.

grub-mkconfig -o /boot/grub/grub.cfg

Şimdi yeniden başlatabilirsiniz.

reboot

Eğer ki hata almaya devam ederseniz **pci=noaer **olarak deneyin.

Kaynak:

  * <http://askubuntu.com/questions/771899/pcie-bus-error-severity-corrected>
  * <https://wiki.archlinux.org/index.php/kernel_parameters>

#### Bluetooth

Yine boot ekranında Bluetooth sürücüsü hakkında bir hata satırı vardı. Bunun üzerine yaptığım araştırmalarda bir çözüm buldum. Boot ekranında sorun çözüldü bende. Sizinle de paylaşayım hemencecik.

sudo nano /etc/pacman.conf

Yine  nano düzenleyicimizde;

# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup
IgnorePkg   = bluez,bluez-qt,bluedevil,bluez-libs

Yukarıda yer alan satırı bulduktan sonra IgnorePkg taşıyıcısına **bluez,bluez-qt,bluedevil,bluez-libs **parametrelerini girin.

CTRL+x kombinasyonu ile kaydediyoruz.

Kaynak:

  * <https://forum.manjaro.org/t/bluetooth-won-t-receive-files-but-sends-them-ok/10540/3>

## Teamviewer

Şimdi dürüst olmak gerekirse tam olarak verdiği hatayı hatırlamıyorum. Yalnız şunu iyi biliyorum ki çalışmayacak abi.

Öncelikle, önceden kurduysanız Teamviewer&#8217;i silelim.

sudo rm -rf /etc/teamviewer*
rm -rf ~/.config/teamviewer*

AUR paket yükleyici ile Teamviewer&#8217;in son sürümünü yükleyelim.

sudo systemctl enable teamviewerd.service
sudo systemctl start teamviewerd.service

Ve sonra yukarıdaki komutları terminalde çalıştıralım.

Kaynak:

  * <https://aur.archlinux.org/packages/teamviewer/>

## Redshift

Gece çalışanlar için özellikle gözleri almasın diye kullanılan bir araç var. F.lux olarak geçmekte ismi. Ubuntu&#8217;da bunu kullanırdım ama Manjaro&#8217;da yükleyemedim. Buna istinaden bir alternatif buldum. O da Redshift! Kendisi gayet başarılı.

AUR paket yöneticimizden yükledikten sonra &#8220;Trying location provider `geoclue2'... Using provider`geoclue2&#8242;&#8221; şeklinde hata alacaksınız.

sudo nano /etc/geoclue/geoclue.conf

Terminalde yukarıdaki kodu çalıştırdıktan sonra açılan düzenleyicide aşağıdaki kodları ekliyoruz:

[redshift]
allowed=true
system=false
users=

Tamamdır. Şimdi kullanabilirsiniz. Başlangıçta çalıştır demeyi de unutmayın, kullanın. Göz sağlığı önemli.

Kaynak:

  * <https://github.com/jonls/redshift/issues/158>

## Keyring Chrome

Chrome her açtığımda keyring diyalog penceresinde benden root şifremi istiyordu. Muazzam topluluk buna da bir çözüm bulmuş.

sudo mv /usr/bin/gnome-keyring-daemon /usr/bin/gnome-keyring-daemon-old 
sudo killall gnome-keyring-daemon

Kaynak:

  * <https://forum.manjaro.org/t/keyring-for-chromium-is-pointless/4328>

## PHP 7 + Apache2 + MySQL (XAMPP)

Şimdi önce kendimden gayet emin bir şekilde Apache&#8217;yi manuel olarak kurdum. Gerekli birkaç ayar çektim. Sonra PHP kurdum. Gayet güzel. Sunucuya PHP tanıtamadım. Uğraş uğraş, dedim yeter. XAMPP getirin bana. Çok güzel çare oldu.

Öncelikle buradan indirin:

  * <https://www.apachefriends.org/index.html>

Kurulum adımlarını [bu](https://wiki.archlinux.org/index.php/xampp) sayfadan takip edebilirsiniz. Autostart yapmayı unutmayın, üşenenlere büyük güzellik.

## Dil Ayarları

**Manjaro Settings Manager **aracı ile dil seçeneklerini özelleştirebilirsiniz.

## Masaüstü Ayarları

**Tweak Tools **aracı ile masaüstüne ikon ekleyebilirsiniz.

---

## File: _posts/2017-03-28-linux-manjaro-failed-to-initialize-the-nvidia-gpu-at-pci100.md

---
id: 3394
title: Linux Manjaro Failed to initialize the NVIDIA GPU at PCI:1:0:0
date: 2017-03-28T02:44:35+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3394
permalink: /linux-manjaro-failed-to-initialize-the-nvidia-gpu-at-pci100
categories:
  - Linux
---
Merhabalar, bugün bir hata ile karşılaştım. **Manjaro** sistemimde **Bumblebee** çalıştırmak isterken sorunla karşılaştım. Çözüme geçelim.

## Linux Manjaro Bumblebee Hata Çıktıları:

[  322.525910] [ERROR]Cannot access secondary GPU - error: [XORG] (EE) NVIDIA(0): Failed to initialize the NVIDIA GPU at PCI:1:0:0.  Please
[  322.525962] [ERROR]Aborting because fallback start is disabled.

Eğer ki yukarıda yer alan bir hata koduna rastlıyorsanız **optirun firefox** yazdığınızda aşağıdaki yönergeleri dikkatle takip edin.

Öncelikle **/etc/mkinitcpio.conf** dosyasında **MODULES** satırını güncelleyelim.

MODULES="i915 bbswitch"


**/etc/default/grub** dosyamızda **GRUB\_CMDLINE\_LINUX_DEFAULT** satırına parametre ekleyelim. Arch Wiki&#8217;de kernel parametre ekleme bölümüne bakabilirsiniz.

rcutree.rcu_idle_gp_delay=1

**Grub** güncellemelerini kaydedelim.

grub-mkconfig -o /boot/grub/grub.cfg

**/etc/bumblebee/bumblebee.conf** dosyasında **Bridge** satırını güncelleyelim.

Bridge=virtualgl

Ve son olarak **/etc/bumblebee/xorg.conf.nvidia** dosyasında section device içerisine NVIDIA kartımızın **BusID** değerini tanımlayalım.

&nbsp;

BusID "PCI:01:00:0"

Kendi BusID değerini öğrenmek için:

lspci | grep 3D

**Benim dosyam şu şekilde. Sizde aynı olmayabilir, örnek vermek için ekliyorum.**

## ## Generated by mhwd - Manjaro Hardware Detection ## 
Section "ServerLayout"
Identifier "Layout0" 
Option "AutoAddDevices" "false" 
EndSection 
Section "Device" 
Identifier "Device1"
Driver "nvidia" 
BusID "PCI:01:00:0" 
VendorName "NVIDIA Corporation" 
Option "NoLogo" "true" 
Option "UseEDID" "false" 
Option "ConnectedMonitor" "DFP" 
EndSection

Bilgisayarımızı yeniden başlattığımızda sorun düzelmiş olacaktır.

---

## File: _posts/2017-03-28-linux-manjaro-steam-failed-to-load-driver-swrast.md

---
id: 3396
title: 'Linux Manjaro Steam Failed To Load Driver: Swrast'
date: 2017-03-28T02:54:04+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3396
permalink: /linux-manjaro-steam-failed-to-load-driver-swrast
categories:
  - Linux
---
Merhabalar, Manjaro sistemimde bir hata aldım. Çözümü şu şekilde yaptım.


  
    [Linux Manjaro Failed to initialize the NVIDIA GPU at PCI:1:0:0](https://www.mkoseoglu.com/linux-manjaro-failed-to-initialize-the-nvidia-gpu-at-pci100)
  




Sorunu çözdükten sonra, **optirun steam** yazdığımda şu şekilde hata aldım.

## Linux Manjaro Optirun Steam

Installing breakpad exception handler for appid(steam)/version(0)
libGL error: No matching fbConfigs or visuals found
libGL error: failed to load driver: swrast

Çözümü ise **primusrun steam** komutu ile çalıştırarak buldum. Terminalde gerekli paketleri kuralım.

yaourt primusrun

Size uygun paketi yükledikten sonra Terminalde Steam&#8217;ı çalıştıralım.

primusrun steam

## Fatal Error: failed to load steamui.so

Eğer ki yukarıdaki gibi çalıştırmak istediğinizde **Fatal Error: failed to load steamui.so **hatası alıyorsanız terminalde şu şekilde çalıştırın:

LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1' primusrun steam

Ya da;

mv .local/share/Steam{,.old} 


Bir diğer çözüm olarak ~/.bashrc  dosyasına da tanımlayabiliriz.

export LD_PRELOAD='/usr/$LIB/libstdc++.so.6 /usr/$LIB/libgcc_s.so.1 /usr/$LIB/libxcb.so.1'


&nbsp;

---

## File: _posts/2017-03-28-php-ssh-surumu-yukseltme-ve-laravel-5-4-kurulumu.md

---
id: 3401
title: PHP SSH Sürümü Yükseltme ve Laravel 5.4 Kurulumu
date: 2017-03-28T03:12:03+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3401
permalink: /php-ssh-surumu-yukseltme-ve-laravel-5-4-kurulumu
categories:
  - Laravel 5.4
  - Linux
  - PHP
---
Merhabalar, bugün **SSH** ile sunucuma **Laravel 5.4** kurmak isterken **Plesk** panelde **7.1** olan **PHP** sürümüm **SSH**&#8216;de **5.4** olarak gözükmekteydi. Bu yüzden kurmakta sorun yaşadım.

## SSH PHP Sürümünü Yükseltme

**SSH**&#8216;de aşağıdaki komutla çözüme geçelim.

which php

Eğer ki çıktımız **/usr/bin/php** ise devam edelim.

sudo mv /usr/bin/php /usr/bin/php54


sudo rm -rf /usr/bin/php

ln -s /opt/plesk/php/7.1/bin/php /usr/bin/php


Ben kendi Plesk panelimden 7.1&#8217;in yolunu kısayol oluşturdum.

## Laravel 5.4 Kurulumu

Kurulumu gerçekleştirelim.

composer create-project --prefer-dist laravel/laravel laravel


Kurulumdan sonra gerekli izinleri verelim.

chmod 755 -R laravel
chmod -R o+w storage

Şimdi dizin işlemlerine geçelim.

**Public klasörü**nde bulunan **server.php **dosyasının ismini **index.php **olarak değiştirelim ve yine **Public klasörü**nde bulunan **.htaccess** dosyası ile birlikte ana dizine taşıyalım.

Şu an hatasız Laravel ekranını görmeniz gerekmekte.

## Artisan Kullanımı

Öncelikle çalıştıralım.

php artisan serve --host=&lt;HOST IP BURAYA&gt;--port=8125


Şu an 8125 portunda çalışabilirsiniz.

<https://laravel.com/docs/5.4/artisan>

Murat Bastas&#8217;a teşekkürler.

---

## File: _posts/2017-04-02-fedora-25-gnome-cozumleri.md

---
id: 3404
title: Linux Fedora 25 Gnome Çözümleri
date: 2017-04-02T05:00:35+00:00
author: Mert Köseoğlu
layout: post
guid: http://www.mkoseoglu.com/?p=3404
permalink: /fedora-25-gnome-cozumleri
categories:
  - Linux
tags:
  - Fedora
  - Linux
---
Merhabalar, Fedora 25 Gnome başlangıcında karşılaşmanızın olası olduğu bazı sorunlardan bahsetmek istiyorum. Fedora 25&#8217;e başlarken de diyebiliriz aslında.

[](http://www.mkoseoglu.com/wp-content/uploads/2017-04-02-04-59-34-ekran-görüntüsü.png)

## Sağ Tık İle Yeni Dosya Oluşturma

Bulunduğunuz konumda sağ tık yaparak yeni dosya oluşturabilirsiniz. Bunun için aşağıdaki yönergeleri takip edelim.

Terminalde -sizin dilinize göre değişkenlik gösterebilir- Tempaltes (Şablonlar) dizinine erişelim. Ve ilgili dizinde bir alt satırda yer alan komutu çalıştıralim. Yeniden başlattığınızda eklendiğini görebilirsiniz.

cd ~/Templates/
touch ‘New Text File.txt’ && touch ‘New Word File.doc’ && touch ‘New Excel File.xls’



## Fedora&#8217;da Masaüstünü Etkinleştirme

Fedora&#8217;da  **Gnome Tweak Tool** yüklemelisiniz. Yüklediğinizde ki Türkçe kullanıyorsanız **İnce Ayar Aracı** olarak geçecektir ismi; masaüstü sekmesinden etkinleştirebilirsiniz. Eğer ki etkinleşmedi ise yazıyı takip edelim.

sudo vi /etc/gdm/custom.conf

Yukarıdaki komutumuzla birlikte açılan terminalde **S** tuşuna basarak düzenleme moduna alıyoruz.

WaylandEnable=false

**#WaylandEnable=false **satırının başındaki yorum etkisini kaldırın ve satırı etkinleştirin. Ve [daemon] etiketinin içerisinde, yine WaylandEnable satırının hemen altına aşağıdaki kodu ekleyelim.

DefaultSession=gnome-xorg.desktop


Son durumda aşağıdaki gibi olacaktır.

# GDM configuration storage

[daemon]
# Uncoment the line below to force the login screen to use Xorg
WaylandEnable=false
DefaultSession=gnome-xorg.desktop

[security]

[xdmcp]

[chooser]

[debug]
# Uncomment the line below to turn on debugging
#Enable=true

Bilgisayarınızı yeniden başlattığınızda kullanılabilir bir masaüstü sizi bekliyor olacak.

## XAMPP

Bu konuya Manjaro&#8217;da da değinmiştim aslında ama bu kez izin vermek zorunda kaldım. Belki Manjaro&#8217;da da vermişimdir, hatırlamıyorum ama ben yine de paylaşayım.


  
    [Linux Manjaro Gnome 3.22 Çözümleri](https://www.mkoseoglu.com/linux-manjaro-gnome-3-22-cozumleri)
  




chown -hR mksglu:root /opt/lampp/htdocs
chmod 755 -R /opt/lampp/htdocs

&nbsp;

---

## File: _posts/2017-04-10-google-app-script-form-dosya-yukleme.md

---
id: 3409
title: Google App Script Form Oluşturma ve Dosya Yükleme
date: 2017-04-10T01:23:51+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3409
permalink: /google-app-script-form-dosya-yukleme
categories:
  - Google Developers
tags:
  - Google App Script Access
  - Google App Script Anyone
  - Google App Script File Upload
  - Google App Script ile Resim Yükleme
  - Google App Script Permisson
  - Google Form Resim Yükleme
---
Merhabalar, **Google Form**&#8216;a dosya yüklemek için gerekli adımları birlikte inceleyelim. Öncelikle **Google App Script** dökümanlarına bir göz atalım.

  * <https://developers.google.com/apps-script/>

## **Google App Script**

GAP ile çevrimiçi hazırladığınız kullanıcı formlarından alınan bilgileri Exel üzerine tutabilir, gruplandırabilir; eklenen fotoğrafları ise ilgili başvuru Id&#8217;si ile Google Driver hesabınızda depolayabilirsiniz.

[](https://www.mkoseoglu.com/wp-content/uploads/google-apps-script.jpg)

## Code.GS

var submissionSSKey = '--ID--';
var folderId        = "--ID--";


function doGet(e) {
  var template    = HtmlService.createTemplateFromFile('form.html');
  template.action = ScriptApp.getService().getUrl();
  return template
  .evaluate()
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL); 
  
}


function processForm(theForm) {

  var img               = theForm.img;
  var folder            = DriveApp.getFolderById(folderId);
  var doc               = folder.createFile(img);
  var template          = HtmlService.createTemplateFromFile('thanks.html');
  var name              = template.name               = theForm.name;
  var file              = template.doc  = doc.getUrl();
  var sheet             = SpreadsheetApp.openById(submissionSSKey).getSheets()[0];
  var lastRow           = sheet.getLastRow();
  var targetRange       = sheet.getRange(lastRow+1, 1, 1, 2).setValues([
    [
      mert,
      file
      
    ]
  ]);

  return template.evaluate().getContent();
}


## Form.HTML

&lt;script&gt;
  function bosluk() {
    if ($('#myForm')[0].checkValidity()!= false) {
      var myFormObject = document.getElementById('myForm');
        toggle_visibility('formDiv');
        toggle_visibility('inProgress');
        google.script.run
        .withSuccessHandler(updateOutput)
        .processForm(myFormObject)
    }else{
       $('#myForm').checkValidity();

    }
  }

 function updateOutput(resultHtml) {
     toggle_visibility('inProgress');
     var outputDiv = document.getElementById('output');
     outputDiv.innerHTML = resultHtml;
   }

function toggle_visibility(id) {
     var e = document.getElementById(id);
     if(e.style.display == 'block')
       e.style.display = 'none';
     else
       e.style.display = 'block';
   }

&lt;/script&gt;

&lt;div style="display:block;" id="formDiv"  &gt;
  &lt;form id="myForm"&gt;
    &lt;input type="text" name="name" value=""&gt;
    &lt;input type="file" name="img" value=""&gt;
    &lt;input type="submit" class="btn btn-lg btn-info" value="Gönder!"onclick="bosluk(); return false;" /&gt;
  &lt;/form&gt;
&lt;/div&gt;
&lt;div id="inProgress" style="display: none;"&gt;
  Yükleniyor..
&lt;/div&gt;
&lt;div id="output"&gt;
&lt;/div&gt;



## Thanks.HTML

&lt;h1&gt;Sn. &lt;?= name; ?&gt;&lt;/h1&gt;
&lt;p&gt;Başvurun tarafımıza ulaştı, sana en kısa zamanda dönüş yapacağız.&lt;/p&gt;

## Kaynaklar:

<https://developers.google.com/apps-script/>

## Örnek Çalışma:

  * <https://script.google.com/macros/s/AKfycby6dZ1GgREAuBcQt-oN9gQNVi_YXXM2toFL2AldHUl1/dev>

---

## File: _posts/2017-04-16-nativescript-baslangic.md

---
id: 3423
title: 'NativeScript &#8211; Başlangıç'
date: 2017-04-16T05:38:24+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3423
permalink: /nativescript-baslangic
categories:
  - NativeScript
tags:
  - NativeScript
  - NativeScript Dersleri
  - NativeScript Giriş
---
NativeScript, cross-platform yapısı ile IOS ve Android uygulamaları oluşturmanıza imkan sağlayan bir ( framework ) çatıdır. NativeScript&#8217;i kullanabilmek için önümüzde iki seçenek var. Angular**, **TypeScript ve JavaScript**. **Ben JavaScript ile devam edeceğim. Sizin tercihiniz farklı ise sizi [şu](http://docs.nativescript.org/angular/tutorial/ng-chapter-0) bağlantıya yönlendirelim.



NativeScript, bizlere truly native sloganı ile birlikte; JavaScript üzerinden native API &#8216;lere yüzde yüz erişim vaat etmektedir. Üstelik JavaScript için geliştirilmiş olan paket yönetim sistemi npm&#8217;i de kullanmak mümkün. Tamamen açık kaynak kodludur. NavaScript&#8217;in dökümanlarında web views terimi geçmekte. Bunun ne olduğunu ise bizlere [Jen Looper](http://developer.telerik.com/author/jlooper/), Telerik üzerinde bir [blog yazısı](http://developer.telerik.com/featured/what-is-a-webview/) ile açıklamaya çalışmış ve [John Bristowe](http://developer.telerik.com/author/jbristowe/)&#8216;un sözünü alıntılamış. Ben de yinelemek isterim zira çok anlamlı, öz ve yalın. &#8220;&#8230;chromeless browser window that’s typically configured to run fullscreen.&#8221; Türkçe olarak özütmeye çalışırsak tam ekran çalıştırmak üzere yapılandırılmış tarayıcı penceresi diyebiliriz sanırım. NativeScript&#8217;in truly native [UI](https://docs.nativescript.org/ui/basics) kullanarak performanlı çalışmasından bahsedilmiş. UI, UX, UXD, UID, ID gibi terimler son zamanlarda hayatımızda sıkça kullanılmakta. UI baz alırsak şayet; User Interface yani kullanıcı arayüzü olarak adlandırabiliriz.

Benim daha öncesinde mobil uygulama geliştirme tecrübem olmamasına rağmen şu an akıcı bir şekilde developer kavramını NativeScript ile yaşadığıma inanıyorum. Facebook&#8217;un geliştirdiği ve sonrasında Open Source olarak yayınladığı React Native&#8217;den daha olumlu yorumları var şu anlık gözlemlerime göre. Özellikle çapraz platform olması; IOS ve Android sistemlerinde ufak sitil ayarlamaları ile tek projede çalışabilir olması takdire şayan. Şu anlık fark ettiğim bir eksiği var o da topluluğun zayıf olması. Bu da zamanla aşılacak bir sorun. Blogum üzerinden NativeScript serisine devam edeeğim. NativeScript resmi dökümanlarını baz alacağım. Sizler de benimle birlikte takip edebilirsiniz. Geliştirmeye başlamadan önce ısrarla [topluluk forumu](https://discourse.nativescript.org/)na üye olmanızı tavsiye ederim.

### Kaynak:

  * https://docs.nativescript.org/
  * https://netvent.com/ui-ve-ux-nedir/
  * http://developer.telerik.com/featured/what-is-a-webview/
  * http://developer.telerik.com/featured/what-is-a-hybrid-mobile-app/

---

## File: _posts/2017-04-19-linux-arch-manjaro-codeigniter.md

---
id: 3446
title: 'Linux Arch &#038; Manjaro CodeIgniter Kurulumu'
date: 2017-04-19T08:38:34+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3446
permalink: /linux-arch-manjaro-codeigniter
categories:
  - CodeIgniter 3.x
  - Linux
  - PHP
tags:
  - CodeIgniter
  - Linux Arch Sistem Dili Türkçe
  - Linux Arch TR Locale
  - Linux Manjaro CodeIgniter
  - PHP
  - PHP CodeIgniter
  - PHP CodeIgniter ::$input
  - PHP CodeIgniter ::$uri
---
**CodeIgniter** kurulumunda GitHub üzerinden ya da resmi siteden son sürümü indirdiğinizde ve çalıştırdığınızda sizi bir Welcome ekranı karşılayacaktır. Bu ekranı gördüğünüzde sorunsuz çalıştığını varsayabilirsiniz; tabii bir **Arch&Manjaro** kullanıcısı değilseniz. Eğer ki **sistem dili Türkçe** olan Linux Arch ya da bir Manjaro kullanıcısı iseniz; muhtemelen CodeIgniter ya da ZN Framework çalışmayacaktır.  Bunun nedeni PHP&#8217;nin standart str fonksiyonlarının çalışmamasıdır. Konunun başlığını bu şekilde belirledim çünkü sorunun kaynağını bilen birisi zaten çözüme de rahatlıkla ulaşabilir. Önemli olan sorunun nereden kaynaklandığını bilemeyen arkadaşları konuya çekebilmek. Gerekli hata kodları etiket olarak dahil edilmiştir.

Şöyle anlatmak gerekirse $this-uri->segment(1) ve $this->input->get(&#8216;q&#8217;) kodları hata verecektir. Burada dikkat ettiğiniz bir nokta var mı? Evet, bildiniz! Burada this anahtarı ile eriştiğimiz sınıf özelliklerinin ikisinde de **i** harfi bulunmakta. Peki, bununla ne ilgisi var? Öncelikle [şurada](https://bugs.php.net/bug.php?id=18556) bu konu ile ilgili açılmış bir bug report bulunmakta. Ona göz atmanızı rica ediyorum. Şimdi biraz daha oturdu gibi konu. Bir dizi içerisinde **URI** ya da **INPUT** anahtarı ilgili PHP fonksiyonlarınca küçültülmek istenilmektedir. Fakat bunu başaramaz ve bu anahtarlar bize **urI** ve **Input **olarak döner ve hata verir.

## Olası Hata Çıktıları:

Message: Undefined property: Welcome::$uri

Message: Undefined property: Welcome::$input

Message: Call to a member function segment() on null

Yukarıdaki hatalardan normal zamanlarda bir çözüm yolu aransaydı $this->load->helper(&#8216;uri&#8217;); satırını _Controller_ dosyamıza dahil etmeyi düşünürdük. Bu tarz bir hatanın olabileceğini kimse düşünemezdi.

## Çözüm Yolları:

Linux sistem dilinde bu tarz dönüşüm ve işlemlerin kontrol merkezinde **CTYPE** bulunmakta. Bizler, **CTYPE**&#8216;ı en_US.UTF8  yaparsak bu sorun çözülecektir.

[](https://www.mkoseoglu.com/wp-content/uploads/17966903_1912078435695629_7955392821469594039_o.jpg)

Bir diğer çözüm yolu ise en_US.UTF8  yüklü olmak koşulu ile; **LC_CTYPE** veya **LC_ALL** değerini değiştirerek de sorun çözülebiliyor.

## Ek Olarak:

Çözümde benimle birlikte uğraş veren [AnkaraPHP](https://twitter.com/ankaraphp) ekibine ve Eray Aydın&#8217;a teşekkürlerimi iletiyorum.

## Kaynak:

  * https://wiki.archlinux.org/index.php/locale

---

## File: _posts/2017-04-24-laravel-5-4-ile-blog-yapalim-baslangic.md

---
id: 3458
title: 'Laravel 5.4 ile Blog Yapalım &#8211; Başlangıç'
date: 2017-04-24T21:13:50+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3458
permalink: /laravel-5-4-ile-blog-yapalim-baslangic
categories:
  - Laravel 5.4
tags:
  - Laravel 5.4
  - Laravel 5.4 Blog
  - Laravel 5.4 Dersleri
---
**Laravel** 5.4 çatısı ile Türkçe kaynak olması amacı ile en temel gereksinimleri barındıran bir blog çalışması yapacağız. Öncelikle **Laravel**&#8216;in evrensel tanımına bir göz atalım. Çalışma boyunca Laravel dökümanına sadık kalacağım. Siz de benimle birlikte takip edebilirsiniz.

[](https://www.mkoseoglu.com/wp-content/uploads/laravel-5.4.png)

## Laravel

**Laravel**, MVC yapısında web uygulamaları geliştirme için tasarlanmış ücretsiz, açık kaynak PHP web uygulama iskeletidir. **Laravel**, GitHub sitesinde barındırılan kaynak kodu ile birlikte, MIT lisansı altında yayınlandı.

## Laravel Kurulumu

**Laravel** kullanımı için sunucumuzda bazı gereksinimlerin var olduğundan emin olmalıyız.

  * PHP >= 5.6.4
  * OpenSSL PHP Extension
  * PDO PHP Extension
  * Mbstring PHP Extension
  * Tokenizer PHP Extension
  * XML PHP Extension

Bu gereksinimleri sağladığınızdan emin iseniz kuruluma devam edebiliriz. Kurulumda composer  kullanacağız.

### Composer

Composer hakkında yine evrensel bilgi kaynağına başvuralım ve alıntılayalım.

Composer, PHP programlama dili için tasarlanmış çoklu platform (cross-platform) bir paket yönetim sistemidir. PHP uygulamaları ve uygulama içerisinde kullanılan kütüphaneler için bağımlılık yönetimi (dependency management) sağlar. Nils Adermann and Jordi Boggiano, tarafından geliştirilmiş olup ilk sürümü 1 Mart 2012 tarihinde yapılmıştır[1]. Composer geliştirilirken Node.js&#8217;in &#8220;npm&#8221; ve Ruby&#8217;nin &#8220;bundler&#8221; sistemlerinden esinlenilmiştir[2].

Composer komut satırından çalıştırılır ve uygulamanın bağımlı olduğu kütüphaneleri uygulama içerisine kurar. Kurulan kütüphanelerin bağımlı olduğu başka kütüphaneler varsa onlar da otomatik olarak kurulur. Composer ayrıca packagist adı verilen ortak bir kaynaktan izin verilen kütüphanelerin uygulama içerisine kolayca kurulmasına da imkan verir. Yüklenen kütüphanelerin uygulama içerisine otomatik olarak yüklenmesi (autoload) için bir altyapı da sunar.

### Composer Yükleyelim

Ben bir Linux kullacanıcısıyım. Linux 4.10.8-1-MANJARO x86_64 GNU/Linux Siz kendi işletim sisteminize göre [buradaki](https://getcomposer.org/download/) bağlantıyı takip ederek kurulumunu yapabilirsiniz.

Ben kendi paket yöneticimden yüklüyorum.

#### Linux Arch & Manjaro

yaourt -S composer

Komutu ile birlikte composer kurulumunu başarılı bir şekilde gerçekleştirmiş bulunmaktayım. Siz de yüklemenin doğruluğunu öğrenmek isterseniz terminal ekranınızda composer  komutunu çalıştırabilir ve kullanabileceğiniz argüman listesine ulaşabilirsiniz.

#### Composer Create Project

Composer üzerinde create-project komutunu kullanabiliriz. Bu komut bizlere ilgili paketi yeni bir proje halinde indirmemizi sağlayacaktır.

Terminalde kurmak istediğiniz dizini açalım. Linux&#8217;ta pwd  komutu ile bulunduğunuz dizini görebilir, cd komutu ile farklı dizinlere geçiş yapabilir ve ls komutu ile de bulunduğunuz dizinde bulunan dosyaları görüntüleyebilirsiniz.

Terminalde kurulumu yapmak istediğiniz dizine geldiğinizde aşağıdaki komutu çalıştıralım:

composer create-project --prefer-dist laravel/laravel blog

Buradaki blog sizin projenizin ismi olacaktır. Siz bunu dilediğiniz şekilde değiştirebilirsiniz. Kurulumdan sonra ilgili dizinde blog isminde bir klasör oluştuğunu görüyoruz.

### Laravel 5.4 ile Geliştirmeye Hazırız

**Laravel** çalışmalarımızda bazı yetkilendirmeleri tanımlamamız gerekmektedir. Bunlar depolama alanı içerisindeki storage  ve bootstrap/cache  dizinleridir.

sudo chgrp -R www-data storage bootstrap/cache 
sudo chmod -R ug+rwx storage bootstrap/cache

#### PHP Artisan

Laravel&#8217;de projemizi geliştirirken sık sık artisan komutlarını kullanacağız. Bu konuya ileride daha çok değineceğiz. Şimdi projemizi çalıştıralım.

php artisan serve

Bu komut bizlere varsayılan olarak 8000 portunda Laravel&#8217;i çalıştırmaktadır. Eğer farklı bir port üzerinde çalışmak isterseniz;

php artisan serve --port=5050

Yukarıdaki kullanım gibi 5050 portunda da çalışabilirsiniz. Eğer buraya kadar sorunsuz bir şekilde kurulumu gerçekeştirdi iseniz bir sonraki dersimize geçebilirsiniz.

## GitHub:

Github üzerinden çalışmaya ulaşabilirsiniz.

  * https://github.com/mkoseoglu/laravel5.4-blog

## Kaynak:

  * https://laravel.com/docs/5.4/installation

---

## File: _posts/2017-04-26-atom-git-plus-github-git-kullanimi.md

---
id: 3473
title: Atom Editör ile Git, GitHub ve Git Plus Kullanımı
date: 2017-04-26T21:44:44+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3473
permalink: /atom-git-plus-github-git-kullanimi
categories:
  - Genel
tags:
  - Git Kullanımı
  - Git Plus Kullanımı
  - Git ve GitHub Kullanımı
  - GitHub Kullanımı
---
Ekip halinde geliştirdiğiniz projelerde **Git** ve **GitHub** kullanımının önemini hatırlatmaya gerek duymadan konu başlığının içeriğinden bahsetmek istiyorum.

Bildiğiniz üzere; popüler metin editörlerinden birisi olan **Atom** şu sıralar çok revaşta. Ben de severek kullanıyorum kendisini. Bazı arayüz çalışan arkadaşlarım Sublime metin editöründen vazgeçmese de ben sunucu bazlı dillerde bir handikabını görmedim. Gerek paket deposu gerekse de pratik kullanımı ile vazgeçilmezimdir. Buna tema desteği de dahil tabii ki.



Atom metin editöründe kullanılan işlevsel paketlerden birisi de **Git Plus**. Proje geliştirme aşamasında normal şartlarda uçbirimden uzak sunucu ile bağlantı kurmanız ve değişiklikleri bildirmeniz gerekmektedir. **Git Plus** sayesinde zorlanmadan uzak sunucu kullanabilir ve kolay kullanımı ile **Git** **GitHub** dünyasına adım atabilirsiniz.

Öncelikle **GIT** ve **GitHub**&#8216;ın genel ve evsensel tanımlarına değinelim ve alıntı yapalım.

## GitHub

**GitHub**, sürüm kontrol sistemi olarak **Git** kullanan yazılım geliştirme projeleri için web tabanlı bir depolama servisidir. **GitHub** özel depolar için ücretli üyelik seçenekleri sunarken, açık kaynaklı projeler için ücretsizdir.

**GitLab**&#8216;ta özel depoları da ücretsiz bir şekilde kullanabilirsiniz. Bu yazımızda uzak sunucu olarak **GitHub**&#8216;ı kullanacağız.

## Git

**GIT**; yazılım geliştirme süreçlerinde kullanılan, hız odaklı, dağıtık çalışan bir sürüm kontrol ve kaynak kod yönetim sistemidir. İlk sürümü Linux çekirdeği&#8217;nin geliştirilmesinde kullanılmak üzere geliştirilmiştir.

## 

### Git Kullanımı

Öncelikle uzak sunucuda bir depomuzun olması gerekli. Bunun için GitHub hesabımıza giriş yapalım ve Create a new repository bağlantısına tıklayarak yeni bir depo oluşturalım.

Depomuzun ismini oluştururken boşluk bırakmamaya özen gösterelim. Ben git-plus-kullanimi isminde bir depo oluşturdum kendime.

Bilgisayarınızda **GIT** yüklü değil ise yükleyelim. Ben Linux Manjaro kullanıcısıyım ve AUR&#8217;dan rahatlıkla indirip kurabiliyorum.

Yerel sunucumda **git-plus-kullanimi** isminde bir klasör oluşturdum ve içerisine PHP dosyamı ekledim.

Uçbirimimi açıyorum. Klasörün bulunduğu dizine geçiş yapıyorum. pwd  ls  ve cd  komutları yardımcı olabilir bu işlemde bizlere.

Şimdi aşağıda yeni bir depo oluşturalım.

git init

Uçbirimde şuna benzer bir çıktı almanız gerek. &#8220;Initialized empty Git repository in /opt/lampp/htdocs/git-plus-kullanimi/.git/ &#8221;

Şimdi sistemimizde tanımladığımız **parola** ve **kullanıcı ismi**nin kaydedilmesini sağlamak için git-credential-store komutunu kullanacağız:

git config credential.helper store

Güvenlik önlemi almak isterseniz; bir önbellekleme tanımlayabilirsiniz.  Biz devam edelim. Şu anki dalımızı güncelleyelim:

git config --global push.default current

Uzak sunucumuzda bulunan depomuzun adresini keydedelim:

git remote add origin https://github.com/mkoseoglu/git-plus-kullanimi.git


Bulunduğumuz dizindeki tüm dosyaları ekleyelim:

git add --all

Yerel sunucumuza teslim edelim:

git commit -m "Git Plus Kullanımı Atom"

Uzak sunumuza gönderelim:

git push -f origin master

Bizden kullanıcı adımızı ve parolamızı isteyecektir. Uçbirimde yazalım.

  * Username for &#8216;https://github.com&#8217;: mkoseoglu
  * Password for &#8216;https://mkoseoglu@github.com&#8217;: parolam

Uçbirimde parolamızı yazarken ekranda güvenlik önlemi olarak bir şey gözükmez. Siz yazın ve enter tuşu ile devam edin.

Şu şekilde bir çıktı aldım:

Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/mkoseoglu/git-plus-kullanimi.git
 + b038c9d...c6a69fc master -&gt; master (forced update)


Şimdi **GitHub** hesabında oluşturduğumuz depomuzu kontrol edelim. Başarılı bir şekilde dosyalarınızı gönderdiğinizi görebilirsiniz. **Atom Git Plus** kullanımı ile devam edelim.

## Git Plus Kullanımı

Atom metin editörüm ile git-plus-kullanimi ismindeki klasörümü açıyorum. Paket yükleme alanında git-plus olarak arama yapıyorum ve yüklüyorum. Paketi direkt indirmek ve kurmak isteyenler için bağlantı:

  * <https://atom.io/packages/git-plus>

Atom editörümü yeniden başlatıyorum. Şimdi oluşturduğum PHP dosyamda bir değişiklik yapıyorum.



Görselde de görüldüğü üzere; değişiklik yaptığım dosyanın rengi sol kısımdaki alanımda belirdi. Şimdi değişiklikleri uzak sunucumuza gönderelim.

Paketler sekmesinden **Git Plus**&#8216;a geliyorum ve **Add All + Commit + Push** seçeneğine tıklıyorum. Karşıma bir commit dosyası açıldı.

[](https://www.mkoseoglu.com/wp-content/uploads/g2.png)

Yaptığım değişikleri yazdım ve **CTRL+S** kombinasyonu ile kaydettim. Başarılı bir şekilde uzak sunucuma gönderildi. Kontrol edelim hesabımızı tekrar.

[](https://www.mkoseoglu.com/wp-content/uploads/g3.png)

Evet. Git Plus sayesinde daha düzenli kod yazabilirsiniz. Herkese iyi çalışmalar.

## Kaynak:

  * https://git-scm.com/docs/git-credential-store
  * http://stackoverflow.com/questions/11403407/git-asks-for-username-everytime-i-push
  * https://makandracards.com/makandra/8039-git-how-to-configure-git-to-push-only-your-current-branch

---

## File: _posts/2017-04-30-laravel-5-4-blog-bolum-1.md

---
id: 3488
title: 'Laravel 5.4 ile Blog Yapalım &#8211; Bölüm 1'
date: 2017-04-30T22:49:08+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3488
permalink: /laravel-5-4-blog-bolum-1
categories:
  - Laravel 5.4
tags:
  - Laravel
  - Laravel 5.4
  - Laravel 5.4 Blade Kullanımı
  - Laravel 5.4 Dersleri
  - PHP
---
Bir önceki yazımızda **Laravel** ve **Laravel kurulumu** hakkında bilgi vermiştik. Bkz: [laravel başlangıç](https://www.mkoseoglu.com/laravel-5-4-ile-blog-yapalim-baslangic). **Blog** projemizin için Bootstrap 4 ile geliştirilmiş ücretsiz bir **blog** teması beğendim ben. Bu bölümde genel olarak **Blade şablon yapısı**nı inceleyeceğiz. Siz de hazırsanız dersimize başlayalım. Noktalı virgülünüz bol olsun.

[](https://www.mkoseoglu.com/wp-content/uploads/laravel-5.4.png)

## Birinci Bölüm:

  * Clean Blog şablonunu inceleyelim ve konfigüre edelim.
  * HTML arayüzümüzü parçalayalım. 
      * Parçalar
      * Bölümler
  * Blade şablon yapısını ve kullanımını inceleyelim. 
      * include
      * yield
      * extends
      * section
  * Route düzeni hakkında bilgi edinelim.
  * Laravel&#8217;de Clean Blog şablonumuzu görüntüleyelim.

## Clean Blog Teması

Start Bootstrap&#8217;ın ücretsiz olarak paylaştığı **Clean Blog** şablonunu sadeliği için tercih ettim. Bizim çalışmamız için uygun olacağını düşünüyorum. Gereksiz kodlardan arınmış bir şablon ile **Laravel** mantığını daha net anlayabiliriz. Toplamda dört ana HTML sayfasından oluşan Clean Blog şablonu **Bootstrap 4** Framework ile geliştirilmiştir.

### Clean Blog Bağlantısı:

Clean Blog şablonunu edinmek için aşağıda yer alan bağlantıya tıklayabilirsiniz. Ben bu seride **Bootstrap 4 Alpha **sürümünü kullanacağım. Siz dilediğiniz sürümü indirebilirsiniz.

  * [startbootstrap.com/template-overviews/clean-blog](https://startbootstrap.com/template-overviews/clean-blog/)

Şablon dosyalarımızı kendi işletim sisteminize uygun bir arşiv yöneticisi ile dışarıya çıkartalım.



### Şablon Dosyalarını Konfigüre Edelim:

Laravel&#8217;de arayüz bileşenlerimiz **public** dizininde, HTML kodlarımız ise **resources** dizini altında bulunan **views** klasöründe; **Blade** şablon yapısı ile yer almalıdır.

Ben, **Clean Blog**&#8216;un dosyalarını, **Laravel**&#8216;de işlevsel biçimde kullanmamı sağlayacak şekilde konfigüre ettim.

|-- clean-blog
    |-- about.html
    |-- contact.html
    |-- index.html
    |-- post.html
    |-- css
    |   |-- bootstrap.min.css
    |   |-- clean-blog.css
    |-- font-awesome
    |   |-- css
    |   |   |-- font-awesome.css
    |   |   |-- font-awesome.min.css
    |   |-- fonts
    |       |-- FontAwesome.otf
    |       |-- fontawesome-webfont.eot
    |       |-- fontawesome-webfont.svg
    |       |-- fontawesome-webfont.ttf
    |       |-- fontawesome-webfont.woff
    |       |-- fontawesome-webfont.woff2
    |-- img
    |   |-- about-bg.jpg
    |   |-- contact-bg.jpg
    |   |-- home-bg.jpg
    |   |-- post-bg.jpg
    |   |-- post-sample-image.jpg
    |-- js
        |-- bootstrap.min.js
        |-- clean-blog.js
        |-- contact_me.js
        |-- jqBootstrapValidation.js
        |-- jquery.min.js


## Parçalayalım ve Bölümleri Tanıyalım

**Clean Blog** arayüzümüzü **Laravel&#8217;**de dinamik bir yapıda kullanmak için kodlarımızı parçalamamız gerekmektedir. Bu düzenin mantığı başlarda karışık gelse de aslında çok basit. Tüm önyargılarımızdan arınalım ve şevkle okumaya devam edelim. Uykusu gelenler, mayışanlar, esneyenler; kendinize bir kahve alın!

Kullanılan arayüzlerde dinamik olması istenilen her bir bölüm, bir parça olmak zorundadır. Bunu görsel bir şekilde ifade etmeye çalışayım zira bu şekilde tam anlaşılmadı.

[](https://www.mkoseoglu.com/wp-content/uploads/Clean-Blog-Start-Bootstrap-Theme-1.png)

GIMP konusundaki yeteneksizliğim sizi &#8220;Bu da ne şimdi?&#8221; tarzında sorulara yöneltmiş olabilir. Biliyorum. Şu şekilde açıklayayım bunu da. **Kırmızı** bölgemiz şablonumuzun **alt bölüm**ünü oluşturacak ve **footer** ismini alacaktır. **Sarı** bölgelerimiz, şablonumuzun **içerik bölümü**nü oluşturacak ve **content** ismini alacaktır. Son olarak; **parlak turkuaz** bölgemiz şablonumuzun **üst bölümü**nü oluşturacak ve header ismini alacaktır. Şimdi zihninizde şablon parçalama olayının örtüştüğüne inanıyorum. Bunu yapıyoruz ki; şablonumuzu dinamik bir tema haline getirebilelim ve **MVC** deseninde sağlıklı bir sistem kurabilelim. Eğer halen sorularınız varsa bu konuda araştırmalar yapabilirsiniz.

Blade şablon yapısı ile bölümlendirmeyi hedeflediğimiz alanların kodlarını ayrıştıracağız. Sabırla devam edelim.

## Blade Şablon Yapısı

Öncelikle genel bir tanım yapalım. Ben **Blade şablon yapısı** olarak adlandırıyorum. Türkçe karşılığı &#8220;Tema motoru&#8221; anlamlarına da gelmektedir. Front-End (arayüz) çalışmalarımızda kodlarımızın okunabilirliğini sağlar. Yukarıda da bahsetmiştim. **Laravel**&#8216;de resources dizini altında views klasöründe yer almaktadırlar. Önemli bir nokta ise dosya uzantılarımızı &#8220;_**.blade**_&#8221; olarak belirlemeliyiz. **Blade** şablon motoruna yazdığımız tüm kodlar **PHP** üzerinden yorumlanır. **Blade** sözdizimine kısaca değineceğim. Konudan fazla sapmak istemiyorum. **Blade** hakkında daha fazla detayı dökümandan bulabilirsiniz.

### Blade Sözdizimi

**Blade şablon motoru** ile ekrana bir veri basmak istediğinizde **PHP**&#8216;deki print fonksiyonunun yerini küme parantezi almakta. Bir diğer deyişle süslü parantez.

Kısaca örnek verelim:

{{ "Merhaba" }}

Yukarıdaki komutumuz Blade ile yorumlandığında şu şekilde algılayacaktır:

&lt;? echo "Merhaba"; ?&gt;

Peki.. XSS açıklarından korunmak için PHP&#8217;de htmlspecialchars fonksiyonunu kullanıyoruz. Blade ile bu fonksiyon varsayılan olarak kullanılır. Bazı istisnai durumlarda ise bunu devre dışı bırakmak isteyebiliriz. Bunun için küme parantezleri arasına ünlem işareti tanımlıyoruz.

{!! "Merhaba" !!}

Bunun yanısıra bazı **JavaScript** çatıları da **küme parantezi** kullanmakta. Bu tarz bir çatıyı **Blade şablon motoru** ile kullanmak istersek ne yapmalıyız? Çözüm pek tabii basit. **@** bizim kaçış operatörümüz olacak. **Tekil kullanımlarda @** kullanırken, **uzun kod bloklarında @verbatim** kullanacağız.

Merhaba, @{{ name }}

@verbatim
    &lt;div class="container"&gt;
        Merhaba, {{ name }}.
    &lt;/div&gt;
@endverbatim

### Blade Include

**PHP**&#8216;de kullandığımız **include** ya da **require_include** fonksiyonlarını hatırladınız mı? **Blade** üzerinde **include** kullanımından hiçbir farkı yok. Belirlenen dosyayı, hedef dosyaya dahil eder.

@include('nav.menu')

### Blade Extends

**Extends** kullanımı ile **@section** mirasına erişir, **@yield** tutucusu ile alanlarımızı bölümlendirebiliriz. Yukarıda açıkladığım bölümlendirme kısmının kod üzerindeki mantığı burada başlar.

@extends('layouts.app')

### Blade Yield

**Yield** ile oluşturduğumuz bölümlerde belirli alanları dinamikleştiririz. **Yield**, bir yer tutucudur. Bizim için o bölümü tutar ve dilediğimiz sayfada farklı değerlerde kullanmamıza imkan verir. En temel örnek site başlığımızdır.

@yield('Başlığım',$title)

Kısaca **Blade** kullanımından söz ettiğimize göre **Clean Blog** şablonumuzu Blade şablon motorumuza entegre edebiliriz.

## Blade üzerinde Clean Blog

Öncelikle hazırladığım dizin yapısını diyagram ile görelim.

|-- view
    |-- about.blade.php
    |-- contant.blade.php
    |-- detail.blade.php
    |-- index.blade.php
    |-- layouts
    |   |-- master.blade.php
    |-- partials
        |-- footer.blade.php
        |-- header.blade.php
        |-- header
            |-- head.blade.php
            |-- masthead.blade.php
            |-- nav.blade.php

Biz çalışmalarımızda genelde **Türkçe** kullanmayı tercih etsek de yazılım sektörü global bir alandır. Buna dayanarak klasör ve dizin isimlerimiz herkesin anlayabileceği standartlarda olmalıdır. Buna dayanarak isimlendirme ve konfigüre işlemlerimize devam edeceğiz.

**Laravel**&#8216;de, **Layouts** klasörümüz içerisinde şablonumuzun **master** dosyası bulunmalıdır. **Master** dosyasından kastımın ne olduğunu kodları paylaştığımda daha net anlayacaksınız. **Partials** klasörümüzde ise şablonumuzun bölümleri bulunmalıdır. Bu bölümleri sizlerle yukarıda parçalamıştık. Unutmayın, ne kadar düzenli ve parçalı ilerlerseniz ilerde o kadar rahat edersiniz. Blog gibi basit içerikli çalışmalarda sorun olmasa da büyük projelerde çalışırken bu alışkanlığı edinmeniz size artı kazandıracaktır.

**Partials** içerisinde oluşturduğum **header** klasöründe ise şablonumuzun üst bölümünü parçaladım. Şablon iskeletimizde **head** bölümünü, menu bölümünü ve şablonumuza ait olan **masthead** bölümünü ayrıştırdım.

#### Kodlarımızı GitHub üzerinden görüntüleyebilirsiniz

  * <https://github.com/mkoseoglu/laravel-5-4-blog-yapalim/tree/master/resources/views>

## Route Yapılandırması

Tema dosyalarımızı konfigüre ettiğimize göre şimdi yönlendirmelerimizi yapalım.

**Laravel**&#8216;de yönlendirme kodlarımız web dosyasında düzenlenmektedir. Yine ilerleyen derslerde yeri geldiğinde detaylı olarak göreceğiz. **Laravel** dökümanlarından daha geniş bilgilere erişebilirsiniz.

  * <https://laravel.com/docs/5.4/routing>

Route::get('/', function () {
    return view('index');
});
Route::get('about', function () {
    return view('about');
});
Route::get('detail', function () {
    return view('detail');
});
Route::get('contant', function () {
    return view('contant');
});


## PHP Artisan ve Laravel&#8217;de Görüntüleme

PHP Artisan komutlarını yine Route gibi ilerleyen derslerde detaylı olarak göreceğiz. Şimdilik sadece sanal sunucumuzu başlatalım. **Laravel**&#8216;in kurulu olduğu dizine terminal kullanarak gelelim ve php artisan serve komutunu çalıştıralım.

[mksglu@mksglu blog]$ php artisan serve
Laravel development server started: &lt;http://127.0.0.1:8000&gt;

Bu çıktıyı gördükten sonra tarayıcıda

  * localhost:8000**/**
  * localhost:8000**/about**
  * localhost:8000**/detail**
  * localhost:8000**/contant**

Bağlantılarını kullanarak şablonumuzun çalıştığını görebilirsiniz. **Laravel** ders serisinde bölümleri daha kısa tutarak daha çok bilgi vermeyi amaçlıyorum. Her şey iç içe gözükse de dikkatle takip ettiğinizde üstesinden geleceğinize eminim.

## GitHub

  * <https://github.com/mkoseoglu/laravel-5-4-blog-yapalim>

---

## File: _posts/2017-05-02-laravel-5-4-eloquent-sluggable-kullanimi-seo.md

---
id: 3579
title: Laravel 5.4 Eloquent Sluggable Kullanımı
date: 2017-05-02T03:53:10+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3579
permalink: /laravel-5-4-eloquent-sluggable-kullanimi-seo
categories:
  - Laravel 5.4
tags:
  - Eloquent Sluggable
  - Laravel
  - Laravel 5.4
  - Laravel 5.4 SEO Uyumlu Link
  - Laravel 5.4 Slug Türkçe Karakter
  - Laravel 5.4 Slugify Kullanımı
  - PHP
---
**Laravel 5.4** ile Eloquent Sluggable paketininin kullanımını inceleyeceğiz. **Eloquent Sluggable**, bizlere &#8220;**SEO**&#8221; dostu link yapısı oluşturmaktadır.

Öncelikle **Laravel** kurulumumuzu gerçekleştirelim. &#8220;**_Laravel_**&#8221; yazısını gördükten sonra **Eloquent Sluggable** kullanımına geçebiliriz. Makalede döküman olarak [GitHub](https://github.com/cviebrock/eloquent-sluggable#) adresini kullancağım. Sizler de GitHub adresinden **Eloquent Sluggable** kullanımına dair çok daha fazla bilgiyi edinebilir, projelerinizde kullanabilirsiniz.

[](https://www.mkoseoglu.com/wp-content/uploads/laravel-5.4.png)

## Eloquent Sluggable

**Laravel**&#8216;in kurulu olduğu dizine eriştikten sonra uçbirimde

composer require cviebrock/eloquent-sluggable

komutunu çalıştıralım. Ve hemen ardından config/app.php dosyamızı güncelleyelim.

'providers' =&gt; [
    // ...
    Cviebrock\EloquentSluggable\ServiceProvider::class,
];

Son olarak; tekrar uçbirimde **Laravel&#8217;**in kurulu olduğu dizinde aşağıda yer alan komutu çalıştıralım.

php artisan vendor:publish --provider="Cviebrock\EloquentSluggable\ServiceProvider"

Buna benzer bir çıktı aldıysanız kurulumu başarıyla tamamlamışsınız demektir.

Copied File [/vendor/cviebrock/eloquent-sluggable/resources/config/sluggable.php] To [/config/sluggable.php]
Publishing complete.


## Modelimizi Güncelleyelim

Modelimizi güncellememiz gerekmektedir. Tabii bunun için öncelikle bir **model** dosyasına ihtiyacımız var. Uçbirimde, **Laravel**&#8216;in kurulu olduğu dizinde aşağıdaki komutu çalıştıralım.

php artisan make:model Article -m

Sonundaki **-m** parametresi aynı zamanda ismini Article olarak tanımladığımız **model** dosyasına ait bir &#8220;**_Migrate_**&#8221; dosyası da oluşturmaktadır.

Model created successfully.
Created Migration: 2017_05_01_224056_create_articles_table


Buna benzer bi çıktı aldıysak başarılı bir şekilde **model** ve **migrate** dosyalarımız oluşmuş demektir.

**Laravel** dizinimizde bulunan **App** klasöründe &#8220;_**Article**_&#8221; isminde **model** dosyamızın başarılı bir şekilde oluşturulduğunu görüyoruz ve dosyanın en üstüne; namespace App;  satırının hemen altına şu kodu ekliyoruz:

use Cviebrock\EloquentSluggable\Sluggable;

**Model** dosyamızın devamını ise aşağıda gösterildiği şekilde güncelliyoruz.

class Article extends Model
{
    use Sluggable;

    protected $table = "articles";

    protected $fillable = [
      'title' , 'body'
    ];

    public function sluggable()
   {
       return [
           'slug' =&gt; [
               'source' =&gt; 'title'
           ]
       ];
   }

 
}

Buradaki değerlerin anlamlarını irdelemek ve konfigüre etmek için yukarıda paylaştığım pakete ait **GitHub** bağlantısını inceleyebilirsiniz. Burada title  alanını döndürmesini sağladık.

## Migrate

**Model** dosyamızı oluşturken aynı zamanda **migrate** dosyamızı da oluşturmuştuk. Şimdi içerisinde ufak bir güncelleme yapalım.

public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table-&gt;increments('id');
            $table-&gt;string('title');
            $table-&gt;string('slug');
            $table-&gt;text('body');
            $table-&gt;timestamps();
        });
    }

Burada slug  olarak tanımladığım alanıma kullanacağımız bağlantı adresimiz eklenecektir. Tabii ki title  alanını referans almak şartı ile.

Tablomuzu veritabanına tanımlamadan önce pek tabii bir veritbanımızın olması gerekmekte ve bunu **Laravel**&#8216;e bildirmek durumundayız.

Laravel ana diziminizde bulunan **.env** dosyasını açalım ve ilgili kısımları aşağıdaki gibi düzenleyelim. Ben slug  isminde bir veritabanı oluşturdum.

Benim kullanıcı ismim **root** ve **parolam bulunmamakta**. Siz kendinize göre düzenlemeyi unutmayın!

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=slug
DB_USERNAME=root
DB_PASSWORD=

Bu ayarlarımı kaydettikten sonra **Laravel** dizinimizde açtığımız uçbirimde aşağıdaki komutu çalıştırarak config  ayarlarımızı güncelleyelim.

php artisan config:cache
php artisan config:clear

Şimdi veritabanımıza tablolarımızı ekleyebiliriz.

php artisan migrate


Ben bu komutu çalıştırdığımda **Laravel 5.4** ile bir hata aldım. Siz almadı iseniz devam edin. Benim aldığım hata şu şekilde:

[Illuminate\Database\QueryException]                                                                                 
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQ  
  L: alter table `users` add unique `users_email_unique`(`email`))  

  [PDOException]                                                                                                   
  SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes

Çözüm olarak, **AppServiceProvider.php** dosyamızın en üstüne aşağıdaki kodu ekleyelim.

use Illuminate\Support\Facades\Schema;

Ve devamında;

public function boot()
     {
         Schema::defaultStringLength(191);
     }

Dosyamızda bulunan boot  fonksiyonunu güncelleyelim. **Tekrar deniyorum.**

php artisan migrate

Eğer aşağıdakine benzer bir çıktı aldıysanız tablolarınız başarılı bir şekilde eklenmiş demektir.

Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table
Migrating: 2017_05_01_224056_create_articles_table
Migrated:  2017_05_01_224056_create_articles_table



  


## Laravel 5.4 Türkçe Karakter Sorunu

### 1. Yöntem:

 **Laravel 5.4** sürümünde str_slug &#8216;ta karakter hatası mevcut. Şöyle ki;

&#8216;ö&#8217; harfimiz &#8216;oe&#8217;, &#8216;ü&#8217; harfimiz ise &#8216;ue&#8217; şeklinde çıkmaktadır. Bunu düzeltmek için sluggable.php dosyamızda kırk yedinci satırda güncelleme yapalım.

'method' =&gt; function( $string, $sep  ) {
  return strtolower(str_replace(['ü', 'Ü', 'ö', 'Ö',' '], ['u', 'u', 'o', 'o','-'], $string));
},

### 2. Yöntem:

**Laravel**&#8216;de karakter setleri üzerine **Slugify** paketini kullanabiliriz.

composer require cocur/slugify

**Model** dosyamızı açalım.

use Cocur\Slugify\Slugify;

Yukarıdaki satırı tanımladıktan sonra **model** dosyamıza aşağıdaki satırları ekleyelim.

public function customizeSlugEngine(Slugify $engine, $attribute) {
 return $engine-&gt;activateRuleset('turkish');
}

Hangi yöntemi kullanacağınız size kalmış.

[Slugify GitHub](https://github.com/cocur/slugify) ve bu sorun üzerine gelişmeleri [buradan](https://github.com/cviebrock/eloquent-sluggable/issues/359) takip edebilirsiniz.

## Test Edelim

**Laravel** dizinimizde açtığımız uçbirimde php artisan tinker  komutunu çalıştıralım ve sırası ile aşağıdaki komutları takip edelim.

namespace App;
$article = new Article
$article-&gt;title ="Merhaba Selam naber?"
$article-&gt;body = "Sana da selam Body"
$article-&gt;save()
Article::all()

Article::all() komutumuzun çıktısı aşağıdakine benzer olacaktır.

Illuminate\Database\Eloquent\Collection {#661
     all: [
       App\Article {#665
         id: 1,
         title: "Merhaba Selam naber?",
         slug: "merhaba-selam-naber",
         body: "Sana da selam Body",
         created_at: "2017-05-01 23:58:59",
         updated_at: "2017-05-01 23:58:59",
       },
     ],
   }


Görüldüğü üzere; slug  alanımız title  alanını referans alarak bizlere **SEO** dostu bir link oluşturdu.

&nbsp;

Herkese iyi çalışmalar.

&nbsp;

---

## File: _posts/2017-05-04-linux-arch-manjaro-yaourt-onay-kaldirma.md

[Binary file]

---

## File: _posts/2017-05-04-linux-manjaro-xfce-spotify-libcurl-openssl-1-0.md

---
id: 3603
title: Linux Manjaro XFCE Spotify Kurulumu
date: 2017-05-04T18:18:13+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3603
permalink: /linux-manjaro-xfce-spotify-libcurl-openssl-1-0
categories:
  - Linux
tags:
  - Linux
  - Linux Manjaro
---
Linux Manjaro XFCE sistemimde son güncellemeden sonra Spotify kurulumunda hata aldım.

## Olası Hata Çıktısı

could not satisfy depenencies: libcurl-openssl-1.0: requires openssl-1.0 spotify: requires libcurl-openssl-1.0

Bulunamayan bağımlılıkları yalın halde yüklemek istediğimde ise paket hatası aldım.

## Çözüm

Manjaro forumunda konu ile ilgili bir çözüm buldum.

git clone https://aur.archlinux.org/spotify.git
cd spotify
git checkout 28698fb
makepkg -sri

## Olası Hata Çıktısı

/usr/share/spotify/spotify: /usr/lib/libssl.so.1.0.0: version `OPENSSL_1.0.0' not found (required by /usr/share/spotify/spotify)
/usr/share/spotify/spotify: /usr/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.0' not found (required by /usr/share/spotify/spotify)
/usr/share/spotify/spotify: /usr/lib/libcurl.so.3: no version information available (required by /usr/share/spotify/spotify)

## Çözüm

sudo -Rsnc spotify
sudo -Syyuu
sudo pacman -Scc
yaourt -S --m-arg --skippgpcheck --noconfirm libopenssl-1.0-compat
yaourt -S --m-arg --skippgpcheck --noconfirm libcurl-openssl-1.0
yaourt -S spotify

&nbsp;

## Kaynak

  * <https://forum.manjaro.org/t/trouble-updating-spotify/21723/10>

---

## File: _posts/2017-05-04-npm-mddir-dosya-dizin.md

---
id: 3605
title: Npm Mddir Paketi ile Dosya Dizin Diyagramı
date: 2017-05-04T18:52:44+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3605
permalink: /npm-mddir-dosya-dizin
categories:
  - JavaScript
tags:
  - ASCII Dosya Dizini
  - Node.Js
  - Npm Mddir
---
Bilişim alanında kullanılan paket, eklenti ve uygulama dökümanlarında sıkça kullanılan dizin diyagramını Node Package Modules&#8217;in mddir paketi ile yapabiliriz. Laravel derslerine başladığımda ihtiyacım oldu.

## Kullanım

sudo npm install mddir -g
cd node_modules/mddir/src/
node mddir "../../../public/"


## Çıktısı

Src dizinimizde directoryList.md dosyamızı açalım. Bulunduğu dizinde yazma izninin olduğuna emin olalım.

|-- blog
    |-- .htaccess
    |-- favicon.ico
    |-- index.php
    |-- robots.txt
    |-- web.config
    |-- css
    |   |-- app.css
    |-- js
        |-- app.js


&nbsp;

---

## File: _posts/2017-05-08-asus-k555u-realtek-alc256-linux-mikrofon.md

---
id: 3610
title: ASUS K555U Realtek ALC256 Linux Mikrofon Sorunu
date: 2017-05-08T00:50:36+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3610
permalink: /asus-k555u-realtek-alc256-linux-mikrofon
categories:
  - Genel
  - Linux
tags:
  - Asus K555
  - ASUS K555U Linux
  - ASUS K555U Realtek ALC256 Linux
  - Establishing connection toPulseAudio. Please wait ..
  - Linux Arch Hda Jack Retask
  - Linux Realtek ALC 256
  - Pioneer SE-MJ591 Tanıtımı
---
## Güncelleme: Linux Kernel 4.12

Linux Kernel 4.12 ile birlikte ses ve mikrofon sorunlarının tamamı giderildi.

* * *

Esenlikler herkese. Eğer bu yazıya Google&#8217;da yaptığınız araştırmalar sonucunda geldi iseniz; Tanrı şimdiden sabır versin. Belirtmek isterim ki bu yazıda umduğunuzu bulamayacaksınız, zira ben de çaresizim.

Bilgisayarımı ilk aldığımda blogumda [Windows 10&#8217;da yaşanan uyku sorunu](https://www.mkoseoglu.com/asus-uyku-modu-siyah-ekran-cozumu)ndan bahsetmiştim. Bu yazıdan kısa bir süre sonra **Linux** kullanmaya başladım. Ubuntu, Mint, OpenSUSE, Linux Lite, Arch Linux ve Manjaro dağıtımlarını kullandım. KDE, XFCE ve Gnome masaüstü ortamları ile çalıştım. Şu an sabit olarak Manjaro I3WM kullanmaktayım. Sözün özü şu ki; **Linux&#8217;ta Realtek ALC256 ses kartının mikrofon ayarlarında sorun oluşmakta** maalesef.

Bu konu ile ilgili Google ve diğer arama motorlarında yaptığınız araştırmalarda sayısız forumda sayısız konu okuyacak ama çözüme yüksek ihtimal ulaşamayacaksınız. Jack girişinden ve dahili kemara mikrofonundan bir türlü ses kaydedemeyeceksiniz. Alsamixer, PulseAudio gibi binbir çeşit araç deneyecek, paket depolarında sörf yapacaksınız. Biliyorum, biliyorum çünkü ben bunları yaşadım. Tüm Facebook gruplarına konu açtım. Farklı dağıtımlarda uzman kişilerden görüş aldım. Bu sorunun bir çözümü yok ve kronik bir sorun.

Geçici ve ideal olmayan bir çözüm buldum neyse ki. Çok içime sinmese de paylaşmak istedim. Bir Jack dönüştürücüye ihtiyacımız var. Google&#8217;da [U](https://www.google.com.tr/search?q=USB+Ses+Kart%C4%B1&oq=USB+Ses+Kart%C4%B1&aqs=chrome..69i57j69i65&sourceid=chrome&ie=UTF-8)[SB](https://www.google.com.tr/search?q=USB+Ses+Kart%C4%B1&oq=USB+Ses+Kart%C4%B1&aqs=chrome..69i57j69i65&sourceid=chrome&ie=UTF-8) [Ses](https://www.google.com.tr/search?q=USB+Ses+Kart%C4%B1&oq=USB+Ses+Kart%C4%B1&aqs=chrome..69i57j69i65&sourceid=chrome&ie=UTF-8) [Ka](https://www.google.com.tr/search?q=USB+Ses+Kart%C4%B1&oq=USB+Ses+Kart%C4%B1&aqs=chrome..69i57j69i65&sourceid=chrome&ie=UTF-8)[rtı](https://www.google.com.tr/search?q=USB+Ses+Kart%C4%B1&oq=USB+Ses+Kart%C4%B1&aqs=chrome..69i57j69i65&sourceid=chrome&ie=UTF-8)** **olarak arama yaptığınınızda görebilirsiniz. Ben denemek için en kalitesiz olanlarından bir tane aldım. Bu arada  mikrofon olarak da Snopy&#8217;nin [Sn-330M](http://www.hepsiburada.com/snopy-sn-330m-siyah-masaustu-mikrofon-p-BSUCZLKCSN-330M?magaza=Abtek&wt_gl=cpc.elk.bilgisayar-diger.pla&gclid=Cj0KEQjwi7vIBRDpo9W8y7Ct6ZcBEiQA1CwV2HhBX4I01rjNpumNDw1b9blMPoYtTkJVHaGqle0SvFoaAgVP8P8HAQ) mikrofonunu satın aldım. Uygun fiyatına nazaran harika verim aldım. Satın aldığım kalitesiz Jack dönüştürücü biraz daha sağlam olsa çok daha güzel bir ses kalitesi alacağımı tahmin ediyorum. Eğer ciddi anlamda bu konuda bir çalışmanız olacaksa Creative&#8217;nin [X-Fi Go Pro](http://www.hepsiburada.com/creative-x-fi-go-pro-usb-ses-karti-p-BD304452) modelini tavsiye ederim. Henüz denemedim ama okuduğuma göre alınası bir cihaz.

Bir diğer alternatif ise USB çıkışlı bir mikrofon satın almanız. Ses kalitesi ne kadar iyi olur orası tartışılır, bilemeyeceğim.

Bu arada yeri gelmişken yeni bir kulaklık almayı düşünüyorum. Pioneer&#8217;in [SE-MJ591](http://www.hepsiburada.com/pioneer-se-mj591-siyah-kulakustu-kulaklik-p-BD802315) modelini beğendim. Satın aldığımda deneyimimi burada güncellerim.

## Güncelleme

Uzun bir aradan sonra beni tam olarak tatmin etmese de bir çözüm buldum. Linux Arch tabanlı dağıtımlarda hda-jack-retask-bz paketini yükleyelim ve üçbirimde hda-jack-retask  komutu ile çalıştıralım.

Muhtemelen her cihazda farklı olacaktır bu sorun ve çözümü. Ben deneyerek buldum. **Select a codec** menüsünden ses kartım olan **Realtek ALC256**&#8216;yı seçtim. Sağ menüden ise **show unconnected pins** seçeneğini işaretledim.

Pin ID:0x18 olanı override olarak işaretledim ve Microfone seçtim. Install boot override seçeneği ile başlangıçta ayarların yapılandırılmasını sağladım.

Uçbirimde bir metin editörü ile aşağıdaki dosyayı görüntüleyelim.

/etc/modprobe.d/alsa-base.conf

İçerisinde bulunan satırları silelim ve aşağıdaki komutla değiştirelim.

options snd-hda-intel model=laptop-dmic,headset-mic

Yedeklemeyi unutmayın.

Bilgisayarımı yeniden başlattığımda uçbirimde pavucontrol ile ses ayarlarımı görüntüledim. Çıkış ayarlarından dahili mikrofonumu seçtim.

Bu yöntemle dizüstü bilgisayarınızdaki dahili mikrofonu kullanabilirsiniz. Bazılarında Pin ID:0x19 çalışmış. Siz denemelisiniz kendiniz için.

## Olası Sorunlar

Uçbirimde pavucontrol  yazdığınızda _&#8220;_**Establishing connection toPulseAudio. Please wait ..**_&#8221; _hatası alabilirsiniz.

Çözüm olarak rm -r ~/.pulse komutunu uçbirimde çalıştırın. Bunun ardından pulseaudio -k komutu ile servisi durduralım ve pulseaudio &#8211;start ile yeniden başlatalım.

Uçbirimde tekrar pavucontrol komutunu girdiğinizde gerekli ses ayarlarınızı yapabilirsiniz.

## Pioneer SE-MJ591

**Piooner SE-MJ591** modelini Idefix üzerinden satın aldım. Yanınızda taşımak için harika bir taşıma kutusu mevcut. Müzikleri tüm detayları ile hissedebilirsiniz.

Uzun kullanımda rahatsız etmekte. Ben en fazla iki saat aralıksız kullanabildim. Biraz çıkartıp dinlenmek gerekiyor.

Onun dışında çok memnunum.

---

## File: _posts/2017-06-11-kotlin-java-jdk-ve-intellij-idea.md

---
id: 3662
title: 'Kotlin: JAVA JDK ve IntelliJ IDEA Yükleyelim'
date: 2017-06-11T15:04:13+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3662
permalink: /kotlin-java-jdk-ve-intellij-idea
categories:
  - Kotlin
tags:
  - Kotlin Dersleri
  - Kotlin IntelliJ IDEA Yükleme
  - Kotlin JAVA JDK Yükleme
---
[Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) için ihtiyacımız olan yazılımları yükleyelim. **JAVA JDK** ve **Intellij IDEA** kurulumlarını gerçekleştireceğiz.

## Java JDK

Google&#8217;da JAVA JDK araması yaptığımda karşıma çıkan [ilk sonuc](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)a tıklıyorum. Buradan kendi işletim sisteminizi göz önünde bulundurarak Java SE Development Kit &#8216;i indirelim.

Linux&#8217;ta indirilen klasörde uçbirim açalım.

sudo mv jdk1.8.0_131 /usr/lib/jvm/oracle_jdk8


Eğer ki lib  dizini altında jvm  dizini yok ise mkdir komutu ile oluşturabilirsiniz.

cd /usr/lib && sudo mkdir jvm

JDK dizinimizin yollarını tanımlayalım. Uçbirimde /etc/profile dosyasını metin editörü ile açalım ve aşağıdaki komutları dosyanın en sonuna ekleyelim.

export J2SDKDIR=/usr/lib/jvm/oracle_jdk8
export J2REDIR=/usr/lib/jvm/oracle_jdk8/jre
export PATH=$PATH:/usr/lib/jvm/oracle_jdk8/bin:/usr/lib/jvm/oracle_jdk8/db/bin:/usr/lib/jvm/oracle_jdk8/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk8
export DERBY_HOME=/usr/lib/jvm/oracle_jdk8/db

Cihazımızı yeniden başlatalım. Uçbirimde java -version komutunu girelim. Çıktımız aşağıdakine benzer olmalıdır.

java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)


<h2 class="download-page__title" data-product-name="IntelliJ IDEA">
  IntelliJ IDEA
</h2>

Kotlin için kullanacağımız IntelliJ IDEA yazılımını kendi sitesinden [indirelim](https://www.jetbrains.com/idea/download). **Community **sürümü ücretsiz olarak yayınlanmakta.

Linux için, bin  dizini içerisinde idea.sh  dosyasını uçbirimde çalıştırmak yeterlidir.

Kotlin için ihtiyacımız olan her şeye sahibiz.

&nbsp;

---

## File: _posts/2017-06-11-kotline-giris.md

---
id: 3643
title: 'Kotlin&#8217;e Giriş'
date: 2017-06-11T13:48:42+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3643
permalink: /kotline-giris
categories:
  - Kotlin
tags:
  - Kotlin
  - Kotlin Dersleri
  - Kotlin Yazılım Dersleri
  - Türkçe Kotlin Kaynakları
---
Merhabalar, **Kotlin** derslerine başlamadan önce basit ama anlaşılır bir girizgah yazmak istedim. Buna bağlı olarak; aşağıda bazı maddelere yer verdim. Kısa cümlelerle konuya az çok hakim olmanızı amaçlayan bir konsept üzerinde ilerleyeceğim.



  * Google I/O (**I**nnovation in the **O**pen/Açık Yenilik) 2017 toplantısında **Android**&#8216;in resmi dili seçilmiştir.
  * JetBrains tarafından geliştirilmektedir. 
      * [**Kotlin**](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) yazarken kullanacağımız IDE (IntelliJ IDEA) JetBrains geliştirmektedir.
      * Android Studio, IntelliJ IDEA&#8217;nın üzerine inşaa edilmiştir.
  * Java&#8217;dan daha esnek ve güçlü bir yapıya sahip. 
      * Sözdizimi daha anlamlı ve kısa.
      * Güvenlik özellikleri uygulamalarınızı daha sağlıklı geliştirebilirsiniz.
      * Uygulamalarınızda daha fazla performans elde edebilirsiniz.
  * Java Sanal Makinesı&#8217;ni kullanır.
  * Matematik ve bilgisayar bilimleri üzerine (High Order Functions) destekler.
  * **Kotlin** ve Java birlikte çalışabilirler.

**Kotlin** ve Java üzerine daha birçok madde yazılabilir ve irdelenebilir belki ama şimdilik bizlere bu kadar maddenin yeterli olacağını düşünmekteyim.

Ben [Kotlin dersleri](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) sürecinde Linux işletim sistemi ile devam edeceğim. Sizin kullanıdığınız sistemlerle bazı farklılıklar olabilir. Bunları araştırarak öğrenebilirsiniz.

&nbsp;

---

## File: _posts/2017-06-11-linux-manjaro-17-i3wm.md

---
id: 3640
title: Linux Manjaro 17 I3WM Topluluk Sürümü Çözümleri
date: 2017-06-11T11:07:27+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3640
permalink: /linux-manjaro-17-i3wm
categories:
  - Linux
tags:
  - Linux I3WM Ekran Çözünürlüğü
  - Linux I3WM Ekran Yırtılması
  - Linux I3WM Klavye
  - Linux I3WM No GLX Extension
  - Linux I3WM Touchpad Tıklama
  - Linux I3WM Türkçe Kaynak
  - Linux Manjaro I3 Kullanımı
---
Esenlikler, [Linux Manjaro topluluğu](https://manjaro.org/2017/03/07/manjaro-i3-community-edition-17-0-released/)nun geliştirdiği ve konfigüre ettiği **I3WM** (pencere/dizin) yöneticisine dair çözümlerimi aktarmaya çalışacağım. Bu makale ben çözümler buldukça güncellenecektir.



## Ekran Çözünürlüğü

Kullanıdığınız **dahili** ya da **harici monitör**ün çözünürlüğünü güncellemek ve tanımlamak için **[xrandr](https://wiki.archlinux.org/index.php/xrandr)** komutunu kullanacağız.

Klavyeden ctrl+enter  kombinasyonunu kullanarak uçbirimi açalım.

xrandr

Komutun çıktısı aşağıdakine benzer olmalıdır:

Screen 0: minimum 8 x 8, current 1366 x 768, maximum 32767 x 32767
eDP1 connected primary 1366x768+0+0 (normal left inverted right x axis y axis) 340mm x 190mm
   1366x768      60.05*+
   1280x720      60.00  
   1024x768      60.00  
   1024x576      60.00  
   960x540       60.00  
   800x600       60.32    56.25  
   864x486       60.00  
   640x480       59.94  
   720x405       60.00  
   680x384       60.00  
   640x360       60.00  
DP1 connected 1366x768+0+0 (normal left inverted right x axis y axis) 410mm x 230mm
   1366x768      59.79*+
   1280x1024     75.02    60.02  
   1280x720      60.00  
   1024x768      75.03    60.00  
   800x600       75.00    60.32  
   640x480       75.00    72.81    66.67    59.94  
   720x400       70.08  
   1368x768_60.00  59.88  
HDMI1 disconnected (normal left inverted right x axis y axis)
HDMI2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)

Şu an cihazımın tanımladığı iki adet aygıt bulunmaktadır. Bunlar yukarıda da görülebileceği üzere **DP1** ve **eDP1 (birincil)**&#8216;dir. Bizim tanımlamak ve konfigüre etmek istediğimiz aygıtın isminin DP1 olduğunu öğreniyoruz.

Ben harici ekranımın çözünürlüğü için 1366&#215;768  tercih ediyorum. Bu çözünürlüğü tanımlamak için yeni bir mod tanımlamamız gerekmektedir. Uçbirimden aşağıdaki komut ile devam edelim.

cvt 1366 768 60

Komutun çıktısı aşağıdakine benzer olmalıdır:

# 1368x768 59.88 Hz (CVT) hsync: 47.79 kHz; pclk: 85.25 MHz
Modeline "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync


Yeni modumu tanımlayalım.

xrandr --newmode "1368x768_60.00"   85.25  1368 1440 1576 1784  768 771 781 798 -hsync +vsync

Tanımladığımız modu ekleyelim. Kullanılan addmore  parametresinde **DP1** aygıtını tanımladım. Siz, **xrandr** çıktınızda hangi aygıtı kullanmak istiyorsanız onu yazmalısınız.

xrandr --addmode DP1 1368x768_60.00

Ekrana çıkışını verelim. Bu kez output  parametresini kullanalım.

xrandr --output DP1 --mode 1368x768_60.00

Tanımladığımız harici monitörde görüntünün gelmesi gerekmektedir. Linux&#8217;ta **xrandr** komutunu kullanarak cihazımıza bağlı olan bir monitöre ilgili çözünürlüğü tanımladık ve görüntü çıkışı verdik.

Bu işlemi Linux Manjaro topluluğu I3WM sürümünde mod+ctrl+b kombinasyonları ile kullanabileceğimiz bir menüde de gerçekleştirebiliriz.

## Otomatik Tanımlama

[Linux Manjaro Gnome 3.22 Çözümleri](https://www.mkoseoglu.com/linux-manjaro-gnome-3-22-cozumleri) yazımda da kullandığım bir yöntemi tercih edebiliriz. Yalnız fark ettiğim sorun şudur ki XFCE ve Gnome masaüstlerinde cihazı başlattıktan sonra harici monitörü taktığımızda tanımlama ve çözünürlük ayarları başarılı bir şekilde bize yansısa da **I3WM**&#8216;de yukarıdaki yöntemi kullanmanız gerekmektedir.

Uçbirimde aşağıdaki dosyayı görüntüleyelim.

/etc/X11/xorg.conf

Section "Monitor"
  Identifier   "CRT1"
  ModelName    "PANEL"
  Option       "DPMS"
  VendorName   "LCD"
  HorizSync    31-60
  VertRefresh  40-60
EndSection

Yukarıda yer alan komutları ekleyelim ve dosyamızı güncelleyelim. Orijinal yazıda ilgili konunun kaynakları yer almaktadır.

## Ekran Yırtılması

Genel ağ (internet) üzerinde bir tarayıcıda gezinirken farenizin tekerleği ile yukarı-aşağı yaptığınızda ekrandaki yırtılmaları fark edebilirsiniz. Bunun için **Compton** kullanacağız.

**Linux Manjaro topluluğu I3WM** sürümünde bizler için bir alias (takma ad) atamış. Uçbirimi açalım ve comp komutunu girelim. Karşımıza topluluğun yazdığı komutlar çıkmaktadır. Ben bunları kullanmak istemediğim için tamamını sildim ve sadece yırtılmaları önlemek için tanımlanan komutları kullandım.

Uçbirimde direkt olarak görüntülemek isterseniz ~/.config/compton.conf  dosya uzantısını bir metin editörü olarak görüntülemeniz yeterlidir.

backend = "glx";
paint-on-overlay = true;
glx-no-stencil = true;
vsync = "opengl-swc";
unredir-if-possible = true;

Yukarıda yer alan komutları dosyamıza ekleyelim ve yeniden başlatalım. Yırtılmaların düzeldiğini fark edeceksinizdir.

Klavyede mod+t  ile **compton**&#8216;u devre dışı bırakabilir, mod+ctrl+t  ile de tekrar devreye alabilirsiniz. Uçbirimde ise compton -b  komutunu kullanarak başlatabilirsiniz.

Ve yine topluluğun geliştirdiği compton-conf  paketini kurarak grafiksel bir arayüz ile de ayarlarınızı gerçekleştirebilirsiniz.

## Olası Sorunlar

Uçbirimde **compton** komutunu uyguladığınızda glx_init(): No GLX extension.  çıktısını alabilirsiniz.

Çözümüne dair edindiğim bilgilere dayanarak söyleyebilirim ki; **Bumblebee** ve **ekran kartı** kulumunu başalarılı bir şekilde gerçekleştirdiğinizde sorun düzelecektir. Bu konuda daha ayrıntılı araştırma için ilgili kaynakları aşağıya bırakıyorum.

  * [Google araması](https://www.google.com.tr/search?q=compton+glx_init()%3A+No+GLX+extension.&oq=compto&aqs=chrome.2.69i59l3j69i57j69i61j69i60.1603j0j4&sourceid=chrome&ie=UTF-8#q=compton+glx+init():+No+GLX+extension.)
  * <https://forum.manjaro.org/t/glx-init-no-glx-extension-when-trying-to-start-compton/18645>
  * <https://bbs.archlinux.org/viewtopic.php?id=221539>

## Touchpad (dokunmatik fare)

Touchpad (dokunmatik fare) üzerinde XFCE ve Gnome masaüstlerinde grafiksel arayüz ile dokunmatik ayarlarını düzenleyebiliyorduk. Ben **I3WM**&#8216;de bunu bulamadığım için bazı düzenlemeler ile sorunu çözeceğiz.

Öncelikle uçbirimi açalım.

/usr/share/X11/xorg.conf.d/40-libinput.conf

Section "InputClass"
Identifier "devname"
Driver "libinput"
MatchIsTouchpad "on"
Option "Tapping" "on"
Option "NaturalScrolling" "true"
Option "TapButton1" "1"
Option "TapButton2" "3"
Option "TapButton3" "2"
Option "VertEdgeScroll" "on"
Option "VertTwoFingerScroll" "on"
Option "HorizEdgeScroll" "on"
Option "HorizTwoFingerScroll" "on"
Option "CircularScrolling" "on"
Option "CircScrollTrigger" "2"
Option "EmulateTwoFingerMinZ" "40"
Option "EmulateTwoFingerMinW" "8"
Option "CoastingSpeed" "0"
Option "FingerLow" "30"
Option "FingerHigh" "50"
Option "MaxTapTime" "125"
EndSection

Yukarıdaki komutları ilgili dosyamızda tanımlayalım ve cihazı yeniden başlatalım. Tüm fonksiyonların başarılı bir şekilde çalıştığını görebilirsiniz.

Bununla ilgili birkaç kaynak bırakıyorum.

  * <https://wiki.archlinux.org/index.php/Libinput>
  * <https://forum.manjaro.org/t/changes-to-40-libinput-conf-not-working-for-touchpad-speed/22268/6>

## Harici Klavye Ayarları

Linux&#8217;ta klavye ayarları için setxkbmap kullanılmaktadır. Benim dizüstü bilgisayarımda harici klavye kullanırken karakter hatası almaya başladım. Bu sorunu çözmek için uçbirimde setxkbmap tr  komutunu çalıştırdım. Başarılı bir şekilde Türkçe karakter tanımlaması gerçekleştirildi. Bunu başlangıçta çalıştırmak için ise;

~/.i3/config

I3WM için tanımlı config dosyamızı bir metin editörü ile görüntüleyelim ve dosyaya aşağıdaki komutu ekleyelim:

exec --no-startup-id setxkbmap tr

Bilgisayarımızı yeniden başlatabiliriz. Klavye ayarlarımız Türkçe karakter seti ile güncellenmiştir.

---

## File: _posts/2017-06-14-kotlin-sozdizimine-genel-bakis.md

---
id: 3667
title: 'Kotlin: Temel Sözdizimine Genel Bakış'
date: 2017-06-14T01:45:53+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3667
permalink: /kotlin-sozdizimine-genel-bakis
categories:
  - Kotlin
tags:
  - Kotlin
  - Kotlin Class Yapısı
  - Kotlin Dersleri
  - Kotlin Fonksiyonlar
  - Kotlin Veri Tipleri
  - Kotlin Yorum Satırları
---
[Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) ile ilk uygulamamızı yazalım ve temel seviyede Kotlin sözdizimine genel bir göz gezdirelim.

## Merhaba Dünya

Yazılım dillerinin başlangıç klasiği &#8220;Hello World&#8221; ile başlayalım uygulamamıza. Öncelikle Intellij IDEA yazılımını çalıştıralım.

Create New Project &#8216;e tıklayalım ve açılan arayüzde Java sekmesi altında Kotlin (Java) seçeneğini işaretleyerek next diyelim.

Bir sonraki aşamada Project name  alanına ilkuygulama yazarak finish  diyorum.

Gerekli modüller yüklendiğinde bizleri sade bir arayüz karşılamakta.



Project  sekmesi altında yer alan uygulama dizininin altında yer alan src dizinine sağ tıklayalım ve New  ve Kotlin File/Class  yönergelerini takip edelim.

Öncelikle JAVA&#8217;da bunu nasıl yaparız ona bakalım, hemen ardından [Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) ile yazalım.

### Java ile &#8220;Merhaba Dünya&#8221;

public static void main(String[] args) {
    System.out.println("Merhaba Dünya!");
}

### Kotlin ile &#8220;Merhaba Dünya&#8221;

fun main(args: Array&lt;String&gt;) {
    println("Merhaba Dünya!")
}

Kotlin&#8217;de bir diğer yazım biçimi olarak da {} kullanmak yerine =  operatörü ile daha kısa ifadeler elde edebiliriz. Intellij IDEA üzerine ilgili satırın üzerine alt+enter  kombinasyonları ile karşınıza çıkan seçenekte &#8220;_Conver to expression body_&#8221; seçeneği ile bu düzenlemeyi otomatik olarak gerçekleştirebilirsiniz.

### Kotlin ile &#8220;Merhaba Dünya&#8221;

fun main(args: Array&lt;String&gt;) = println("Merhaba Dünya!")



## Kotlin&#8217;de Veri Tipleri

Kotlin&#8217;de veri tiplerinde ondalık sayı, tam sayı ve string ifadeleri inceleyelim. Burada ek anektod olarak değişken tanımlamalarında kullanacağımız val ve var farkına da değineceğim.

fun main(args: Array&lt;String&gt;) {
    var myDecimal = 0.1  
    var myNumber  = 1    
    var myString: String  
    myString = "Her Şey Çok Güzel Olacak!"
    myString = "En azından hayattayız bu da bir şey be abi."
    val myAnotherString:String
    myAnotherString = "Blog yazmak güzeldir."
}

Burada myDecimal **ondalık** veri tipimizi, myNumber **tam sayı** veri tipimizi ve myString **string** veri tipimizi temsil etmektedirler.

Bir değişkeni tanımlarken var kullandığımızda **mutable** (değişken/değişebilir), val kullandığımızda ise **immutable** (değişmez) olmaktadır.

Kod bloğumuzun en sonunda, print(myString)  dediğimizde bizlere &#8220;_En azından hayattayız&#8230;_&#8221; çıktısını verir. Fakat böyle bir şeyi val  ile yapamayız.

Burada noktalı virgül kullanımı opsiyoneldir.

## Kotlin&#8217;de Class ve Fonksiyon Yapısı

[Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/) üzerinde basit bir örnek bloğu yazdım. Eminim, zihninizde sözdizimi ve işleyiş biçimi adına faydası olacaktır. Bir class içerisinde fonksiyon tanımladım.

fun main(args: Array&lt;String&gt;) {
    val name:String = "Mert Köseoğlu"
    var obj = Person().Disp(name)
}

class Person {
    fun Disp(name:String) = print("Bu kişinin ismi ${name}")
}

Burada **Inmutable (değişmez)** val ile name değişkenimin **String** bir ifade olduğunu belirttim ve değerine ismimi yazdım. Bir satır altında **obj** değişkenimin içerisinde **Person** classının içerisinde bulunan **Disp** fonksiyonuna değer gönderdik.

**Class Person**&#8216;ın içerisinde tanımladığımız **Disp** fonksiyonunda ise gelen değeri print  fonksiyonu ile yazdırdık.

Burada dikkat ederseniz ${name} tarzında bir ifade kullandım. **String** bir ifade içerisinde değişken tanımlamanız için $ kullanmanız gerekmektedir. Peki, {} kullanmamızın amacı nedir?

${} ifadesini name.lastname tarzında birden fazla dizinin yazılmasında kullanıyoruz.

fun main(args: Array&lt;String&gt;) {
 val b = 10
 val a = 5
 
 print("Bir $a sayısı ile bir $b sayının toplamı ${a+b} dir.")

}

### Bir Class Oluşturalım

Peki, harici bir **Class** nasıl oluşturabiliriz? Proje dizinimizde src üzerinde **New** diyelim ve yeni bir **Package** oluşturalım. Oluşturduğumuz Package&#8217;nin ismi com.persons olsun.

Oluşturduğumuz com.persons &#8216;ın içerisine yine **New** diyerek **Kotlin File/Class** diyelim ve **Kind** seçeneğinde **Class**&#8216;ı seçelim.

Person içerisinde bulunan Person Class&#8217;ımızı bu dosyanın içerisinde tanımlayalım ve Person içerisinde import edelim.

package com.persons

class Person {
    fun Disp(name:String) = print("Bu kişinin ismi ${name}")
}

import com.persons.Person
import java.awt.PrintJob

fun main(args: Array&lt;String&gt;) {
    val name:String = "Mert Köseoğlu"
    var obj = Person().Disp(name)
}

Bu sayede harici **Class**&#8216;lar üzerinde de çalışabiliriz.

## Kotlin&#8217;de Yorum Satırları

Birçok yazılım dilinde de kullandığımız sözdizimi burada da geçerli. Burada iki farklı şekilde // Yorum ve /* Yorum */ olmak üzere yorum satırlarını tanımlayabiliriz.

---

## File: _posts/2017-06-18-linux-mouse-konfigurasyonu.md

---
id: 3690
title: Linux Mouse Konfigürasyonu (xinput,xev)
date: 2017-06-18T18:30:50+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3690
permalink: /linux-mouse-konfigurasyonu
categories:
  - Linux
tags:
  - Linux
  - Linux Logitech M720 Triathlon
  - Linux Xev Komutu
  - Linux Xinput Komutu
---
Kullandığınız farenin buton işlevlerini değiştirebilir, farklı görevler atayabilir ve tuş görevlerini yer değiştirebilirsiniz. [Logitech M720 Triathlon](https://www.mkoseoglu.com/etiket/linux-logitech-m720-triathlon/) kullanırken ileri ve geri tuşlarının yerlerini değiştirmem gerekti. Bunun için Linux&#8217;ta **xinput** komutu üzerinde lists ve set-button-map parametrelerini kullanarak seçili aygıt üzerinde tanımlama yaparken **xev** komutu ile de ilgili butonların hangi ID değerlerini öğreneceğiz.

Öncelikle **xinput** komutunun sözdizimine bir göz gezdirelim:

xinput --lists

usage :
	xinput get-feedbacks &lt;device name&gt;
	xinput set-ptr-feedback &lt;device name&gt; &lt;threshold&gt; &lt;num&gt; &lt;denom&gt;
	xinput set-integer-feedback &lt;device name&gt; &lt;feedback id&gt; &lt;value&gt;
	xinput get-button-map &lt;device name&gt;
	xinput set-button-map &lt;device name&gt; &lt;map button 1&gt; [&lt;map button 2&gt; [...]]
	xinput set-pointer &lt;device name&gt; [&lt;x index&gt; &lt;y index&gt;]
	xinput set-mode &lt;device name&gt; ABSOLUTE|RELATIVE
	xinput list [--short || --long || --name-only || --id-only] [&lt;device name&gt;...]
	xinput query-state &lt;device name&gt;
	xinput test [-proximity] &lt;device name&gt;
	xinput create-master &lt;id&gt; [&lt;sendCore (dflt:1)&gt;] [&lt;enable (dflt:1)&gt;]
	xinput remove-master &lt;id&gt; [Floating|AttachToMaster (dflt:Floating)] [&lt;returnPointer&gt;] [&lt;returnKeyboard&gt;]
	xinput reattach &lt;id&gt; &lt;master&gt;
	xinput float &lt;id&gt;
	xinput set-cp &lt;window&gt; &lt;device&gt;
	xinput test-xi2 [--root] &lt;device&gt;
	xinput map-to-output &lt;device&gt; &lt;output name&gt;
	xinput list-props &lt;device&gt; [&lt;device&gt; ...]
	xinput set-int-prop &lt;device&gt; &lt;property&gt; &lt;format (8, 16, 32)&gt; &lt;val&gt; [&lt;val&gt; ...]
	xinput set-float-prop &lt;device&gt; &lt;property&gt; &lt;val&gt; [&lt;val&gt; ...]
	xinput set-atom-prop &lt;device&gt; &lt;property&gt; &lt;val&gt; [&lt;val&gt; ...]
	xinput watch-props &lt;device&gt;
	xinput delete-prop &lt;device&gt; &lt;property&gt;
	xinput set-prop &lt;device&gt; [--type=atom|float|int] [--format=8|16|32] &lt;property&gt; &lt;val&gt; [&lt;val&gt; ...]
	xinput disable &lt;device&gt;
	xinput enable &lt;device&gt;


Biz, xinput set-button-map komutunu kullanacağız.

xinput --list

Komutumuzun çıktısı şuna benzer olmalıdır:

⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
⎜   ↳ Logitech M720 Triathlon                 	id=11	[slave  pointer  (2)]
⎜   ↳ Logitech K360                           	id=12	[slave  pointer  (2)]
⎜   ↳ Elan Touchpad                           	id=14	[slave  pointer  (2)]
⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
    ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
    ↳ Power Button                            	id=6	[slave  keyboard (3)]
    ↳ Asus Wireless Radio Control             	id=7	[slave  keyboard (3)]
    ↳ Video Bus                               	id=8	[slave  keyboard (3)]
    ↳ Video Bus                               	id=9	[slave  keyboard (3)]
    ↳ Sleep Button                            	id=10	[slave  keyboard (3)]
    ↳ USB2.0 VGA UVC WebCam                   	id=13	[slave  keyboard (3)]
    ↳ Asus WMI hotkeys                        	id=15	[slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard            	id=16	[slave  keyboard (3)]


**Logitech M720 Triathlon **cihazımın Id değeri 11 gözükmekte. Şimdi, değiştirmek istediğimiz butonların hangi Id değerlerine sahip olduklarını öğrenelim.

xev | grep button

Komutu çalıştırdıktan sonra değiştirmek istediğimiz butonlara tıklayalım ve uçbirime bakalım. Çıktımız şuna benzer olmalıdır:

state 0x0, button 8, same_screen YES
state 0x0, button 8, same_screen YES
state 0x0, button 9, same_screen YES
state 0x0, button 9, same_screen YES


Ben burada Id değeri 8 olan butonum ile Id değeri 9 olan butonumu yer değiştireceğim. Bu sayede işlevleri de yer değiştirmiş olacaktır.

xinput set-button-map 11 1 2 3 4 5 6 7 9 8 10 11 12 13 14

Yukarıdaki komutu uçbirimde çalıştırdığımızda butonların işlevlerinin başarılı bir şekilde yer değiştirdiğini görebiliriz.

Oturumu her yeniden başlattığımızda seçili aygıtın Id değeri değişebilir. Şu anki oturumda Id değeri 11 olan aygıt üzerinde bu işlemi gerçekleştirdik. Bu komutu bir session dosyasında açılışta çalıştırmak istediğinizde hata alma olasılığınız çok yüksek çünkü her zaman Id değeri 11 olmayacaktır.

Bunun için basit bir script kullanalım.

#!/bin/sh
for id in `xinput --list|grep 'Logitech M720 Triathlon'|perl -ne 'while (m/id=(\d+)/g){print "$1\n";}'`; do
    echo "setting device ID $id"
    notify-send -t 10  'Mouse ayarları yapıldı.'
    xinput set-button-map $id 1 2 3 4 5 6 7 9 8 10 11 12 13 14
done

Burada _Logitech M720 Triathlon _olarak yazdığım aygıt ismi için siz kullanmak istediğiniz aygıtı yazabilirsiniz. For döngüsünde bu aygıtı bulur ve bir regex kuralı ile ilgili satırı parçalayarak bizlere Id değerini verir.

Bu dosyayı dosya.sh olarak kaydedebilir ve başlangıçta çalıştırabilirsiniz.

---

## File: _posts/2017-06-19-kotlin-kosul-ifadeleri.md

---
id: 3686
title: 'Kotlin: Koşul İfadeleri'
date: 2017-06-19T09:19:54+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3686
permalink: /kotlin-kosul-ifadeleri
categories:
  - Kotlin
tags:
  - Kotlin
  - Kotlin Dersleri
  - Kotlin IF Kullanımı
  - Kotlin Koşullar
  - Kotlin WHEN Kullanımı
---
[Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/)&#8216;de şartlı deyimler ve koşul ifadelerini inceleyelim. Bunun için [IF Koşulu](https://www.mkoseoglu.com/etiket/kotlin-if-kullanimi/) ve [WHEN Koşulu](https://www.mkoseoglu.com/etiket/kotlin-when-kullanimi/) üzerinde sözdizimine göz gezdirelim.

## IF Koşulu

Koşullar, yazılım dillerinde önemli bir yere sahiptir. Kullanılan algoritmalarda şartlı deyimler olarak geçen bu ifadeler sayesinde veri çıktılarımıza ve diyagram akışımıza göre süreci düzenleyebiliriz. Türkçe&#8217;de _eğer_ anlamına gelen **IF**, belirttiğimiz bir koşulun gerçekleşmesi durumunda istenen değerin döndürülmesini sağlar. Bununla ilgili hemen birkaç basit sözdizimi görelim.

### Genel Kullanım

var max = a 
if (a &lt; b) max = b

Yukarıdaki örnekte max değişkenine varsayılan olarak a değişkeni atanmış ve hemen altında bir if koşulu yazılmıştır. Eğer, a değişkeni b değişkeninden küçük ise max değişkenine b değişkeni atansın.

Bunu else kullanarak yapalım.

### Else ile Birlikte Kullanalım:

var max: Int
if (a &gt; b) {
    max = a
} else {
    max = b
}

IF koşulunda else ifadesi, tanımlanan koşula uymayan durumlarda kullanılır. Burada a değişkeninin b değişkeninden büyük olma koşulu tanımlanmış fakat; belirtilen koşula uymadığı için else ifadesi geçerli kılınmış, max değişkenine b değişkeni atanmış.

İfade Biçiminde Yazalım:

val max = if (a &gt; b) a else b


## WHEN Koşulu

When ise C benzeri dillerin geçiş operatörü olarak kullanılmakta.

### Genel Kullanım

when (x) {
    1 -&gt; print("x == 1")
    2 -&gt; print("x == 2")
    else -&gt; {
        print("x, 1 ya da 2 değildir.")
    }
}

### Birden Çok Aralık

when (x) {
    0, 1 -&gt; print("x == 0 or x == 1")
    else -&gt; print("x, 0 ve 1 aralığında değildir.")
}

## Kaynak ve İleri Okuma:

  * <https://kotlinlang.org/docs/reference/control-flow.html>

---

## File: _posts/2017-06-21-kotlin-yineleyiciler-donguler.md

---
id: 3697
title: 'Kotlin: Yineleyiciler &#038; Döngüler'
date: 2017-06-21T17:36:32+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3697
permalink: /kotlin-yineleyiciler-donguler
categories:
  - Kotlin
tags:
  - Kotlin
  - Kotlin Dersleri
  - Kotlin Döngüler
---
[Kotlin](https://www.mkoseoglu.com/etiket/kotlin-dersleri/)&#8216;de yineliyiciler ya da bir başka deyişle döngüler konusu ile devam ediyoruz. **Geleceğin Yazarları**, döngüleri şu şekilde tanımlamış:

&#8220;_Yazılan kodlarda belirli satırların birden fazla tekrar edilmesi istenebilir. Böyle durumlarda döngü yapıları kullanılır. Döngü yapılarında, döngünün kaç kere tekrar edeceği dinamik olarak belirlenebilir. Hatta döngünün tekrarlaması bir koşula bağlanabilir._&#8221;

Biz de bu tanıma bağlı kalarak **Kotlin** üzerinde genel kullanım mantığı ile örnekleme yapalım.

## For

For döngüsü, işlem koşullarının önceden belirli olduğu durumlarda kullanılır. Hemen bir genel kullanım örneği verelim ve sözdizime bakalım.

for (i in 1..10) {
    println(i)
}

Bu ifadenin çıktısı şuna benzer olmalıdır:

1
2
3
4
5
6
7
8
9
10

Burada kullanılan .. operatörü bir aralık belirtir. Buna rangeTo fonksiyonu diyoruz. Tam anlamı şu şekilde aslında  1 <= i && i <= 10 ve yine burada kullanılan && operatörü ve anlamına gelmektedir.

Bir örnek daha verelim. Bu kez sadeleştirilmiş sözdizimi ile gelsin.

for (i in 1..4) print(i)  

for (i in 4..1) print(i)

Birinci ifade için çıktımız 1234 olurken ikinci ifade için tanımsız olacaktır. Peki, bu aralığın tersini almak mümkün mü? Gayet tabii.

for (i in 4 downTo 1) print(i)

Burada çıktımızın 4321 olmasını bekleriz.

Peki, **son eleman**ı içermeyen bir aralık oluşturmak istersek bunu nasıl yaparız? Until fonksiyonu ile.

for (i in 1 until 10) { 
     println(i)
}

Tam olarak gösterimi ise şu şekilde olmaktadır: [1, 10)

## WHILE

&#8220;_Döngüsel işlem veya tekrarlı işlem (iterasyon, İng. iteration), bilgisayarı aynı işlem grubunu belirli bir koşul sağlanana kadar tekrar tekrar yapmak için yönlendirir._&#8221; diye aktarmış Geleceğin Yazarları.

Bu tarz teknik tanımlarda daha evrensel cümleler kullanmaya özen gösteriyorum ki [Türkçe Yazılım](https://www.mkoseoglu.com/turkce-yazilim/)&#8216;da belirli bir kalıp oluşturalım.

While döngüsü kullanımına dair genel kullanım örneği verelim:

while (x &gt; 0) {
    x--
}

Burada, x değeri 0&#8217;dan büyük olma koşulunu gerçekleştirmeye devam ettiği sürece döngü çalışacaktır.

var i:Int = 1
  while(i &lt;= 10){
  println(i)
  i++
}

Burada çıktımızın aşağıdaki gibi olmasını bekleriz:

1
2
3
4
5
6
7
8
9
10

## DO WHILE

**While** döngüsünde belirlenen koşul döngünün başlangıcında bulunmaktadır. Bunun anlamı, koşulun _false_ dönmesi halinde while bloğu çalışmayacaktır. Fakat, bazı zamanlarda while bloğunu bir kere de olsa çalıştırmamız gereken durumlarla karşılaşacağız. Bu tarz durumlarda ise **Do While** ifadesini kullanacağız.

Genel bir kullanım örneği verelim:

var i:Int = 1
do {
  println(i)
  i++
} while(i &lt;= 10)

## Kaynak ve İleri Okuma

  * <https://kotlinlang.org/docs/reference/control-flow.html>
  * <https://kotlinlang.org/docs/reference/ranges.html>

---

## File: _posts/2017-07-24-logitech-teknik-servis-sureci-penta.md

---
id: 3747
title: Logitech Teknik Servis Süreci (Penta)
date: 2017-07-24T21:06:52+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3747
permalink: /logitech-teknik-servis-sureci-penta
categories:
  - Genel
tags:
  - Türkiye Logitech Garanti Süreci
  - Türkiye Logitech Teknik Servis
  - Türkiye Penta Teknik Servisi
---
Merhabalar, 13 Haziran 2017&#8217;de satın aldığım **M720 Triathlon **model farede bluetooth bağlantı sorunu yaşamaya başladım. Bir anda hiçbir cihazı görmemeye başladı. Bu cihazı almamın en önemli nedenlerininden birisi ise birden fazla cihaza bağlanabilme özelliği olduğu için bu sorun bana büyük engel olmaya başlamıştı.



Bir boşluğumda Logitech&#8217;e garanti kapsamında ürünü göndermek istedim. Türkiye&#8217;deki temsilcileri **Penta**, tam ismi ile **Penta Teknoloji Ürünleri Dağıtım Ticaret A.Ş. **ile elektronik mail kanalı ile iletişime geçtim ve durumu özetledim.

## Penta:

Kendilerinden şu şekilde bir yanıt aldım. Siz de ürününüzü göndermeden önce lütfen dikkate alınız. Bu konuda fazla bilgiye ulaşamadığım için sizlerin de bilgilenmesini istedim.

  * Ürünü faturasının fotokopisi ile birlikte **arıza notu**nu yazarak servisimize Yurtiçi kargo ile gönderebilirsiniz.
  * İstanbul Anadolu yakasından gönderilen ürünlerin kargo ücreti müşteriye aittir. (Gönderici Ödemeli)
  * İstanbul Avrupa yakasından ve İstanbul dışı diğer illerden gönderilen ürünlerin kargo ücreti servisimize aittir. (Alıcı Ödemeli)
  * Yurtiçi Kargo Anlaşma Kodu : **262 244 793**
  * Penta Teknoloji Ürünleri Dağıtım Tic. A.Ş.
  
    Organize Sanayi Bölgesi Nato Yolu 4. Cad. No : 1 Yukarı Dudullu Ümraniye İstanbul

Burada ürünü göndermek için ihtiyacınız olan tüm bilgiler mevcut.

## Süreç:

Ürünümü **17 Temmuz 2017** tarihinde Yurtiçi Kargo ile gönderdim ve yine mail kanalı ile de kendilerine ulaştığı ve işleme alındığı bilgisine ulaştım. Teknik servis, maksimum yirmi iş günü içerisinde sorunu çözmeyi hedeflemekte. Şu an beş iş gününü tamamlamış bulunmaktayız.

Süreç ile ilgili gelişmeleri yine buradan güncellerim. Logitech ürünleri konusunda sorun yaşayanlara da rehberlik etmiş olur.

  * 6. iş günündeyiz ve halen ürün arıza takip numaramı alamadım. Ürünün aciliyetini bildirmeme rağmen tek geri bildirimleri &#8220;net bir bilgi veremeyiz, 20 iş günü içerisinde tamamlanacaktır.&#8221; tarzında kalıplaşmış elektronik postalardan ibaret.
  * Kendilerine **(850) 277 0 277 **numaralı telefondan ulaştım. Kargo takip numaramın son altı hanesini kendilerine bildirdim ve ürün hakkında bilgi aldım. Sorunsuz bir şekilde değişimi yapıldığı ve gün içerisinde kargoya verileceği söylendi. Ürün yarın elimde olursa **Penta**, bizlerden tam not alacak!
  * Ürün, beklediğim gibi tarafıma ulaştı. Birebir yenisi ile değişim yapıldı. Penta&#8217;ya teşekkürlerimizi iletiyoruz.

## Bonus:

Ek olarak Linux üzerinde fare kullanımını konfigüre etmek isteyenler için de bu makalemi önerebilirim.

  * <https://www.mkoseoglu.com/linux-mouse-konfigurasyonu>

## Bağlantılar:

  * [Penta (info@penta.com.tr)](http://www.penta.com.tr/)

Esen kalın!

---

## File: _posts/2017-09-26-yirmi-onbes-wordpress.md

---
id: 3862
title: 'Yeni Tema: Yirmi Onbeş'
date: 2017-09-26T02:34:52+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3862
permalink: /yirmi-onbes-wordpress
categories:
  - Genel
---
Merhabalar,

Uzun zamandır severek kullandığım [Independent Publisher](https://github.com/raamdev/independent-publisher) WordPress temasından ani bir kararla WordPress&#8217;in varsayılan tema olarak bizlere sunduğu [Yirmi Onbeş](https://tr.wordpress.org/themes/twentyfifteen/) temasına geçiş yaptım.

Güncemde teknik konular haricinde bu tarz içeriklere yer vermek istemesem de; okuyucularıma karşı kendimi sorumlu hissettiğim için açıklama ihtiyacı duydum.

## Independent Publisher



Öncelikle, Independent Publisher genel olarak yani bir şablon olarak beni yansıtıyor diyebiliriz? &#8220;Bunu da nerden çıkardın?&#8221; diye soranları duyar gibiyim. Beni karakter olarak tanıyanlar kafalarını onaylarcasına yukarı-aşağı hareket ettirdi zaten. Kısaca açıklamak gerekirse; günlük yaşantımda da sade bir insanım. Yerel ağ(internet) üzerinde ise her zaman doğru bilginin savunucu olmuş, kaliteli, güncel ve doğru içerikleri doğru bir üslupla insanlara ulaştırmayı tercih etmiş ve yerel ağda da yerel betlerin(internet sitesi) bu şekilde olmasını istemişimdir. Üstüne üstlük renklerden ve kalabalık nesnelerden arınmış bir günce(blog) okumanın tadı hiçbir şeyde yoktur!

WordPress temasının geliştiricisi [Raam Dev](https://twitter.com/raamdev) abimiz, kendi işinde gücünde mütevazi güzel bir insan. Tam olarak indirme sayısına ve oylamalara göz gezdirmedim fakat güzel bir indirme yakaladığını tahmin ediyorum. Raam abimiz, bu durumdan hiçbir çıkar gütmeden gayet bir gün her geliştiricinin yapmasını umduğumuz gibi GitHub üzerinde açık kaynak olarak yayınlamış çalışmasını.

Tüm bu değerlendirmelerin ışığında uzun bir süre kullandım, caanım temayı.

## Eee, Sonra?

Eesi sevgili okuyucum; ilerleyen süreçte beni rahatsız eden bazı durumlar vardı. Benim için en önemlisi ihtiyaçlarım doğrultusunda mantıklı ve işlevsel güncellemeleri zorlanmadan yapabilmeme olanak sağlamasıdır. Bu temanın dizin yapısı ve kullanılan kod yapısı ise buna pek müsaade eden tarz değil maalesef. Özellikle ilk kullandığım zamanlarda Raam&#8217;a birkaç kez mail ile sitem etmişliğim ve yardım almışlığım da vardır. Kendisi her durumda yardımcı oldu lakin bir yapı var ve sen onun dışına çıkamıyorsun.

WordPress&#8217;e de CMS olarak çok hakim değilim. Blog mu? Yahu yazıyorsun yayınlıyor işte pek bir esprisi yok bu işin. Önemli olan yazdıklarınla kimlere dokunabildiğindir.

Temada son zamanlarda fark ettiğim birkaç sitil hatası ve bunları düzeltmek için kendimde yeterli enerjiyi bulamamam, GitHub üzerinde son işlemenin aylar öncesinde olduğunu gördüğümde biraz daha okuyucuya &#8220;Bak, buradayım. Okusana beni. Hadi, oku!&#8221; diyebilecek bir tema arayışına girdim.

Birazcık ücretsiz mağazaları dolaştım. Çok yeni moda ve sadeliği arka plana atmış temalara rast geldim. Yeteri kadar araştırma yapacak zamanımın da olmadığını göz önünde bulundurduğumda kendim bir tema çıkartayım dedim. Şöyle bir düşününce de mantıklı geldi. Sadece kendi ihtiyaçlarıma göre evrilecek bir yapıyı ayağa kaldırmak çok zamanımı almasa gerek diye düşündüm.

Tam o sırada, temalar kısmında eskiden de geçici olarak bir göz kırptığım Yirmi Onbeş temasını gördüm.

## Yirmi Onbeş

Yirmi Onbeş&#8217;in geçmişinden haberdarım. Geçmişinden kaçamazsın diyerek samimi bir yüzleşmeden sonra hiç düşünmeden etkinleştirdim dedim. Karşıma çıkan önyüz daha sade ve daha okuyucu odaklı bir çalışma idi.

Yapı olarak WordPress&#8217;in varsayılan teması olduğunu bir bakışta hissettirecek güzellikte. Önümüzdeki bir ay boyunca Yirmi Onbeş ile devam edeceğim. Yapılan sorgu sayılarından SEO&#8217;ya kadar birçok etmeni göz önünde bulundurarak yeni bir tema yapmalı mıyım? Yoksa Yirmi Onbeş ile devam mı etmeliyim? Sorularına cevap bulacağım. Bunu da tabii ki zaman ve karşıma çıkan durum raporları gösterecek.

## Sonuç

Her ne olursa olsun, geliştirmeye; yazmaya ve paylaşmaya devam ediyoruz. Vee &#8220;Bizim bir Mert vardı, o güzel yazıyordu, bu onun güncesi değil!&#8221; diye bir düşünce kapılmıyoruz.

## Kaynak ve İleri Okuma

  * https://tr.wordpress.org/themes/twentyfifteen/
  * https://tr.wordpress.org/themes/independent-publisher/

---

## File: _posts/2017-10-18-arch-linux-wispotter.md

---
id: 3876
title: Arch Linux WiSpotter Bağlantısı
date: 2017-10-18T15:57:57+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3876
permalink: /arch-linux-wispotter
categories:
  - Linux
---
Merhaba,

Kullandığım bazı Linux dağıtımlarında ortak kullanım alanlarına ait internet bağlantılarına giriş sorunu yaşıyordum. Bunların başında ise Starbucks başta olmak üzere kullanılan WiSpotter gelmektedir. Kablosuz ağa bağlandığınızda karşınıza otomatik bir giriş ekranı gelmediği için çoğu insan bu sorunu kullandığı kablosuz internetinin sürücü özellikleri ile gidermeye çalışmakta.

Bugün yine bu sorunu yaşarken WiSpotter giriş IP&#8217;sini tarayıcıma kaydettiğimi fark ettim. Bu sayede sorunsuz bir giriş yaptım.

WiSpotter IP: 212.2.212.64:81 tarayıcınızın adres çubuğuna burada yer alan IP bilgisini girdiğinizde ilgili giriş ekranlarına yönlendirileceksiniz.

Yer imlerine kaydetmeniz tavsiye olunur.

---

## File: _posts/2017-10-19-samsung-iphone-se-gecis.md

[Binary file]

---

## File: _posts/2017-10-26-docker-ile-php.md

---
id: 3910
title: Docker ile PHP Geliştirelim
date: 2017-10-26T03:10:40+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3910
permalink: /docker-ile-php
categories:
  - Docker
tags:
  - Docker
  - Docker ile PHP
  - Docker Kullanımı
---
Merhaba,

**Docker** ile **PHP geliştirmek** isteyenlere yönelik kullandığım bir paketten bahsedeceğim. GitHub&#8217;ta [webdevops.io](http://webdevops.io) bünyesinde geliştirilen paket ile **Docker Hub**&#8216;ta bulunan tüm imajları dilediğiniz gibi kullanabilirsiniz.

&nbsp;

Öntanımlı olarak gelen birden fazla seçenek bulunmakta. **PHP ile proje geliştirenler**den şunu duyar gibiyim. Bende çalışıyor, ama arkaşımda çalışmıyor. Çok ciddiyim. Bu anahtar kelimelerle bile Google&#8217;da araştırma yaptığınızda karşınıza birçok konu başlığı çıkmakta.

Ben de bu sorunu bloğumda yazmışım hatta. Linux Mint kullanıcısı iken karşılaştığım bir PHP ortam sorunu ve çözümü: <https://www.mkoseoglu.com/linux-php-composer-hatasi-ve-cozumu>

Birgün CI ile geliştirme yaparken Laravel 5.5 ile çözmem gereken bir sorun vardı. Fakat şöyle bir durum var. Laravel 5.5 ile birlikte PHP 7 bağımlılığı da beraberinde gelmekte. Bu durumda, Arch Linux&#8217;a yeni bir PHP sürümü yapılandırmak ya da XAMP&#8217;ın PHP 7 sürümünü kurmak görünürde en mantıklı gelen çözümlerdi. Fakat ilerleyen zamanlarda bunun aslında ne kadar da saçma ve sığ bir süreç olduğunu fark ettim.

**Docker**, bizlere bu sorunu çözmeyi vaad ediyor. Bir sanallaştırma teknolojisi olan **Docker** üzerine teorik bilgilerden ziyade geliştirme paketinden söz etmeyi tercih ediyorum.

GitHub alanlarında ekledikleri açıklama satırında Symfony, WordPRess, Joomla ve diğer PHP projelerini (NGINX, Apache HTTPd, PHP-FPM, MySQL, Solr, Elasticsearch, Redis, FTP) desteklediklerinden söz etmişler._ _PHP sürümleri ve servisleri elinizin altında, tek yapmanız gereken Docker Compose ile birden fazla konteynırı ayağa kaldırmak.

## Docker Kurulumu

Ben Arch Linux kullanıcısıyım. Pacman kullanarak ihtiyacım olan uygulamaları yüklüyorum.

sudo pacman -S docker docker-compose

Yükledikten sonra **Docker** servisimi başlatıyorum.

sudo systemctl start docker.service

Linux kullanıcılarının dikkat etmesi gereken bir nokta var. Docker&#8217;ın her komutunda sudo kullanmak ya da **Docker**&#8216;ı kullanıcı grubuna eklemek zorundasınız. Ben eklemeyi tercih ediyorum.

sudo groupadd docker
sudo usermod -aG docker $USER

Bu işlemden sonra oturumumu yeniden başlatıyorum. Uçbirimde docker version komutunu çalıştırıyorum. Eğer sizin de çıktınız aşağıdakine benzer ise her şey yolunda demektir.

Client:
 Version:      17.10.0-ce
 API version:  1.33
 Go version:   go1.9.1
 Git commit:   f4ffd2511c
 Built:        Wed Oct 18 23:08:56 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.10.0-ce
 API version:  1.33 (minimum version 1.12)
 Go version:   go1.9.1
 Git commit:   f4ffd2511c
 Built:        Wed Oct 18 23:09:11 2017
 OS/Arch:      linux/amd64
 Experimental: false


## PHP Docker Boilerplate

Git clone komutu ile paketimizi yerele çekelim. Paketimizin içerisinde yer alan app dizini bizim Linux&#8217;taki mount, **Docker**&#8216;daki Volumes dizinidir. Bir anlamda yerel bilgisayarınızdaki çalışma dosyalarınızdır. Biz, app dizini üzerinde çalışacağız.

Gerekli dökümanlara buradan ulaşabilirsiniz: <https://github.com/webdevops/php-docker-boilerplate/tree/master/documentation>

git clone https://github.com/webdevops/php-docker-boilerplate.git docker


Uçbirimde paket dizininde aşağıdaki komut ile birlikte çalışma ortamımızı seçelim. Geliştirme ortamında development olanını seçmekte fayda var. Gerekli hata ayıklama gösterimleri açık olarak gelmekte.

cp docker-compose.development.yml docker-compose.yml


Şimdi, docker-compose.yml dosyamızın içeriğine bir göz atalım. Burada yer alan komutların açıklama ve anlatımları için Dockerfile oluşturma üzerine araştırma yapabilirsiniz. Ben kullanmayacağım için links altında belirtilen mail servisini siliyorum.

MySQL veritabanı olarak 5.7 sürümünü kullanmayı tercih ettiğim için başındaki yorum satırını kaldırarak ilgili satırı aktif ediyorum. Hemen yukarısında kalan 5.6 sürümünün başına yorum satırı koyarak geçersiz hale getiriyorum.

dockerfile: MySQL-5.7.Dockerfile

Ve son olarak phpMyAdmin kullanmak istediğim için dosyanın aşağında bulunan yorum satırlarını silerek aktif hale getiriyorum ve görebilmek için bir port tanımlıyorum.

phpmyadmin:
  image: phpmyadmin/phpmyadmin
  links:
    - mysql
  ports:
    - 3000:80
  environment:
    - PMA_HOSTS=mysql
    - VIRTUAL_HOST=pma.boilerplate.docker
    - VIRTUAL_PORT=80
  volumes:
    - phpmyadmin:/sessions

Buna göre, phpMyAdmin&#8217;in 3000&#8217;inci portumda çalışmasını beklerim.

Kullandığımız paketin dökümantasyonunda ortam değişkenleri ve daha birçok konuda anlatım bulunmakta. Kendi ihtiyaçlarınıza göre inceleyerek yapılandırabilirsiniz.

## Docker Compose

Docker Compose birden fazla konteynırı ayağa kaldırmaya yarar. Öncelikle bu paketimizi build etmemiz gerekli.

docker-compose build

Yukarıdaki komut ile inşaa ederek ihtiyaçlarımıza yönelik yapılandırdığımız Dockerfile dosyamız bizlere ilgili servislerin imajını indirmekle görevlidir.

Gerekli işlemler tamamlandığında docker image ls komutu ile tamamlanan imajlarımızı görüntüleyebiliriz. Sol kısımda yer alanlar ise ID değerleridir.

Şimdi buradaki imajlarımızı ayağa kaldıralım, çalıştıralım.

docker-compsoe up -d

Buradaki -d parametresi detached&#8217;ten gelmektedir. Türkçesi ile bağımsız, tarafsız anlamlarına gelmekte ve olan detached&#8217;in bizler için asıl amacı Docker komutlarını arka planda çalıştırmasıdır.

Komutumuzu çalıştırdıktan sonra adres çubuğumuza localhost:8000 yazarak **Apache** sunucumuza, localhost:3000 yazarak da **phpMyAdmin** ekranımıza ulaşabilirsiniz.

Buradaki app dizininde Laravel, CI ve WordPress gibi yukarıda da sözünü ettiğimiz Framework&#8217;leri (çatı) kullanabilir farklı PHP sürümleri ve servisleri ile ihtiyacına göre çalışma ortamınızı yapılandırabilirsiniz.

Çalışmalarınızı GitHub&#8217;a, Dockerfile dosyanızı ise imaj haline getirerek Docker Hub hesabınıza atabilirsiniz.

## Sonuç

**Docker**&#8216;in Türkçe kaynak eksikliği herkesçe bilindiği için bu makaleyi oluşturmaya karar verdim. Kısa da olsa bir **PHP geliştirici**sinin hangi süreçlerden geçmesi ve hangi adımları izleyerek işlevsel bir Docker kullanıcısı olabileceğini anlatmayı hedefledim.

---

## File: _posts/2017-10-26-webpack.md

---
id: 3885
title: 'Webpack: Modül Paketleyici'
date: 2017-10-26T01:40:50+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3885
permalink: /webpack
categories:
  - JavaScript
tags:
  - JavaScript
  - webpack
  - Webpack Kullanımı Türkçe Kaynak
  - webpack nedir
  - Webpack ve React JS
---
Merhaba,

JavaScript çalışmalarımda sıkça kullandığım ve neredeyse JavaScript çatılarında kullanılması elzem paketlerden birisinin kullanımına dair elimden geldiğince Türkçe içerik oluşturmaya gayret edeceğim. Bu konuda Türkçe kaynak olmadığı için bazı terimlerin Türkçe kullanımında kararsız kaldım. Bu konuda yardımcı olursanız ve katkı gösterirseniz sevinirim.

Öncelikle, **Webpack**&#8216;i nasıl tanımlarız? Şöyle yaklaşalım; elimizde birden fazla dizinde bulunan birden fazla modül bulunmakta. Bir JS dosyası, birden fazla JS dosyasını içerisine çağırıyor, çalıştırıyor ve HTML etiketine ilgili çıktıyı basıyor. Tüm bunlar olurken bir de CSS ve diğer modüller yükleniyor. Burada tarayıcının önyükleme süresinin ne denli arttığını ve şişmiş dosya boyutlarını fark ettiniz mi?



Evet, tam da burada **Webpack**; bizim kullanacağımız kısa açıklama tabiri ile Modül Paketleyicimiz devreye girmekte. **Webpack**, ilk olarak 2013&#8217;te [Tobias Koppers](https://github.com/sokra) tarafından oluşturulmuştur. Süregelen zamanda ekibe dört yeni kişi daha eklenmiş ve açık kaynak olarak geliştirilmeye devam etmiştir.

Peki, **Webpack** sadece kendisine gelen dağınık modülleri paketlemeye mi yarar? Buna dolaylı yoldan hayır cevabını verebilirim. **Webpack**&#8216;e bağımlı aynı zamanda _Webpack Dev Server_ paketini kullanmaktayız. Burada dikkat edilmesi gereken tek nokta sadece geliştirme ortamında kullandığımızdır. Kısaca bahsetmek gerekirse; geliştirme ortamında uygulamanızı hem paketler hem de sanal bir ortamda gerçek zamanlı olarak size sunar. Siz uygulamanızda değişiklikleri yaptığınızda ve her kaydettiğinizde paketler ve yeniden size sunar. Bu işlemi uyglamanız canlıda hizmet verdiğinizde Next JS gibi popüler _server side render_ paketleri ile ya da Express JS ile çözebilirsiniz.

Bu yazının devamında **Webpack** kullanımıi eklentilerini ve örnek kod bloklarını inceleyeceğiz.

## Başlangıç

JavaScript paketleri için kullanılan iki adet _paket yöneticisi_ bulunmakta. Bunlar yarn ve npm olmak üzere ikiye ayrılmaktadırlar. Ben çalışma boyunca npm kullanarak devam edeceğim.

Linux kullanıcısı olduğum için Windows kullanan arkadaşlarlarımız farklı kaynaklardan da destek alsınlar ilerleme boyunca.

Uçbirimimizi açalım ve bir çalışma dizini, hemen ardından ise paket yapılandırma dosyamızı oluşturalım.

mkdir webpack-blog-ders

npm init -y

npm install --save-dev webpack


Ben Arch Linux kullandığım için bazı dizinlerde kullanıcı yetki hatası ile karşılaşıyorum. Eğer siz de yetki hatası alırsanız bunu çözmek için doğru kullanım şu şekilde olmalıdır:

sudo npm install --save-dev --unsafe-perm webpack

Bu adımları başarılı bir şekilde ilerledi iseniz dizininiz şu şekilde olmalıdır:  node_modules package.json package-lock.json

## Merhaba!

├── node_modules
├── index.html
├── package.json
├── package-lock.json
└── src
    ├── css
    │   └── style.css
    └── js
        ├── app.js
        └── domquery.js



Şimdi basit bir çalışma örneği gerçekleştireceğiz. Yukarıdaki dizin ağacını takip edebilirsiniz. Yine, projemizin ana dizininde src dizini oluşturalım ve js dizini içerisinde basit bir işlemi birden fazla dosya ile yapmaya çalışalım.

Bir domquer.js dosyası oluşturuyorum, HTML nesnemin seçilimi için.

export const domquery = document.querySelector('.w-learn');


Bir de app.js dosyası oluşturuyorum, HTML DOM textContent özelliğim ile ekrana veri bastırmak için.

import { domquery } from "./domquery";

domquery.textContent="Merhaba!";


Ve son olarak css dizinini oluşturuyorum ve style.css dosyamda ilgili nesneme basit bir özellik tanımlıyorum.

.w-learn{
  color:red;
}


Ana dizinimde bulunan index dosyamı oluşturup güncelleyeceğim. Burada dikkat etmemiz gereken nokta buradaki JavaScript dosyalarını dist/bundje.js yolu ile çağırmamız. Yani, elimizde bulunan iki adet modülü paketleyeceğiz.

&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
  &lt;title&gt;Webpack: Modül Paketleyici&lt;/title&gt;
  &lt;link rel="stylesheet" href="src/css/style.css"&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;h1 class="w-learn"&gt;&lt;/h1&gt;
  &lt;script src="dist/bundle.js" charset="utf-8"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;


Şimdi ise Webpack konfigüre adımına geldik. Burası önemli olan kısım. Yine ana dizinimizde bulunan package.json dosyamızı güncelleyeceğiz.

"scripts": {
  "build": "webpack --entry ./src/js/app.js --output-filename ./dist/bundle.js"
},

Bir bakalım, ne yazdık biz? Uçbirimde npm run build komutu ile çalıştıracağımız bir komut uyarladık. Önce paketimin ismini yazdım. Hemen ardından giriş dosyam anlamına gelen entry parametresini tanımladım ve yolunu gösterdim. Bir de çıkış dosyamın dizinini ve hangi dosya ismi ile adlandırılacağını belirttim. Bir dist yolu olmasa da kendi oluşturacak ve güncelleyecektir. Burada kullanılan komut ve parametrelerin tamamına dökümandan ulaşabilirsiniz. Temel olarak package.json&#8217;da çalıştırılmak istenildiğinde kullanılan iki temel parametre bunlardır.

Uçbirimde npm run build diyerek proje dizinimde komutumu çalıştırıyorum.

&gt; webpack-blog-ders@1.0.0 build /opt/lampp/htdocs/webpack-blog-ders
&gt; webpack --entry ./src/js/app.js --output-filename ./dist/bundle.js

Hash: c560be31af2d1d1ebcd6
Version: webpack 3.8.1
Time: 69ms
           Asset  Size  Chunks             Chunk Names
./dist/bundle.js  3 kB       0  [emitted]  null
   [0] ./src/js/app.js 73 bytes {0} [built]
   [1] ./src/js/domquery.js 60 bytes {0} [built]


Yukarıdakine benzer bir çıktı almanız gerek. Burada oluşturduğu dizide her eleman bizim bir modülümüze denk gelmektedir. Bu dizi bundle.js dosyasından incelenebilir.

Şimdi ise sanal sunucumda çalıştırıyorum.



Başarılı bir şekilde çalıştırdık. Şu an elimizde sadece iki adet modül var fakat React JS ya da diğer çatılarla çalıştığınızda ne kadar hayati olduğunu bir kez daha kavrayabileceksiniz. Buradaki CSS dosyamızı neden paketlemedik peki? Çünkü Webpack sadece JavaScript dosyaları üzerinde çalışır. Bunun dışında tüm farklı modüller için Webpack eklentilerini kullanacağız.

Peki, bundle.js dosyamı canlı bir çalışmada kullandığım zaman sıkıştırılmasını isterim ben. Bunu nasıl yapacağım? Muhtemelen _pretty&#8217;_den gelen -p parametresi ile.

"scripts": {
  "build": "webpack --entry ./src/js/app.js --output-filename ./dist/bundle.js -p"
},

Tekrar çalıştırıyorum.

&gt; webpack-blog-ders@1.0.0 build /opt/lampp/htdocs/webpack-blog-ders
&gt; webpack --entry ./src/js/app.js --output-filename ./dist/bundle.js -p

Hash: 2e07e765e0eae342c668
Version: webpack 3.8.1
Time: 103ms
           Asset       Size  Chunks             Chunk Names

./dist/bundle.js  651 bytes       0  [emitted]  null
   [0] ./src/js/app.js 75 bytes {0} [built]
   [1] ./src/js/domquery.js 60 bytes {0} [built]

Ve, mutlu son. Bundle JS dosyamın boyutunun küçüldüğünü görebiliyorum.

  * GitHub: <https://github.com/mkoseoglu/webpack>

## Webpack Dev Server

Evet, bundan daha önce söz etmiştim. Webpack Dev Server, geliştirme ortamında bizlere sanal sunucu ortamı sunmaktadır. Şimdi çalışmamıza dahil edelim.

npm install --save-dev webpack-dev-server

Yukarıdaki komut ile çalışma dizinimize ilgili paketi tanımlayalım. Bu gibi yerel dizinde çalışıldığında daha verimli olabilecek paketleri global olarak yüklememeye özen gösterelim. GitHub&#8217;ta ya da bir takım çalışmasında yereldeki package.json dosyanızda gözükmeyen paketler farklı makinalarda çalışmayacaktır.

Bakıyorum, paket bağımlılıklarım güncellenmiş.

"devDependencies": {
  "webpack": "^3.8.1",
  "webpack-dev-server": "^2.9.3"
}

Şimdi build komutumuzu güncelleyelim.

"scripts": {
  "build": "webpack-dev-server --entry ./src/js/app.js --output-filename ./dist/bundle.js"
},

Ve çalıştıralım.

npm run build

Şu an 8080 portumda proje sorunsuz çalışmakta. Tabir-i caizse; koşmakta, ayakta.

  * GitHub: <https://github.com/mkoseoglu/webpack/tree/02-webpack-dev-server>

## Çekirdek Kavramları

Şimdiye kadar package.json&#8217;da modül girişini ve paket çıkışını belirttik sadece. Peki, diğer eklentileri kullanmak için ve farklı konfigüre işlemleri için ne yapacağız? Cevap basit!

Çalışmamızın ana dizininde webpack.config.js oluşturuyorum.

module.exports = {
  entry: './src/js/app.js',
  output: {
    filename: 'bundle.js',
    path: __dirname + '/dist'
  }
}


Burada komutlar tanıdık gelmiştir umarım. Entry, yine modülümüzün giriş nokta. Bu kullandığınız yapı dökümanda single entry olarak geçmekte. Birden fazla modül girişini dizi olarak da tanımlayabilirsiniz. Yine bir çıkış noktamız var paketleyicimiz için. Yol ve dosya ismi ile onu da tamamlıyoruz.

Tekrar package.json dosyamızda build komutumuzu güncelleyelim.

"scripts": {
  "build": "webpack -p"
},

Ve tekrar çalıştıralım.

npm run build

Yeniden paketledi ve ekrana çıktımızı verdi.

Bizim bir de CSS dosyamız vardı. Şimdi, CSS&#8217;imizi de paketleyelim. Hemen hatırlıyoruz, Webpack yalnızca JS üzerinde çalışır. Peki, bunun için ne yapıyorduk? Eklenti kullanıyorduk, evet.

## CSS (Sitil) Kullanımı

Yüklememiz gereken iki adet temel paket bulunmakta. Bunlar css-loader ve style-loader dir.

npm install style-loader css-loader --save-dev


Şimdi ise Webpack dosyamı güncelliyorum.

{
    // ...
    module: {
        loaders: [
            { test: /\.css$/, loader: "style-loader!css-loader" }
        ]
    }
}


Burada seçici dosya uzantım CSS ve yükleyicilerim style-loader ve css-loader burada paketlerin yazım sırası da büyük önem arz etmektedir.

Ana dizinimizde bulunan index dosyamızda statik olarak içe aktardığımız CSS linkini yorum satırı ile geçersiz hale getiriyorum.

&lt;!--&lt;link rel="stylesheet" href="src/css/style.css"&gt;--&gt;


Src dizinimde bulunan App JS dosyasına CSS&#8217;i içe aktarıyorum.

import "../css/style.css"


Çalıştırıyorum&#8230;

npm run build

Ve yeniden ekrana çıktımızı bastı, hem de CSS dosyalarımızı da paketleyerek.

  * GitHub: <https://github.com/mkoseoglu/webpack/tree/03-webpack-config-css>

## Sonuç

Yavaştan sonuca doğru gelelim diyorum. Webpack&#8217;in bir diğer kullanım alanları ise resimlerin paketlenmesi. [File Loader](https://github.com/webpack-contrib/file-loader) paketini kullanarak basit bir şekilde bunu da çözebilirsiniz. Babel ve SCSS kullanımına dair örneklere de yine erişebilirsiniz. Ben temel olarak Webpack mimarisini ve işlevini anlatan basit bir anlatım gerçekleştirmek istedim. Yukarıda ilgili başlıkların altında yer verdiğim GitHub bağlantılarında doğru dalı seçmeyi unutmayınız.

## Kaynak ve İleri Okuma

  * <https://github.com/webpack/webpack>
  * <https://webpack.js.org/concepts/loaders/>

---

## File: _posts/2017-10-28-ben-merkezci.md

---
id: 3915
title: Ben Merkezli Yazılım Sektörü
date: 2017-10-28T18:43:02+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3915
permalink: /ben-merkezci
categories:
  - Genel
---
Merhaba,

Bugün biraz kusacağım. Yazının devamında Türkiye&#8217;deki iş ahlakına yönelik son derece ahlak dışı izlenimler bulunmaktadır. Onsekiz yaşından küçüklerin okumasını tasvip etmiyorum, daha çok gençsiniz. Biraz daha toz pembe yaşayın.

Konumuz toplum olarak duymaya daha aşina olduğumuz latince kökenli ego. Türkçesi, süzme ben merkezcilik. Süzmeden kastımız ise; benliğinde ve karakterinde bulunan iyimserliğin, alçakgönüllülüğün ve saygının tamamen yok olmasıdır. Karakteri başta olmak üzere harcı süzme ben merkezcilik ile karılan bir insanın size hissetirdiği ise sadece soğuk bir tortudan ibarettir.

Türkiye&#8217;de buna örnek vermemi ister misiniz? Çok basit. Size en yakın ticari toplulukta bunu rahatlıkla sezebilirsiniz.

Bireylerin kalıp halinde yaşadığı, düşünme ve sorgulama yetilerinin köreltidiği kapitalizm odaklı sömürge çarklarından bahsediyorum. Bunların sadece devlet dairelerinde olduğunu sanıyorsunuz değil mi? Hayır! Yanılıyorsunuz. Bu düşünce sistemi ve davranışsal bozukluk olarak nitelendirebileceğimiz durum, Türkiye&#8217;deki tüm iş sahalarını etkisi altına almış durumda. Ben içerisinde bulunduğum için Yazılım Geliştirici olarak, yazılım sektörüne dair izlenimlerimden bahsedeceğim.

## Paylaşmak

Bilgi paylaşımından girelim konuya. Ben neden günce yazıyorum? Hiç bahsettim mi sizlere? Basit ama gündelik hayattan çok uzak kalan bir tabir; paylaşmak için. Ben bir Anadolu Lisesi&#8217;nde öğrenim gördüm. Çevremde akademik alanlarla ilgilenen insanlar dışında Bilgisayar Bilimlerine aşina kimse olmadı. Bana yardım edecek, yön gösterecek insanlar yoktu. Biliyorum, birçoğunuz yaşadı bu durumu. Bundan şikayetçi değilim, aksine memnunum. Bu durum beni araştırmaya ve araştırarak öğrenmeye itti. Hangi metodları kullanarak araştırabileceğimi öğrendim. Bunun zevkini küçük yaşlarda tattım. Bunun bir handikapı var, çıkış noktamız burası.

Yabancı dil yoksunluğundan ve teknik terimlere hakim olmamamın verdiği bilgi yetersizliğinden dolayı Türkçe anahtar kelimeleri kullanarak araştırma yapmaktan başka şansım yoktu. Birgün, düşüm olan kendi günce sistemimi PHP ile yazmak isterken bir sorunla karşılaştım. Uzun araştırmalar sonucunda çözümü buldum. Bir güncede, ağabeyimizin teki şöyle bir cümle kurmuş: &#8220;Aşağıdaki kodu münasip yerlere ekleyiniz.&#8221; Ben bunu 2013 senesinin temmuz ayında okudum. Ve ne yazık ki; münasip yerleri bilecek kadar tecrübem yoktu. Önce başarısızlığımla kalakaldım, üzüldüm ve kırıldım. Fakat pes etmedim. Biraz şans biraz da inatçılığımla çözdüm sorunu. Çözdüğümde başarmanın verdiği hazzı yaşamadan ne yaptım biliyor musunuz? Günce yazdım.

Bakın, burada. <https://www.mkoseoglu.com/ckeditor-ajax-post-etme-kesin-cozum> paylaştığım içerik. Nasıl da içerlemişim değil mi? URL yapısında bile &#8220;kesin çözüm&#8221; ibaresini eklemeyi es geçmemişim. Gelen yorumları dikkatle inceleyiniz.

Yaklaşık bir sene sonra Burak, bir yorum yazmış. Kendisini tanımıyorum lakin tanımayı çok isterim. Yoruma bakalım: &#8220;Allah tuttuğunu altın etsin inşallah. Günlerdir Türkçe kaynak yoktur diye stackoverflow-kolik olmuştum ama bir türlü işime yarayan bir çözüm bulamamıştım. Şu an şu saatte twitter’Inda kapatılmasıyla bulduğum boş zamanda google’da birde Türkçe sorgulama yaptım ve karşıma bu blog çıktı. Dediklerini harfiyen yaptıktan sonra sorunumda çözüme kavuştu. Tek kelimeyle mükemmelsin…&#8221;

Şu yorumdan sonra yüzümün aldığı hali görmenizi çok isterim. Sevinç, mutluluk, gurur, başarı hissi ve tarifi imkansız bir rahatlama.

Paylaşmanın verdiği haz! Evet, işte bundan bahsediyorum. Peki bununla mı kaldı? Hayır tabii ki. Çeşitli alanlarda yazılar yazdım. Ve son zamanlarda Facebook&#8217;taki Yazılım Geliştiricileri paylaşmaya ve yazmaya teşvik etmek amacı ile yönettiğimiz bir Facebook grubumuz bulunmakta.

Yazılım Blogları Türkiye: <https://goo.gl/qU8smV>

Grupta paylaşılan gönderileri gelen ilgi yoğunluğuna göre Yazılım Blogları Türkiye Facebook sayfasında da paylaşıyoruz. Başlangıçta sönük kalsa da; şimdilerde inanılmaz bir paylaşım sürecine adım attık. Bu güzel bir şey, çok daha büyüyecek.

Beni, Türkçe içerik üretmeye iten ve paylaşma isteğime yön veren süreçten bahsetmenin mutluluğu ile yazıma devam ediyorum. Yazılım sektöründeki ben merkezciliği paylaşarak alt edelim. Bunu yıkabilecek güçte olduğumuzu biliyorum. Böyle sığ insanlara, ben öğrendim sadece ben bileyim mantığındaki birey olmayı beceremeyen canlıları çokluğumuzla sindirelim.

## Başvurular

Yazılım sektöründe ben merkezciliğin en çok rastlanan bir başka alanı ise iş başvuruları ve lider konumları. Ben lider sözcüğünü kullanmaktan pek haz etmem aslında. Türkçesi, önder daha uygun olacaktır. Önder nedir?

Bunu 2016&#8217;nın başlarında kendisinden özel olarak imzalı edindiğim; çok değerli Sn. Osman Pamukoğlu&#8217;nın Önder kitabından bir alıntı yaparak cevaplandıracağım. Burada kitapla ilgili değerlendirmeme göz gezdirebilirsiniz <https://www.mkoseoglu.com/osman-pamukoglu-onder-caglarin-ozlemi>

Şöyle ki: &#8220;&#8230;Önder, insanoğlunun çaglar boyu özlem duyup hasretiyle yaşadigi en değerli bir üst ihtiyaçtır&#8230; Önderi başkan, patron, şef, direktör, komutan gibi hiyerarşik yapıların sıfatını taşıyanlara karıştıran ve bir tutmaya kalkışanlara en yakışır söz: &#8216;Bilmez, bilmediğini de bilmez.&#8217; deyimidir&#8230;&#8221; Tarihi incelediğimizde, doğanın var olduğu her alanda önderin varlığını görebiliyoruz. Peki, sektördeki şu meşhur takım önderlerinin bundan haberi var mı?

Peki, iş başvurularında iletişimin en kısıtlı olduğu elektronik posta zemininde hiç bir takım önderi etiketini taşıyan birisinden ben merkezciliğin somut örneğini gördünüz mü? Bir Laravel çalışması için ben Linkedin&#8217;de önceden yapmış olduğum bir başvuru sonrasında gelen bir elektronik mail ile bunu yaşadım. Fazla ayrıntı vererek sizi de umutsuzluğa itmek istemiyorum lakin süzme olanına rast geldiğim için şanssız bir günümdeyim sanırım. Tam zamanlı çalışır mısınız? Sorusuna, olabilir yanıtını verdiğimde; bize başvuru yapan sizsiniz. Olabilir ile ne demek istediğinizi anlayamadım cevabı alabiliyorsunuz. Yahu adamın, kendisine herhangi bir konu hakkında görüş belirtmeme tahammülü yok. Elektronik posta iletişimde gösterdiği süzmeliğe bakınız, bu arkadaşla çalışan arkadaşlarıma Tanrı&#8217;dan sabır diliyorum.

Havasından mı desem, suyundan mı. Ya sabır!

Ben merkezci süzme bireysizlere örnek olarak önder etiketini kullanan basiretsiz yönetemeyicilere de bir örnek verdiğime göre yavaştan sonuna doğru devam edelim.

## Sonuç

Türkiye&#8217;de de insanoğlunun olduğu her yerde olduğu gibi bir ben merkezcilik söz konusu. Bunun bizim gözümüze daha çok batmasının ve yaşam kalitemizi gereğinden fazla etkilemesinin nedeni ise yaşam koşulları. Bilginin azaldığı ve cehaletin ağır geldiği terazilerde bilmemenin verdiği özgüvenle çok bildiğini sanan insanların gereksiz süzme ben merkezciliği ile karşılaşmak zorunda kalıyoruz. Ve buna tahammül etmek, katlanmak inanın çok zor.

Çevremizi değiştiremiyoruz. Kendimizi değiştirelim. Bu yazıyı okuyan arkadaşlarımdan rica ediyorum. Bilgi paylaşımının verdiği hazzı birlikte yaşayalım. Sizinle çalışan insanları küçümsemekten, kırmaktan, incitmekten kaçının.

&#8220;Ben ölünce bir elimi tabutumun dışına atın. İnsanlar görsünler ki padişah olan Süleyman bu dünyadan eli boş gitmiştir.&#8221; I. Süleyman

Teşekkür ederim.

---

## File: _posts/2017-11-22-cakephp-xml-sitemap.md

---
id: 3957
title: 'CakePHP Xml: Sitemap Oluşturalım'
date: 2017-11-22T02:12:23+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=3957
permalink: /cakephp-xml-sitemap
categories:
  - CakePHP
tags:
  - CakePHP
  - CakePHP 3.x Sitemap Create
  - CakePHP Sitemap
---
Merhaba,

PHP çatıları arasında hangisini tercih etmezsin diye sorulursa bir gün CakePHP diyeceğimden kuşkunuz olmasın.

CakePHP üzerine geniş bir bilgim yok aslında. Bunun nedeni ise yine çatının kendisinde saklı. Çok dar ve kısıtlı bir topluluk desteği var. Bunun yanı sıra güncellemelerde gelen metodların çok sık değişmesi ve kullanıcı kitlesinin az olması gibi birçok olumsuz neden sayabilirim. Ve bugün tüm bu olumsuzluklara rağmen CakePHP 3.x sürümü ile bir çalışma yapacağız.

Bu çalışma kodlarını açıklamak benim için oldukça zorlu olacak. Çünkü yerel sunucumda çalışan sitemap, sunucuda hata verdi. Bu yüzden nerde ne kullanacağımı ben de kestiremiyorum. Birkaç günlük yoğun bir araştırma ile Xml elde ettim ve gelen verimi ekrana bastırmayı başardım.

## Sitemap Paketi

Öncelikle GitHub&#8217;ta CakePHP için yazılmış bir paket bulunmakta. Ben temiz bir CakePHP sürümünü üzerinde değil de zaten kompleks olan bir betik üzerinde çalıştığım için midir yoksa bilgi eksikliğinden midir bilemiyorum paketi çalıştıramadım. Birçok yere mail attım lakin yine de çözüm bulamadım.

Ben paylaşayım, eğer çalıştırmayı başarırsanız mailinizi bekliyorum.

<https://github.com/loadsys/CakePHP-Sitemap>

## Controller

Her çatıda ve her MVC mimarisinde olduğu gibi CakePHP de sağ olsun bize bu güzelliği sunan teknolojilerden. Bazı çatılarda yönlendirme metodları ile controller ve model akışını ayarlayabiliyoruz. Fakat CakePHP de dosya isimlerine göre belirleniyor. O yüzden buna dikkat edelim.

Ana dizinimde src/Controller içerisinde SitemapController adında bir dosya oluşturuyorum.

namespace App\Controller;<code class="language-php">
use App\Controller\AppController;
use Cake\Event\Event;

    class SitemapController extends FrontController 
    {    

        public function initialize() {

            parent::initialize();
            $this-&gt;loadComponent('RequestHandler');     
                        
        } 
        
        public function index() {

            $this-&gt;loadModel('SitemapModel');
            $data = $this-&gt;Sitemap-&gt;find('all');
            $compact = $this-&gt;set(compact('data'));
            
            }  
        
    }</code>

## Model

Model dosyamı oluşturmamın buradaki tek nedeni ORM kullandığım için.tablomu seçmek.

Ana dizinimde src/Model/Table içerisinde SitemapTable.php adında bir dosya oluşturuyorum.

namespace App\Model\Table;<code class="language-php">
use Cake\ORM\Table;
class SitemapTable extends Table
{
    public function initialize(array $config)
    {
        $this-&gt;table('pages');
    }
}</code>

Benim pages ismindeki tablomdaki verileri Controller dosyamdaki find metodu ile çekebilirim artık.

Burada yer alan table metodu CakePHP 2.x sürümlerinde setTable imiş galiba.

## View

Bu katmanların isimlerini yabancı dilde yazmaktan hiç hoşlanmasam da mimariye uysun diye mecbur kalıyorum.

Ana dizinimde src/Template/Sitemap/xml/ içerisinde index.ctp adında bir dosya oluşturuyorum.

&lt;?php echo '&lt;?xml version="1.0" encoding="UTF-8"?&gt;'; ?&gt;
&lt;urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"&gt;
&lt;url&gt;
&lt;loc&gt;&lt;?php echo $this-&gt;Url-&gt;build('/', true);?&gt;&lt;/loc&gt;
&lt;changefreq&gt;weekly&lt;/changefreq&gt;
&lt;priority&gt;0.8&lt;/priority&gt;
&lt;/url&gt;
&lt;?php foreach($data as $key): ?&gt;
&lt;url&gt;
&lt;loc&gt;&lt;?php echo $this-&gt;Url-&gt;build(["controller" =&gt; $key['slug'] ], true);?&gt;&lt;/loc&gt;
&lt;lastmod&gt;&lt;?php echo $key['modified']-&gt;i18nFormat('yyyy-MM-dd'); ?&gt;&lt;/lastmod&gt;
&lt;changefreq&gt;weekly&lt;/changefreq&gt;
&lt;priority&gt;0.5&lt;/priority&gt;
&lt;/url&gt;
&lt;?php endforeach; ?&gt;
&lt;/urlset&gt;

Burada pages tablomdan gelen slug ve modified kolonlarımı kullandım.

## Routes

URL&#8217;de Xml uzantısına izin vermeli ve sitemap yolumu tanımlamalıyım. Ana dizinimde config/routes.php dosyamı düzenlemem gerek.

Buradaki Router::defaultRouteClass(DashedRoute::class); kodundan hemen sonra Router::extensions([&#8216;json&#8217;, &#8216;xml&#8217;]); kodunu ekliyorum. Ve hemen aşağısına yeni bir yönlendirme bloğu tanımlıyorum.

<code class="language-php">Router::scope(
    '/sitemap.xml',
    ['controller' =&gt; 'Sitemap','action' =&gt; 'index'],
    function ($routes) {
        $routes-&gt;connect(
            '/', 
            ['action' =&gt; 'index']
        );              
    }
);</code>

Ve onun da hemen altına hatalarımızı takip edebilmek için hata ayıklama modunu açıyoruz.

<code class="language-php">use Cake\Core\Configure; 
Configure::write('debug',2);</code>

## Sonuç

Ben genelde bu tarz düzenlemeler paylaşmasam da bunu gerekli buldum. Çünkü stabil olmayan bir döküman var ve açıklamalar yeterli değil. Sürümler arasında farklar var. Yerel sunucumda çalışan kodların, uzak sunucuda hata vermesi gibi birçok aksilik yaşadım. Hiçbir anlamı olmayan garip hata kodları var. Bu yüzden CakePHP ile Xml çalışmanız gerektiğinde bu yazı size yardımcı olabilir.

Sevgiler.

## Kaynak ve İleri Okuma:

  * https://stackoverflow.com/questions/35102199/cakephp-3-creating-xml-view
  * https://stackoverflow.com/questions/39212157/when-i-create-a-view-using-xml-layout-in-cakephp-a-head-tag-is-showed
  * https://stackoverflow.com/questions/23408838/cakephp-sitemap-error

---

## File: _posts/2017-12-31-2018e-merhaba.md

---
id: 4007
title: 'Yılsonundan Geride Kalanlar, 2018&#8217;e Merhaba!'
date: 2017-12-31T20:16:50+00:00
author: Mert Köseoğlu
layout: post
guid: https://www.mkoseoglu.com/?p=4007
permalink: /2018e-merhaba
categories:
  - Genel
---
Merhaba,

Yılsonundan, 2017&#8217;nin son gecesinden yazıyorum. Yaklaşık olarak 365 gün 6 saat 43 dakika gibi bir zamanı doldurmuş bulunmaktayız. Tüm bu süre içerisinde hüzünlendik, sevinçlendik, hayal kırıklıkları yaşadık. Bazen de gururlandık. Eminim herkesin yaşam çizgisinde birçok duygu ve olay doyasıya yaşanmıştır. Fakat bu yazıda kendi çizgime bakış atacağız. Yılsonundan geride kalanları irdeleyeceğiz ve ders çıkaracağız. Tabii en önemlisi yeni bir sene için yeni hedefler belirleyeceğiz. En azından ben belirleyeceğim bu yazıda, siz de bana eşlik etmiş ve kendinizde de bunları yapabilecek gücü bulmuş olacaksınız.

## Yılsonundan Geriye Kalanlar

Bu sene kendi kariyer çizgimde birtakım değişiklikler yaptım. Front-end teknolojilerine karşı soğuklumu React JS ile kırdım galiba. JavaScript&#8217;e beslediğim antipatinin sebebi teknik argümanlardan dolayı değil. Tamamen bilgisizlik. Bir insan bir konu hakkında ne kadar bilgisiz olursa o kadar işe yaramaz ve bedbah bir teknoloji olduğunu zannediyor galiba. Bu biraz da önyargı gerçi.

React JS ile [Wes Bos](https://reactforbeginners.com/) sayesinde tanıştım. Wes&#8217;in React JS üzerine çevrimiçi kursunu Twitter&#8217;da görmemle birlikte React JS&#8217;i merak ettim. React JS takımında çalışan [Dan Abramov](https://twitter.com/dan_abramov)&#8216;un da belirttiği gibi React JS öğrenmek için ileri seviye bir JavaScript bilgisine ihtiyacınız yok.

Evet, React JS ile JavaScript&#8217;in tüm gücünü diğer Framework&#8217;lerin aksine hayvan gibi kullanma şansınız var. Fakat dediğim gibi React&#8217;ın yapısı ve size sundukları arasında ordan oraya sürüklenirken JavaScript&#8217;in [ES6](https://www.youtube.com/watch?v=kRknZ6ejQ_8&t=414s) özelliklerini çoktan öğrenmiş oluyorsunuz.

React JS belirttiğim gibi çok büyük ve komplike bir Framework. Özellikle bir React JS projesini ayağa kaldırmanın zorluklarını üçüncü parti paketleri dahil ettiğinizde yaşıyorsunuz. Bu konuda son zamanların gözdesi [Parcel Bundler](https://github.com/mksglu/parcel-react-redux)&#8216;a selam çakalım. [Slack grubu](https://parcel-bundler.slack.com/) da çok güzel.

Ben Ankara&#8217;da kendimi bu alanda daha da çok geliştirmek için tam zamanlı Front-end ilanlarına bakmaya başladım. Özellikle React JS alanında çalışan iki şirkete başvuru yaptım. Mülakat en azından benim açımdan güzel geçse de ikisi de benim için olumlu sonuçlanmadı. Bunlardan birisi için hazırladığım ön çalışmaya [buradan](https://github.com/mksglu/oilarat) bakabilir ve inceleyebilirsiniz.

[React JS ve Firebase](https://github.com/mksglu/react-firebase-crud) ile anlık güncelleme yapabildiğimiz bir CRUD uygulaması oluşturdum. Bir [restoran menü uygulaması](https://github.com/mksglu/reactjs-menu) bir de bunlara ek olarak [Webpack](https://github.com/mksglu/webpack) üzerine bir döküman hazırladım.

Tüm bu süreç elbette kolay olmadı. Back-end teknolojileri üzerine çalışırken bir anda JavaScript ekosisteminin en komplike Framework&#8217;une dadan diye atlamak ve uygulama çıkartmaya çalışmak çok zor oldu. Bu konuda ise yardım aldığım ve tanıştığım bazı insanlar oldu.

Birçok insanla tanışıklığım oldu lakin bunların arasında bana bu süreçte en çok destek verenlerden birisi, [Tahsin Cem Yılmaz](https://www.facebook.com/tidusdragonh3art)&#8216;ı atlamak olmazdı. Cem ile [Facebook React JS grubu](https://www.facebook.com/groups/reacttr/)nda tanıştık. Facebook gruplarına karşı bir önyargı olsa da kitle sağlam. Tavsiyedir.

GitBook ile tanıştım. Bir blog dizisi oluşturmak ve bunun takibini yapmaktansa GitBook ile sıralı bir şekilde işlevsel dökümanlar oluşturabiliyorsunuz. Bazı blog yazılarımı [GitBook hesabım](https://www.gitbook.com/@mksglu)a taşıdım ve yeni dökümanlar ekledim.

WordPress (mkoseoglu.com) güncemin arayüzünü [Vanilla WordPress teması](https://github.com/mksglu/vanilla-wordpress-theme) ile güncelledim.

Back-end mimarileri üzerine ise [Laravel](https://www.mkoseoglu.com/laravel-5-4/) üzerine kendimi biraz daha geliştirme şansı buldum.

Birkaç uygulamalı eğitim ve etkinliklere katıldım.

  * KAK 17 Docker
  * Ankara Üniversitesi [Eray Aydın](https://erayaydin.github.io/) ile Laravel
  * Google Developers Group DevFest 17 Eskişehir
  * Bilkent Kıvılcım [Kerem Güneş](https://twitter.com/krmgns) ile [SOA](https://github.com/oradan-buradan/ankara-soa)

Türkiye&#8217;de sektörde yapılan etkinlik ve uygulamalı eğitimlere karşı bazı fikirlerim şekillendi. Bu yargılarıma belki bir başka yazıda değinebiliriz.

Türkçe kaynak çerçevesinde [Yazılım Blogları Türkiye](https://www.facebook.com/groups/yazilimbloglariturkiye/?ref=br_rs) Facebook grubu kurduk. Tahmin ettiğimden çok daha fazla etkileşim sağlandı. Twitter&#8217;da yazılım geliştiricilerin iş bulmasına yönelik [Yazılım Kariyer](https://twitter.com/yazilim_kariyer) hesabını açtık. Güzel bir ekip ile şirketleştirmeyi istediğim [Tarazed Yazılım](https://twitter.com/tarazedyazilim)&#8216;ın adını koymuş olduk ve birkaç sosyal medya hesabı ile taçlandırdık.

Benim için halen içerisinde bulunduğum son gecenin senesi örgün eğitim anlamında verimli geçmedi. Bu güne kadar hiçbir zaman istemediğim bir şeyi yapmadım. Sevmediğim ortamlarda, haz etmediğim insanlarla sadece çevre ve çıkar baskısı uğruna asla bir olmadım ve taviz vermedim.

Bundan yaklaşık kırk beş gün önce dayanılmaz bir sancı ile uyandım sabah saatlerinde. İnanılmaz bir sancı ile acile gittim. Böbrek taşı düşürdüğümü öğrendim. Böbrek taşım hareket etmiş ve kanalda genişlemeye neden olmuş. Henüz düşme sürecinde değil aslında. Üç adet taş ile yaklaşık iki aydır mücadele ediyorum. Her dışarı çıktığımda bana yaşattığı sancıdan iki gün sonra kendime geliyorum. Bir on gün önce bir tanesini düşürdüm.

[Fındıkça](https://www.facebook.com/findikcacom/) isminde Karadeniz bölgesinde üreticilerin sorunlarına çözüm olabilmek amacı ile fındık ihraç etmeye çalıştık.

Çekirdek bir aile olduğumuz için aile düzenimde ya da yaşamımda kritik bir gelişme olduğunu söyleyemem.

## Ve 2018&#8217;e Merhaba!

Bahsettiğim üzere herkesin yaşam çizgisi her birimizden farklı. Herkesin idealleri ve tutkuları ayrı. Ben bu seneden beklediklerimi, ideallerimi ve gerçekleştirmek istediklerimi yazmaya çalışacağım.

Öncelikle sağlık. Kendimi [düzenli bir uyku](https://www.youtube.com/watch?v=vivmNq-Znfs) rutinine sokmaya çalışacağım. Bunun yanı sıra [boks](http://ankaraboks.com/) çalışmalarıma önem vereceğim ve spor aktivitilerimi çeşitlendireceğim. Gün içerisinde bol su tüketerek ve gerçekten beslenmeme dikkat ederek böbrek taşlarından kurtulmayı umut ediyorum.

Yazılım geliştirme daha doğrusu kariyer üzerine ise bir liste halinde sıralayabilirim sanırım:

  * React JS ve buna bağımlı üçüncü parti paketlerle ilgili en geniş Türkçe döküman dizisini oluşturacağım ve GitBook&#8217;ta yayınlayacağım.
  * React Native&#8217;e geçiş yapacağım.
  * Vue JS ve GraphQL gibi teknolojiler üzerinde de hakimiyetimi arttıracağım.
  * Laravel üzerine API çalışmaları hazırlayacağım. Front-end projelerimde kullanacağım API ihtiyaçlarımı bu şekilde karşılayacağım ve bunun derslerini yayınlayacağım.
  * Symfony üzerine giriş seviyesinde bir CRUD uygulaması yayınlayacağım.
  * Uzaktan çalışabileceğim sürekliliği olan kendimi bu alanlarda geliştirebileceğim bir takıma dahil olmak da bu ideallerim arasında. Yahut Ankara bazlı tam zamanlı bir ekip.
  * Örgün eğitim konusunda gerçekten istediğim bir bölümde öğrenim göreceğim.

Bunun dışında bazı makalelerimi yabancı dilde (EN) yayınlamak istiyorum. Yabancı dilimi bu yönde geliştirmek ve içerik sunmak istiyorum.

Bir gitar almak istiyorum. Fender&#8217;in akustiklerine bakıyorum, kendimi gitarda geliştirmek istiyorum.

Ve önümüzdeki senenin yazında kesinlikle bir yurtdışı deneyimi yaşamak istiyorum. Bununla birlikte önümdeki beş senenin kariyer planlamasını da yurtdışı bazında yapmak istiyorum.

Biliyorum istemek kolay. Herkes bir şeyler istiyorum. En azından kendi tecrübelerime dayanarak sizlere bunun nasıl yapıldığı ile ilgili birkaç cümle söylemek istiyorum. Bu kişisel gelişim kitapları gibi özlü cümlelerden değil. Tek bir başarıya giden yol var. Hayvan gibi çalışmak. Evet. Hayvan gibi. Bunu biraz daha verimli hale getirebiliriz. O zaman mis gibi olur işte. Bu başarı dürtüsünü tetikleyen tek bir şey var. İstek. Eğer yeterince isterseniz her şey olur.

Önümüzdeki sene bu yazıyı güncelleyeceğim.
  
Bakalım neler olacak..