Türkçe Programlama Dersleri

İnternette özellikle türkçe programlama kaynağı bulmak özellikle ingilizceye göre oldukça zor. Bunun sebebi bir kenarda dursun elimizde neler var onlara bir bakalım. Aşağıdaki -şimdilik- ufak olan liste nitelikli olduğunu düşündüğüm programlama derslerini barındırıyor. Umarım iş görür.

HTML Dersleri

Türkçe kaynak olarak rastladığım diğerlerine nazaran daha nitelikli HTML dersleri bu sayfada bulunuyor. Aslında yeni özelliklerden ve güncel kullanımdan bahsedilmemiş ama yine de başlangıç açısından temiz bilgiler barındırıyor.

Bağlantı

CSS Dersleri

Oldukça eski ve nitelikli olan Fatih Hayrioğlu’nun zamanla genişlettiği CSS arşivi. Epey bir emek harcanmış olan bu kaynak oldukça yararlı ve iyi bir rehber.

Bağlantı

Modern JavaScript

Yine rastladığım en nitelikli JavaScript dersleri. Modern vurgusunu yapmamın sebebi güncel tekniklerle, kullanımlarla JavaScript’i öğretiyor olması.

Bağlantı

Python Programlama Dili Dersleri

Bu sayfa için ne söylesek azdır. Python için böyle bir türkçe kaynak büyük bir emek ve sorumluluk gerektiriyor. Python öğrenmek, bilgi tazelemek ve referans olarak kullanmak için -hala- epeyce kullandığım bir programlama ders dizisi.

Bağlantı

Node.JS Dersleri

Node’u es geçmek olmaz. Daha önceden faydalandığım gayet iyi bir dille anlatılmış olan bu kaynak eminim node’a meraklı dostlar için faydalı olacaktır.

Bağlantı

PHP ve Sabit Tanımlamalar

PHP’de değişkenlerden başka kullanabileceğimiz bir de sabitler vardır. Sabitler, tanımlandıktan sonra değiştirilemezler. Birkaç örnek verelim.

define('SABIT', 'foo');
var_dump(SABIT);

Sabitler, programlama dillerinde genellikle büyük harflerle tanımlanırlar. Bu genel bir gelenektir, daha farklı biçimlerde de kullanılabilir elbette. Sabitleri bir kere tanımladıktan sonra başka bir yerde değiştiremiyorsunuz ve yeniden tanımlayamıyorsunuz. Yani şöyle:

define('TEST', 'foo');
define('TEST', 'bar');
// Hata: Notice: Constant test already defined in /var/www/constant.php on line 2

Sabitlerin Kontrolü

Bir sabit tanımlı olup olmadığını kontrol etmemize yarayan fonksiyonlar da var. defined fonksiyonu sayesinde, sabitin tanımlı olup olmadığını öğrenebiliyoruz. Kullanalım:

define('TEST', 'foo');

defined('TEST') or define('TEST', 'foo'); // Tanımlamaz, çünkü zaten tanımlı
defined('DENEME') or define('DENEME', 'bar'); // Tanımlar, çünkü tanımlı değil

var_dump(defined('DIGER')); // bool(false)

Sabitlere Tanımlayabileceğimiz Türler

Sabitlere, değişkenleri tanımlayabiliriz fakat daha sonrasında değişkene yeni bir değer verdiğimizde sabitin değeri değişmez. Yani;

$foo = 'bar';
define('TEST', $foo);
$foo = 'baz';
var_dump(TEST); // string(3) "bar"

Sabitlere değer döndüren fonksiyon tanımladığımı test ettim (sürüm 5.4) fakat anonim fonksiyonlar sabitlere tanımlanmıyor.

function foo($bar) {
    return (string) $bar;
}

define('TEST', foo('test'));
var_dump(TEST); // string(4) "test"

// Hatalı kullanım:
define('TEST', function(){
    return 'foo';
});

Sabitlerde şimdilik dizi (array) tanımlaması yapamıyoruz ama PHP 7’de bunu kullanabileceğiz. PHP 7 ile çalıştırdığımızı varsayalım:

define('FOO', ['bar' => 'Bar...', 'baz' => 'Baz...']);
var_dump(FOO['bar']); // string(6) "Bar..."

Sınıflardaki Sabitler

Sınıf içerisinde kullandığımız sabitlerde, normalde kullandıklarımızla benzerlikler taşır. Bu sabitlerde daha sonrasında üzerine yazılamaz ve değiştirilemez. Sadece okumak içindir. Örneğimizi inceleyelim:

class Test
{
    const FOO = 'Sabit';

    public function bar()
    {
        return self::FOO;
    }
}

$test = new Test;
var_dump($test->bar()); // string(5) "Sabit"
var_dump(Test::FOO); // string(5) "Sabit"

Bu yapı yalnızca PHP 5.3 ve sonrasında kullanılabilir.

Sabitlerin Kullanım Yerleri

Sabitler daha çok ayar/konfigürasyon (config) dosyalarında kullanılırlar. Örneğin bir veritabanı bağlantı ayarları veya dizin belirleme ayarları gibi. Örnekleyelim:


defined('DB_DSN') or define('DB_DSN', 'mysql:host=localhost;dbname=veritabani');
defined('DB_USR') or define('DB_USR, 'root');
defined('DB_PWD') or define('DB_PWD', null);

$pdo = new PDO(DB_DSN, DB_USR, DB_PWD);

Bu şekilde veritabanı bağlantısını daha kontrollü biçimde yapabiliyoruz. İstersek sınıflar içinden de erişebiliyoruz. Başka bir senaryoda ise, dizin yapılarını kontrolümüz altında tutmak isteyelim.

defined('KOK_DIZIN') or define('KOK_DIZIN', __DIR__);
defined('UYG_DIZINI') or define('UYG_DIZINI', KOK_DIZIN.'/app');
defined('SINIFLAR') or define('SINIFLAR', KOK_DIZIN.'/classes');
defined('GORUNUMLER') or define('GORUNUMLER', KOK_DIZIN.'/views');

Herhangi bir yerde betik içine sınıf dahil etmek istediğimizde, yeniden dizin yolunu yazmak yerine sabit sayesinde tek sefer çağırabiliriz: require SINIFLAR.'/database.class.php'; gibi. Bu şekilde bir kullanım yapmak, daha sonrasında sınıflarının dizin yolunu değiştirdiğimizde de bizi zorlamayacaktır.

Sabitlerin Kullanımı ve Performans

Hiç istatistik ve ölçüm bulamadım fakat değişkenlerle global sabitleri karşılaştırdığımız vakit, sabitler değişkenlere nazaran daha yavaşmış. Yalnız bunu sınıflar için söyleyemem.

Kolay gelsin.

Sublime Text Klasör/Dosya Listesi Problemi

Mac üzerinde Sublime Text 2 metin/kod editörünü kullanıyorum. Öncedir çok rastladığım bir problem vardı ve şu an devamlı aynı sıkıntıyla karşılaşıyorum. Sublime Text, dosya yöneticisi kısmında yeni oluşturduğum dosyaları listeye dahil etmiyor yani güncellemiyor. Biraz çözüm aradım ama pek kayda değer bir şey çıkmadı.

Geçici bir çözüm olarak klavye kısayolu atayarak dosya listesini yenilemesini sağladım. Sublime Text 2 -> Preferences -> Key Bindings - User yolundan kısyolların bulunduğu dosyayı açıp kısayol tanımladım.

[
    {"keys": ["command+shift+r"], "command": "refresh_folder_list"}
]

Ben Mac kullandığım için CMD Shift ve R kombinasyonu ile yenilemeyi tercih ettim. Windows/Linux kullanıcıları ctrl+shift+r ya da kendilerine uygun bir kısayol belirleyebilirler.

Kolay gelsin.

Composer/OpenSSL Sertifika Hatası

Mac üzerine Composer kurdum. Paket kurmak istediğimde şöyle bir sertifika hatası veriyordu:

error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Biraz araştırma yaptım. Sorun OpenSSL sertifikasından kaynaklanıyormuş. PHP’nin sürüm güncellemesinden sonra orataya çıkmış. Olmayan ingilizcemle ancak bu kadarını (doğru ya da yanlış) anlayabildim. Çözüm için epey uğraştım.

Evvela php.ini’den OpenSSL eklentisinin/uzantısının akif olup olmadığını kontrol ettim, aktifti. Sonra uzantının kullandığı sertifika dosyasını bulmam gerekti. Bunu da openssl_get_cert_locations() fonksiyonu ile elde ettim.
echo "<pre>"; print_r(openssl_get_cert_locations());

yazdıktan sonra

Array
(
    [default_cert_file] => /Applications/XAMPP/xamppfiles/share/openssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /Applications/XAMPP/xamppfiles/share/openssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /Applications/XAMPP/xamppfiles/share/openssl/private
    [default_default_cert_area] => /Applications/XAMPP/xamppfiles/share/openssl
    [ini_cafile] => 
    [ini_capath] => 
)

Sonucunu aldım. Yani sertifikanın /Applications/XAMPP/xamppfiles/share/openssl/cert.pem yolunda olması gerekiyordu. Ama yerinde yoktu. Olması gereken dizine sertifika dosyasını yüklemem gerekiyordu. Sırasıyla aşağıdaki komutları uyguladım:

cd /Applications/XAMPP/xamppfiles/share/openssl/
sudo curl http://curl.haxx.se/ca/cacert.pem -o cert.pem

Sonrasında Apache sunucusunu yeniden başlattım. Sonra da composer install komutuyla istediğim paketleri kurdum.

Mac’te wget olmadığı için alternatif olarak curl kullandım. Wget sistemde kurulu değilse curl http://site.com/dosya-adi -o yeni-dosya-adi şeklinde kullanılabiliyor.

Kolay gelsin.